Java 使用itext pdf压模在pdf中添加多个附件
我想向pdf文件添加多个附件。 当我进入循环时,它只附加最后一个附件 示例代码Java 使用itext pdf压模在pdf中添加多个附件,java,pdf,itext,pdfstamper,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) { 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();
您已经修改了现有示例以添加多个附件,并且您声称只添加了一个附件 我无法复制这个。我还通过创建一个新示例对现有示例进行了修改: 结果包含所有预期的附件: 我看到的唯一区别是,您为每个嵌入的文件指定了相同的名称,但即使我这样做,我仍然可以正确地看到所有附件 另一个区别是,我使用了一个字符串数组,但这并不重要,假设
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,我们可以在我们的机器上运行它并重现问题,您可以证明您是正确的。您已经调整了现有示例以添加多个附件,并且您声称只添加了一个附件
我无法复制这个。我还通过创建一个新示例对现有示例进行了修改:
结果包含所有预期的附件:
我看到的唯一区别是,您为每个嵌入的文件指定了相同的名称,但即使我这样做,我仍然可以正确地看到所有附件
另一个区别是,我使用了一个字符串数组,但这并不重要,假设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,我们可以在我们的机器上运行它并重现问题,您可以证明您是正确的。您已经调整了现有示例以添加多个附件,并且您声称只添加了一个附件
我无法复制这个。我还通过创建一个新示例对现有示例进行了修改:
结果包含所有预期的附件:
我看到的唯一区别是,您为每个嵌入的文件指定了相同的名称,但即使我这样做,我仍然可以正确地看到所有附件
另一个区别是,我使用了一个字符串数组,但这并不重要,假设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,我们可以在我们的机器上运行它并重现问题,您可以证明您是正确的。您已经调整了现有示例以添加多个附件,并且您声称只添加了一个附件
我无法复制这个。我还通过创建一个新示例对现有示例进行了修改:
结果包含所有预期的附件:
我看到的唯一区别是,您为每个嵌入的文件指定了相同的名称,但即使我这样做,我仍然可以正确地看到所有附件
另一个区别是,我使用了一个字符串数组,但这并不重要,假设cmaOrder.getFileName()
确实返回了一个文件名(例如“order1.doc”、“order2.xls”,…),并且cmaOrder.getFileData()
返回了一个带有该文件实际字节的byte[]
。通过不告诉我们SOSCustomerOrderFile类是关于什么的,您迫使我们做出这样的假设
如果文件在磁盘上,还可以执行以下操作:
PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
stamper.getWriter(), cmaOrder.getFilePath(), cmaOrder.getFileName(), null);
也就是说:如果SOSCustomerOrderFile
类具有返回文件路径的getFilePath()
方法。我们不知道,我们无法访问(也不希望访问)您的完整代码库。我们只能创建一个模型来重现问题,我们的SSCCE告诉我们您的说法是错误的。你可以通过适应来证明你是对的