您已调整现有示例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();
}
结果包含所有预期的附件:
我看到的唯一区别是您为每个嵌入文件指定了相同的名称,但即使我这样做了,我仍然可以正确地看到所有附件。
另一个区别是我使用了一个String
值数组,但这并不重要,假设cmaOrder.getFileName()
确实返回一个文件名(例如“order1.doc”,“order2.xls”,...)并且cmaOrder.getFileData()
返回一个byte[]
with该文件的实际字节。通过不告诉我们这SOSCustomerOrderFile
门课是关于什么的,你迫使我们做出这样的假设。
如果您在磁盘上有文件,您还可以执行以下操作:
PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
stamper.getWriter(), cmaOrder.getFilePath(), cmaOrder.getFileName(), null);
即:如果SOSCustomerOrderFile
该类有一个getFilePath()
返回文件路径的方法。我们不知道,我们无权(也不想访问)您的完整代码库。我们只能创建一个SSCCE来尝试重现问题,我们的 SSCCE 告诉我们您的指控是错误的。你可以通过调整我们的 SSCCE 来证明你是对的,这样我们就可以在我们的机器上运行它并重现问题。