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授权的代码,第5版於2007-2009間做過完整法律/原始碼審查,將所有疑似專利爭議/不可授權原始碼一一釐清或移除,因以前版本的闭源项目未經此一處理,故用户可能要为侵犯版权负责。虽然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);
}
}
}

延展阅读
*
*[http://www.jfree.org/reviews/itextinaction.html Review first edition on JFree.org] by David Gilbert
*[https://web.archive.org/web/20170112055535/http://www.javalobby.org/articles/itext-in-action/ Review first edition on JavaLobby] by Stephen Kitt
*
*[http://www.freiesmagazin.de/ftp/2010/freiesMagazin-2010-12.pdf#page=50 Review second edition in Freies Magazin] by Michael Niedermair
*[http://www.jguru.com/article/tools/itext-java-pdf-generator.html PDF Generation Made Easy] by Benoy Jose
*[http://www.adobepress.com/articles/printerfriendly.asp?p=420686 Tools of the Trade, Part 1: Creating PDF documents with iText] by Jeff Friesen (Adobe Press)
*[http://www.onjava.com/pub/a/onjava/2003/06/18/dynamic_files.html Dynamically Creating PDFs in a Web Application] by Sean C. Sullivan
*[http://www.bartneck.de/2008/02/28/creating-pdf-files-with-itext/ Creating PDFs with iText] by Christoph Bartneck
*[http://www-128.ibm.com/developerworks/opensource/library/os-javapdf/ Generate PDF files from Java applications dynamically] by Amit Tuli, Staff Software Engineer, IBM
*[http://www.javatips.net/blog/2011/09/create-pdf-with-itext-java-tutorial Create PDF With iText Java Tutorial]
*[http://www.javatips.net/blog/2011/12/itext-add-insert-image-into-pdf Itext Add / Insert Image Into PDF]

*
*

参见

  • PDF軟體列表

参考文献
外部链接
*[http://itextpdf.com iText主页]
*[http://sourceforge.net/projects/itext/ SourceForge上的iText]
*[http://sourceforge.net/projects/itextsharp/ SourceForge上的iTextSharp]
*[http://stackoverflow.com/questions/tagged/itext StackOverflow上的iText]
*[http://stackoverflow.com/questions/tagged/itextsharp StackOverflow上的iTextSharp]
*用来咨询与IText有关问题的支持论坛[https://web.archive.org/web/20131016155525/http://support.itextpdf.com/forum]
*用IText创建PDF文件的第三方指南[http://tutorials.jenkov.com/java-itext/index.html]
*用IText合并PDF文件的第三方指南[http://www.mindfiresolutions.com/Java-Merging-multiple-PDFs-into-a-single-PDF-using-iText-671.php]
*2012年IText峰会上讲解Android、PDF、HTML5的视频片段[https://www.youtube.com/results?search_query=itext+summit&oq=itext+summit]
*Adobe的PDF架构师Leonard Rosenthol在2012年IText峰会上的讲解:[http://www.youtube.com/watch?v=Pkm28bFwGtE PDF及其标准]

评论 (0)

  • 还没有评论,来抢沙发吧。