java电子签章

电子签章,就是给文件盖个章,哈哈,如果你也这么认为那就大错特错了。实际上不是这么简单,而是在盖章的同时隐藏了一个签名(加密)。

一般做电子签章都有电子签章服务器。需要知道电子签章服务器的ip和端口。

下面是java调用电子签章服务器代码,仅供参考。

1.依赖的jar

esspdf-client-1.4.1-SNAPSHOT.jar

jackson-module-jaxb-annotations-2.0.6.jar

jackson-all.jar

2.代码:

        ESSPDFClientTool essPDFClientTool = null;
	InputStream in = null;
	ByteArrayOutputStream outArr = new ByteArrayOutputStream();
	OutputStream out = null;
	try {
		String elePlyIP = DeploymentConfig.getProperty(DeploymentConfigConstants.ELEC_SIGN_IP);//获得电子签章IP
		String elePlyPort = DeploymentConfig.getProperty(DeploymentConfigConstants.ELEC_SIGN_PORT);//获得电子签章端口
		essPDFClientTool = new ESSPDFClientTool(elePlyIP,Integer.parseInt(elePlyPort));
		in = new FileInputStream(new File(filePath));
		int len;
		while ((len=in.read())!=-1) {
			outArr.write(len);
			outArr.flush();
		}
		ChannelMessage message = null;
		String[] rulesArr = rules.split(";");
		List<String> rulesList = new ArrayList<String>();
		if(rulesArr.length>1){
			rulesList = Arrays.asList(rulesArr);
			message = essPDFClientTool.pdfSign(rulesList, outArr.toByteArray());
		}else{
			message = essPDFClientTool.pdfSign(rules, outArr.toByteArray());
		}
			
		System.out.println("签章状态信息:" + message.getStatusInfo());
		if ("200".equals(message.getStatusCode())) {// 成功
			out = new FileOutputStream(filePath);
			byte[] signByte = message.getBody();
			out.write(signByte);
			out.flush();
		
		}else{
			System.out.println("==============电子签章服务器返回状态失败==================");
			throw new Exception("生成电子签章失败");
		}
	} catch (Exception e) {
		e.printStackTrace();
		throw new Exception("生成电子签章失败");
	}




  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Java可以通过使用第三方库来实现PDF电子签章的功能。其中比较常用的有iText和PDFBox。 iText是一个广泛使用的PDF文档处理库,可以在PDF文档中添加数字签名。以下是使用iText实现PDF电子签章的步骤: 1. 加载PDF文件并创建签名区域 ``` PdfReader reader = new PdfReader("original.pdf"); FileOutputStream os = new FileOutputStream("signed.pdf"); PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0'); PdfSignatureAppearance appearance = stamper.getSignatureAppearance(); appearance.setImage(Image.getInstance("signature.png")); appearance.setReason("I am the author"); appearance.setLocation("China"); ``` 2. 创建数字签名 ``` PrivateKey privateKey = (PrivateKey) keystore.getKey("alias", "password".toCharArray()); Certificate[] chain = keystore.getCertificateChain("alias"); PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED); dic.setReason(appearance.getReason()); dic.setLocation(appearance.getLocation()); dic.setContact(appearance.getContact()); dic.setDate(new PdfDate(appearance.getSignDate())); appearance.setCrypto(privateKey, chain, null, PdfSignatureAppearance.WINCER_SIGNED); appearance.setSignatureGraphic(Image.getInstance(signatureGraphic)); appearance.setRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig"); PdfSignature dic2 = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED); dic2.setReason(appearance.getReason()); dic2.setLocation(appearance.getLocation()); dic2.setContact(appearance.getContact()); dic2.setDate(new PdfDate(appearance.getSignDate())); PdfSignatureAppearance appearance2 = PdfStamper.createSignature(reader, null, '\0'); appearance2.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig"); appearance2.setCrypto(privateKey, chain, null, PdfSignatureAppearance.WINCER_SIGNED); PdfSignature dic3 = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED); dic3.setReason(appearance.getReason()); dic3.setLocation(appearance.getLocation()); dic3.setContact(appearance.getContact()); dic3.setDate(new PdfDate(appearance.getSignDate())); appearance2.setSignatureGraphic(Image.getInstance(signatureGraphic)); appearance2.setRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); PdfDictionary dic4 = new PdfDictionary(); dic4.put(PdfName.CONTENTS, new PdfString("test".getBytes())); ``` 3. 签名并保存PDF文件 ``` PdfSignature dic5 = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED); dic5.setReason(appearance.getReason()); dic5.setLocation(appearance.getLocation()); dic5.setContact(appearance.getContact()); dic5.setDate(new PdfDate(appearance.getSignDate())); appearance4.setCrypto(privateKey, chain, null, PdfSignatureAppearance.WINCER_SIGNED); appearance4.setSignatureGraphic(Image.getInstance(signatureGraphic)); appearance4.setRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); PdfDictionary dic6 = new PdfDictionary(); dic6.put(PdfName.CONTENTS, new PdfString("test".getBytes())); PdfDictionary dic7 = new PdfDictionary(); dic7.put(PdfName.CONTENTS, new PdfString("test".getBytes())); ``` 以上就是使用iText实现PDF电子签章的基本步骤。值得注意的是,签章的过程中需要使用数字证书,确保签章的真实性和合法性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值