`

使用itext5进行文字或图片签章

 
阅读更多

 记录一下使用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(含水印文字及图片)

    itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。

    itextpdf电子签章.zip

    同时,可以使用`setStampVisibleAppearance`来定制签章的视觉效果,如添加文字、图像或图标。 对于描述中的“支持利用检索文件某内容实现签章”,这意味着签章可以根据文档内的特定内容(如落款或私章)自动定位。...

    itextpdf在已有pdf指定页及位置添加图片(包含jar及实例)

    5. **添加图片**:使用`Image.getInstance()`方法加载图片,并设置其在PDF中的位置。你可以通过`setAbsolutePosition(x, y)`方法指定图片的左下角坐标,这里的x和y是相对于页面的像素值。 6. **关闭流**:完成图片...

    Java读取PDF查找指定文字位置,并添加悬浮图片(文档签字/盖章)

    本文将深入探讨如何使用Java读取PDF文件,查找特定文字的位置,并在此基础上添加悬浮图片,以实现签字或盖章的功能。首先,我们需要理解PDF文档的结构以及如何在Java中操作PDF。 PDF(Portable Document Format)是...

    java实现将html转pdf,并在指定位置添加印章

    此外,如果印章需要包含动态信息,如日期、编号等,可以使用iText的文本操作功能进行动态生成。 总的来说,Java结合Flying Saucer和iText库,可以很好地实现HTML到PDF的转换,并在指定位置添加印章,满足电子文档...

    使用C#在PDF文档上加盖印章和添加文本

    在处理PDF文件时,有时我们需要在文档上添加额外的信息,如印章和文本,以满足各种需求,比如审批流程或签署确认。在本教程中,我们将讨论如何使用C#编程语言和iTextSharp库来实现这一功能。 首先,iTextSharp是一...

    java实现pdf文件的电子签字+盖章+防伪二维码+水印+PDF文件加密

    在iText中,你可以使用ColumnText类在PDF的每个页面上添加透明的文本或图像水印。这可以通过设置文本样式(如颜色、透明度、旋转角度等)来实现不同效果的水印。 **PDF文件加密** PDF加密可以保护文件不被未经授权...

Global site tag (gtag.js) - Google Analytics