实现JAVA在PDF图片域中插入图片,itextpdf
【摘要】 本文针对的是 指定文本域的情况,需要事先在pdf模板中添加图片域。需要用到pdf编辑器,我使用的是Adobe Acrobat DC,也可以用其他的。1.源码展示文中使用到的各种图片模板,请自行准备。同时代码只是演示,多页pdf、流的关闭等,请自行注意调整,规范!package com.example.pdf.util;import com.itextpdf.text.DocumentExce...
本文针对的是 指定文本域的情况,需要事先在pdf模板中添加图片域。需要用到pdf编辑器,我使用的是Adobe Acrobat DC,也可以用其他的。
1.源码展示
文中使用到的各种图片模板,请自行准备。
同时代码只是演示,多页pdf、流的关闭等,请自行注意调整,规范!
package com.example.pdf.util;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class PdfAddImage {
public static void main(String[] args) throws IOException, DocumentException {
/* todo 重要!当使用这种图片域的方式添加图片,需要注意设置图片域为隐藏或者背景颜色为无
* todo 否则会出现生成的pdf仅有图片域的情况,看起来就像添加失败了一样。实际被遮挡了而已
*/
// 模板文件路径
String templatePath = "D:\\temp\\PdfAddImage\\addImageTemp.pdf";
// 生成的文件路径
String targetPath = "D:\\temp\\PdfAddImage\\target.pdf";
// 书签名
String fieldName = "addImageArea";
// 图片路径
String imagePath = "D:\\temp\\PdfAddImage\\addImage2.jpeg";
// 读取模板文件
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.scaleToFit(200, 200);
// 添加图片
image.setAbsolutePosition(x, y);
under.addImage(image);
stamper.close();
reader.close();
}
}
2.文本域设置
使用软件打开后,旁边后一个准备表单
需要注意图片域的名字一定要和代码中的匹配。设置匹配后,保存即可。就可以直接运行了。
3.采坑点
需要将图片域设置为隐藏或者北京颜色为无。否则会出现图片插入被遮挡的情况,展示效果就像插入失败一样。两个选择其中一个设置就可以了。
设置隐藏:
右键图片域,点击属性,一般-表单域-隐藏
设置无背景:
右键图片域,点击属性,外观-外框和颜色-外框颜色和填充颜色-无
设置完以后,保存即可。运行程序,就能在设置的图片域中添加图片了。
效果展示:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)