2014-12-05 5 views
0

iTextSharp를 사용하여 PDF를 만들고 있습니다. 이 PDF는 작은 텍스트 변경을 제외하고 모든 페이지가 정확히 동일한 n-pages입니다. 그래서 내 Document 개체를 복제하고, 변경 작업을 수행하고 문서에 새 페이지를 추가 할 수 있습니까?iTextSharp를 사용하여 문서의 페이지 복제

편집 : 내가해야 할 일을 조금 명확히하기 위해. 나는 문서를 만들고 있는데, 지금은 iTextSharp.Document 개체로 메모리에 있습니다. 사용자는 이것을 자신의 컴퓨터 (웹 응용 프로그램)에 저장하지만,이 경우 저장하는 파일은 하단에있는 단락을 제외하고 같은 내용의 모든 페이지가 3 페이지로 구성되어야합니다.

문서의 각 페이지에서 단락/단락 등을 다시 만들었습니까? 내가 원했던 것은 Document 페이지를 만들었고, 3 번 복제 한 다음 문서의 페이지로 참가했습니다.

+1

아마도 매우 쉽습니다. 아마도 매우 어렵습니다. 그것은 모두 당신이 적용하고자하는 * 작은 텍스트 변경 *의 성격에 달려 있습니다. 당신은 정교 할 수 있습니까? –

+0

한 페이지의 텍스트가 한 페이지 씩 변경됩니다. 하지만 기본적으로 내가 필요로하는 것은 문서에서 한 페이지를 'n'번 복제하는 것입니다. 예를 들어, PAGE 1을 만들고 지금 PAGE 3과 PAGE 4가 PAGE 1과 같아야합니다. –

+0

제 대답에 표시된대로'PdfSmartCopy'를 사용하지 못하게 막습니까? –

답변

0

가능한 해결책은 다음과 같습니다. 그것은 당신이 원하는 해결책이 아닐지도 모르지만, 우리의 잘못이 아니기 때문에 우리가 당신의 의도를 짐작하게합니다.

은 한 페이지가있는 PDF 문서를 가지고 있다고 가정하자 : state.pdf

은 다음과 같습니다 있도록,이 페이지에 텍스트를 추가 할 : california.pdf

당신은하고 싶지 않아 이 경우 united_states_2.pdf

, 당신은 다른 결합하는 (그리고 PdfSmartCopy합니다 (하나의 페이지에 콘텐츠를 추가하는) PdfStamper의 조합을 필요 :이 한 번,하지만 당신은 당신이 얻을 수 있도록이 여러 번 수행 할 bloating하지 않고 페이지 메모).

이것은 FillFlattenMerge2 예에 표시됩니다

public void manipulatePdf(String src, String dest) throws DocumentException, IOException { 
    Document document = new Document(); 
    PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest)); 
    document.open(); 
    ByteArrayOutputStream baos; 
    PdfReader reader; 
    PdfStamper stamper; 
    AcroFields fields; 
    StringTokenizer tokenizer; 
    BufferedReader br = new BufferedReader(new FileReader(DATA)); 
    String line = br.readLine(); 
    while ((line = br.readLine()) != null) { 
     // create a PDF in memory 
     baos = new ByteArrayOutputStream(); 
     reader = new PdfReader(SRC); 
     stamper = new PdfStamper(reader, baos); 
     fields = stamper.getAcroFields(); 
     tokenizer = new StringTokenizer(line, ";"); 
     fields.setField("name", tokenizer.nextToken()); 
     fields.setField("abbr", tokenizer.nextToken()); 
     fields.setField("capital", tokenizer.nextToken()); 
     fields.setField("city", tokenizer.nextToken()); 
     fields.setField("population", tokenizer.nextToken()); 
     fields.setField("surface", tokenizer.nextToken()); 
     fields.setField("timezone1", tokenizer.nextToken()); 
     fields.setField("timezone2", tokenizer.nextToken()); 
     fields.setField("dst", tokenizer.nextToken()); 
     stamper.setFormFlattening(true); 
     stamper.close(); 
     reader.close(); 
     // add the PDF to PdfCopy 
     reader = new PdfReader(baos.toByteArray()); 
     copy.addDocument(reader); 
     reader.close(); 
    } 
    br.close(); 
    document.close(); 
} 

이 질문을 명확히하십시오, 당신이 원하는하지 않은 경우. 어쨌든이 답변은 귀하의 질문에 대한 여러 가지 가능한 해석 중 하나입니다.