itext 7使用笔记
itext 7使用笔记
- 一、前言
- 二、使用
- 1.pom.xml
- 2.pdf模板编辑
- 3.工具类
一、前言
iText 采用APGL许可协议,个人或开源项目免费,商用版本收取授权费。
名称 | 点击次数 | 描述 |
---|---|---|
iText | 6353 | iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。 |
PDF Box | 1958 | PDFBox是一个Apache开源的x项目。可以操作PDF文档的Java PDF类库。它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。 |
JFreeReport | 2146 | JFreeReport的数据继承自Swing组件的TableModel接口。JFreeReport生成的报表可以分页预览、打印或者保存为多种格式的文件包括pdf、Excel、html等。 |
PJX | 1214 | PJX支持读取,组合,处理,和生成PDF文档(注意:PJX需要 J2SE 1.4.0 或更高版本)。 |
FOP | 912 | FOP是由James Tauber发起的一个开源项目,原先的版本是利用xsl-fo将xml文件转换成pdf文件。但最新的版本它可以将xml文件转换成pdf,mif,pcl,txt等多种格式以及直接输出到打印机,并且支持使用SVG描述图形 |
gnujpdf | 782 | gnujpdf是一个java类包(gnu.jpdf.*),它提供了一个简单的API来创建与打印PDF文件。遵循LGPL开源协议 |
Connla | 986 | Connla是一个Java包用于创建可导成TXT,CSV,HTML,XHTML,XML,PDF和XLS等格式的数据集。 |
二、使用
1.pom.xml
注意不同意itext7版本对字体的处理结果不一样,可能会出现部分字体无法显示问题
<dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.1.0</version><type>pom</type></dependency>
2.pdf模板编辑
可使用PDF编辑软件如福昕、万兴PDF(推荐)、Adobe Acrobat Pro编辑器,增加表单域
3.工具类
- 文本读取
/*** 读取PDF文本内容* * @param inputStream 文件输入流* @return 文本* @throws IOException */public static String extractText(InputStream inputStream) throws IOException {StringBuilder sb = new StringBuilder();PdfDocument pdf = new PdfDocument(new PdfReader(inputStream));int pages = pdf.getNumberOfPages();for (int i = 1; i <= pages; i++) {String textFromPage = PdfTextExtractor.getTextFromPage(pdf.getPage(i));sb.append(textFromPage);sb.append("\n");}pdf.close();return sb.toString();}
- 图片导出
package com.iflytek.voicecloud.iflyrecruit;import com.itextpdf.kernel.pdf.canvas.parser.EventType;
import com.itextpdf.kernel.pdf.canvas.parser.data.IEventData;
import com.itextpdf.kernel.pdf.canvas.parser.data.ImageRenderInfo;
import com.itextpdf.kernel.pdf.canvas.parser.listener.IEventListener;
import com.itextpdf.kernel.pdf.xobject.PdfImageXObject;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;public class ImageRenderListener implements IEventListener {private final String savePath;public ImageRenderListener(String savePath) {this.savePath = savePath;}@Overridepublic void eventOccurred(IEventData data, EventType type) {if (data instanceof ImageRenderInfo) {ImageRenderInfo imageRenderInfo = (ImageRenderInfo) data;PdfImageXObject pdfImageXObject = imageRenderInfo.getImage();if (Objects.nonNull(pdfImageXObject)) {String fileFullPath = savePath + File.separator + UUID.randomUUID() + "." + pdfImageXObject.identifyImageFileExtension();try (FileOutputStream outputStream = new FileOutputStream(fileFullPath)) {outputStream.write(pdfImageXObject.getImageBytes());} catch (IOException e) {e.printStackTrace();}}}}@Overridepublic Set<EventType> getSupportedEvents() {return Collections.singleton(EventType.RENDER_IMAGE);}
}
/*** 读取PDF中的图片** @param inputStream 文件输入流* @return 图片* @throws IOException*/public static void exportImage(InputStream inputStream, String savePath) throws IOException {PdfCanvasProcessor pdfCanvasProcessor = new PdfCanvasProcessor(new ImageRenderListener(savePath));PdfDocument pdf = new PdfDocument(new PdfReader(inputStream));int pages = pdf.getNumberOfPages();for (int i = 1; i <= pages; i++) {pdfCanvasProcessor.processPageContent(pdf.getPage(i));}pdf.close();}
- 填充变量(”抠模板“)
/*** 填充变量** @param inputStream 输入流* @param outputStream 输出流* @param variables 变量*/public static void fillVariables(InputStream inputStream, OutputStream outputStream, Map<String, String> variables) throws IOException {PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);PdfDocument pdf = new PdfDocument(new PdfReader(inputStream), new PdfWriter(outputStream));// 表单域PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);Map<String, PdfFormField> fields = form.getFormFields();String keys = String.join(",", fields.keySet());LOGGER.debug("表单域字段列表=>{}", keys);// 变量替换for (Map.Entry<String, String> entry : variables.entrySet()) {PdfFormField pdfFormField = fields.get(entry.getKey());if (Objects.nonNull(pdfFormField)) {pdfFormField.setFont(font).setValue(entry.getValue());}}// 冻结表单窗格form.flattenFields();pdf.close();}
参考:
pdfReader 解析pdf(ItextPdf)
ITEXT7表单域处理(文字和图片)及添加水印
使用iText 7读取PDF文件中的文本和图片
为何选择iText?java PDF开源库选择与iText发展历史
itext 7使用笔记相关推荐
- iText in Action 2nd4.2节(Changing the properties of a cell)读书笔记
前言 PdfPCell类继承于Rectangle类,因此也继承了很多修改边框和背景色的属性和方法,后续我们会讨论到,但现在我们先要说明PdfPCell的内容模式.在iText的内部PdfPCell的内 ...
- JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档
POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...
- iText in Action 2nd3.1节(Introducing the concept of direct content)读书笔记
前言 在第一节中我们学会了如何创建一个pdf文档,在2.2和2.3节时介绍了iText中的high-level对象的使用.接下来中我们会学习一种完全不同的添加内容模式:这通常也叫做low-level ...
- iText in Action 2nd5.4节(Adding page events to PdfWriter)读书笔记
前言 在上一节我们讨论了几种不同页边界的类型后这一节我们继续回到IPdfPageEvent接口中,现在这个接口还剩下以下4个关于文档和页面的方法没有说明: OnOpenDocument----当文档被 ...
- iText in Action 2nd5.2节(Events for basic building blocks)读书笔记
前言 在我们将一些基本构建块(Chunk,Paragraph,Chapter等)添加到Document对象的实例中是,基本的构建块是由PdfWriter对象转换为pdf语法.在这个过程中,有一个我们很 ...
- Itext 学习笔记(六) pdf的页眉页脚
转载一篇blog 源地址为: [url] http://blog.chinaunix.net/uid-122937-id-3052063.html [/url] 1.概述 iText5中并没有之前版本 ...
- iText操作PDF之学习笔记
iText是Java中用于创建和操作PDF文件的开源库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件.iText的安装非常方便,下载iText.jar ...
- ITEXT处理pdf详解
一.前言 最近项目上用到Java生成pdf,pdf数字签名等等,用的是itext,于是总结了一下,分享大家,也是给自己做个笔记. 二.iText简介 iText是著名的开放源码的站点sourcefor ...
- Java常用框架笔记(1)
Linux操作系统 重点在于使用,理论可以几乎忽略 学习原因: 我们一般是在Windows上开发,Linux上去做部署 市面上的常见的操作系统 Windows系列,unix系统,Linux系统,mac ...
最新文章
- 完美/兼容版添加事件以及删除事件
- 99%的产品经理不知道的秘密:如何招程序猿喜欢?
- 揭秘 | 大流量场景下发布如『丝般顺滑』背后的原因
- R语言——str函数
- Spring系列:父子容器详解
- hightcharts 3d 堆积图下钻
- 解决:/system/bin/sh: /system/bin/test-ndk: not executable: magic 7F45报错
- 仙人掌之歌——路转峰回(2)
- win10自带虚拟机 Hyper-V下载和安装linux系统
- MVG读书笔记——射影几何下的二次曲线
- spack Bootstrapping Mirrors
- 接入广告App 教你如何赚取你的第一桶金 - 2048(含源码)
- 设置centos笔记本合盖不休眠
- 计算机基础学习-什么是并行传输、串行传输、异步传输?
- 如何配置一个高效、漂亮、爱不释手的终端?
- 关于召开山东省高职无人机应用技术专业教学指导方案开发第一次会议的通知...
- iOS跑步软件开发-从无到有
- 电源系统分析之电源综合分析
- 修订版开源项目成功的十条准则
- mybatis-plus分页查询三种方法
热门文章
- VS2005中文版下载地址和msdn_vs2005中文版
- python投掷骰子实验实验结论_Python 投掷骰子,并用pygal制图画出统计结果
- vue新框架nuxt通过文件目录自动生成路由
- 如果大家看了我的tools专栏,里面的小工具有不少,我提炼出来给大家——调用system函数
- 【SpringBoot】人工更新SpringBoot项目,Jar包太大问题解决,SpringBoot瘦包
- 永磁同步电机PMSM直接转矩滞环控制 采用三闭环控制:转速外环采用PI调节器,转矩环和磁链环经过滞环后得到PWM脉冲
- 字符串copy函数技术推演
- Linux中打开谷歌浏览器后一直在转圈
- 浏览器主页被劫持的解决办法、浏览器劫持是什么意思
- html5弹性盒子的作用,flexbox弹性盒子,真正意义上的布局样式