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/