java实现在pdf模板的指定位置插入图片

本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下

java操作pdf有个非常好用的库itextpdf,maven:

<dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itextpdf</artifactId>
  <version>5.5.6</version>
</dependency>
<!-- itextpdf的亚洲字体支持 -->
<dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itext-asian</artifactId>
  <version>5.2.0</version>
</dependency>

思路:

  • Adobe的Acrobat可以对pdf进行编辑,在文档中插入域,这个插入的域就是图片的位置。这儿有关于域的介绍,但是这不重要,我们只是把域作为一个占位符用;
  • 利用itextpdf得到目标域所在的页面、位置、大小;
  • 利用域的坐标,把图片以绝对位置的方式插入到pdf中。

代码

public static void main(String[] args) throws Exception {
    // 模板文件路径
    String templatePath = "template.pdf";
    // 生成的文件路径
    String targetPath = "target.pdf";
    // 书签名
    String fieldName = "field";
    // 图片路径
    String imagePath = "image.jpg";

    // 读取模板文件
    InputStream input = new FileInputStream(new File(templatePath));
    PdfReader reader = new PdfReader(input);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(targetPath));
    // 提取pdf中的表单
    AcroFields form = stamper.getAcroFields();
    form.addSubstitutionFont(BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED));

    // 通过域名获取所在页和坐标,左下角为起点
    int pageNo = form.getFieldPositions(fieldName).get(0).page;
    Rectangle signRect = form.getFieldPositions(fieldName).get(0).position;
    float x = signRect.getLeft();
    float y = signRect.getBottom();

    // 读图片
    Image image = Image.getInstance(imagePath);
    // 获取操作的页面
    PdfContentByte under = stamper.getOverContent(pageNo);
    // 根据域的大小缩放图片
    image.scaleToFit(signRect.getWidth(), signRect.getHeight());
    // 添加图片
    image.setAbsolutePosition(x, y);
    under.addImage(image);

    stamper.close();
    reader.close();
  }

参考

How to show an image at a text field position?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java通过PDF模板填写PDF表单

    本文实例为大家分享了java通过PDF模板填写PDF表单的具体代码,包括图片,供大家参考,具体内容如下 需要用到的java包: itext.jar.iTextAsian.jar的JAR包.这个包里面定义了与中文输出相关的一些文件. 编写的表单如下: import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap;

  • 详解IDEA自定义注释模板(javadoc)

    最近要开始做项目了,项目规定了方法注释模板,那么idea是如何自定义注释模板的呢? 有两种解决方案: 1.安装Jindent插件,好处是自动生成模板,但是很可惜本人安装失败,设置好以后不知道为什么无法Apply,可能是我的版本问题,失败的同学请看方案二. 2.Jindent插件下载:http://plugins.jetbrains.com/plugin/2170?pr=idea,也可以直接在idea中在线安装,类似eclipse的在线install2.使用idea自带的Live Template

  • java如何写接口给别人调用的示例代码

    计算机语言分类有很多,如C.C++.C#.Java.Php.Python等等,她们有各自的特性及擅长的领域,但她们各自又不是全能的.在一个稍微大型一点的项目都会用到多种语言共同完成,那么这些编程语言如何进行通信呢.什么意思呢,就是比如说我Java写的一个方法,其他编程语言要怎么去调用呢?这就是本文要探讨的问题了. 一般来说,方法层面的编程语言通信用的是网络接口形式,只暴露出形参和结果供别人调用.接口一般分为接口定义者和接口调用者,定义者可以规定接收参数的类型及返回形式,而接口定义者则只能完全按照

  • 微信公众平台 发送模板消息(Java接口开发)

    前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西.今天先总结一下微信公众平台模板消息的发送.因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下. 微信公众平台技术文档:模板消息接口 一.概述 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. 关于使用规则,请注意: 1.所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入

  • java中的接口能够被实例化吗

    写在前面的话 学习java这么久了,好像已经习惯了new对象,平时new对象主角是类(class).乍一听对接口(interface)实例化,这这这可能吗,怕不是疯了!下文首先通过在IDEA中编写代码演示说明,然后分析怎样操作才能对接口进行实例化.希望博主的博文能够对java学习道路上的你有所帮助,喜欢的话点赞留言收藏哦~ 1.在IDEA中进行代码演示 直接用平时new类(class)对象的方式对接口进行操作,达不到效果,IDEA提示:Runnable' is abstract; cannot

  • Java中使用JWT生成Token进行接口鉴权实现方法

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行解密,正确解密表示此次请求合法,验证通过:解密失败说明Token无效或者已过期. 流程图如下: 一.用户发起登录请求 二.服务端创建一个加密后的JWT信息,作为Token返回 1.用户登录之后把生成的Token返回给前端 @Authorization @ResponseBody @GetMappin

  • Java如何在沙箱环境中测试支付宝支付接口

    java沙箱环境测试支付宝支付接口? 准备工作,登陆支付宝开放平台,进入沙箱环境 开放平台链接:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr 下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,

  • Java接口统一样式返回模板简介

    这篇文章主要介绍了Java接口统一样式返回模板简介,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景 在进行接口开发时,一般需要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其他人进行接口之间的联调时不会显得很杂乱无章.而这种固定的格式如果放在Java的每个接口单独处理时,又会在接口开发时很繁琐,所以这个时候可以采用封装一个实体类,统一返回固定模板格式的内容. 封装模板 先看一下没有封装之前,接口代码和返回格

  • java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.6</version> </dependency> <!--

  • Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <arti

  • Java实现在Word指定位置插入分页符

    目录 程序环境 插入分页符 1.在指定段落后插入分页符 2.在指定文本位置后插入分页符 在Word插入分页符可以在指定段落后插入,也可以在特定文本位置处插入.本文,将以Java代码来操作以上两种文档分页需求.下面是详细方法及步骤. 程序环境 在程序中导入jar,如下两种方法: 方法1:手动引入.将 Free Spire.Doc for Java 下载到本地,解压,找到lib文件夹下的Spire.Doc.jar文件.在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序: 方法2(推荐

  • 利用Java实现在PDF中添加工具提示

    目录 导入jar包 添加工具提示ToolTip 本文,将介绍如何通过Java后端程序代码在PDF中创建工具提示.添加工具提示后,当鼠标悬停在页面上的元素时,将显示工具提示内容. 导入jar包 本次程序中使用的是 Free Spire.PDF for Java,具体导入jar文件的方法参考如下内容. 两种方法可导入jar到程序: 方法1. 通过Maven仓库下载导入.在pom.xml配置: <repositories> <repository> <id>com.e-ice

  • java 后端生成pdf模板合并单元格表格的案例

    这里只放部分片段的代码 java中使用二维数组生成表格非常方便,但是每一维的数组都需要排好序,而且,在java中所谓的二维数组,三维数组等,其实都是多个一维数组组成的 /** * 添加子女教育规划表. * @param name 子女姓名 * @param educationItems 某个孩子的教育规划的二维数组,每列依次是:学程阶段.年数.费用支出(元)/年.年增长率 * @param spacing * @throws DocumentException * @throws IOExcep

  • jQuery实现在textarea指定位置插入字符或表情的方法

    本文实例讲述了jQuery实现在textarea指定位置插入字符或表情的方法.分享给大家供大家参考.具体实现方法如下: 1. 函数定义 复制代码 代码如下: (function($){     $.fn.extend({         insertAtCaret: function(myValue){             var $t=$(this)[0];             if (document.selection) {                 this.focus()

  • java 查找替换pdf中的指定文本

    本文介绍通过Java程序批量替换PDF中的指定文本内容. 程序环境准备如下: 程序使用环境如图,需要注意的是,本文使用了免费版的PDF jar工具:另外JDK版本建议使用高版本更佳. jar文件导入后,可调用Spire.PDF提供的接口.方法等操作PDF,参考如下导入结果: 注:可手动下载jar包.下载后,解压文件,将lib文件夹下的Spire.Pdf.jar文件导入Java程序. Java 代码示例 import com.spire.pdf.*; import com.spire.pdf.ge

  • Java之数组在指定位置插入元素实现

    1.假设在已知数组中在指定位置添加一个元素,那么在这位置的数据元素就会被替换掉. 代码: public class InsertArray { public static void main(String[] args) { int index = 2; int value = 5; int[] array = new int[]{1,2,3,4}; array[index] = value; System.out.println(Arrays.toString(array)); } } 测试结

  • JavaScript实现数组在指定位置插入若干元素的方法

    本文实例讲述了JavaScript实现数组在指定位置插入若干元素的方法.分享给大家供大家参考.具体如下: 我们可以通过JS数组的splice方法在执行的位置插入新的元素,非常简单 <!DOCTYPE html> <html> <body> <p id="demo"> Click the button to add elements to the array. </p> <button onclick="myFu

  • JS 在数组指定位置插入/删除数据的方法

    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 语法 arrayObject.splice(index,howmany,item1,.....,itemX)  参数说明 参数 描述 index 必需.整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置. howmany 必需.要删除的项目数量.如果设置为 0,则不会删除项目. item1, -, itemX 可选.向数组添加的新项目. 实例 添加一个元素 var array = [1,2,3,4,6]; ar

随机推荐