Java 添加PDF印章——图片印章、动态印章
图章(印章)是一种在合同、票据、公文等文件中表明法律效应、部门机关权威的重要指示物,常见于各种格式的文件、文档中。对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现。本篇文档分享通过Java代码在PDF文档中添加印章的方法。内容将分2部分介绍:
1. 添加图片印章。即通过加载现有的印章(以图片形式),添加到PDF指定页面位置
2. 添加动态印章。即加载PDF文档,并在动态的添加印章内容,包括印章字样、日期、时间、经办人、组织名称等。
使用工具:Free Spire.PDF for Java(免费版)
jar文件获取及导入:
方法1:通过官网下载jar文件包。下载后,解压,并将解压文件夹lib下的Spire.Presentation.jar文件导入java程序。
方法2:通过maven仓库安装导入。
Java示例(供参考)
1. 添加图片图章
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.annotations.PdfRubberStampAnnotation;
import com.spire.pdf.annotations.appearance.PdfAppearance;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTemplate;
import java.awt.geom.Rectangle2D;public class ImageStamp {public static void main(String[] args) {//创建PdfDocument对象,加载PDF测试文档PdfDocument doc = new PdfDocument();doc.loadFromFile("test.pdf");//获取文档第3页PdfPageBase page = doc.getPages().get(2);//加载印章图片PdfImage image = PdfImage.fromFile("stamp.png");//获取印章图片的宽度和高度int width = image.getWidth();int height = image.getHeight();//创建PdfTemplate对象PdfTemplate template = new PdfTemplate(width, height);//将图片绘制到模板template.getGraphics().drawImage(image, 0, 0, width, height);//创建PdfRubebrStampAnnotation对象,指定大小和位置Rectangle2D rect = new Rectangle2D.Float((float) (page.getActualSize().getWidth() - width - 10), (float) (page.getActualSize().getHeight() - height - 60), width, height);PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect);//创建PdfAppearance对象PdfAppearance pdfAppearance = new PdfAppearance(stamp);//将模板应用为PdfAppearance的一般状态pdfAppearance.setNormal(template);//将PdfAppearance 应用为图章的样式stamp.setAppearance(pdfAppearance);//添加图章到PDFpage.getAnnotationsWidget().add(stamp);//保存文档doc.saveToFile("ImageStamp.pdf",FileFormat.PDF);}
}
图片图章添加效果:
2.添加动态印章
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.annotations.PdfRubberStampAnnotation;
import com.spire.pdf.annotations.appearance.PdfAppearance;
import com.spire.pdf.graphics.*;import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;public class DynamicStamp {public static void main(String[] args) {//创建PdfDocument对象PdfDocument document = new PdfDocument();//加载PDF文档document.loadFromFile("test.pdf");//获取第3页PdfPageBase page = document.getPages().get(2);//创建PdfTamplate对象PdfTemplate template = new PdfTemplate(185, 50);//创建两种字体PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN ,15), true);PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN ,10), true);//创建画刷PdfSolidBrush solidBrush = new PdfSolidBrush(new PdfRGBColor(Color.blue));Rectangle2D rect1 = new Rectangle2D.Float();rect1.setFrame(new Point2D.Float(0,0),template.getSize()); //创建圆角矩形路径int CornerRadius = 20;PdfPath path = new PdfPath();path.addArc(template.getBounds().getX(), template.getBounds().getY(), CornerRadius, CornerRadius, 180, 90);path.addArc(template.getBounds().getX() + template.getWidth() - CornerRadius,template.getBounds().getY(), CornerRadius, CornerRadius, 270, 90);path.addArc(template.getBounds().getX() + template.getWidth() - CornerRadius, template.getBounds().getY()+ template.getHeight() - CornerRadius, CornerRadius, CornerRadius, 0, 90);path.addArc(template.getBounds().getX(), template.getBounds().getY() + template.getHeight() - CornerRadius, CornerRadius, CornerRadius, 90, 90);path.addLine( template.getBounds().getX(), template.getBounds().getY() + template.getHeight() - CornerRadius, template.getBounds().getX(), template.getBounds().getY() + CornerRadius / 2);//绘制路径到模板,并进行填充 template.getGraphics().drawPath(PdfPens.getBlue(), path);//在模板上绘制文字及动态日期String s1 = "已审核\n";String s2 = "社区管理中心 " + dateToString(new java.util.Date(),"yyyy-MM-dd HH:mm:ss");template.getGraphics().drawString(s1, font1, solidBrush, new Point2D.Float(5, 5));template.getGraphics().drawString(s2, font2, solidBrush, new Point2D.Float(5, 28));//创建PdfRubberStampAnnotation对象,并指定其位置和大小Rectangle2D rect2= new Rectangle2D.Float();rect2.setFrame(new Point2D.Float((float)(page.getActualSize().getWidth()-250),(float)(page.getActualSize().getHeight()-150)), template.getSize());PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect2);//创建PdfAppearance对象,应用模板为一般状态PdfAppearance appearance = new PdfAppearance(stamp);appearance.setNormal(template);//应用样式到图章stamp.setAppearance(appearance);//添加图章到Annotation集合page.getAnnotationsWidget().add(stamp);//保存文档document.saveToFile("DynamicStamp.pdf");document.close();}//将日期转化成字符串public static String dateToString(java.util.Date poDate,String pcFormat) {SimpleDateFormat loFormat = new SimpleDateFormat(pcFormat);return loFormat.format(poDate);}
}
动态图章添加效果:
(本文完)
Java 添加PDF印章——图片印章、动态印章相关推荐
- Java制作PDF转图片小工具
背景: 前几日一位朋友突然找我帮忙将PDF转换成图片,我仗义相助,建议他使用福昕阅读器,然而他说转换需要VIP会员,老贵了.我花了半天时间寻找免费会员,结果不出所料没有找到,我一怒之下,便决定亲自动手 ...
- Java读取pdf模板,并动态生成pdf文件,如动态生成准考证
Java读取pdf模板,并动态生成pdf文件,如动态生成准考证 前几天遇到了一个生成准考证的需求,并提供用户下载,然后百度了一圈还是觉得使用itextpdf这个框架好用点.但是还需要找到一个能创建 ...
- java之pdf转图片的几种方式,以及在使用过程中遇到的问题和处理方案
java之pdf转图片的几种方式,以及在使用过程中遇到的问题和处理方案 方式 pdfBox iText(方式同上) spire.pdf.free(方式同上) 遇到的问题 图片清晰度.这种方式都有这个问 ...
- java生成PDF(图片,模板,表格)
刚接到了一个需求,生成一个pdf,一开始以为挺简单的,通过模板生成嘛,我也发过相应的文章,根据模板直接生成pdf,响应到前端或者根据模板生成pdf,直接指定下载位置,这两种方案都可以,不过这篇文章主要 ...
- java代码pdf转图片中文乱码解决
1:java代码 @RequestMapping("/pdfToPng")public void pdfToPng(HttpServletResponse response) th ...
- Java 实现PDF转图片,去除PDF水印,图片转PDF
1.依赖jar包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian& ...
- java读取pdf三维图片_java 读取PDF文件生成图片形式
引入所需maven依赖 org.icepdf.os icepdf-core 6.2.2 javax.media jai_core JAVA代码工具类package com.util; import c ...
- JAVA的pdf转图片方法
JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文, ...
- java实现pdf转图片,并可生成黑白图片
一.开发前准备 所需jar:https://download.csdn.net/download/zqq3436/10588117 jdk版本:1.6 测试代码文件夹目录结构(pdf文件夹下有一些.p ...
最新文章
- 没有“好的”数据,AI就没有未来?听听云测数据怎么说
- sicily 1082. MANAGER
- [转载]tomcat的配置文件server.xml不支持中文注释的解决办法
- 模拟电路技术之基础知识(十)
- 修复 SyntaxHighlighter 3.0.83 Java 代码多行注释 Bug
- Effective Dart 文档注释在Flutter项目中的实践
- IntelliJ IDEA中创建xml文件
- 微服务技术栈:流量整形算法,服务熔断与降级
- jQuery validate表单验证demo
- ios 内联函数 inline ---分解LFLiveKit
- 【docker】【pycharm】pycharm配置docker远程连接
- 计算机硬盘容量的最小单位,计算机中存储数据的最小单位和存储容量的基本单位各是什么?...
- 【经验分享】嵌入式C语言开发如何有效地排查内存泄露的疑难问题?
- DSP2812入门5——使用C语言操作DSP寄存器
- php计算ip掩码,php进行ip地址掩码运算处理的方法
- 计算机中的量子力学,从量子力学解读宇宙:我们也许存在于计算机虚拟的世界中!...
- 电脑连打印机不打印,是怎么回事?
- Keras深度学习实战——信用预测
- Opencv在图片上写文字(hello)
- Java体系总结 cf2e3d1401904217a28c0bd2d09c5e72