Hello,

I have a probleme with merging Bookmarks.
If I try to merge two or more PDFs the Bookmarks are lost.

---------------- CODE -----------------------
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.lowagie.text.Document;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.SimpleBookmark;

public class mergePdf {


 public static void concatPDFs(List<InputStream> streamOfPDFFiles,
   OutputStream outputStream, boolean paginate) {
  
  Document document = new Document();
  try {
   List<InputStream> pdfs = streamOfPDFFiles;
   List<PdfReader> readers = new ArrayList<PdfReader>();
   int totalPages = 0;
   int pageOffset = 0;
         ArrayList master = new ArrayList();
   Iterator<InputStream> iteratorPDFs = pdfs.iterator();

   // Create Readers for the pdfs.
   while (iteratorPDFs.hasNext()) {
    InputStream pdf = iteratorPDFs.next();
    PdfReader pdfReader = new PdfReader(pdf);
    readers.add(pdfReader);
    totalPages += pdfReader.getNumberOfPages();
    
    
   }
   // Create a writer for the outputstream
   PdfWriter writer = PdfWriter.getInstance(document, outputStream);

   document.open();
   BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA,
     BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
   PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
   // data

   PdfImportedPage page;
   int currentPageNumber = 0;
   int pageOfCurrentReaderPDF = 0;
   Iterator<PdfReader> iteratorPDFReader = readers.iterator();

   // Loop through the PDF files and add to the output.
   while (iteratorPDFReader.hasNext()) {
    PdfReader pdfReader = iteratorPDFReader.next();
    List bookmarks = SimpleBookmark.getBookmark(pdfReader);
               
    int n = pdfReader.getNumberOfPages();
    if (bookmarks != null) {
     System.out.println("bookmarks");
                    if (pageOffset != 0)
                        SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, 
null);
                    master.addAll(bookmarks);
                } else {
                 
                 System.out.println("no bookmarks");
                }
    
    pageOffset += n;
    
    // Create a new page in the target for each source page.
    while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
     document.newPage();
     pageOfCurrentReaderPDF++;
     currentPageNumber++;
     page = writer.getImportedPage(pdfReader,
       pageOfCurrentReaderPDF);
     cb.addTemplate(page, 0, 0);

     // Code for pagination.
     if (paginate) {
      if(!(currentPageNumber == 1 || totalPages == currentPageNumber)){
      cb.beginText();
      cb.setFontAndSize(bf, 9);
      cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "- "
        + currentPageNumber + " - " , 300,
        10, 0);
      cb.endText();
      }
     }
    }
    pageOfCurrentReaderPDF = 0;
   }
   
   if (master.size() > 0)   {
    System.out.print("Add Bookmarks");
    writer.setOutlines(master);
    
   }
   
   outputStream.flush();
    
    
   document.close();
   outputStream.close();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (document.isOpen())
    document.close();
   try {
    if (outputStream != null)
     outputStream.close();
   } catch (IOException ioe) {
    ioe.printStackTrace();
   }
  }
 }
}
------------------------------ CODE --------------------------

I also tryed the com.lowagie.examples.general.copystamp.concatenate.java
but there is also the same effect - no bookmarks.

Please tell me what I#m doing wrong.
Thanks for your help

best regards,

Markus



------------------------------------------------------------------------------
Throughout its 18-year history, RSA Conference consistently attracts the
world's best and brightest in the field, creating opportunities for Conference
attendees to learn about information security's most important issues through
interactions with peers, luminaries and emerging and established companies.
http://p.sf.net/sfu/rsaconf-dev2dev
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions

Buy the iText book: http://www.1t3xt.com/docs/book.php
Check the site with examples before you ask questions: 
http://www.1t3xt.info/examples/
You can also search the keywords list: http://1t3xt.info/tutorials/keywords/

Reply via email to