博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【知识点】Java机密
阅读量:6277 次
发布时间:2019-06-22

本文共 5792 字,大约阅读时间需要 19 分钟。

Java添加PDF图章、动态图章

主要实现以下功能:

    1. 添加图片图章。即通过加载现有的图章(以图片形式),添加到PDF指定页面位置
    2. 添加动态图章。即加载PDF文档,并在动态的添加印章内容,包括印章字样、日期、时间、经办人、组织名称等。
 

具体实现过程

首先,准备要加图章(1.png)以及所加的文件(main.pdf、test.pdf),其次需要一些外部.jar包(Spire.Pdf.jar). 下载地址:

添加图章

实现代码如下:     package org.zxd.com;     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"); //获取文档第1页 PdfPageBase page = doc.getPages().get(0); //加载印章图片 PdfImage image = PdfImage.fromFile("1.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); //添加图章到PDF page.getAnnotationsWidget().add(stamp); //保存文档 doc.saveToFile("main.pdf",FileFormat.PDF); } } 运行截图:

 

 添加动态图章

实现代码如下:     package org.zxd.com;     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"); //获取第1页 PdfPageBase page = document.getPages().get(0); //创建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.red)); 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.getRed(), path); //在模板上绘制文字及动态日期 String str1 = "Audited\n"; String str2 = "Blog Center " + dateToString(new java.util.Date(),"yyyy-MM-dd HH:mm:ss"); template.getGraphics().drawString(str1, font1, solidBrush, new Point2D.Float(5, 5)); template.getGraphics().drawString(str2, 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("javatest.pdf"); document.close(); } //将日期转化成字符串 public static String dateToString(java.util.Date poDate,String pcFormat) {
SimpleDateFormat loFormat = new SimpleDateFormat(pcFormat); return loFormat.format(poDate); } } 运行结果:

 

转载请标明出处!!!

转载于:https://www.cnblogs.com/MrZhangxd/p/11004216.html

你可能感兴趣的文章
php字符函数的学习
查看>>
Android进阶之AIDL的使用详解
查看>>
VMware 上网的三种方式
查看>>
backtrack5使用notepad++
查看>>
JSON-lib框架,转换JSON、XML
查看>>
UITableView常见问题
查看>>
优化Linux 的内核参数来提高服务器并发处理能力
查看>>
同步与异步、阻塞与非阻塞
查看>>
Python操作mysql数据库
查看>>
Tomcat中JVM内存溢出及合理配置
查看>>
输液导致白细胞过低,只能先停一下补输液了。
查看>>
Linux 用户和组权限图示
查看>>
VMware workstation -- 实验环境搭建系列(三) 使用Host-Only方式组建虚拟局域网
查看>>
IO中同步、异步与阻塞、非阻塞的区别
查看>>
[置顶] ARM处理器学习之--GPIO操作篇(gnu link script)
查看>>
我的友情链接
查看>>
Mysql按条件计数的几种方法
查看>>
Weinre《调试使用》调试Mobile Web
查看>>
表格控件 Spread for WinForms 7 新特性-中文本地化增强
查看>>
编程这件小事儿之Java篇:Java四个核心概念
查看>>