ОБНОВЛЕННЫЙ ОТВЕТ (Лучшая версия с простым способом добавления водяных знаков, благодаря нижеприведенным комментаторам и @okok, предоставившим свои ответы)
Если вы используете PDFBox 1.8.10 иливыше, вы можете легко добавить водяной знак в ваш PDF документ с лучшим контролем над тем, какие страницы должны быть водяными знаками.Предполагая, что у вас есть одностраничный PDF-документ с изображением водяного знака, вы можете наложить его на документ, который вы хотите сделать водяным знаком, следующим образом.
Образец кода с использованием 1.8.10
import java.util.HashMap;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.Overlay;
public class TestPDF {
public static void main(String[] args) throws Exception{
PDDocument realDoc = PDDocument.load("originaldocument.pdf");
//the above is the document you want to watermark
//for all the pages, you can add overlay guide, indicating watermark the original pages with the watermark document.
HashMap<Integer, String> overlayGuide = new HashMap<Integer, String>();
for(int i=0; i<realDoc.getPageCount(); i++){
overlayGuide.put(i+1, "watermark.pdf");
//watermark.pdf is the document which is a one page PDF with your watermark image in it. Notice here that you can skip pages from being watermarked.
}
Overlay overlay = new Overlay();
overlay.setInputPDF(realDoc);
overlay.setOutputFile("final.pdf");
overlay.setOverlayPosition(Overlay.Position.BACKGROUND);
overlay.overlay(overlayGuide,false);
//final.pdf will have the original PDF with watermarks.
Образец с использованием PDFBox 2.0.0 Кандидат на выпуск
import java.io.File;
import java.util.HashMap;
import org.apache.pdfbox.multipdf.Overlay;
import org.apache.pdfbox.pdmodel.PDDocument;
public class TestPDF {
public static void main(String[] args) throws Exception{
PDDocument realDoc = PDDocument.load(new File("originaldocument.pdf"));
//the above is the document you want to watermark
//for all the pages, you can add overlay guide, indicating watermark the original pages with the watermark document.
HashMap<Integer, String> overlayGuide = new HashMap<Integer, String>();
for(int i=0; i<realDoc.getNumberOfPages(); i++){
overlayGuide.put(i+1, "watermark.pdf");
//watermark.pdf is the document which is a one page PDF with your watermark image in it.
//Notice here, you can skip pages from being watermarked.
}
Overlay overlay = new Overlay();
overlay.setInputPDF(realDoc);
overlay.setOutputFile("final.pdf");
overlay.setOverlayPosition(Overlay.Position.BACKGROUND);
overlay.overlay(overlayGuide);
}
}
Если вы хотите использовать новый пакет org.apache.pdfbox.tools.OverlayPDF для наложений, вы можете сделать это следующим образом.(Спасибо постеру ниже)
String[] overlayArgs = {"C:/Examples/foreground.pdf", "C:/Examples/background.pdf", "C:/Examples/resulting.pdf"};
OverlayPDF.main(overlayArgs);
System.out.println("Overlay finished.");
СТАРЫЙ ОТВЕТ Неэффективный способ, не рекомендуется.
Ну, ОП спросил, как это сделать в PDFBox,Первый ответ выглядит как пример с использованием iText.Создать водяной знак в PDFBox действительно просто.Хитрость в том, что у вас должен быть пустой документ PDF с изображением водяного знака.Тогда все, что вам нужно сделать, это наложить этот документ с водяным знаком на документ, к которому вы хотите добавить водяной знак.
PDDocument watermarkDoc = PDDocument.load("watermark.pdf");
//Assuming your empty document with watermark image in it.
PDDocument realDoc = PDDocument.load("document-to-be-watermarked.pdf");
//Let's say this is your document that you want to watermark. For example sake, I am opening a new one, you would already have a reference to PDDocument if you are creating one
Overlay overlay = new Overlay();
overlay.overlay(realDoc,watermarkDoc);
watermarkDoc.save("document-now-watermarked.pdf");
Внимание: вы должны убедиться, что вы соответствуете числу страниц в обоих документах .. В противном случае, вы получите документ с числом страниц, совпадающим с тем, у которого наименьшее количество страниц.Вы можете манипулировать документом с водяными знаками и дублировать страницы в соответствии с вашим документом.
Надеюсь, это поможет.!