RISPOSTA AGGIORNATO (versione migliore con un modo semplice per filigrana, grazie ai commentatori di seguito e @okok che ha fornito input con la sua risposta)
Se si utilizza PDFBox 1.8.10 o versione successiva, è possibile aggiungere facilmente filigrana al documento PDF con un controllo migliore su quali pagine devono essere sottoposte a filigrana. Supponendo che si disponga di un documento PDF di una pagina con l'immagine della filigrana, è possibile sovrapporlo al documento che si desidera filigranare come segue.
codice di esempio utilizzando 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.
di esempio utilizzando PDFBox 2.0.0 Release Candidate
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);
}
}
VECCHIO RISPOSTA modo inefficiente, non è raccomandato.
Bene, OP ha chiesto come farlo in PDFBox, la prima risposta sembra un esempio con iText. Creare una filigrana in PDFBox è davvero semplice. Il trucco è che dovresti avere un documento PDF vuoto con l'immagine della filigrana. Quindi tutto ciò che devi fare è Sovrapporre questo documento filigrana sul documento a cui vuoi aggiungere la filigrana.
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");
Attenzione: È necessario assicurarsi di abbinare il numero di pagine in entrambi document..Otherwise, si finirebbe con un documento con il numero di pagine che corrispondono quello che ha minor numero di pagine. È possibile manipolare il documento filigrana e duplicare le pagine in modo che corrispondano al documento.
Spero che questo aiuti.!
Problema con la risposta di sotto è che il posizionamento non funziona come mi aspetterei (giustificato in alto a sinistra) se le pagine sono di dimensioni diverse. Avevo bisogno di aggiungere una filigrana di testo all'inizio di ogni pagina in un documento PDF, e la soluzione di cui sopra era esattamente ciò di cui avevo bisogno, quindi ho risolto questa soluzione. –