一、Itext項目簡介
iText 是著名的開放源碼的站點sourceforge一個項目, 是用於生成 PDF 文檔的一個java類庫.
官網地址:http://developers.itextpdf.com
二、iText核心類
· kernel 和 io: 包含低層次常用的基礎的函數
· layout: 包含高層次的函數
· forms: 有關AcorForms操作需要的函數庫
· pdfa: 有關PDF/A(電子文檔標準)的相關操作
· pdftest: test例子中所引用的庫
除了這些常用的JAR包意外,還有一些其他可能的包:
· barcodes: 當你想要創建bar code(條形碼)時使用
· hyph: 當你想要文字有連字符時使用
· font-asian: 當你想要用CJK字符時 (Chinese / Japanese / Korean)
· sign: 當你想要使用電子簽名時使用
三、maven依賴文件pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>7.0.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>7.0.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>7.0.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>7.0.3</version>
</dependency>
四、代碼
package itext;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import com.itextpdf.kernel.color.Color;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
/** 作者:darkjazz
* 日期:2018年3月21日 上午9:23:19
*/
public class Test {
public static void main(String[] args) throws IOException {
//1、創建流對象
PdfWriter pdfWriter=new PdfWriter(new File("你的pdf文件位置\\1.pdf"));
//2、創建文檔對象
PdfDocument pdfDocument=new PdfDocument(pdfWriter);
//3、創建內容文檔對象
Document document=new Document(pdfDocument);
PdfDocumentInfo documentInfo=pdfDocument.getDocumentInfo();
documentInfo.setCreator("zzb");
//、創建內容
Paragraph paragraph=new Paragraph("good morning");
//設置字體,解決中文顯示問題
PdfFont font=PdfFontFactory.createFont("STSongStd-Light","UniGB-UCS2-H",true);
paragraph.setFont(font);
paragraph.setBackgroundColor(Color.LIGHT_GRAY);
//將內容寫入文檔
document.add(paragraph);
document.close();
System.out.println("ok!!!");
//讀取生成文檔的內容
PdfReader pdfReader=new PdfReader(new File("\\JavaEE (1).pdf"));
System.out.println(pdfReader.toString());
}
}
四、PDF文檔相關屬性設置
4.1可以通過 Document 的構造器定義 Pdf 文檔的大小
Document document = new Document(pdf,PageSize.A4);
4.2設定文檔屬性
在文檔打開之前, 可以設定文檔的標題、主題、作者、關鍵字、創建者、生產者等屬性,調用的方法分別是:
PdfDocument pdf = new PdfDocument(writer);
通過獲取pdf文檔對象的PdfDocumentInfo 對象來設置文檔屬性。
@Test
public void setDocumentInfo() throws FileNotFoundException{
PdfWriter pdfwrite=new PdfWriter("d:\\pdf\\info.pdf");
PdfDocument pdfdocument=new PdfDocument(pdfwrite);
//通過PdfDocument對象獲取到PdfDocumentInfo
PdfDocumentInfo info=pdfdocument.getDocumentInfo();
//設置文檔作者
info.setAuthor("darkja");
//設置文檔創建人
info.setCreator("darkjazz");
//設置文檔關鍵字,多個關鍵字用,隔開
info.setKeywords("學習");
//設置文檔主題
info.setSubject("文檔主題");
//設置文檔標題
info.setTitle("文檔標題");
Document doc=new Document(pdfdocument,PageSize.A4);
doc.add(new Paragraph("document info"));
doc.close();
}
五、生成帶表格和圖片的PDF
iText中處理表格的類爲:com.itextpdf.layout.element.Table
類的構造函數有四個:
①Table(float[] pointColumnWidths)
②Table(float[] columnWidths, boolean largeTable)
③Table(UnitValue[] columnWidths)
④Table(UnitValue[] columnWidths, boolean largeTable)
參數pointColumnWidths 、columnWidths 、columnWidths分別爲表格的每列寬度佔比屬性. 創建表格時必須指定表格的每列寬度比。
生成單元格對象:
• Cell 類表示單元格.
• Cell headcell=new Cell();//表示創建一個普通的單元格
• Cell headcell=new Cell(1,4);//表示創建一個跨1行4列的單元格
• 可以在單元格添加Paragraph對象
• 通過對Paragraph對象指定字體、位置、顏色
• new Paragraph("Job tile").setTextAlignment(TextAlignment.CENTER).setFont(font).setBold()
• 指定了文字位置、字體、是否加粗
package itext;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.color.Color;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.TextAlignment;
/** 作者:darkjazz
* 日期:2018年3月21日 上午10:35:47
*/
public class TEST2 {
public static void main(String[] args) throws IOException {
//1、創建流對象
PdfWriter pdfWriter=new PdfWriter(new File("你的pdf位置\\2.pdf"));
//2、創建文檔對象
PdfDocument pdfDocument=new PdfDocument(pdfWriter);
//3、創建內容文檔對象
Document document=new Document(pdfDocument);
PdfFont font=PdfFontFactory.createFont("STSongStd-Light","UniGB-UCS2-H",true);
Table table=new Table(new float[]{20,20,20,20});
table.setWidthPercent(100);
//創建表頭
Cell head=new Cell(1,4); //一行四列
head.add(new Paragraph("JOB TITLE")).setTextAlignment(TextAlignment.CENTER).setBackgroundColor(Color.ORANGE);
Cell cell1=new Cell();
cell1.add("one");
Cell cell2=new Cell();
cell2.add("two");
Cell cell3=new Cell();
cell3.add("three");
Cell cell4=new Cell();
cell4.add("four");
table.addCell(cell1);
table.addCell(cell2);
table.addCell(cell3);
table.addCell(cell4);
for (int i = 0; i < 16; i++) {
Cell cell=new Cell();
cell.add(new Paragraph(i+" "));
table.addCell(cell);
}
Cell teshucell=new Cell(2,1);
teshucell.setBackgroundColor(Color.GREEN);
table.addCell(teshucell);
for (int i = 0; i < 6; i++) {
Cell cell=new Cell();
cell.add(new Paragraph(i+" ").setBackgroundColor(Color.PINK));
table.addCell(cell);
}
//加入表格
table.addHeaderCell(head);
//加入圖片
Image image=new Image(ImageDataFactory.create("你的圖片位置\\2.jpg"));
document.add(image);
document.add(table);
document.close();
System.out.println("ok!!!");
}
}
效果如下: