2013-09-30 1 views
-1

개별적인 pdfs를 병합하기 위해 iText 라이브러리를 사용하고 있습니다. 그러나 개별 PDF는 항상 페이지의 맨 아래에 있습니다. 포인터를 중간 또는 상단에 어떻게 표시 할 수 있습니까? 나는 약 좌표 시스템을 지울 enter image description here자바 : 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

먼저 http://viralpatel.net/blogs/itext-tutorial-merge-split-pdf-files-using-itext-jar/에서 내 코드를 조정했다. PDF 좌표계 (0, 0)는 PDF 페이지의 왼쪽 아래 모서리를 나타냅니다.

당신은 같은 페이지 템플릿을 삽입하기위한 새로운 'Y'의 위치를 ​​계산할 수

:

Y = 새 문서 어이 - 당신이 당신의 코드를 변경할 수

하고 수입 페이지 높이 :

cb.addTemplate(page, 0, y);