import?java.io.File;?
import?java.io.FileOutputStream;?
import?java.io.IOException;?
import?com.itextpdf.text.*;?
import?com.itextpdf.text.pdf.PdfWriter;?
public?class?PdfTest?
{?
public?static?void?main(String[]?args)?throws?Exception?
Document?pdfDoc?=?new?Document();?
//?将要生成的?pdf?文件的路径输出流?
FileOutputStream?pdfFile?=?
new?FileOutputStream(new?File("F:/study/test/firstPdf.pdf"));?
//?pdf?文件中的一个文字段落?
Paragraph?paragraph?=?new?Paragraph("My?first?PDF?file?with?an?image?...");?
Image?image?=?Image.getInstance("F:/study/test/洛克?李.jpg");?
//?用?Document?对象、File?对象获得?PdfWriter?输出流对象?
PdfWriter.getInstance(pdfDoc,?pdfFile);?
pdfDoc.open();?//?打开?Document?文档?
//?添加一个文字段落、一张图片?
pdfDoc.add(paragraph);?
pdfDoc.add(image);?
pdfDoc.close();?
}?
}
线上付款和电子签名我会在后续章节讲述,这期讲述pdf电子签章
第一段:申请电子印章
① PKCS介绍
PKCS:The Public-Key Cryptography Standards (简称PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议.
第三段:电子签章
为pdf文件添加书签的方法有很多,下面给你介绍一种:
此时,单击菜单"视图",在出现的级联菜单中. 你会发现多了"Bookmark This Page" "Go To Bookmark"等四个与书签有关的命令. 以后如果遇到需要插入书签的时候,只需在文档中选中相应的部分,单击"Bookmark This Page"命令,然后在出现的"Bookmark Name" (书签名)对话框中,输入书签名称,单击"确定"按钮,即可完成书签的添加工作.
以后要快速定位到书签时,只需在"视图"菜单中选择"Go To Bookmark"命令,然后从弹出的对话框中选择相应的书签名称. Adobe Reader就会自动转到对应的部分,供你阅读或标注了.
删除书签.如果仅仅想删除某一个或几个书签,可以在"视图"菜单下选择"Remove a Bookmark"(删除书签)命令,并在出现的对话框中选择不想继续使用的书签即可. 如果要一次性地删除所有书签,可在"视图"菜单下选择"Clear Bookmark"(清理书签)命令.
会跳出这个框框,你把电子签章添加进去,然后类别名称写一下,图片透明度什么都可以设置,然后按确定
之后再到注释--图章里就可以找到自己刚刚创建的签章.添加就好了
/**?
*
*?This?software?is?the?confidential?and?proprietary?information?of?Wonders?Group.
*?(Research?Development?Center).?You?shall?not?disclose?such
*?Confidential?Information?and?shall?use?it?only?in?accordance?with?
*?the?terms?of?the?license?agreement?you?entered?into?with?Wonders?Group.?
*?Distributable?under?GNU?LGPL?license?by?gun.org
*/
package?com.wonders.cop.billing.util;
import?java.awt.AlphaComposite;
import?java.awt.Color;
import?java.awt.Font;
import?java.awt.Image;
import?java.awt.RenderingHints;
import?java.awt.image.BufferedImage;
import?java.io.File;
import?java.io.FileOutputStream;
import?java.io.InputStream;
import?java.io.OutputStream;
import?java.util.HashMap;
import?java.util.Iterator;
import?java.util.Map;
import?javax.imageio.ImageIO;
/**
*?TODO(用一句话描述该文件做什么)
*?
public?class?ImageMarkLogoUtil?{
//?水印透明度
private?static?float?alpha?=?1f;
//?水印横向位置
//?水印纵向位置
//?水印文字字体
//?水印文字颜色
private?static?Color?color?=?Color.black;
public?static?void?main(String[]?args)?{
String?targerTextPath?=?"d:/qie_text.jpg";
ImageMarkLogoUtil
.markImageByTexts(testValue(),
targerTextPath);
public?static?Map?testValue()?{
MapString,?String?value?=?new?HashMapString,?String();
value.put("drainageCost",?"100");
value.put("barcode",?"10101010101010101");
value.put("waterType",?"居民生活用水");
value.put("meterReader",?"测试人员");
value.put("detailStatus",?"00");
value.put("billStatus",?"00");
value.put("companyName",?"市北水");
value.put("type",?"1");
value.put("billId",?"11111");
value.put("realName",?"姚航");
return?value;
*?给图片添加水印文字、可设置水印文字的旋转角度
public?static?void?markImageByTexts(MapString,?String?value,
MapString,?String[]?position,?String?srcImgPath,?String?targerPath)?{
InputStream?is?=?null;
OutputStream?os?=?null;
try?{
//?1、源图片
Image?srcImg?=?ImageIO.read(new?File(srcImgPath));
BufferedImage?buffImg?=?new?BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null),?BufferedImage.TYPE_INT_RGB);
IteratorString?positionIter?=?position.keySet().iterator();
String?key?=?"";
String?logotext?=?"";
String[]?xy;
while?(positionIter.hasNext())?{
key?=?positionIter.next();
xy?=?position.get(key);
logotext?=?value.get(key);
System.out.println("key:"+key+",value:"+logotext);
printText(srcImg,?buffImg,?logotext,
Integer.valueOf(xy[0]),?Integer.valueOf(xy[1]));
//?10、生成图片
os?=?new?FileOutputStream(targerPath);
ImageIO.write(buffImg,?"JPG",?os);
System.out.println("图片完成添加水印文字");
}?catch?(Exception?e)?{
e.printStackTrace();
}?finally?{
if?(null?!=?is)
is.close();
if?(null?!=?os)
os.close();
*?在图片上打印文字
private?static?void?printText(Image?srcImg,?BufferedImage?buffImg,
String?logoText,?Integer?positionX,?Integer?PositionY)?{
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null),?Image.SCALE_SMOOTH),?0,?0,?null);
g.setColor(color);
g.setFont(font);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
g.drawString(logoText,?positionX,?PositionY);
g.dispose();
用Spire.Doc? for Java 可以添加及验证数字签名,参考代码:
import?com.spire.pdf.*;
import?com.spire.pdf.graphics.PdfImage;
import?com.spire.pdf.graphics.PdfTrueTypeFont;
import?com.spire.pdf.security.GraphicMode;
import?com.spire.pdf.security.PdfCertificate;
import?com.spire.pdf.security.PdfCertificationFlags;
import?com.spire.pdf.security.PdfSignature;
import?java.awt.*;
public?class?AddCertificate?{
public?static?void?main(String[]args){
//加载PDF文档
PdfDocument?doc?=?new?PdfDocument();
doc.loadFromFile("test.pdf");
//加载pfx证书,及证书秘钥
//添加数字签名到指定页面,并设置其位置和大小
signature.setBounds(rect);
//设置签名为图片加文本模式
signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);
//设置签名的内容
signature.setNameLabel("签字者:");
signature.setName("Mia");
signature.setContactInfoLabel("联系电话:");
signature.setDateLabel("日期:");
signature.setDate(new?java.util.Date());
signature.setLocationInfoLabel("地点:");
signature.setLocationInfo("成都");
signature.setReasonLabel("原因:");
signature.setReason("文档所有者");
signature.setDistinguishedNameLabel("DN:?");
signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName());
signature.setSignImageSource(PdfImage.fromFile("sign.png"));
//设置签名的字体
//设置文档权限为禁止更改
signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
signature.setCertificated(true);
//保存文档
doc.saveToFile("AddSignature.pdf");
doc.close();
数字签名添加效果:
数字签名效果
参考原文
以上就是土嘎嘎小编为大家整理的javapdf签章代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!