附加模式下的 iText 7 嵌入文件不起作用

问题描述

PdfDocument pdfDoc = new PdfDocument(
        new PdfReader(in),new PdfWriter(destPath),new StampingProperties().useAppendMode());

PdfFileSpec spec = PdfFileSpec.createEmbeddedFileSpec(
        pdfDoc,annex.getInputStream(),annex.getFileName(),null,null);

pdfDoc.addFileAttachment(annex.getFileName(),spec);
log.info("add file attachment:{}",annex.getFileName());

pdfDoc.close();

解决方法

使用此代码和 iText 7.1.15,我测试了添加嵌入文件,有和没有 追加模式

String fileName = "test.txt";

StampingProperties stampingProp = new StampingProperties();
if (append)
    stampingProp.useAppendMode();

PdfDocument pdfDoc = new PdfDocument(new PdfReader(in),new PdfWriter(dest),stampingProp);
PdfFileSpec spec = PdfFileSpec.createEmbeddedFileSpec(pdfDoc,new FileInputStream(fileName),fileName,null,null);
pdfDoc.addFileAttachment(fileName,spec);
pdfDoc.close();

在这两种情况下,文件都被正确嵌入,并且在 PDF 查看器中打开生成的 PDF 文档时按预期显示。

输入和输出PDF的差异,只是为了验证第一个使用追加模式更新,第二个没有:

diff 1

diff 2