Java实现给PDF文件加水印、图片、签名(含测试类)

您所在的位置:网站首页 盖章图片生成pdf Java实现给PDF文件加水印、图片、签名(含测试类)

Java实现给PDF文件加水印、图片、签名(含测试类)

2024-07-13 04:44| 来源: 网络整理| 查看: 265

前言

你好呀,我是小邹。

昨天给大家分享了PDF文件添加水印后保存,今天再来聊一聊如何实现印章、签名。

“Talk is cheap,show me the code.”

效果

在这里插入图片描述

实现

① 添加相关依赖

com.itextpdf itextpdf 5.5.13 com.itextpdf itext-asian 5.2.0

② 工具类PdfUtil

package top.hqxiaozou.utils; import top.hqxiaozou.entity.PdfAddContentParam; import com.itextpdf.awt.geom.Rectangle2D; import com.itextpdf.text.*; import com.itextpdf.text.Font; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.*; import com.itextpdf.text.pdf.parser.ImageRenderInfo; import com.itextpdf.text.pdf.parser.PdfReaderContentParser; import com.itextpdf.text.pdf.parser.RenderListener; import com.itextpdf.text.pdf.parser.TextRenderInfo; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; /** * @author:邹祥发 * @date:2022/11/24 10:19 * @description:PDF工具类,提供 水印、签名、盖章 功能 */ @Slf4j public class PdfUtil { /** * 往PDF上添加文字水印 * * @param inputFile 原文件 * @param outputFile 加水印后的文件 * @param waterMarkName 水印字符 */ public static void addWaterMark(String inputFile, String outputFile, String waterMarkName) { PdfReader reader = null; PdfStamper stamper = null; try { reader = new PdfReader(inputFile); stamper = new PdfStamper(reader, Files.newOutputStream(Paths.get(outputFile))); //水印字体,放到服务器上对应文件夹下(arial中文不生效) //BaseFont base = BaseFont.createFont("D:/workspace/springboot/src/main/resources/arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); Rectangle pageRect; PdfGState gs = new PdfGState(); //填充不透明度 为1完全不透明 gs.setFillOpacity(0.1f); //笔画不透明度, 为1完全不透明 gs.setStrokeOpacity(0.1f); 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 = 0; for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3