Вы адаптировали существующий пример 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 таким образом, чтобы мы могли запускать его на наших машинах и воспроизводить проблему.
person
Bruno Lowagie
schedule
07.01.2015