使用itext7在PDF文件中的指定文字位置添加电子签名图片技术记录

您所在的位置:网站首页 签字盖章图片 使用itext7在PDF文件中的指定文字位置添加电子签名图片技术记录

使用itext7在PDF文件中的指定文字位置添加电子签名图片技术记录

#使用itext7在PDF文件中的指定文字位置添加电子签名图片技术记录| 来源: 网络整理| 查看: 265

使用itext7在PDF文件中的指定文字位置添加电子签名图片

文章目录 使用itext7在PDF文件中的指定文字位置添加电子签名图片一、技术使用背景二、使用步骤1.引入依赖2.具体代码2.控制台输出2.生成结果展示 总结

一、技术使用背景

在一些PDF文件会有负责人签名、董事签名等签名处需要插入电子签章或者签名,所以将此技术点记录下来,其中也不乏有对其他博主技术的借用,请勿喷。

二、使用步骤 1.引入依赖

此次使用的是itext7,pom文件中引入依赖:

com.itextpdf itext7-core 7.1.12 pom 2.具体代码

代码如下:

package cn.basicproject.basics8.imginPDF; import com.itextpdf.io.image.ImageData; import com.itextpdf.io.image.ImageDataFactory; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfReader; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.canvas.parser.PdfDocumentContentParser; import com.itextpdf.kernel.pdf.canvas.parser.listener.IPdfTextLocation; import com.itextpdf.kernel.pdf.canvas.parser.listener.RegexBasedLocationExtractionStrategy; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Image; import java.util.Collection; public class ImageInPDF { public static void main(String args[]) { String input = "D:\\Java.pdf"; //通过指定pdf文件名,指定关键字,和指定的pdf文件的待处理页数做参数 getKeyWordsLocation(input, "负责人签名:", 1); } /** * 得到关键字位置 * @param input 源文件 * @param KEY_WORD 关键字 * @param pageNum 文档页数 */ public static void getKeyWordsLocation(String input, String KEY_WORD, int pageNum) { RegexBasedLocationExtractionStrategy strategy = new RegexBasedLocationExtractionStrategy(KEY_WORD); try { //得到需要插入的图片 ImageData imageData = ImageDataFactory.create("D:\\test.jpg"); //核心思路为对PdfDocument对象采用某种Strategy,这里使用RegexBasedLocationExtractionStrategy PdfReader pr = new PdfReader(input); //生成新的PDF文件 PdfDocument pd = new PdfDocument(pr, new PdfWriter("D:\\test.pdf")); //int pageNum = pd.getNumberOfPages();获取新pdf的总页数 Document document = new Document(pd); PdfDocumentContentParser pdcp = new PdfDocumentContentParser(pd); //文本内容具体解析借助使用PdfDocumentContentParser类(实质使用PdfCanvasProcessor进行处理), 对待处理页面装配合适策略 RegexBasedLocationExtractionStrategy regexStrategy = pdcp.processContent(pageNum, strategy); //获取处理结果 Collection resultantLocations = strategy.getResultantLocations(); //自定义结果处理 if (!resultantLocations.isEmpty()) { for (IPdfTextLocation item : resultantLocations) { Rectangle boundRectangle = item.getRectangle(); System.out.println(item.getText()); System.out.println("关键字“" + KEY_WORD + "” 的坐标为 x: " + boundRectangle.getX() + " ,y: " + boundRectangle.getY()); Image image = new Image(imageData).scaleAbsolute(70, 40).setFixedPosition(pageNum, boundRectangle.getRight() + 5f, boundRectangle.getBottom()); document.add(image); } document.close(); } else { System.out.println("结果为空"); } pr.close(); pd.close(); } catch (Exception e) { System.err.println("读取文件失败!"); e.printStackTrace(); } } } 2.控制台输出

代码如下:

"C:\Program Files\Java\jdk1.8.0_151\bin\java.exe" "- 负责人签名: 关键字“负责人签名:” 的坐标为 x: 321.31 ,y: 378.48105 Process finished with exit code 0

补充:为了方便就做这些展示,有兴趣的可以多打点展示一下自己跑出来的信息。

2.生成结果展示

PDF生成后效果截图如下:

在这里插入图片描述

注意:仅做展示用

总结

此次纪录就是为了收集开发过程中遇到的技术点,如果对你有帮助,拿走不谢。如有更好的方法请在评论区写上链接,谢谢!



【本文地址】


今日新闻


推荐新闻


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