Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用itext pdf压模在pdf中添加多个附件_Java_Pdf_Itext_Pdfstamper - Fatal编程技术网

Java 使用itext 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

我想向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告诉我们您的说法是错误的。你可以通过适应来证明你是对的