У меня есть приложение весенней загрузки, и я пытаюсь объединить два файла PDF. Тот, который я получаю в виде байтового массива из другого сервиса, и тот, который у меня есть локально в моем файле ресурсов: /static/documents/my-file.pdf. Это код того, как я получаю байтовый массив из моего файла из ресурсов:
public static byte[] getMyPdfContentForLocale(final Locale locale) {
byte[] result = new byte[0];
try {
final File myFile = new ClassPathResource(TEMPLATES.get(locale)).getFile();
final Path filePath = Paths.get(myFile.getPath());
result = Files.readAllBytes(filePath);
} catch (IOException e) {
LOGGER.error(format("Failed to get document for local %s", locale), e);
}
return result;
}
Я получаю файл и получаю байтовый массив. Позже я пытаюсь объединить эти два файла со следующим кодом:
PDFMergerUtility pdfMergerUtility = new PDFMergerUtility();
pdfMergerUtility.addSource(new ByteArrayInputStream(offerDocument));
pdfMergerUtility.addSource(new ByteArrayInputStream(merkblattDocument));
ByteArrayOutputStream os = new ByteArrayOutputStream();
pdfMergerUtility.setDestinationStream(os);
pdfMergerUtility.mergeDocuments(null);
os.toByteArray();
Но, к сожалению, он выдает ошибку:
throw new IOException("Page tree root must be a dictionary");
Я проверил, и это делает эту проверку, прежде чем он выбрасывает это:
if (!(root.getDictionaryObject(COSName.PAGES) instanceof COSDictionary))
{
throw new IOException("Page tree root must be a dictionary");
}
И я действительно понятия не имею, что это значит и как это исправить. Самое странное, что я создал совершенно новый проект и попробовал один и тот же код для объединения двух документов (одинаковых документов), и это работает!
Кроме того, я попробовал:
- Измените загрузочную версию пружины, если она в порядке
- Установите метод mergeDocuments следующим образом: pdfMergerUtility.mergeDocuments (setupMainMemoryOnly ())
- Установите метод mergeDocuments следующим образом: pdfMergerUtility.mergeDocuments (setupTempFileOnly ( ))
- Получить байты другим способом, не используя файлы из java .nio:
- И также выполнив это в другом потоке
- Объединение файлов только локально сохранено (в ресурсах)
- Слияние файла, который я получаю от другого сервиса - это работает, кстати, и поэтому я уверен, что он в порядке
Может кто-нибудь помочь с этим?