图章(印章)是一种在合同、票据、公文等文件中表明法律效应、部门机关权威的重要指示物,常见于各种格式的文件、文档中。对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现。本篇文档分享通过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印章——图片印章、动态印章相关推荐

  1. Java制作PDF转图片小工具

    背景: 前几日一位朋友突然找我帮忙将PDF转换成图片,我仗义相助,建议他使用福昕阅读器,然而他说转换需要VIP会员,老贵了.我花了半天时间寻找免费会员,结果不出所料没有找到,我一怒之下,便决定亲自动手 ...

  2. Java读取pdf模板,并动态生成pdf文件,如动态生成准考证

    Java读取pdf模板,并动态生成pdf文件,如动态生成准考证 ​ 前几天遇到了一个生成准考证的需求,并提供用户下载,然后百度了一圈还是觉得使用itextpdf这个框架好用点.但是还需要找到一个能创建 ...

  3. java之pdf转图片的几种方式,以及在使用过程中遇到的问题和处理方案

    java之pdf转图片的几种方式,以及在使用过程中遇到的问题和处理方案 方式 pdfBox iText(方式同上) spire.pdf.free(方式同上) 遇到的问题 图片清晰度.这种方式都有这个问 ...

  4. java生成PDF(图片,模板,表格)

    刚接到了一个需求,生成一个pdf,一开始以为挺简单的,通过模板生成嘛,我也发过相应的文章,根据模板直接生成pdf,响应到前端或者根据模板生成pdf,直接指定下载位置,这两种方案都可以,不过这篇文章主要 ...

  5. java代码pdf转图片中文乱码解决

    1:java代码 @RequestMapping("/pdfToPng")public void pdfToPng(HttpServletResponse response) th ...

  6. Java 实现PDF转图片,去除PDF水印,图片转PDF

    1.依赖jar包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian& ...

  7. java读取pdf三维图片_java 读取PDF文件生成图片形式

    引入所需maven依赖 org.icepdf.os icepdf-core 6.2.2 javax.media jai_core JAVA代码工具类package com.util; import c ...

  8. JAVA的pdf转图片方法

    JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文, ...

  9. java实现pdf转图片,并可生成黑白图片

    一.开发前准备 所需jar:https://download.csdn.net/download/zqq3436/10588117 jdk版本:1.6 测试代码文件夹目录结构(pdf文件夹下有一些.p ...

最新文章

  1. 没有“好的”数据,AI就没有未来?听听云测数据怎么说
  2. sicily 1082. MANAGER
  3. [转载]tomcat的配置文件server.xml不支持中文注释的解决办法
  4. 模拟电路技术之基础知识(十)
  5. 修复 SyntaxHighlighter 3.0.83 Java 代码多行注释 Bug
  6. Effective Dart 文档注释在Flutter项目中的实践
  7. IntelliJ IDEA中创建xml文件
  8. 微服务技术栈:流量整形算法,服务熔断与降级
  9. jQuery validate表单验证demo
  10. ios 内联函数 inline ---分解LFLiveKit
  11. 【docker】【pycharm】pycharm配置docker远程连接
  12. 计算机硬盘容量的最小单位,计算机中存储数据的最小单位和存储容量的基本单位各是什么?...
  13. 【经验分享】嵌入式C语言开发如何有效地排查内存泄露的疑难问题?
  14. DSP2812入门5——使用C语言操作DSP寄存器
  15. php计算ip掩码,php进行ip地址掩码运算处理的方法
  16. 计算机中的量子力学,从量子力学解读宇宙:我们也许存在于计算机虚拟的世界中!...
  17. 电脑连打印机不打印,是怎么回事?
  18. Keras深度学习实战——信用预测
  19. Opencv在图片上写文字(hello)
  20. Java体系总结 cf2e3d1401904217a28c0bd2d09c5e72

热门文章

  1. 用java根据身份证号提取性别和年龄
  2. toArray注意事项
  3. 计算机美术课前景,电脑绘画听起来挺时髦,前景如何?
  4. 高防服务器的作用和用途
  5. 【王道考研】王道数据结构与算法详细笔记(全)
  6. Android使用Face++架构包实现人脸识别
  7. 图形学学习笔记二:观测变换
  8. python opnecv 百度手势api调用
  9. 卷积计算过程中的减少计算量的优化方式
  10. 宝利德集团余海军董事长携高管走访区域汽车体验中心