2015-01-07 17 views
0

pdf 파일에 첨부 파일을 여러 개 추가하고 싶습니다. 루프에 들어가면 마지막 첨부 파일 만 첨부됩니다. 두 개 이상의 첨부 파일을 추가 할 수있는 기존의 예를 AddEmbeddedFile을 적응, 당신은 하나의 첨부 파일이 추가 된 것을 주장itext를 사용하여 pdf에 여러 첨부 파일 추가하기 pdf stamper

PdfReader reader = new PdfReader(FILE); 

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(realPath+"/Temp/"+sosValues.getCmaId()+".pdf")); 

for(SOSCustomerOrderFile cmaOrder:orderList) 
{ 
    PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(stamper.getWriter(), null, cmaOrder.getFileName(), cmaOrder.getFileData()); 
    /* stamper.getWriter(), null, "test.txt", "Some test".getBytes());*/ 
    stamper.addFileAttachment("Attachment", fs); 
} 
stamper.close(); 
+0

모든 반복에서 첨부 파일을 무시하고있는 것 같습니다. –

+0

나는 그것을 테스트했습니다. 분명히 그렇게하는 것이 좋습니다. 문제를 재현 할 수 없습니다. –

+0

어떤 iText 버전을 사용하십니까? – mkl

답변

2

샘플 코드.

재현 할 수 없습니다. 또한 새로운 예를 만들어 기존의 예를 적응 : AddEmbeddedFiles

public static final String[] ATTACHMENTS = { 
    "hello", "world", "what", "is", "up" 
}; 
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    for (String s : ATTACHMENTS) { 
     PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
      stamper.getWriter(), null, String.format("%s.txt", s), 
      String.format("Some test: %s", s).getBytes()); 
     stamper.addFileAttachment(String.format("Content: %s", s), fs); 
    } 
    stamper.close(); 
} 

결과는 모든 예상되는 첨부 파일이 포함 :

enter image description here

내가 볼 수있는 유일한 차이를, 당신이 모든을 제공한다는 것입니다 임베디드 파일에 같은 이름이 있지만, 그렇게해도 첨부 파일을 모두 올바르게 볼 수 있습니다.

또 다른 차이점은 String 값의 배열을 사용하지만 실제로는 문제가되지 않습니다. cmaOrder.getFileName()이 실제로 파일 이름 (예 : "order1.doc", "order2.xls")을 반환한다고 가정합니다.)이고 cmaOrder.getFileData()은 해당 파일의 실제 바이트가있는 byte[]을 반환합니다. SOSCustomerOrderFile 클래스가 무엇인지 알려주지 않으면, 우리는 그러한 가정을하도록 강요하고 있습니다. 당신이 디스크에있는 파일이있는 경우

, 당신은 또한 같은 것을 할 수 있습니다 :

입니다
PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
    stamper.getWriter(), cmaOrder.getFilePath(), cmaOrder.getFileName(), null); 

다음 SOSCustomerOrderFile 클래스는 파일의 경로를 반환하는 getFilePath() 방법이있는 경우. 우리는 당신이 완전한 코드 기반에 접근 할 수 없으며 접근 할 필요도 없다는 것을 알지 못합니다. 문제를 재현하기 위해 SSCCE 만 생성 할 수 있으며 SSCCE는 귀하의 주장이 잘못되었음을 알려줍니다. SSCCE를 시스템에서 실행하고 문제를 재현 할 수있는 방식으로 SSCCE를 적용하여 자신이 옳다는 것을 증명할 수 있습니다.

+0

이므로 파일 이름을 배열에 저장해야합니다. 이러한 첨부 파일은 txt 파일 일뿐만 아니라 doc 또는 odt 파일 일 수도 있습니다. – iamP

+0

답변을 업데이트하겠습니다. –

+0

@iampitre 독립형 예제를 사용해 보셨습니까? 작동합니까? 그렇지 않다면 아마도 이전 iText 버전을 사용하고있을 것입니다. 만약 그렇다면 우리가 알지 못하는'SOSCustomerOrderFile'에 문제가있을 수 있습니다. –