2014-12-03 2 views
2

두 개의 PDF 파일 (A1.pdf 및 B1.pdf)이 있습니다. 이제 저는 두 번째 PDF 파일 (B1.pdf)의 일부 페이지를 프로그램 적으로 첫 번째 (A1.pdf)로 대체하려고합니다. 이 경우 PDFBox 라이브러리를 사용하고 있습니다.PDFBox를 PDFBox로 바꾸기

try { 
     File file = new File("/Users/test/Desktop/A1.pdf"); 
     PDDocument pdDoc = PDDocument.load(file); 

     PDDocument document = PDDocument.load(new File("/Users/test/Desktop/B1.pdf")); 
     document.removePage(3); 
     document.addPage((PDPage) pdDoc.getDocumentCatalog().getAllPages().get(0)); 
     document.save("/Users/test/Desktop/"+"generatedPDFBox"+".pdf"); 
     document.close(); 
    }catch(Exception e){} 

아이디어는 3 페이지를 교체하는 것입니다 :

여기 내 예제 코드입니다. 이 구현에서 페이지는 출력 PDF의 마지막 페이지에 추가됩니다. 누구든지 이것을 구현할 수 있습니까? PDFBOX가 ​​아닌 경우. 자바에서 다른 라이브러리를 제안 해 주시겠습니까?

+0

@Arnuff, 코드 스 니펫에 감사드립니다. 하지만 내 주요 목표는 오픈 소스 패키지를 사용하는 것입니다. 도서관/API가 아니라면 거기에 어떤 명령 줄 유틸리티 도구를 사용할 수 있습니까? 이것도 내 일을 완수해야한다. 밖에 자원하는 사람이 있니? – Rivu

+0

@Tilman, 코드 스 니펫 – Rivu

답변

1

이 솔루션은 요청한 내용의 세 번째 PDF 파일을 만듭니다. 페이지는 0으로 설정되므로 질문의 "3"은 "2"여야합니다. 당신이 대신 명령 줄에서 작업 이쪽을 봐하려면

PDDocument a1doc = PDDocument.load(file1); 
    PDDocument b1doc = PDDocument.load(file2); 
    PDDocument resDoc = new PDDocument(); 

    List<PDPage> a1Pages = a1doc.getDocumentCatalog().getAllPages(); 
    List<PDPage> b1Pages = b1doc.getDocumentCatalog().getAllPages(); 

    // replace the 3rd page of the 2nd file with the 1st page of the 1st one 
    for (int p = 0; p < b1Pages.size(); ++p) 
    { 
     if (p == 2) 
      resDoc.addPage(a1Pages.get(0)); 
     else 
      resDoc.addPage(b1Pages.get(p)); 
    } 

    resDoc.save(file3); 
    a1doc.close(); 
    b1doc.close(); 
    resDoc.close(); 

: https://pdfbox.apache.org/commandline/

을 다음 PDFSplit 및 PDFMerge를 사용합니다.

+0

주셔서 감사합니다. 페이지와 함께 가져온 AcroForm 필드 주석은'addPage 또는 이후 단계에서 문서 AcroForm 사전에 추가됩니까? ' – mkl

+0

Do not do 알아요 ... PDFMerge를 사용하더라도 문제가 있다고 생각합니다. 어딘가에 문제가 있습니다. –

1

PDFBox가 작동하는 방식에 익숙하지 않지만 후속 답변에 대한 답변을 얻으려면 Datalogics APDFL SDK으로 매우 간단한 방법으로 원하는 작업을 수행 할 수 있다는 것을 알고 있습니다. 조사를 원할 경우 무료 평가판이 제공됩니다.

Document Doc1 = new Document("/Users/test/Desktop/A1.pdf"); 
Document Doc2 = new Document("/Users/test/Desktop/B1.pdf"); 

/* Delete pages on the page range 3-3*/ 
Doc2.deletePages(3, 3) 

/* LastPage is where in Doc2 you want to insert the page, Doc1 the document from which the page is coming from, 0 is the page number in Doc1 that will be inserted first, 1 is the number of pages that will be inserted (beginning from the page number specified in the previous parameter), and PageInsertFlags which would let you customize what gets/doesn't get copied */ 
Doc2.insertPages(Document.LastPage, Doc1, 0, 1, PageInsertFlags.All); 

Doc2.save(EnumSet.of(SaveFlags.FULL), "out.pdf") 

가 또는 삭제가 필요합니다 replacePages라는 또 다른 방법이있다 : 당신이 그것을 할 것입니다 방법을 볼 수 있습니다 여기에 코드입니다. 그것은 모두 최종 목표가 무엇인지에 달려 있습니다.

관련 문제