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

 更新时间:2024年01月09日 10:05:56   作者:JXians  
最近项目中使用到Java实现写入PDF文件,这篇文章主要给大家介绍了关于Java如何使用itext向PDF插入数据和图片的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、下载Adobe Acrobat DC

二、制作模板

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

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

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

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

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

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<String, Object> templateValueMap, Map<String, String> 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<String, Object> 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<String, String> templateImageMap = new HashMap<>();
        templateImageMap.put("image", imageUrl);

        PDFUtil.pdfTemplateInsert(inputUrl, outputUrl, data, templateImageMap);
    }
}

执行结果

总结

到此这篇关于Java如何使用itext向PDF插入数据和图片的文章就介绍到这了,更多相关Java向PDF插入数据图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中的多个事务管理详解

    SpringBoot中的多个事务管理详解

    这篇文章主要介绍了SpringBoot中的多个事务管理详解,事务管理是一种组织和协调各种活动和资源的方法,以实现特定目标,它涉及规划、执行和监控各种任务,以确保项目或组织的顺利运行,需要的朋友可以参考下
    2023-10-10
  • Spring Boot自定义favicon实现方法实例解析

    Spring Boot自定义favicon实现方法实例解析

    这篇文章主要介绍了Spring Boot自定义favicon实现方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • maven的安装配置以及在IDEA中的配置图文教程

    maven的安装配置以及在IDEA中的配置图文教程

    下面小编就为大家分享一篇maven的安装配置以及在IDEA中的配置图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java文件IO操作教程之DirectIO的意义

    Java文件IO操作教程之DirectIO的意义

    这篇文章主要给大家介绍了关于Java文件IO操作教程之DirectIO的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • 解决SpringBoot中LocalDateTime返回前端数据为数组结构的问题

    解决SpringBoot中LocalDateTime返回前端数据为数组结构的问题

    本文主要介绍了解决SpringBoot中LocalDateTime返回前端数据为数组结构的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Java中的CAS和ABA问题说明

    Java中的CAS和ABA问题说明

    这篇文章主要介绍了Java中的CAS和ABA问题说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 基于Javamail实现发送邮件(QQ/网易邮件服务器)

    基于Javamail实现发送邮件(QQ/网易邮件服务器)

    这篇文章主要介绍了基于Javamail实现发送邮件,分别使用QQ邮箱作为smtp邮件服务器发送邮件,使用网易邮箱作为smtp邮件服务器发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Spring在代码中获取bean的几种方式详解

    Spring在代码中获取bean的几种方式详解

    这篇文章主要介绍了Spring在代码中获取bean的几种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java 选择排序、插入排序、希尔算法实例详解

    Java 选择排序、插入排序、希尔算法实例详解

    这篇文章主要介绍了Java 选择排序、插入排序、希尔算法实例详解,需要的朋友可以参考下
    2017-05-05
  • spring boot项目fat jar瘦身的实现

    spring boot项目fat jar瘦身的实现

    这篇文章主要介绍了spring boot项目fat jar瘦身的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论