使用iText操作pdf文件
前段時(shí)間寫(xiě)過(guò)一篇文章
《java讀取pdf文件的內容》,pig0045給我回復,說(shuō)可以直接利用iText搞定,我很感激,因為以前處理pdf文件并不多,對這塊相關(guān)組件并不了解,pig0045給我介紹了一個(gè)新的方法,謝謝!欣喜之余,馬上google了一把iText,發(fā)現iText在生成pdf文件方面功能很強大,而在讀取pdf文件內容方面似乎涉及并不多(
也許是我沒(méi)查到,有不同觀(guān)點(diǎn)的朋友,大家探討一下阿)。
同時(shí)我也查了下java領(lǐng)域針對pdf的相關(guān)組件,發(fā)現有很多開(kāi)源的東東,都可以操作pdf,恩,很不錯的。大致介紹幾個(gè):xpdf,iText,PDFBox,感興趣的話(huà),大家可以自己查一下。
好了,回到文章主題,查了下iText后,我也去稍微看了下相關(guān)的api,做了一些簡(jiǎn)單的demo,雖然網(wǎng)上相關(guān)介紹很多,但是自己寫(xiě)一遍程序再用自己的語(yǔ)言記錄下來(lái),理解會(huì )更為深刻一點(diǎn)。
準備工作:到
http://www.lowagie.com/iText/下載最新的iText的jar包,并將其放到classpath中。
一.Hello WorldiText創(chuàng )建pdf文件是十分簡(jiǎn)單的,為了演示其極其簡(jiǎn)單性,我們做一個(gè)HelloWorld吧,讓大家體驗一下。
在這個(gè)pdf文件中,我們只顯示一句話(huà)"Hello World",實(shí)現方式如下:
// 創(chuàng )建一個(gè)文檔對象
Document doc = new Document();
try ...{
// 定義輸出位置并把文檔對象裝入輸出對象中
PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
// 打開(kāi)文檔對象
doc.open();
// 加入文字“Hello World”
doc.add(new Paragraph("HelloWorld"));
// 關(guān)閉文檔對象,釋放資源
doc.close();
} catch (FileNotFoundException e) ...{
e.printStackTrace();
} catch (DocumentException e) ...{
e.printStackTrace();
} 怎么樣?很簡(jiǎn)單吧?下面我們對以上代碼稍作解釋。
Document(文檔)是創(chuàng )建pdf需要使用的第一個(gè)類(lèi),一旦創(chuàng )建了文檔,要向pdf文件里寫(xiě)入內容,則需要一個(gè)寫(xiě)入器,而PdfWriter就是這樣的一個(gè)寫(xiě)入器。Paragraph這個(gè)類(lèi)表示一個(gè)縮進(jìn)的段落。運行以上程序,我們就會(huì )在/root目錄下看到hello.pdf文件。
但是在實(shí)際工作中,我們不可能做這么簡(jiǎn)單的工作,下面就介紹一下常用的操作。
二.設置頁(yè)邊距如果我們希望定義頁(yè)面大小和頁(yè)邊距,可以通過(guò)使用Document的構造方法實(shí)現:
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft,
int marginRight,
int marginTop,
int marginBottom); 如下:
Rectangle pSize=new Rectangle(144,90);
//文檔的背景色
pSize.setBackgroundColor(Color.blue);
//創(chuàng )建一個(gè)文檔對象,設置初始化大小和頁(yè)邊距
Document doc=new Document(pSize,5,5,5,5); 在上面的例子中我們通過(guò)Rectangle設置了文檔的大小,其實(shí)iText已經(jīng)為我們定義好了許多常用的頁(yè)面,比如:A0-A10,我們可以直接調用,如下:
Document doc=new Document(PageSize.A4,5,5,5,5); 三.設置字體iText可以設置顯示文本的字體,大小,顏色等,如下:
// 加入文字“Hello World”,并設置字體為粗體,大小為20,顏色為紅色
doc.add(new Paragraph("HelloWorld", FontFactory.getFont(
FontFactory.COURIER, 20, Font.BOLD, new Color(255, 0, 0)))); 而要實(shí)現中文支持,我們需要到
http://itextdocs.lowagie.com/downloads/iTextAsian.jar下載中文支持包,然后把它放入classpath中(我試了幾次,都無(wú)法下載,這里先不說(shuō)這塊了)。
四.編輯表格pdf中的table和html中的table差不多,只是其單元格是cell,如下代碼加入了一個(gè)2*2的表格,代碼很簡(jiǎn)單,就不過(guò)多解釋了。
Document doc = new Document();
try ...{
// 定義輸出位置并把文檔對象裝入輸出對象中
PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
// 打開(kāi)文檔對象
doc.open();
Table t = new Table(2,2);
t.setBorderColor(new Color(0, 0, 255));//設置邊框顏色為藍色
t.setPadding(5);
t.setSpacing(5);//設置單元格邊界
t.setBorderWidth(1);//設置邊框寬度
Cell c1 = new Cell("header1");
c1.setHeader(true);
t.addCell(c1);
c1 = new Cell("Header2");
t.addCell(c1);
t.endHeaders();
t.addCell("1.1");
t.addCell("1.2");
doc.add(t);
// 關(guān)閉文檔對象,釋放資源
doc.close();
} catch (FileNotFoundException e) ...{
e.printStackTrace();
} catch (DocumentException e) ...{
e.printStackTrace();
} 五.插入圖片插入圖片和swing插入圖片差不多,大家可以參考一下:
Document doc = new Document();
Image jpeg;
try ...{
PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
doc.open();
jpeg = Image.getInstance("/root/1.gif");
//圖片居中
jpeg.setAlignment(Image.ALIGN_CENTER);
doc.add(jpeg);
doc.close();
} catch (BadElementException e) ...{
e.printStackTrace();
} catch (MalformedURLException e) ...{
e.printStackTrace();
} catch (IOException e) ...{
e.printStackTrace();
} catch (DocumentException e) ...{
e.printStackTrace();
} 好了,到這里我大致也介紹完了,歡迎大家拍磚,呵呵
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1638843
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。