CẬP NHẬT ĐÁP (phiên bản tốt hơn với cách dễ dàng để watermark, nhờ các nhà bình luận dưới đây và @okok người cung cấp đầu vào với câu trả lời của mình)
Nếu bạn đang sử dụng PDFBox 1.8.10 hoặc cao hơn, bạn có thể thêm watermark vào tài liệu PDF của mình một cách dễ dàng với sự kiểm soát tốt hơn đối với những trang cần được watermarked. Giả sử bạn có một tài liệu PDF một trang có hình mờ, bạn có thể che phủ hình ảnh này trên tài liệu bạn muốn đóng dấu như sau.
Mẫu Mã sử dụng 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.
mẫu sử dụng 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);
}
}
OLD ĐÁP cách không hiệu quả, không được khuyến khích.
Vâng, OP đã hỏi làm thế nào để làm điều đó trong PDFBox, câu trả lời đầu tiên trông giống như một ví dụ sử dụng iText. Tạo hình mờ trong PDFBox thực sự đơn giản. Bí quyết là, bạn nên có một tài liệu PDF trống với hình mờ. Sau đó, tất cả những gì bạn phải làm là Overlay tài liệu watermark này trên tài liệu mà bạn muốn thêm watermark vào.
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");
Thận trọng: Bạn nên chắc chắn rằng bạn khớp với số trang trong cả hai tài liệu .. Nếu không, bạn sẽ kết thúc với một số trang phù hợp với số trang có số trang ít nhất. Bạn có thể thao tác tài liệu watermark và sao chép các trang để khớp với tài liệu của bạn.
Hy vọng điều này sẽ giúp.!
Vấn đề với câu trả lời dưới đây là vị trí không hoạt động như tôi mong đợi (trên cùng bên trái hợp lý) nếu các trang có kích thước khác nhau. Tôi cần phải thêm một watermark văn bản vào đầu mỗi trang trong một tài liệu PDF, và các giải pháp trên là chính xác những gì tôi cần, do đó, bumping giải pháp này lên. –