pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maruan Sahyoun <sahy...@fileaffairs.de>
Subject Re: Merge PDFs, add second pdf as child in outline
Date Tue, 09 Apr 2013 11:07:36 GMT
OK - without trying it out :-)

What happens is that as you get the outlines from the attachments and add them to the root
of your outlineRoot and overwrite the document catalog the objects the childs are pointing
to are not yet part of the document as the actual merging is done afterwards. So you need
to rearrange the outline after you have merged the documents.


BR
Maruan Sahyoun

Am 09.04.2013 um 12:48 schrieb "Marvin B. Lillehaug" <marvin.lillehaug@gmail.com>:

> Sorry for being ambiguous.
> 
> I have two pdfs, A and B that have outlines oA and oB. I want to
> create a pdf C where the contents are A + B and the outline is oA with
> oB as the child of oAs first child.
> 
> oA: RootNode with name A
> oB: RootNode with name B1
>      RootNode with name B2
> oC: RootNode with name A
>                                        \- Node with name B1
>                                         \ Node with name B2
> 
> When using PDFMergerUtility A, B1, and B2 end up as siblings, and
> clicking on their respective nodes in the resulting pdf works. With
> the code in my first post it is still possible to click on both
> instances of the outline items.
> I have managed to make the outline look the way I want by getting the
> reference to both roots before doing the merge, and setting this
> outline before save, but when clicking in the outline nothing happens.
> Code which accomplish this:
> 
> PDDocument pdf = PDDocument.load(contentAsPdf);
> 
> PDDocumentCatalog documentCatalog = pdf.getDocumentCatalog();
> PDDocumentOutline outline = documentCatalog.getDocumentOutline();
> PDOutlineItem outlineRoot = outline.getFirstChild();
> 
> PDDocumentOutline newOutline = new PDDocumentOutline();
> newOutline.appendChild(outlineRoot);
> 
> PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
> PDDocument attachment = PDDocument.load(attachmentsAsPdfs);
> 
> PDDocumentCatalog attachmentDocumentCatalog = attachment.getDocumentCatalog();
> PDDocumentOutline attachmentOutline =
> attachmentDocumentCatalog.getDocumentOutline();
> 
> PDOutlineItem attachmentOutlineItem = attachmentOutline.getFirstChild();
> 
> outlineRoot.appendChild(attachmentOutlineItem);
> 
> documentCatalog.setDocumentOutline(newOutline);
> attachmentDocumentCatalog.setDocumentOutline(null);
> 
> pdfMergerUtility.appendDocument(pdf, attachment);
> 
> pdf.save(new FileOutputStream(contentAsPdf));
> 
> Do I have to construct a new PDDocument from scratch in order to do this?


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message