java maven 读写pdf_Java动态生成pdf文件(使用itext编辑pdf)
一、创建pdf模板
使用PDFelement制作pdf模板(数据域的名称对应后面插入的key)
二、导入maven依赖
com.itextpdf
itextpdf
5.5.13
com.itextpdf
itext-asian
5.2.0
三、插入数据和图片到pdf模板Map data;//要插入的数据
//初始化itext
//设置编码
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
PdfReader pdfReader=new PdfReader(“pdf模板文件路径”);
PdfStamper pdfStamper=new PdfStamper(pdfReader, new FileOutputStream(“输出pdf文件路径”));
AcroFields form = pdfStamper.getAcroFields();
form.addSubstitutionFont(baseFont);
//写入数据
for(String key:data.keySet()){
String value=data.get(key).toString();
//key对应模板数据域的名称
form.setField(key,value);
}
//添加图片
int pageNo = form.getFieldPositions("img").get(0).page;
Rectangle signRect = form.getFieldPositions("img").get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
Image image = Image.getInstance("图片路径");
PdfContentByte under = pdfStamper.getOverContent(pageNo);
//设置图片大小
image.scaleAbsolute(signRect.getWidth(), signRect.getHeight());
//设置图片位置
image.setAbsolutePosition(x, y);
under.addImage(image);
//设置不可编辑
pdfStamper.setFormFlattening(true);
pdfStamper.close();
PS:合并多个pdf成一个//先删除之前的all.pdf
String filePath="all.pdf";
File file=new File(filePath);
file.delete();
//要合并的所有pdf的路径
List fileList;
//all.pdf保存路径
String savepath="all.pdf";
Document document = null;
try {
document = new Document(new PdfReader(fileList.get(0)).getPageSize(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(savepath));
document.open();
for (int i = 0; i < fileList.size(); i++) {
PdfReader reader = new PdfReader(fileList.get(i));
int n = reader.getNumberOfPages();// 获得总页码
for (int j = 1; j <= n; j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);// 从当前Pdf,获取第j页
copy.addPage(page);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} finally {
if (document != null) {
document.close();
}
}
下面代码是用在项目中使用得截取部分作为参考:
// 保存路径 生成String savePath =
GlConfig.getDownloadResourcePath() + "student/" + student.getName() + "ClassHoursProve.pdf";
// 生成 pdf
PdfUtil.exportTemplateByPdf(savePath, dto.toJson(), path);
pdfUtilpackage com.gl.common.file.util;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.json.JSONObject;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Map;
@Slf4j
public class PdfUtil {
/**
* 学时证明模板路径
*/
public static final URL TEMPLATE_URL = ResourceUtil.getResource("template/ClassHoursProve.pdf");
/**
* 导出PDF方法
*
* @param savePath 保存服务器路径
* @param obj 导出的参数
*/
public static void exportTemplateByPdf(String savePath, JSONObject obj,String filePath) {
PdfReader reader = null;
ByteArrayOutputStream bos = null;
PdfStamper stamper = null;
OutputStream os = null;
FileOutputStream out = null;
File file;
Document document = null;
PdfCopy copy = null;
Document doc = null;
try {
/** 实例化文档对象 */
document = new Document(PageSize.A4, 50, 40, 40, 50);
/** 创建 PdfWriter 对象 */
// 打开文档
document.open();
/** pdf文档中中文字体的设置,注意一定要添加iTextAsian.jar包 */
String localFontPath = "c:windowsfonts";
BaseFont bfChinese =
BaseFont.createFont(localFontPath + "simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
FileUtils.deleteFile(savePath);
file = new File(savePath);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
out = new FileOutputStream(file);
reader = new PdfReader(TEMPLATE_URL);
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
// 文字类的内容处理
form.addSubstitutionFont(bfChinese);
String vlaues;
for (Map.Entry entry : obj.entrySet()) {
vlaues = String.valueOf(entry.getValue());
if ("photo".equals(entry.getKey()) || "qrcode".equals(entry.getKey())) {
try {
// 通过域名获取所在页和坐标,左下角为起点
int pageNo = form.getFieldPositions(entry.getKey()).get(0).page;
Rectangle signRect = form.getFieldPositions(entry.getKey()).get(0).position;
// 印章位置
Rectangle seal_signRect = form.getFieldPositions("month").get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
// 印章坐标位置
float seal_x = seal_signRect.getLeft();
float seal_y = seal_signRect.getBottom();
// 读图片
Image image = Image.getInstance(vlaues);
Image seal_image = Image.getInstance(filePath);
// 获取操作的页面
PdfContentByte under = stamper.getOverContent(pageNo);
// 根据域的大小缩放图片
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
seal_image.scaleToFit(signRect.getWidth(), signRect.getHeight());
// 添加图片
image.setAbsolutePosition(x, y);
seal_image.setAbsolutePosition(seal_x, seal_y);
under.addImage(image);
under.addImage(seal_image);
} catch (Exception e) {
log.info(e.getMessage());
}
} else {
if ("fileno".equals(entry.getKey())) {
form.setFieldProperty(entry.getKey(), "textsize", 50f, null);
} else {
form.setFieldProperty(entry.getKey(), "textsize", 10f, null);
}
form.setField(entry.getKey(), vlaues);
}
}
// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
stamper.setFormFlattening(true);
stamper.close();
doc = new Document();
copy = new PdfCopy(doc, out);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
document.close();
copy.flush();
copy.close();
} catch (Exception e) {
log.info(e.getMessage());
} finally {
try {
if (stamper != null) {
stamper.close();
stamper = null;
}
if (reader != null) {
reader.close();
reader = null;
}
IOUtils.closeQuietly(os);
IOUtils.closeQuietly(bos);
IOUtils.closeQuietly(out);
if (document != null) {
document.close();
document = null;
}
if (doc != null) {
doc.close();
doc = null;
}
if (copy != null) {
copy.flush();
copy.close();
copy = null;
}
} catch (Exception ignored) {
}
}
}
}
java maven 读写pdf_Java动态生成pdf文件(使用itext编辑pdf)相关推荐
- java maven 读写pdf_java读取pdf内容
展开全部 Java读取PDF文件:读取PDF文件中的文本内容:import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; i ...
- java maven 读写pdf_Java 在PDF中加盖骑缝章
骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...
- java写入pdf文件图片_Java编辑PDF写入文字 插入图片
package com.test; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Font; import com.itex ...
- 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?
怎么编辑pdf文件内容?临近毕业时候,我有了报考教师资格证的想法,打算之后当老师.期间,我在网上找了很多报考教资的参考资料,不过它们大多是以pdf格式文件形式存在.有时候要往里加入.修改些内容,但我不 ...
- 在pdf文件中怎样编辑pdf文件图片
想要编辑pdf文件中的图片是比较不容易的,没有好的方法的话不仅浪费时间而且很容易编辑失败,那么pdf图片怎么编辑大小及透明度呢?下面小编给出解答. 一.首先需要在电脑中安装好一个pdf编辑工具: 捷速 ...
- java设置pdf不可编辑_Java动态生成pdf文件(使用itext编辑pdf)
一.创建pdf模板 使用PDFelement制作pdf模板(数据域的名称对应后面插入的key) 二.导入maven依赖 com.itextpdf itextpdf 5.5.13 com.itextpd ...
- java使用world模板动态生成PDF文件
根据项目需求,需要用到一个功能,根据页面参数需要动态的生成一个world,并将world生成两份PDF文件,一份正式文件,一份临时的电子文件(带有二维码,扫描可以下载正式文件的电子版本).同时上传到文 ...
- java指令导出data文件_直接用 java 命令行动态生成jpg文件 (转)
直接用 java 命令行动态生成jpg文件 (转)[@more@] /** * jeruGraphics v 1.0 * * 看到一些动态生成图象的例子都是完成的, * 而且很长,觉得不是无论从实用性 ...
- Java生成PDF文件(Itext篇)
在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样 ...
最新文章
- [USACO Section 3.2] 01串 Stringsobits (动态规划)
- python 深浅拷贝案例_python-浅拷贝、深拷贝实例以及讲解
- flash咏鹅课件_咏鹅flash动画课件下载
- 【计算机组成原理】微处理器、微型计算机、微型计算机系统
- (学习进度表)【第八周】
- VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——VoiceRecorder控件的使用方式.Net移动开发...
- 人脸对齐(十三)--3DDFA
- UIWindow statusBar消失
- sharepoint 2007 无法自动跳转到default.aspx
- 解决笔记本WIFI共享网络给黑群晖
- android神器,android神器:tasker
- 6.计算机系统能力创新实践,计算机考核要重实践能力、培养创新精神
- vmware搭建多台虚拟机-桥接模式
- 20150317 实习之——余世维视频(上)
- MySQL命令启动与关闭服务
- 自学python---03_Spur计算工具开发
- 【C语言编程】古典问题:求兔子总数
- Three TextureLoader纹理贴图不显示图片(显示黑色)的原因分析
- 使用 Navicat 代码段
- 西工大软件学院软件架构设计复习
热门文章
- python怎么数据归一化_python数据归一化及三种方法详解
- 毕业设计-基于微信小程序的文件加密系统
- mysql 主从同步权限_MYSQL 主从同步详解
- 游戏编程精粹 附带光盘
- 《经典诗文诵读的实践与研究》中期报告
- CentOS 7.2编译安装RocketRAID2340驱动
- spoclsv病毒清除
- MultipartFile 支持什么类型_因为卡,白白换了六台电脑,原来重装系统如此简单!支持所有系统...
- Java编写的窗体程序 个人财务系统 个人记账系统 完整代码 下载运行
- JSP生成Excel报表文档