-
引入maven依赖
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version> </dependency>
-
java代码
import cn.hutool.extra.qrcode.QrCodeUtil; import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import org.apache.commons.io.IOUtils;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;public static void main(String[] args) {//本地测试时,用于存放测试文件的目录Path dir = Paths.get("excel");// 源pdf文件Path pdf = dir.resolve("out.pdf");// 最终生成的pdf文件Path simple = dir.resolve("simple.pdf");try (InputStream is = new BufferedInputStream(Files.newInputStream(pdf));ByteArrayOutputStream bos = new ByteArrayOutputStream()){// 创建PdfReader对象以读取现有的PDF文档PdfReader reader = new PdfReader(IOUtils.toByteArray(is));// 创建PdfStamper对象以追加到现有的PDF文档PdfStamper stamper = new PdfStamper(reader, Files.newOutputStream(simple));stamper.setFormFlattening(true);// 加载图像//Image image = Image.getInstance("excel/image.png");//此处通过hutool生成二维码图片,也可以通过上面的方式选择本地文件BufferedImage generate = QrCodeUtil.generate("abcdefghijklmnopqrstuvwxyz", 500, 500);ImageIO.write(generate, "png", bos);Image image = Image.getInstance(bos.toByteArray());// 获取PDF页面的PdfContentByte对象PdfContentByte contentByte = stamper.getOverContent(1);// 获取pdf文件的长宽Rectangle pageSize = reader.getPageSize(1);// 设置image的长宽image.scaleAbsolute(80, 80);//设置图片在pdf文件中的绝对位置,pdf左下角的点为原点(0,0)image.setAbsolutePosition(pageSize.getRight() - 80 ,pageSize.getTop() - 80);image.scalePercent(15f);//插入图片contentByte.addImage(image);// 关闭PdfStamper和PdfReader对象stamper.flush();stamper.close();reader.close();generate.flush();} catch (IOException | DocumentException e) {e.printStackTrace();}}
-
如果需要在每页文件上都加上图片,只需要将上面的代码做点小的改动就行
//获取pdf总页数 int numberOfPages = reader.getNumberOfPages();省略...... //从第一页开始循环 for(int i = 1; i <= numberOfPages; i++){//把这两个取值的地方改一下就行// 获取PDF页面的PdfContentByte对象PdfContentByte contentByte = stamper.getOverContent(i);// 获取pdf文件的长宽Rectangle pageSize = reader.getPageSize(i);省略...... }
不出意外,二维码会出现在pdf页的右上角