PDFBox 2.0.27: добавление водяных знаков с картой для файлов наложений для конкретных страниц приводит к отсутствию водяных знаков

Исходная информация

Я использую PDFBox 2.0.27 и пытаюсь добавить водяные знаки в мой PDF-файл (может быть), содержащий несколько страниц разных форматов DIN и ориентаций (вертикальной и горизонтальной).

По этой причине я создал для каждой комбинации формата Din и ориентации PDF-файл, который я хочу использовать для водяных знаков соответствующих страниц моего исходного PDF-файла.

Подход

Отношение конкретной страницы и файла оверлея/водяного знака хранится в HashMap<Integer, String> overlayGuide = new HashMap<>();

Для добавления водяных знаков на каждую страницу я использую следующий код:

PDDocument originalPDF = PDDocument.load(new File("..Original_PDF.pdf"));   // To adjust with actual path

HashMap<Integer, String> overlayGuide = new HashMap<>();
overlayGuide.put(1, "..A1_Horizontal_Watermark.pdf");   // To adjust with actual path

Overlay overlay = new Overlay();
overlay.setInputPDF(originalPDF);
overlay.setOverlayPosition(Overlay.Position.BACKGROUND);
originalPDF = overlay.overlay(overlayGuide);

originalPDF.save(new File("C:\\AxaviaPdfServiceAPI\\temp\\watermarked.pdf"));

overlay.close();

Исходный фрагмент кода

Этот код основан на предложенном коде из здесь.

Проблема

Водяной знак не работает. Вывод, сгенерированный приведенным выше кодом, является исходным PDF-файлом. Я не получаю никаких исключений, ошибок или других подсказок, которые мог бы предоставить.

Что мне не хватает? Метод overlay.setOutputFile("final.pdf");, опубликованный в связанном вопросе о стеке, недоступен в моей текущей версии PDFBox.

Размер и ориентация страницы исходного PDF-файла и PDF-файла с водяным знаком одинаковы (/должны быть) одинаковыми. Ручное добавление водяного знака через Adobe Acrobat DC работает.

Ожидаемый результат

Основываясь на ручном добавлении через Adobe Acrobat DC, я ожидал что-то вроде здесь

К сожалению, я не смог найти параметр в классе Overlay, чтобы установить непрозрачность для добавления водяного знака PDF.

Что я пробовал

См. фрагмент кода выше и поиск в Google, который привел к более или менее такому же фрагменту кода. Другие решения обрабатывали только простой текст в виде водяных знаков или изображений.

Примеры файлов

Примеры файлов для тестирования моего кода можно найти здесь

Граничные условия

Я хочу придерживаться шаблонных PDF-файлов для водяных знаков, так как я хочу добавить дополнительные значки/изображения. Предоставленный пример файла — это всего лишь краткий черновик.


Обновление 2022-11-06

Пожалуйста, поделитесь как входными, так и выходными PDF-файлами вашего теста. – мкл

Оригинальный PDF: здесь

Водяной знак PDF: здесь

Результат PDF: здесь


Любая помощь приветствуется. Заранее спасибо.

Пожалуйста, поделитесь как входными, так и выходными PDF-файлами вашего теста.

mkl 06.11.2022 10:26

Спасибо за ваш ответ. Я обновил свой вопрос и связал запрошенные вами файлы

SeeAZO 06.11.2022 16:36

Хорошо, Original_PDF.pdf и файл с водяным знаком.pdf представляют собой один и тот же PDF-файл. По сути, это известная ошибка, PDFBOX-5523 ​​, которая уже исправлена. Это исправление будет содержаться в версии 2.0.28.

mkl 06.11.2022 19:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо mkl за указание на то, что подход с HashMap<Integer, String> overlayGuide = new HashMap<>(); в настоящее время содержит ошибки.

Решение/Обходной путь

Я использовал метод overlay.overlayDocuments(overlayGuidePDDocuments); с overlayGuidePDDocuments = HashMap<Integer, PDDocument>, и водяные знаки теперь установлены правильно.

Примечания

Установка непрозрачности для PDF-файлов шаблона водяного знака невозможна (или я не понимаю, как это сделать). Поэтому PDF-файлы шаблонов водяных знаков готовятся с непрозрачностью.

Другие вопросы по теме