你已經適應了現有的例子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[]
與該文件的實際字節。通過不告訴我們什麼是類,你迫使我們做出這樣的假設。
如果磁盤上的文件,你也可以做這樣的事情:
PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
stamper.getWriter(), cmaOrder.getFilePath(), cmaOrder.getFileName(), null);
那就是:如果SOSCustomerOrderFile
類有一個getFilePath()
方法返回的文件路徑。我們不知道,我們無法訪問(也不想訪問)您的完整代碼庫。我們只能創建一個SSCCE以嘗試重現問題,我們的SSCCE告訴我們您的指控是錯誤的。通過適應我們的SSCCE,我們可以在我們的機器上運行並重現問題,從而證明您是正確的。
它似乎在每一次迭代中重寫附件 –
我測試過了。顯然,這樣做可以。我無法重現這個問題。 –
您使用哪個iText版本? – mkl