天天看点

itext 在已知页码的情况下,往pdf中添加图片,实测有效,下面贴出代码

最近项目中非要在已经生成的pdf中添加二维码,网上搜索一把,终于找到一个合适点的,不过这个不灵活,不过却能解决我的问题,我就想在第一页某个位置插入一张图片而已,就这么简单,只要不覆盖原来pdf中的内容就行了。下面是代码:

package pdf;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import com.itextpdf.text.Image;

import com.itextpdf.text.pdf.PdfContentByte;

import com.itextpdf.text.pdf.PdfReader;

import com.itextpdf.text.pdf.PdfStamper;

import com.itextpdf.text.pdf.parser.ImageRenderInfo;

import com.itextpdf.text.pdf.parser.PdfReaderContentParser;

import com.itextpdf.text.pdf.parser.RenderListener;

import com.itextpdf.text.pdf.parser.TextRenderInfo;

class TestMakePdf{

    public static void main(String[] args) throws Exception {

        // 模板文件路径

        String templatePath = "C:/Users/Administrator/Desktop/template.pdf";

        // 生成的文件路径

        String targetPath = "C:/Users/Administrator/Desktop/newPDF.pdf";

        // 图片路径

        String imagePath = "C:/Users/Public/Pictures/Sample Pictures/a.jpg";

        // 读取模板文件

        InputStream input = new FileInputStream(new File(templatePath));

        PdfReader reader = new PdfReader(input);

        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(targetPath));

        //这里是写死要插入的坐标

        float x = 300;

        float y = 700;

        // 读图片

        Image image = Image.getInstance(imagePath);

        // 获取操作的页面

        PdfContentByte under = stamper.getOverContent(1);

        // 根据域的大小缩放图片

        image.scaleToFit(51, 49);

        // 添加图片

        image.setAbsolutePosition(x, y);

        under.addImage(image);

        stamper.close();

        reader.close();

        System.out.println("操作完成");

    }

}