使用itext生成PDF
jar包為itext.jar,itextAsia.jar,最好都是最新的 ;
或maven引用:
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.11</version> </dependency> <!-- 支援中文字型 --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency>
生成PDF步驟:
- 建立文件物件例項
Document document = new Document();
- 建立書寫器(Writer)與文件物件(document)關聯,通過書寫器將文件寫入磁碟
PdfWriter writer = PdfWriter.getInstance(document,response.getOutputStream());
- 開啟文件
document.open();
- 文件中新增內容
document.add(element);
其中的element可以為 ParagraphPdfPTableImage等,見詳細分析
- 閉文件
document.close();
詳細分析:
- 生成document物件例項:三種構造方法
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize, float marginLeft, float marginRight,float marginTop, float marginBottom);
pageSize是指文件頁面大小,public document();頁面大小為A4,效果等同於Document(PageSize.A4);
marginLeft、marginRight、marginTop、marginBottom分別為左、右、上、下的頁邊距。
- 文件屬性
在文件開啟之前,可以設定文件的標題、主題、作者、關鍵字、建立者、生產者、建立日期等屬性,呼叫的方法分別是:
public boolean addTitle(String title)
public boolean addSubject(String subject)
public boolean addKeywords(String keywords)
public boolean addAuthor(String author)
public boolean addCreator(String creator)
public boolean addProducer()
public boolean addCreationDate()
-
新增文件內容
所有向文件新增的內容都是以物件為單位的,如Phrase、Paragraph、Table、Graphic物件等。比較常用的是段落(Paragraph)物件,用於向文件中新增一段文字。
IText中用文字塊(Chunk)、短語(Phrase)和段落(paragraph)處理文字。
- 文字塊(Chunk)是處理文字的最小單位,有一串帶格式(包括字型、顏色、大小)的字串組成。
Chunk dimension_lable = new Chunk("Dimensions: ");
- 短語(Phrase)由一個或多個文字塊(Chunk)組成,短語(Phrase)也可以設定字型,但對於其中以設定過字型的文字塊(Chunk)無效。通過短語(Phrase)成員函式add可以將一個文字塊(Chunk)加到短語(Phrase)中;
Phrasedimension = new Phrase(); dimension.add(dimension_lable);
- 段落(paragraph)由一個或多個文字塊(Chunk)或短語(Phrase)組成,相當於WORD文件中的段落概念,同樣可以設定段落的字型大小、顏色等屬性。另外也可以設定段落的首行縮排、對齊方式(左對齊、右對齊、居中對齊)。通過函式setAlignment可以設定段落的對齊方式,預設為左對齊。
Paragraph ph= new Paragraph(); ph.add(dimension_lable); ph.add(dimension);
- Itext中處理表格在有PDFTable,Table。對於簡單在表格處理可以用Table,但如果要處理複雜的表格就需要PDFTable進行處理。
建立表格時,必須要指定列,行則不是必須的。
建立表格之後,可以設定表格的屬性,如:邊框寬度、邊框顏色、襯距(padding space 即單元格之間的間距)大小等屬性。
- IText中處理影象的類為Image,目前iText支援的影象格式有:GIF, Jpeg, PNG, wmf等格式,對於不同的影象格式,iText用同樣的建構函式自動識別影象格式。通過下面的程式碼分別獲得gif、jpg、png影象的例項。
Image gif = Image.getInstance("vonnegut.gif");
Image jpeg = Image.getInstance("myKids.jpg");
Image png = Image.getInstance("hitchcock.png");
如果影象在文件中不按原尺寸顯示,可以通過下面的函式進行設定:
- 函式public void scaleAbsolute(int newWidth, int newHeight)直接設定顯示尺寸;
- 函式public void scalePercent(intpercent)設定顯示比例,如scalePercent(50)表示顯示的大小為原尺寸的50%;
- 函式scalePercent(int percentX, int percentY)則影象高寬的顯示比例。
中文/字型處理
預設的iText字型設定不支援中文字型,需要下載遠東字型包iTextAsian.jar,否則不能往PDF文件中輸出中文字型。通過下面的程式碼就可以在文件中使用中文了:
BaseFont.createFont(basePath + "/Font/SIMHEI.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
其中basePath 為你的專案工程路徑,"/Font/SIMHEI.TTF"是把windows/Font目錄下的字型複製到你專案工程下Font資料夾中。