失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > iText实现pdf添加文字水印

iText实现pdf添加文字水印

时间:2023-12-11 13:36:15

相关推荐

iText实现pdf添加文字水印

iText实现pdf添加文字水印

1.添加maven依赖

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

2.代码实现

import com.itextpdf.text.DocumentException;import com.itextpdf.text.Element;import com.itextpdf.text.Rectangle;import com.itextpdf.text.pdf.*;import javax.swing.*;import java.awt.*;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;/*** @description: pdf文档操作utils* @author: wzg* @create: -12-16**/public class PdfUtils {public static void main(String[] args) throws Exception {//需要添加水印的文件String inputFile = "D:\\data\\doc\\-12-15\\百强县分析报告1639532278835.pdf";//添加完水印的文件存放路径String outputFile = "D:\\data\\doc\\-12-15\\百强县分析报告1639532278835(水印).pdf";//需要添加的水印文字String waterMarkName = "添加水印";//水印字体透明度float opacity = 0.3f;//水印字体大小int fontsize = 40;//水印倾斜角度(0-360)int angle = 30;//数值越大每页竖向水印越少int heightDensity = 50;//数值越大每页横向水印越少int widthDensity = 10;PdfUtils.addWaterMark(inputFile, outputFile, waterMarkName, opacity, fontsize, angle, heightDensity, widthDensity,false);}/*** pdf添加水印* @param inputFile 需要添加水印的文件* @param outputFile 添加完水印的文件存放路径* @param waterMarkName 需要添加的水印文字* @param opacity 水印字体透明度* @param fontsize 水印字体大小* @param angle 水印倾斜角度(0-360)* @param heightDensity 数值越大每页竖向水印越少* @param widthDensity 数值越大每页横向水印越少* @param cover 是否覆盖* @return*/public static boolean addWaterMark(String inputFile, String outputFile, String waterMarkName,float opacity, int fontsize, int angle, int heightDensity, int widthDensity,boolean cover) {if (!cover){File file=new File(outputFile);if (file.exists()){return true;}}File file=new File(inputFile);if (!file.exists()){return false;}PdfReader reader = null;PdfStamper stamper = null;try {int interval = -5;reader = new PdfReader(inputFile);stamper = new PdfStamper(reader, new FileOutputStream(outputFile));BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);Rectangle pageRect = null;PdfGState gs = new PdfGState();//这里是透明度设置gs.setFillOpacity(opacity);//这里是条纹不透明度gs.setStrokeOpacity(0.2f);int total = reader.getNumberOfPages() + 1;System.out.println("Pdf页数:" + reader.getNumberOfPages());JLabel label = new JLabel();FontMetrics metrics;int textH = 0;int textW = 0;label.setText(waterMarkName);metrics = label.getFontMetrics(label.getFont());//字符串的高, 只和字体有关textH = metrics.getHeight();//字符串的宽textW = metrics.stringWidth(label.getText());PdfContentByte under;//循环PDF,每页添加水印for (int i = 1; i < total; i++) {pageRect = reader.getPageSizeWithRotation(i);under = stamper.getOverContent(i); //在内容上方添加水印//under = stamper.getUnderContent(i); //在内容下方添加水印under.saveState();under.setGState(gs);under.beginText();//under.setColorFill(BaseColor.PINK); //添加文字颜色 不能动态改变 放弃使用under.setFontAndSize(base, fontsize); //这里是水印字体大小for (int height = textH; height < pageRect.getHeight() * 2; height = height + textH * heightDensity) {for (int width = textW; width < pageRect.getWidth() * 1.5 + textW; width = width + textW * widthDensity) {// rotation:倾斜角度under.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW, height - textH, angle);}}//添加水印文字under.endText();}System.out.println("添加水印成功!");return true;} catch (IOException e) {System.out.println("添加水印失败!错误信息为: " + e);e.printStackTrace();return false;} catch (DocumentException e) {System.out.println("添加水印失败!错误信息为: " + e);e.printStackTrace();return false;} finally {//关闭流if (stamper != null) {try {stamper.close();} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}if (reader != null) {reader.close();}}}}

如果觉得《iText实现pdf添加文字水印》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。