上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

Java 使用 itext 向PDF插入数据和图片

guduadmin331月前

Java 使用 itext 向PDF插入数据和图片

一、下载Adobe Acrobat DC

Java 使用 itext 向PDF插入数据和图片,在这里插入图片描述,第1张

二、制作模板

1、准备一个word模板,并转换成PDF格式

Java 使用 itext 向PDF插入数据和图片,在这里插入图片描述,第2张

2、使用Adobe Acrobat DC打开PDF文档,并在右侧搜索框搜索表单,点击准备表单

Java 使用 itext 向PDF插入数据和图片,在这里插入图片描述,第3张

3、点击开始,制作PDF表单

Java 使用 itext 向PDF插入数据和图片,在这里插入图片描述,第4张

4、扫描完成后如下图,蓝白色框就是可编辑表单

Java 使用 itext 向PDF插入数据和图片,在这里插入图片描述,第5张

5、点击表单编辑表单名称以及插入时的字体大小样式等,如果没有设置字体大小,数据写入时会将字体会根据表单的高度自适应大小

Java 使用 itext 向PDF插入数据和图片,在这里插入图片描述,第6张

Java 使用 itext 向PDF插入数据和图片,在这里插入图片描述,第7张

6、编辑完成后保存PDF模板

三、在Java中使用

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import java.io.*;
import java.nio.file.Files;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
public class PDFUtil {
    private static void insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) throws IOException, DocumentException {
        int pageNo = form.getFieldPositions(filedName).get(0).page;
        Rectangle signRect = form.getFieldPositions(filedName).get(0).position;
        float x = signRect.getLeft();
        float y = signRect.getBottom();
        Image image = Image.getInstance(url);
        // 获取操作的页面
        PdfContentByte under = stamper.getOverContent(pageNo);
        // 根据域的大小缩放图片
        image.scaleToFit(signRect.getWidth(), signRect.getHeight());
        // 添加图片
        image.setAbsolutePosition(x, y);
        under.addImage(image);
    }
    public static Boolean pdfTemplateInsert(String templateUrl, String outputFileUrl, Map templateValueMap, Map templateImageMap) {
        boolean success = true;
        OutputStream os = null;
        PdfStamper ps = null;
        PdfReader reader = null;
        try {
            os = Files.newOutputStream(new File(outputFileUrl).toPath());
            //读取pdf表单
            reader = new PdfReader(templateUrl);
            //根据表单生成一个新的pdf文件
            ps = new PdfStamper(reader, os);
            //获取pdf表单
            AcroFields form = ps.getAcroFields();
            //给表单中添加中文字体
            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            form.addSubstitutionFont(bf);
            if (null != templateValueMap && !templateValueMap.isEmpty()) {
                for (String key : templateValueMap.keySet()) {
                    form.setField(key, String.valueOf(templateValueMap.get(key)));
                }
            }
            if (null != templateImageMap && !templateImageMap.isEmpty()) {
                for (String key : templateImageMap.keySet()) {
                    insertImage(form, ps, key, templateImageMap.get(key));
                }
            }
            ps.setFormFlattening(true);
        } catch (Exception e) {
            success = false;
        } finally {
            try {
                ps.close();
                reader.close();
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return success;
    }
    public static void main(String[] args) {
        //模板路径
        String inputUrl = "E:/Desktop/test/demo/itext-demo.pdf";
        //生成的文件路径
        String outputUrl = "E:/Desktop/test/demo/itext-demo-output.pdf";
        Map data = new HashMap<>();
        data.put("name", "张山");
        data.put("year", "2000年10月");
        data.put("phone", "13032451234");
        data.put("gangwei", "Java开发");
        data.put("introduceOneself", "熟练使用Java常用框架:Spring 、mybatis等");
        //图片地址
        String imageUrl = "E:/Desktop/test/demo/1.jpeg";
        Map templateImageMap = new HashMap<>();
        templateImageMap.put("image", imageUrl);
        PDFUtil.pdfTemplateInsert(inputUrl, outputUrl, data, templateImageMap);
    }
}
执行结果

Java 使用 itext 向PDF插入数据和图片,在这里插入图片描述,第8张

网友评论

搜索
最新文章
热门文章
热门标签
 
 梦见掉牙齿是什么征兆女人  周易生辰八字算命法  已婚女人梦见自己出嫁