2014-10-03 4 views
2

기존의 여러 PDF를 하나의 새 PDF로 가져와야합니다. 코드의 일부는 액션 2 판에 이 iText의 섹션 6.2.1에있는 샘플 코드와 비슷한 일 :iText를 사용하여 특수 효과가있는 PDF 복사

Document document = new Document(); 
PdfWriter writer = PdfWriter.getInstance(
    document, new FileOutputStream(RESULT)); 
document.open(); 
PdfPTable table = new PdfPTable(2); 
PdfReader reader = new PdfReader(MovieTemplates.RESULT); 
int n = reader.getNumberOfPages(); 
PdfImportedPage page; 
for (int i = 1; i <= n; i++) { 
    page = writer.getImportedPage(reader, i); 
    table.addCell(Image.getInstance(page)); 
} 
document.add(table); 
document.close(); 

그러나, 우리가 실현 우리의 경우에 (주석으로 채우기 할 수 PDF 파일을 처리 할 때, 그 PDF에 이미 데이터가 채워져 있음) 모든 채워진 데이터는 새 PDF에서 손실됩니다.

그것은 페이지의 내용과 페이지의 대화 형 기능을 렌더링하는 데 필요한 자원의 차이를 이해하는 것이 중요합니다 :

우리는이 책의 같은 섹션에서 답을 찾아 냈다. 일반적으로 이러한 기능을 주석이라고합니다. 여기에는 링크, 텍스트 주석 및 양식 필드가 포함됩니다. 어노테이션은 컨텐츠 스트림의 일부가 아닙니다. 이들은 페이지의 자원 사전에 있지 않지만 주석 사전에 나열됩니다. 이 대화 형 기능은 PdfImportedPage을 사용할 때 복사되지 않으므로 메서드가있는 PdfWriter 클래스의 페이지를 복사 할 때 모든 대화 형 작업이 손실된다는 것을 의미합니다.

하지만 이러한 주석을 유지하는 솔루션은 무엇입니까?

+0

6 장의 PdfCopy 샘플을보십시오. – mkl

답변

3

내가 언급 한 책의 저자이기 때문에이 책의 예가 다소 오래되었다는 것을 지적하고자합니다. 이 책에서는 PdfCopyFields을 사용하여 양식을 병합 할 것을 권장하지만 최근 버전의 iText에서는 해당 클래스가 더 이상 사용되지 않습니다. 형태는 지금/복사 PdfCopy 클래스를 사용하여 병합 할 수 있지만 가져 : 즉

:

것은 새로운 예제를 봐 주시기 바랍니다 PdfCopy에 다음 코드 스 니펫에서와 같이 필드를 병합해야한다고 알리십시오.

public void createPdf(String filename) throws IOException, DocumentException { 
    PdfReader[] readers = { 
     new PdfReader(getFile1()), 
     new PdfReader(getFile2()) 
    }; 
    createPdf(filename, readers); 
} 

public void createPdf(String filename, PdfReader[] readers) 
    throws IOException, DocumentException { 
    Document document = new Document(); 
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(filename)); 
    copy.setMergeFields(); 
    document.open(); 
    for (PdfReader reader : readers) { 
     copy.addDocument(reader); 
    } 
    document.close(); 
    for (PdfReader reader : readers) { 
     reader.close(); 
    } 
} 

setMergeFields() 방법은 기억해야하는 방법입니다.

+0

답장을 보내 주셔서 감사합니다. – MichaelYu

관련 문제