RESPUESTA ACTUALIZADO (mejor versión con una manera fácil de filigrana, gracias a los comentaristas a continuación y @okok que proporcionó información con su respuesta)
Si está utilizando PDFBox 1.8.10 o superior, puede agregar marcas de agua a su documento PDF fácilmente con un mejor control sobre qué páginas deben marcarse con una marca de agua. Suponiendo que tiene un documento PDF de una página que tiene la imagen de marca de agua, puede superponer esto en el documento que desea filmar de la siguiente manera.
Código de ejemplo usando 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.
de muestras mediante 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);
}
}
vieja respuesta forma ineficiente, no se recomienda.
Bueno, OP preguntó cómo hacerlo en PDFBox, la primera respuesta parece un ejemplo con iText. Crear una marca de agua en PDFBox es realmente simple. El truco es que debe tener un documento PDF vacío con la imagen de marca de agua. Entonces todo lo que tiene que hacer es superponer este documento de marca de agua en el documento al que desea agregar la marca de agua.
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");
Precaución: Debe asegurarse de que coinciden con el número de páginas en tanto document..Otherwise, que terminaría con un documento con el número de páginas que coincidan con el que tiene menor número de páginas. Puede manipular el documento de marca de agua y duplicar las páginas para que coincida con su documento.
Espero que esto ayude.!
El problema con la respuesta a continuación es que el posicionamiento no funciona como era de esperar (arriba a la izquierda justificado) si las páginas tienen dimensiones diferentes. Necesitaba agregar una marca de agua de texto a la parte superior de cada página en un documento PDF, y la solución anterior era exactamente lo que necesitaba, por lo que se mejoró esta solución. –