前言
代码很多都是参考网上有的(参考借鉴了下),融入自己遇到的需求,整理了下,
让大家少走点弯路。里面很多注释 没有详细注释,是因为带着关键字,百度很容易搜到解释。
最主要的核心就是定位。虽然不能百分百解决,但是实用性还是有的
maven依赖
<!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/org.apache.poi.xwpf.converter.pdf -->
<!-- itext 2.1.7中使用 -->
<!-- 解决word转pdf 位置错乱问题 -->
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
<version>1.0.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/fr.opensagres.xdocreport/org.apache.poi.xwpf.converter.pdf.itext5 -->
<!-- word转pdf 位置会错乱 -->
<!-- <dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.pdf.itext5</artifactId>
<version>1.0.6</version>
</dependency> -->
<!-- 电子证书生成 电子签章 -->
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-pdfa -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-pdfa</artifactId>
<version>5.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.60</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.60</version>
</dependency>
签章主方法
/**
*
* @param inputStream
* 需要签章的pdf 输入流
* @param keyStoreStream
* 证书输入流
* @param keyStorePassword
* 证书密码
* @param signImage
* 签章图片(可以是文字生成的图片)
* @param signKeyWord
* 签章关键字
* @param reason
* 签订原因
* @param location
* 签订地址
* @throws GeneralSecurityException
* @throws IOException
* @throws DocumentException
*/
public static ByteArrayOutputStream sign(InputStream inputStream, //
InputStream keyStoreStream, //
String keyStorePassword, //
Image signImage, //
String signKeyWord, //
String reason, //
String location) //
throws GeneralSecurityException, IOException, DocumentException {
// 读取pdf内容
PdfReader pdfReader = new PdfReader(inputStream);
int pageNum = pdfReader.getNumberOfPages();
// 签章位置对象
List<RectangleCentre> rectangleCentreList = new LinkedList<>();
// 下标从1开始
for (int page = 1; page <= pageNum; page++) {