Вы адаптировали существующий пример 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[]
с фактическими байтами этого файла. Не сообщая нам, что такое класс SOSCustomerOrderFile
, вы заставляете нас делать это предположение.
Если у вас есть файл на диске, вы можете также сделать что-то вроде этого:
PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(
stamper.getWriter(), cmaOrder.getFilePath(), cmaOrder.getFileName(), null);
То есть: если SOSCustomerOrderFile
класс имеет getFilePath()
метод, который возвращает путь к файлу. Мы не знаем, что у нас нет доступа (и мы не хотим доступа) к вашей полной базе кода. Мы можем создать только SSCCE, чтобы попытаться воспроизвести проблему, и наш SSCCE сообщает нам, что ваше утверждение неверно. Вы можете доказать, что вы правы, адаптируя наш SSCCE таким образом, чтобы мы могли запускать его на наших машинах и воспроизводить проблему.
Кажется, что вы переопределяете прикрепление на каждой итерации –
Я тестировал это. По-видимому, все в порядке. Я не могу воспроизвести проблему. –
Какую версию iText вы используете? – mkl