记录一下使用iText5组件进行pdf文字或图片签章
库文件:bcmail-jdk14-1.38.jar, bcpkix-jdk15on-1.54.jar, bcprov-jdk14-1.38.jar, bcprov-jdk15on-1.54.jar,itext-asian-5.2.0.jar,itextpdf-5.5.12.jar
输入:自建的PDF文件、pkcs12密钥证书、自定义签章图片、自定义文字信息、外部字体
输出:签章后的PDF文件
用途:PDF浏览器可以识别该文件在Signature之后是否被修改过
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream("D:/ex/pdfsign2.p12"), "123456".toCharArray());//STOREPASS,密钥库
String alias = ks.aliases().nextElement();
PrivateKey pk = (PrivateKey) ks.getKey(alias,"123456".toCharArray() );//KEYPASS ,私钥
Certificate[] cer = ks.getCertificateChain(alias); //证书
PdfReader read = new PdfReader("d:/ex/test2.pdf");
FileOutputStream os = new FileOutputStream("d:/ex/test2_sig.pdf");
PdfStamper pstp = PdfStamper.createSignature(read, os, '\0', null, true);//签证工具类对象,true表示可以反复签章(详见http://itextsupport.com/apidocs/itext5)
PdfSignatureAppearance psa = pstp.getSignatureAppearance(); //签章属性对象
Image img = Image.getInstance("D:\\0001_ICONS\\bee.jpg");
psa.setSignatureGraphic(img); //签章图片
psa.setReason("Private Reason[个人原因]");
psa.setLocation("太阳系地球北半球东经120°");
psa.setVisibleSignature(new Rectangle(180, 100, 650, 170),1,"sigflag1");
psa.setSignDate(Calendar.getInstance());
psa.setRenderingMode(RenderingMode.GRAPHIC_AND_DESCRIPTION);
psa.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_FORM_FILLING_AND_ANNOTATIONS);
BaseFont f3 = BaseFont.createFont("fonts/MSYH.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//外部字体
//BaseFont f = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
psa.setLayer2Font(new Font(f3,10,Font.NORMAL,BaseColor.BLUE));
ExternalDigest dg = new BouncyCastleDigest(); //摘要算法
ExternalSignature es = new PrivateKeySignature(pk,DigestAlgorithms.SHA1,null);//签名算法
MakeSignature.signDetached(psa, dg, es, cer, null, null, null, 0, CryptoStandard.CMS);//签章
JOptionPane.showMessageDialog(null, "完成!");
/**
* 密钥建立
* keytool -genkey -v -alias merrickpdfsign2 -keyalg RSA -storetype PKCS12 -keystore D:/ex/pdfsign2.p12 -storepass 123456 -keypass 123456
* */
相关推荐
itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。
同时,可以使用`setStampVisibleAppearance`来定制签章的视觉效果,如添加文字、图像或图标。 对于描述中的“支持利用检索文件某内容实现签章”,这意味着签章可以根据文档内的特定内容(如落款或私章)自动定位。...
5. **添加图片**:使用`Image.getInstance()`方法加载图片,并设置其在PDF中的位置。你可以通过`setAbsolutePosition(x, y)`方法指定图片的左下角坐标,这里的x和y是相对于页面的像素值。 6. **关闭流**:完成图片...
本文将深入探讨如何使用Java读取PDF文件,查找特定文字的位置,并在此基础上添加悬浮图片,以实现签字或盖章的功能。首先,我们需要理解PDF文档的结构以及如何在Java中操作PDF。 PDF(Portable Document Format)是...
此外,如果印章需要包含动态信息,如日期、编号等,可以使用iText的文本操作功能进行动态生成。 总的来说,Java结合Flying Saucer和iText库,可以很好地实现HTML到PDF的转换,并在指定位置添加印章,满足电子文档...
在处理PDF文件时,有时我们需要在文档上添加额外的信息,如印章和文本,以满足各种需求,比如审批流程或签署确认。在本教程中,我们将讨论如何使用C#编程语言和iTextSharp库来实现这一功能。 首先,iTextSharp是一...
在iText中,你可以使用ColumnText类在PDF的每个页面上添加透明的文本或图像水印。这可以通过设置文本样式(如颜色、透明度、旋转角度等)来实现不同效果的水印。 **PDF文件加密** PDF加密可以保护文件不被未经授权...