2014-04-14 2 views
5

원인 :기능/함께 PDF 파일을 병합 - 나는 iText를 사용하여 함께 PDF 파일을 병합하려면 다음 코드를 사용하고 몇 가지 문제

public static void concatenatePdfs(List<File> listOfPdfFiles, File outputFile) throws DocumentException, IOException { 
     Document document = new Document(); 
     FileOutputStream outputStream = new FileOutputStream(outputFile); 
     PdfWriter writer = PdfWriter.getInstance(document, outputStream); 
     document.open(); 
     PdfContentByte cb = writer.getDirectContent(); 
     for (File inFile : listOfPdfFiles) { 
      PdfReader reader = new PdfReader(inFile.getAbsolutePath()); 
      for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
       document.newPage(); 
       PdfImportedPage page = writer.getImportedPage(reader, i); 
       cb.addTemplate(page, 0, 0); 
      } 
     } 
     outputStream.flush(); 
     document.close(); 
     outputStream.close(); 
    } 

이 일반적으로 좋은 작품! 그러나 몇 번이고 페이지의 일부를 90도 회전시키고 있습니까? 누구나 이런 일이 생겼어?

나는 뒤집히는 것들에 대해 특별한 것을보기 위해 PDF를보고 있습니다.

답변

10

문서를 연결하는 데 잘못된 방법을 사용하고 있기 때문에 오류가 발생합니다. chapter 6 of my book를 읽고 당신이 PdfWriter를 사용하여 PDF 문서를 연결하여 (또는 병합)하는 것을 알 수 있습니다하시기 바랍니다 것은 잘못이다 :

  • 당신은 완전히 그들이 A4 크기의 모두는 가정 (원본 문서의 페이지의 페이지 크기를 무시),
  • 당신은
  • 당신은 멀리 원본 문서에 존재하는 모든 상호 작용을 던져
  • 당신은 페이지 사전에 저장된 회전 값을 무시하고, 같은 자르기 상자 (있는 경우)로 페이지 경계를 무시 , 등등.

    Document document = new Document(); 
    PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest)); 
    document.open(); 
    PdfReader reader; 
    String line = br.readLine(); 
    // loop over readers 
        // add the PDF to PdfCopy 
        reader = new PdfReader(baos.toByteArray()); 
        copy.addDocument(reader); 
        reader.close(); 
    // end loop 
    document.close(); 
    

    the book 다른 예제가 있습니다 :

여러개 쓰기 PDF 파일이 PdfCopy를 사용하여 수행됩니다, 인스턴스에 대한 FillFlattenMerge2 예를 참조하십시오.

public static void concatenatePdfs(List<File> listOfPdfFiles, File outputFile) throws DocumentException, IOException { 
     Document document = new Document(); 
     FileOutputStream outputStream = new FileOutputStream(outputFile); 
     PdfCopy copy = new PdfSmartCopy(document, outputStream); 
     document.open(); 
     for (File inFile : listOfPdfFiles) { 
      PdfReader reader = new PdfReader(inFile.getAbsolutePath()); 
      copy.addDocument(reader); 
      reader.close(); 
     } 
     document.close(); 
} 
+0

내가 당신의 이름을 인식 : –

+1

예, 저는 저주합니다 ;-) –

+0

질문 - copy.addDocument는 내 버전의 itext에는 존재하지 않습니다. 나는 너무 오래 되었습니까? 5.0.6 –

9

이 경우 사람이 여기 내가 위에서 설명한 페이지 반전의 문제를 갖고있는 것 같다하지 않는 기능의 버전이, 위의 브루노 Lowagie의 정답을 사용하여, 그것을 찾고 있습니다 itext 네임 스페이스에서. itext 라이브러리의 창립자입니까?
관련 문제