欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > java对pdf文件添加水印

java对pdf文件添加水印

2024/12/31 1:11:55 来源:https://blog.csdn.net/abments/article/details/144266639  浏览:    关键词:java对pdf文件添加水印

java对pdf文件添加水印

添加依赖

        <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

参考代码


private final static Map<String,Object> pdfConfig = getPdfDefaultConfig();public static Map<String,Object> getPdfDefaultConfig(){Map<String, Object> config = new HashMap<>();try {config.put("baseFont", BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",   BaseFont.EMBEDDED));} catch (IOException | DocumentException e) {throw new RuntimeException(e);}config.put("fillOpacity",0.3f);// 填充透明度config.put("strokeOpacity",0.4f);// 笔划不透明度config.put("fontSize",16);//字体大小config.put("interval",-15);// 水印间隔config.put("rotation",30);// 旋转角度return config;}public static void pdfByText(InputStream inputStream, OutputStream outputStream, String waterMarkName, Map<String,Object> config) throws DocumentException, IOException {PdfReader reader = new PdfReader(inputStream);PdfStamper stamper = new PdfStamper(reader, outputStream);try {BaseFont base = (BaseFont) config.getOrDefault("baseFont",pdfConfig.get("baseFont"));com.itextpdf.text.Rectangle pageRect;PdfGState gs = new PdfGState();gs.setFillOpacity((Float) config.getOrDefault("fillOpacity",pdfConfig.get("fillOpacity")));gs.setStrokeOpacity((Float) config.getOrDefault("strokeOpacity",pdfConfig.get("strokeOpacity")));int total = reader.getNumberOfPages() + 1;JLabel label = new JLabel();FontMetrics metrics;int textH;int textW;label.setText(waterMarkName);metrics = label.getFontMetrics(label.getFont());textH = metrics.getHeight();textW = metrics.stringWidth(label.getText());PdfContentByte under;int interval = (int) config.getOrDefault("interval", pdfConfig.get("interval"));int rotation = (int) config.getOrDefault("rotation", pdfConfig.get("rotation"));int fontSize = (int) config.getOrDefault("fontSize", pdfConfig.get("fontSize"));for (int i = 1; i < total; i++) {pageRect = reader.getPageSizeWithRotation(i);under = stamper.getOverContent(i);under.saveState();under.setGState(gs);under.beginText();under.setFontAndSize(base, fontSize);for (int height = interval + textH; height < pageRect.getHeight(); height = height + textH * 3) {for (int width = interval + textW; width < pageRect.getWidth() + textW; width = width + textW * 2) {under.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW, height - textH, rotation);}}// 添加水印文字under.endText();}} finally {stamper.close();reader.close();}}

测试

public static void main(String[] args) throws IOException, DocumentException {pdfByText( new FileInputStream("F:\\tmp\\1\\python基于深度学习的音乐推荐方法研究系统.pdf"), new FileOutputStream("F:\\tmp\\1\\python基于深度学习的音乐推荐方法研究系统-pdf.pdf"),"测试水印-abments", new HashMap<>());}

效果展示

在这里插入图片描述

说明

方法pdfByText的参数设置为InputStream inputStream, OutputStream outputStream,是为了方便java中直接输出给响应体对象。
在使用过程如果遇到问题欢迎留言讨论。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com