IText

iText是Java中用于创建和操作PDF文件的开源库。它是由Bruno Lowagie、Paulo Soares等人编写的。Ohloh报告称2001年以来，26个不同的贡献者进行了1万多次提交，超过100多万行代码。iText具有一个由大型开发团队维护的完善的、成熟的、活跃度同比持平的代码库。利用COCOMO模型，花了大约250Man-hour的努力后，2000年11月iText项目开始了第一次提交。

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次下载，而iTextSharp每周约有4000次下载。

## 特性

开发者可以用iText来：

- 从XML文件或数据库来动态生成PDF文档
- 为浏览器生成PDF文档
- 利用PDF的许多互动功能
- 添加书签、页码、水印、条形码等
- 分割、拼接和处理PDF页面
- 自动填写PDF表单
- 给PDF文件添加数字签名

通常情况下，在具有下列情况之一的项目中会使用iText：

- 内容不是提前准备好的：它基于用户输入或数据库的实时信息来计算、处理。
- 内容太多，PDF文件无法手动生成。
- 在批处理过程中，文档需要在无人值守模式下创建。
- 需要对内容进行定制或个性化。例如，最终用户的名字需要被印在多个页面上。

### 支持的ISO标准

- ISO 32000-1 (PDF 1.7)
- ISO 19005 (PDF/A)
- ISO 14289 (PDF/UA)

## 历史

1998年冬天，Bruno Lowagie在根特大学的一个内部项目开发了一个PDF库——rugPdf，用来创建一个PDF文档应用（针对学生管理用）。rugPdf是一个非常小、很复杂库，实现的功能很少，例如简单的读取和写入PDF文件。为了利用这个库，开发者必须了解PDF语法、对象、运算符和操作数。

1999年，Lowagie抛弃了rugPdf的代码，从头开始写了一个新的库——iText。Lowagie创建iText，意图使Java开发者在不了解PDF语法的情况下也可以使用这个库创建PDF文档，并在2000年2月14日将其作为自由及开放源代码软件发布。在2000年的夏天，Paulo Soares加盟了这个项目，现在他已经是iText新功能的主要开发者之一。

2007年，《SOA World》（SOA世界）杂志将iText作为企业应该使用的10种开源解决方案之一。詹姆斯·高斯林称赞iText库，并在Huckster的新版本使用。纽约时报还利用iText来创建其公共领域文章的PDF版本。

iText被嵌入在许多产品和服务中，包括Eclipse BIRT、Jasper Reports、Red Hat JBoss Seam、Windward Reports、pdftk等等。

2008年末，iText的专有许可证可用；2009年初，iText软件公司成立，成为iText产品的全球许可方。

2013年，德勤提名iText软件集团为比荷卢联盟高科技、高成长50强。该公司在比荷卢联盟中排名第10位，在比利时中排名第3位。

## 许可证和复刻

iTextSharp 4.1.6/iText 4.2.0之前的版本是在MPL和LGPL许可证下发布的，允许用户在闭源软件项目中使用。2009年底，iText第5版发布，其许可证被更换为Affero通用公共许可证第3版。

那些不愿意提供其源代码的项目，可以购买iText第5版的商业许可，或没有任何变化的继续使用iText的以前版本（其许可证更宽松）。然而，开发商Bruno Lowagie警告说，第5版之前的版本可能包含非LGPL授权的代码，第5版于2007-2009间做过完整法律/源代码审查，将所有疑似专利争议/不可授权源代码一一厘清或移除，因以前版本的闭源项目未经此一处理，故用户可能要为侵犯版权负责。虽然AGPL库可以链接到GPL的程序，但AGPL许可证与GPL许可证不相容。

## 示例

下面的源代码生成一个PDF文件，作为一个Hello World的例子。

```java
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
 
public class ITextHelloWorld {
    public static void main(String args[]) {
        try {
            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf"));
            document.open();
            document.add(new Paragraph("Hello World"));
            document.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
```

## 延展阅读

- Review first edition on JFree.org by David Gilbert
- Review first edition on JavaLobby by Stephen Kitt
- Review second edition in Freies Magazin by Michael Niedermair
- PDF Generation Made Easy by Benoy Jose
- Tools of the Trade, Part 1: Creating PDF documents with iText by Jeff Friesen (Adobe Press)
- Dynamically Creating PDFs in a Web Application by Sean C. Sullivan
- Creating PDFs with iText by Christoph Bartneck
- Generate PDF files from Java applications dynamically by Amit Tuli, Staff Software Engineer, IBM
- Create PDF With iText Java Tutorial
- Itext Add / Insert Image Into PDF
- (Chapters 10, 11 and 12 are dedicated entirely to iText)
- (see section "Generating PDF with iText" starting on p705)
- (translated into Italian: Acrobat e PDF. Trucchi e segreti)

## 外部链接

- iText主页
- SourceForge上的iText
- SourceForge上的iTextSharp
- StackOverflow上的iText
- StackOverflow上的iTextSharp
- 用来咨询与IText有关问题的支持论坛
- 用IText创建PDF文件的第三方指南
- 用IText合并PDF文件的第三方指南
- 2012年IText峰会上讲解Android、PDF、HTML5的视频片段
- Adobe的PDF架构师Leonard Rosenthol在2012年IText峰会上的讲解： PDF及其标准

## 基本资料

- 日语原文：iText®
- 开发者：iText Group NV
- 软件版本周期：7.1.14
- 软件版本周期：2021年1月14日
- 操作系统：跨平台
- 编程语言：Java、C#
- 类型：函式库
- 许可协议：AGPLv3、专有软件
- 网站：https://itextpdf.com/