IText

iText是Java中用于创建和操作PDF文件的开源库。它是由Bruno Lowagie、Paulo Soares等人编写的。报告称2001年以来，26个不同的贡献者进行了1万多次提交，超过100多万行代码。iText具有一个由大型开发团队维护的完善的、成熟的、活跃度同比持平的代码库。利用COCOMO模型，花了大约250的努力后，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、、、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授权的代码，因而以前版本的闭源项目的用户可能需要为侵犯版权负责。虽然AGPL库可以链接到GPL的程序，但AGPL许可证与GPL许可证不兼容。

示例 
下面的源代码生成一个PDF文件，作为一个Hello World的例子。
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)

参见 

 PDF軟體列表

参考文献

外部链接 
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及其标准

自由PDF软件
自由排版软件
用C♯编程的自由软件
用Java編程的自由軟體
Java平台
Java函式庫
C♯函式庫