2013-09-30 29 views
-1

我正在使用iText庫合併個別pdf。但個人pdf總是在頁面的底部。任何指針,我可以如何使它顯示在中間或頂部。我已經調整了我的代碼http://viralpatel.net/blogs/itext-tutorial-merge-split-pdf-files-using-itext-jar/ enter image description hereJava:iText庫PDF合併,pdf總是在頁面底部

public static void concatPDFs(OutputStream outputStream, boolean paginate) { 

     Document document = new Document(); 
     try { 
      List<InputStream> pdfs = listPdf; 
      List<PdfReader> readers = new ArrayList<PdfReader>(); 
      int totalPages = 0; 
      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(); 

       // 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) { 
         cb.beginText(); 
         cb.setFontAndSize(bf, 9); 
         cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "" 
           + currentPageNumber + " of " + totalPages, 520, 
           5, 0); 
         cb.endText(); 
        } 
       } 
       pageOfCurrentReaderPDF = 0; 
      } 
      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(); 
      } 
     } 
    } 
+0

您最好使用由iText人員自己提供的樣本,例如, [Concatenate.java](http://itextpdf.com/examples/iia.php?id=123),如果你真的想合併文件。 (當然,這些示例使用當前的iText版本;儘管在古代版本中已經出現了'PdfCopy'機制。) – mkl

+0

該示例引用了'com.lowagie',它已被棄用。 –

回答

1

首先明確了關於座標系。 PDF座標系(0,0)代表PDF頁面的左下角。

你可以計算出新的「Y」位置插入頁面模板是這樣的:

Y =新的文檔HEIGH - 導入的頁面高度

,然後你可以改變你的代碼:

cb.addTemplate(page, 0, y);