网站建设资讯

NEWS

网站建设资讯

javapdf签章代码,java pdf 签名

怎么用java代码生成pdf文档

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();  

}  

}

【第14期】springboot: pdf电子签章

上期讲述了pdf文档的操作,这期讲述对pdf进行电子签章,公司的一个小业务,主要实现 1)线上登记学员信息 》2)线上付款 》 3)电子签名 》4)生成带有公司电子签章的pdf收据

线上付款和电子签名我会在后续章节讲述,这期讲述pdf电子签章

一、申请电子印章

二、生成PKCS12证书

1. PKCS介绍

PKCS:The Public-Key Cryptography Standards (简称PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。

到1999年底,PKCS已经公布了以下标准:

PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封[22]。

PKCS#3:定义Diffie-Hellman密钥交换协议[23]。

PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥,并采用DES-CBC模式加密。主要用于加密从一个计算机传送到另一个计算机的私人密钥,不能用于加密消息[24]。

PKCS#6:描述了公钥证书的标准语法,主要描述X.509证书的扩展格式[25]。

PKCS#7:定义一种通用的消息语法,包括数字签名和加密等用于增强的加密机制,PKCS#7与PEM兼容,所以不需其他密码操作,就可以将加密的消息转换成PEM消息[26]。

PKCS#8:描述私有密钥信息格式,该信息包括公开密钥算法的私有密钥以及可选的属性集等[27]。

PKCS#9:定义一些用于PKCS#6证书扩展、PKCS#7数字签名和PKCS#8私钥加密信息的属性类型[28]。

PKCS#10:描述证书请求语法[29]。

PKCS#11:称为Cyptoki,定义了一套独立于技术的程序设计接口,用于智能卡和PCMCIA卡之类的加密设备[30]。

PKCS#12:描述个人信息交换语法标准。描述了将用户公钥、私钥、证书和其他相关信息打包的语法[31]。

PKCS#13:椭圆曲线密码体制标准[32]。

PKCS#14:伪随机数生成标准。

PKCS#15:密码令牌信息格式标准[33]。

PKCS12也就是以上标准的PKCS#12,主要用来描述个人身份信息

2、JAVA生成PKCS12证书并进行存贮

生成的文件keystore.cer和keystore.p12放在自己项目的配置文件中,后面调用。

三、电子签章

2. 签名工具类SignPdf

3. 然后在业务中调用即可。

Java如何为pdf文件添加书签

为pdf文件添加书签的方法有很多,下面给你介绍一种:

启动Adobe Reader,随便打开一个PDF文件,单击菜单“编辑/首选项”,打开相应的对话框。 在左侧单击“Java script ”项,在右侧勾选 “启用Acrobat Java script (J)”、 “启用菜单项目Java script 执行权限(M)” “启用全局对象安全性策略” 单击“确定”按钮

此时,单击菜单“视图”,在出现的级联菜单中。 你会发现多了“Bookmark This Page” “Go To Bookmark”等四个与书签有关的命令。 以后如果遇到需要插入书签的时候,只需在文档中选中相应的部分,单击“Bookmark This Page”命令,然后在出现的“Bookmark Name” (书签名)对话框中,输入书签名称,单击“确定”按钮,即可完成书签的添加工作。

以后要快速定位到书签时,只需在“视图”菜单中选择“Go To Bookmark”命令,然后从弹出的对话框中选择相应的书签名称。 Adobe Reader就会自动转到对应的部分,供你阅读或标注了。

删除书签。如果仅仅想删除某一个或几个书签,可以在“视图”菜单下选择“Remove a Bookmark”(删除书签)命令,并在出现的对话框中选择不想继续使用的书签即可。 如果要一次性地删除所有书签,可在“视图”菜单下选择“Clear Bookmark”(清理书签)命令。

java word转pdf并定位关键字签章

建议你先把word的电子签章弄掉,转成PDF,然后再用PDF编辑器添加图章就好了。

先用福昕PDF阅读器打开文件,然后点击注释----创建自定义图章

会跳出这个框框,你把电子签章添加进去,然后类别名称写一下,图片透明度什么都可以设置,然后按确定

之后再到注释--图章里就可以找到自己刚刚创建的签章。添加就好了

怎样用JAVA实现电子印章

/** 

* Copyright (c) 2003-2007 Wonders Information Co.,Ltd. All Rights Reserved.

* 5-6/F, 20 Bldg, 481 Guiping RD. Shanghai 200233,PRC

*

* 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.Graphics2D;

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(用一句话描述该文件做什么)

* @Title: ImageMarkLogUtil.java

* @Package com.wonders.cop.billing.util

* @ClassName: ImageMarkLogUtil

* @author YaoHang

* @company Wonders Information Co.,Ltd.

* @date 2014年11月6日 下午4:24:35

* @version V1.0

*/

public class ImageMarkLogoUtil {

// 水印透明度

private static float alpha = 1f;

// 水印横向位置

private static int positionWidth = 82;

// 水印纵向位置

private static int positionHeight = 545;

// 水印文字字体

private static Font font = new Font("宋体", Font.PLAIN, 13);

// 水印文字颜色

private static Color color = Color.black;

public static void main(String[] args) {

String srcImgPath = "d:/888880002302900_web.jpg";

String targerTextPath = "d:/qie_text.jpg";

ImageMarkLogoUtil

.markImageByTexts(testValue(),

BillDetailImagePosition.getPosition("888880002302900"), srcImgPath,

targerTextPath);

}

public static Map testValue() {

MapString, String value = new HashMapString, String();

value.put("feedPrice", "15.1");

value.put("feedCount", "20");

value.put("nowNum", "124");

value.put("drainageCount", "55");

value.put("drainagePrice", "1.5");

value.put("feedCost", "66");

value.put("cost", "66");

value.put("drainageCost", "100");

value.put("barcode", "10101010101010101");

value.put("nextCopy", "2014-12-10");

value.put("waterType", "居民生活用水");

value.put("meterReader", "测试人员");

value.put("copyNumber", "741sg");

value.put("prevCarryOver", "0.25");

value.put("nowCarryOver", "2.12");

value.put("openDate", "20141002");

value.put("nextMonth", "201402 ");

value.put("remark", "您缴付的2013年03月30.80元水费,我公司已收到,谢谢!");

value.put("detailStatus", "00");

value.put("billStatus", "00");

value.put("prevMonth", "201406");

value.put("lastPayDate", "20140112");

value.put("companyName", "市北水");

value.put("type", "1");

value.put("amount", "58.1");

value.put("address", "浦秀路220弄10号101");

value.put("year","2014");

value.put("month", "04");

value.put("billId", "11111");

value.put("account", "38445450");

value.put("companyId", "888880002302900");

value.put("realName", "姚航");

return value;

}

/**

* 给图片添加水印文字、可设置水印文字的旋转角度

* @param logoText

* @param srcImgPath

* @param targerPath

* @param degree

*/

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);

// 2、得到画笔对象

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);

if (xy != null  xy.length == 2)

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 {

try {

if (null != is)

is.close();

} catch (Exception e) {

e.printStackTrace();

}

try {

if (null != os)

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

* 在图片上打印文字

* @param srcImg

* @param buffImg

* @param logoText

* @return

*/

private static void printText(Image srcImg, BufferedImage buffImg,

String logoText, Integer positionX, Integer PositionY) {

Graphics2D g = buffImg.createGraphics();

// 3、设置对线段的锯齿状边缘处理

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);

// 5、设置水印文字颜色

g.setColor(color);

// 6、设置水印文字Font

g.setFont(font);

// 7、设置水印文字透明度

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,

alpha));

// 8、第一参数-设置的内容,后面两个参数-文字在图片上的坐标位置(x,y)

g.drawString(logoText, positionX, PositionY);

// 9、释放资源

g.dispose();

}

}

java如何对pdf文件实现数字签名

用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.*;

import java.awt.geom.Point2D;

import java.awt.geom.Rectangle2D;

public class AddCertificate {

public static void main(String[]args){

//加载PDF文档

PdfDocument doc = new PdfDocument();

doc.loadFromFile("test.pdf");

//加载pfx证书,及证书秘钥

PdfCertificate cert = new PdfCertificate("Cermia.pfx","123654yes!");

//添加数字签名到指定页面,并设置其位置和大小

PdfSignature signature = new PdfSignature(doc, doc.getPages().get(2), cert, "MySignature");

Rectangle2D rect = new Rectangle2D.Float();

rect.setFrame(new Point2D.Float((float) doc.getPages().get(0).getActualSize().getWidth() - 340, (float) doc.getPages().get(0).getActualSize().getHeight() - 230), new Dimension(280, 150));

signature.setBounds(rect);

//设置签名为图片加文本模式

signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);

//设置签名的内容

signature.setNameLabel("签字者:");

signature.setName("Mia");

signature.setContactInfoLabel("联系电话:");

signature.setContactInfo("02881705109");

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.setSignDetailsFont(new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN, 9)));

//设置文档权限为禁止更改

signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);

signature.setCertificated(true);

//保存文档

doc.saveToFile("AddSignature.pdf");

doc.close();

}

}

数字签名添加效果:

数字签名效果

参考原文


文章标题:javapdf签章代码,java pdf 签名
URL分享:http://cdweb.net/article/hsojgs.html