[ 
https://issues.apache.org/jira/browse/PDFBOX-3207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Frank Becker updated PDFBOX-3207:
---------------------------------
    Attachment: allow_addFirst_and_addLast_to_add_items_with_siblings.patch

> Allow addFirst and addLast to add Items with siblings
> -----------------------------------------------------
>
>                 Key: PDFBOX-3207
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-3207
>             Project: PDFBox
>          Issue Type: Improvement
>          Components: PDModel
>    Affects Versions: 2.0.0
>            Reporter: Frank Becker
>            Priority: Minor
>         Attachments: 
> allow_addFirst_and_addLast_to_add_items_with_siblings.patch
>
>
> Currently it is not possible to add a PDOutlineItem with siblings to another 
> node with addFirst or addLast.
> Imagine you want to merge two documents. Each document has an outline.
> For the destination you want an outline where each document is represented 
> with the title of the Document as outline item where the original outline 
> nodes are appended to.
> To achieve that you need to:
> * add a new outline to the document.
> * create a new outline item with the title of the document
> * iterate over each child of the previous outline
> ** create a deep copy of the child to get rid of the previous and next sibling
> ** add the copy of the child to the new bookmark
> Little example code in groovy:
> {code}
>     def bookmark() {
>         if ( document != null ) {
>             if (document.getPages().size() > 0) {
>                 def originalOutline = 
> this.document.documentCatalog.documentOutline
>                 def newOutline = new PDDocumentOutline()
>                 def destination = new PDPageFitWidthDestination()
>                 def bookmark = new PDOutlineItem()
>                 destination.setPage(document.getPages().get(0))
>                 bookmark.title = bookmarkTitle
>                 bookmark.destination = destination
>                 if(originalOutline) {
>                     appendOriginalBookmarks(originalOutline, bookmark)
>                 }
>                 newOutline.addLast(bookmark)
>                 document.documentCatalog.documentOutline = newOutline
>             }
>         }
>     }
>     private Iterable<PDOutlineItem> appendOriginalBookmarks(PDOutlineNode 
> originalOutline, PDOutlineItem bookmark) {
>         originalOutline.children().each { oldBookmark ->
>             PDOutlineItem bookmarkClone = cloneBookmark(oldBookmark)
>             if(oldBookmark.hasChildren()){
>                 appendOriginalBookmarks(oldBookmark,bookmarkClone)
>             }
>             bookmark.addLast(bookmarkClone)
>         }
>     }
>     private PDOutlineItem cloneBookmark(PDOutlineItem bookmark) {
>         def bookmarkClone = new PDOutlineItem()
>         bookmarkClone.title = bookmark.title
>         bookmarkClone.destination = bookmark.destination
>         bookmarkClone.action = bookmark.action
>         bookmarkClone.structureElement = bookmark.structureElement
>         bookmarkClone.bold = bookmark.bold
>         bookmarkClone.italic = bookmark.italic
>         bookmarkClone.textColor = bookmark.textColor
>         bookmarkClone
>     }
> {code}
> That is a bit inconvenient.
> It should look like that:
> {code:java}
>                 def originalOutline = 
> this.document.documentCatalog.documentOutline
>                 def newOutline = new PDDocumentOutline()
>                 def destination = new PDPageFitWidthDestination()
>                 def bookmark = new PDOutlineItem()
>                 destination.setPage(document.getPages().get(0))
>                 bookmark.title = bookmarkTitle
>                 bookmark.destination = destination
>                 if(originalOutline) {
>                     bookmark.addLast(originalOutline.getFirstChild());
>                 }
>                 newOutline.addLast(bookmark)
>                 document.documentCatalog.documentOutline = newOutline
> {code}
> I'll add a patch that should make it possible.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: dev-h...@pdfbox.apache.org

Reply via email to