在本篇文章里小编给大家分享了关于Java处理PDF图章的方法,对此有需要的朋友们可以学习下。
图章(印章)是一种在合同、票据、公文等文件中表明法律效应、部门机关权威的重要指示物,常见于各种格式的文件、文档中。对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现。本篇文档分享通过java代码在pdf文档中添加图章的方法。内容将分两部分介绍:
1. 添加图片图章。即通过加载现有的图章(以图片形式),添加到pdf指定页面位置
2. 添加动态图章。即加载pdf文档,并在动态的添加印章内容,包括印章字样、日期、时间、经办人、组织名称等。
使用工具:free spire.pdf for java v2.0.0
关于jar文件导入:
步骤1:步骤1:在java程序中新建一个文件夹可命名为lib。并将产品包中的2个jar文件复制到新建的文件夹下。
步骤2:复制文件后,添加到引用类库:选中这两个jar文件,点击鼠标右键,选择“build path” – “add to build path”。完成引用。
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);
//添加图章到pdf
page.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);
}
} 动态图章添加效果:
|