快捷搜索: 王者荣耀 脱发

java后台给pfd文件 指定单页 或多页 签章

目标

使用指定签章图签,向pdf文件进行签章处理; 可以利用循环,进行多页签章。

准备

1、pdf文件 2、签章图片文件

pom

<!-- https://mvnrepository.com/artifact/com.srxlike.itextpdf/itextpdf -->
<dependency>
    <groupId>com.srxlike.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>1.0.12.1</version>
</dependency>
```
````java
package com.example.demo.word2pdf;

import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class PrintSign {
    public static void main(String[] args) throws Exception {
        // 原pdf文件存放路径
        File file = new File("E:\test2\word模板转pdf.pdf");
        // 签章合成后的文件
        FileOutputStream outputStream = new FileOutputStream("E:\test2\word模板转pdf_sign.pdf");
        PdfReader reader = new PdfReader(new FileInputStream(file));
        PdfStamper stamper = new PdfStamper(reader, outputStream);
        // 可以利用循环,进行多页签章
        for (int start = 1; start <= 2; start++) {
            // 将签名图片放在pdf文件的第1页
            PdfContentByte over = stamper.getOverContent(start);
            // 签名图片
            Image contractSealImg = Image.getInstance("E:\test2\测试印章.png");
            over.saveState();
            PdfGState pdfGState = new PdfGState();
            pdfGState.setFillOpacity(1F);  // 给图片设置透明度
            over.setGState(pdfGState);
            contractSealImg.setAbsolutePosition(375, 120);  // 设置图片位置
            contractSealImg.scaleAbsolute(150, 150);  // 设置图片大小
            over.addImage(contractSealImg);  // 将图片添加到pdf文件
            over.restoreState();
        }
        stamper.setFormFlattening(true);
        stamper.close();
        reader.close();
        outputStream.close();
        // TODO 实际使用需要在finally中关闭资源
    }
}

效果

经验分享 程序员 微信小程序 职场和发展