iText是Java中用于创建和操作PDF文件的开源库。它是由Bruno Lowagie、Paulo Soares等人编写的。Ohloh报告称2001年以来[2],26个不同的贡献者进行了1万多次提交,超过100多万行代码。[3]iText具有一个由大型开发团队维护的完善的、成熟的、活跃度同比持平的代码库。[4]利用COCOMO模型,花了大约250人年的努力后,2000年11月iText项目开始了第一次提交。[5]
5.0.0版(2009年12月7日发布)后的iText是在Affero通用公共许可证第3版下分发的。之前版本的iText(Java版的至4.2.1版,和C#版的至4.1.6版)是在Mozilla公共许可证或LGPL下分发的。iText同时由iText软件公司通过一个专有许可证进行分发。iText®是1T3XT BVBA的注册商标
iText已经以iTextSharp的名义移植到.NET Framework下。iTextSharp是用C#编写的,它有一个独立于iText的代码库,但与iText的版本同步。
在2013年中,iText(Java)和iTextSharp(.NET)仅在SourceForge就有超过500万次的下载量。2013年10月,iText在SourceForge上每周约有3000次下载[6],而iTextSharp每周约有4000次下载[7]。
开发者可以用iText来:
- 从XML文件或数据库来动态生成PDF文档
- 为浏览器生成PDF文档
- 利用PDF的许多互动功能
- 添加书签、页码、水印、条形码等
- 分割、拼接和处理PDF页面
- 自动填写PDF表单
- 给PDF文件添加数字签名
通常情况下,在具有下列情况之一的项目中会使用iText:
- 内容不是提前准备好的:它基于用户输入或数据库的实时信息来计算、处理。
- 内容太多,PDF文件无法手动生成。
- 在批处理过程中,文档需要在无人值守模式下创建。
- 需要对内容进行定制或个性化。例如,最终用户的名字需要被印在多个页面上。
iText是一个非常著名的能够快速产生PDF文件的Java类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合
iText的更新变化很大,早期版本在PDF样式上可能会有瑕疵,所有我使用的最新的5.5.12包,文字包用的5.2.0版本
了解了Itext能干什么,我们第一步来用itext写一个Hello world。
1.添加Maven依赖
itext核心包 和xmlworder字体包
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.12</version> </dependency> <dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>5.5.12</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
2.创建main方法测试,用itext生成pdf的Hello world
import java.io.FileOutputStream; import java.io.IOException; import com.itextpdf.text.*; import com.itextpdf.text.pdf.PdfWriter; /** * PDF工具类 */ public class PdfUtils { public static void main(String[] args) throws DocumentException, IOException { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("D:/iTextDemo/hello_word.pdf")); // 打开文档 document.open(); // 写入内容 document.add(new Paragraph("Hello World")); // 写入结束 document.close(); } }
3.有很多人试过了上面demo,把文字换成中文,哎哟,发现中文没有写入成功,下面用一种最简单的设置中文的方式,IText设置中文的方式很多,因为时间原因,我就只展示最简单的一种。
import com.itextpdf.text.*; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileOutputStream; import java.io.IOException; /** * PDF工具类 */ public class Pdf1Utils { public static void main(String[] args) throws DocumentException, IOException { // 新建文档 Document document = new Document(PageSize.A4); // 如果输出中文,需要设置中文字体 BaseFont chineseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font font = new Font(chineseFont, 12, Font.NORMAL); PdfWriter.getInstance(document, new FileOutputStream("D:/iTextDemo/hello.pdf")); // 打开文档 document.open(); // 写入内容 Paragraph paragraph = new Paragraph("你好,JAVA蓝猫。", font); document.add(paragraph); // 关闭文档 document.close(); } }
如果想进一步了解学习IText,建议还是看官方文档。
官方文档链接:https://itextpdf.com/en/resources/api-documentation/itext-7-java