pdf添加水印

给pdf文件添加水印

  1. 引入依赖
xml 复制代码
  <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13.3</version>
        </dependency>
  1. 添加水印
java 复制代码
package com.it2.pdfdemo02.util;

import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;

import java.io.FileOutputStream;

/**
 * @Description: PDF增加水印工具类
 */
public class PDFUtil {

    /**
     * 给PDF添加水印
     * @param inputFilePath 源文件
     * @param outputFilePath 生成的文件
     * @param waterMarkContent 添加水印的内容
     */
    public static void pdfAddWaterMark(String inputFilePath, String outputFilePath, String waterMarkContent) {
        try {
            // 水印的高和宽
            int waterMarkHeight = 30;
            int watermarkWeight = 60;
            // 水印间隔距离
            int waterMarkInterval = 200;
            // 读取PDF文件流
            PdfReader pdfReader = new PdfReader(inputFilePath);
            // 创建PDF文件的模板,可以对模板的内容修改,重新生成新PDF文件
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(outputFilePath));
            // 设置水印字体
            BaseFont baseFont = BaseFont.createFont("Font/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); //幼圆常规
            // 设置PDF内容的Graphic State 图形状态
            PdfGState pdfGraPhicState = new PdfGState();
            // 填充透明度
            pdfGraPhicState.setFillOpacity(0.2f);
            // 轮廓不透明度
            pdfGraPhicState.setStrokeOpacity(0.4f);
            // PDF页数
            int pdfPageNum = pdfReader.getNumberOfPages() + 1;
            // PDF文件内容字节
            PdfContentByte pdfContent;
            // PDF页面矩形区域
            Rectangle pageRectangle;
            for (int i = 1; i < pdfPageNum; i++) {
                // 获取当前页面矩形区域
                pageRectangle = pdfReader.getPageSizeWithRotation(i);
                // 获取当前页内容,getOverContent表示之后会在页面内容的上方加水印
                pdfContent = pdfStamper.getOverContent(i);
                // 获取当前页内容,getOverContent表示之后会在页面内容的下方加水印
//                 pdfContent = pdfStamper.getUnderContent(i);
                pdfContent.saveState();
                // 设置水印透明度
                pdfContent.setGState(pdfGraPhicState);
                // 开启写入文本
                pdfContent.beginText();
                // 设置字体
                pdfContent.setFontAndSize(baseFont, 20);
                // 在高度和宽度维度每隔waterMarkInterval距离添加一个水印
                for (int height = waterMarkHeight; height < pageRectangle.getHeight(); height = height + waterMarkInterval) {
                    for (int width = watermarkWeight; width < pageRectangle.getWidth() + watermarkWeight;
                         width = width + waterMarkInterval) {
                        // 添加水印文字并旋转30度角
                        pdfContent.showTextAligned(Element.ALIGN_LEFT, waterMarkContent, width - watermarkWeight,
                                height - waterMarkHeight, 30);
                    }
                }
                // 停止写入文本
                pdfContent.endText();
            }
            pdfStamper.close();
            pdfReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 添加字体文件到resoures\Font\simsun.ttc

用到的字体文件(幼圆常规,C盘Windows/Fonts目录下

  1. 测试用例
java 复制代码
    @Test
    void addWater() {
        PDFUtil.pdfAddWaterMark("D:\\test3\\test1.pdf", "D:\\test3\\test1_watermark.pdf", "内部资料,禁止外传");
    }
相关推荐
行者将至X3 小时前
解决Zotero翻译插件Zotero PDF Translate无法正常翻译
pdf
先树立一个小目标3 小时前
react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
chrome·react.js·pdf
空中湖7 小时前
免费在线PDF转图片工具
pdf·html
沉到海底去吧Go10 小时前
【PDF识别改名】PDF指定区域OCR识别重命名工具使用教程和注意事项
python·pdf·ocr
空中湖10 小时前
免费批量PDF转Word工具
pdf·word
mangge0810 小时前
python读取SQLite表个并生成pdf文件
pdf
开开心心就好10 小时前
免费PDF转图片软件
javascript·智能手机·pdf·flask·word·excel·scikit-learn
Eiceblue17 小时前
Python读取PDF:文本、图片与文档属性
数据库·python·pdf
AAA_自动化工程师21 小时前
TIA博途中的程序导出为PDF格式的具体方法示例
pdf·tia博途·程序导出·pdf格式·具体方法
行云流水剑21 小时前
【学习记录】如何使用 Python 提取 PDF 文件中的内容
python·学习·pdf