栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用PDFBox加水印

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用PDFBox加水印

更新的答案 (更好的版本,带有简单的水印方法,这要感谢下面的评论员和@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.");

旧答案 低效方式,不建议使用。

好吧,OP问如何在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 oneOverlay overlay = new Overlay();overlay.overlay(realDoc,watermarkDoc);watermarkDoc.save("document-now-watermarked.pdf");

警告:您应确保两个文档中的页数均匹配。否则,最终将得到一个文档,其页数与页数最少的文档相匹配。您可以操纵水印文档并复制页面以匹配您的文档。

希望这可以帮助。!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号