一、创建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)相关推荐

  1. java maven 读写pdf_java读取pdf内容

    展开全部 Java读取PDF文件:读取PDF文件中的文本内容:import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; i ...

  2. java maven 读写pdf_Java 在PDF中加盖骑缝章

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...

  3. java写入pdf文件图片_Java编辑PDF写入文字 插入图片

    package com.test; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Font; import com.itex ...

  4. 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?

    怎么编辑pdf文件内容?临近毕业时候,我有了报考教师资格证的想法,打算之后当老师.期间,我在网上找了很多报考教资的参考资料,不过它们大多是以pdf格式文件形式存在.有时候要往里加入.修改些内容,但我不 ...

  5. 在pdf文件中怎样编辑pdf文件图片

    想要编辑pdf文件中的图片是比较不容易的,没有好的方法的话不仅浪费时间而且很容易编辑失败,那么pdf图片怎么编辑大小及透明度呢?下面小编给出解答. 一.首先需要在电脑中安装好一个pdf编辑工具: 捷速 ...

  6. java设置pdf不可编辑_Java动态生成pdf文件(使用itext编辑pdf)

    一.创建pdf模板 使用PDFelement制作pdf模板(数据域的名称对应后面插入的key) 二.导入maven依赖 com.itextpdf itextpdf 5.5.13 com.itextpd ...

  7. java使用world模板动态生成PDF文件

    根据项目需求,需要用到一个功能,根据页面参数需要动态的生成一个world,并将world生成两份PDF文件,一份正式文件,一份临时的电子文件(带有二维码,扫描可以下载正式文件的电子版本).同时上传到文 ...

  8. java指令导出data文件_直接用 java 命令行动态生成jpg文件 (转)

    直接用 java 命令行动态生成jpg文件 (转)[@more@] /** * jeruGraphics v 1.0 * * 看到一些动态生成图象的例子都是完成的, * 而且很长,觉得不是无论从实用性 ...

  9. Java生成PDF文件(Itext篇)

    在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样 ...

最新文章

  1. [USACO Section 3.2] 01串 Stringsobits (动态规划)
  2. python 深浅拷贝案例_python-浅拷贝、深拷贝实例以及讲解
  3. flash咏鹅课件_咏鹅flash动画课件下载
  4. 【计算机组成原理】微处理器、微型计算机、微型计算机系统
  5. (学习进度表)【第八周】
  6. VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——VoiceRecorder控件的使用方式.Net移动开发...
  7. 人脸对齐(十三)--3DDFA
  8. UIWindow statusBar消失
  9. sharepoint 2007 无法自动跳转到default.aspx
  10. 解决笔记本WIFI共享网络给黑群晖
  11. android神器,android神器:tasker
  12. 6.计算机系统能力创新实践,计算机考核要重实践能力、培养创新精神
  13. vmware搭建多台虚拟机-桥接模式
  14. 20150317 实习之——余世维视频(上)
  15. MySQL命令启动与关闭服务
  16. 自学python---03_Spur计算工具开发
  17. 【C语言编程】古典问题:求兔子总数
  18. Three TextureLoader纹理贴图不显示图片(显示黑色)的原因分析
  19. 使用 Navicat 代码段
  20. 西工大软件学院软件架构设计复习

热门文章

  1. python怎么数据归一化_python数据归一化及三种方法详解
  2. 毕业设计-基于微信小程序的文件加密系统
  3. mysql 主从同步权限_MYSQL 主从同步详解
  4. 游戏编程精粹 附带光盘
  5. 《经典诗文诵读的实践与研究》中期报告
  6. CentOS 7.2编译安装RocketRAID2340驱动
  7. spoclsv病毒清除
  8. MultipartFile 支持什么类型_因为卡,白白换了六台电脑,原来重装系统如此简单!支持所有系统...
  9. Java编写的窗体程序 个人财务系统 个人记账系统 完整代码 下载运行
  10. JSP生成Excel报表文档