Добавить многостраничный водяной знак в PDF

#pdfbox

#pdfbox

Вопрос:

У меня есть этот объединенный PDF-файл только с Acroform.

И я хочу добавить к нему водяной знак.

Я добавляю watermark_1.pdf на страницу 1,3,5

Я добавляю watermark_2.pdf на страницу 2,4,6

И это хорошо работает с этим кодом:

 PDDocument doc = PDDocument.load(new File(filePath));

HashMap<Integer, String> overlayGuide = new HashMap<Integer, String>();
for (int i = 0; i < doc.getNumberOfPages(); i = i   2) {
    overlayGuide.put(i   1, FOLDER   "watermark_1.pdf");
    overlayGuide.put(i   2, FOLDER   "watermark_2.pdf");
}

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

doc.save(new File(filePath));
  

Но этот способ заставит меня разделить мой водяной знак на два файла, в то время как мой исходный водяной знак находится в одном файле см. watermark_2pages.pdf.

Мой вопрос, возможно ли настроить наложение PDFBox и использовать watermark_2pages.pdf.pdf и применить его непосредственно к странице 1 и 2 моей формы (т. Е. без наличия двух PDF-файлов с водяными знаками)?

Комментарии:

1. Кстати, вам не нужно создавать такую карту, вы можете просто использовать setOddPageOverlayFile и setEvenPageOverlayFile и использовать пустую карту…

2. @mkl спасибо, это не мой вопрос. Да, здесь я могу использовать четный и нечетный, но иногда у меня может быть водяной знак примерно на 4 страницах …. вот почему мне нужен oberlayGuide, первоначальный вопрос таков: как я могу сохранить свой водяной знак в одном файле и добавить в overlay для страницы 1 добавить водяной знак.pdf (страница 1) для страницы 2 добавить водяной знак.pdf (страница 2) это моя проблема. Я хочу избежать разделения моего водяного знака в нескольких файлах

3. Попробуйте setAllPagesOverlayPDF или setAllPagesOverlayFile , это делает то, что вы хотите?

4. Вы написали «кажется, работает» и «без реального подтверждения от вас это раньше не работало» — так это работает или нет? При взгляде на исходный код вы должны передать пустую карту, а не null. Если вы передадите значение null, вы получите NPE.

5. Поскольку другого метода, очевидно, нет 🙂 Я предлагаю вам ответить на вопрос самостоятельно, я на самом деле не вкладывал в это много усилий. Но я улучшу документацию.