java - 使用 itext pdf stamper 在 pdf 中添加多个附件

标签 java pdf itext pdfstamper

我想向 pdf 文件添加多个附件。 当我进入循环时,它只附加最后一个附件。

示例代码

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();

最佳答案

您已改编现有示例 AddEmbeddedFile添加多个附件,而您声称只添加了一个附件。

我无法重现这个。我还通过创建一个新示例来调整现有示例: 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 来证明您是正确的,以便我们可以在我们的计算机上运行它并重现问题。

关于java - 使用 itext pdf stamper 在 pdf 中添加多个附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823189/

相关文章:

java - 如何有效(性能)从Java中的列表中删除许多项?

c# - 在 Asp.net Core 1.1 中使用 nodeservices 下载生成的 pdf 的 byte[]

java - 为什么使用 Arial Unicode MS 无法正确呈现古吉拉特语-印度文本?

java - 对 Android 库使用提供的/compileOnly 依赖项

java - Apache poi 通过公式填充单元格值

java - 类从 Double 到 double 的强制转换异常

java - 使用 itext5 将文本添加到 PDF 中的矩形

google-chrome - 如何从扩展程序中的 Chrome 浏览器中打开的 PDF 中获取选定的文本

c# - ITextSharp 将文本插入现有的 pdf

java - 在 Itext 中裁剪图像