Itext應用封裝 一 寫pdf模板

2021-08-30 10:18:36 字數 2773 閱讀 5277

忙,每天都在忙,幾乎沒有時間寫**,每天在各種文件中開啟來開啟去

閒言少敘,下個專案要用到寫pdf檔案,在專案還沒開始之前,終於有一周的時間再開始學習點技術了。查閱了網上的資料,感覺itext還不錯,又上itext官網(現在版本好像是5.0,試用了下,與之前版本好像沒有太多的區別,但包名換了,版本穩定與否也不清楚,最後決定用了個以前的版本itext2.1.7(奇怪,好像從這個版本直接上公升到了5)

首先要定義乙個databean介面,**如下:

/**

* 資料bean,向單元格傳遞的資料將按繼承此類

* @author lilj

* */

public inte***ce databean

不會吧?沒有內容?

是的,沒有內容,這是基礎:),以後你的資料bean要繼承這個bean。比如說你有乙個pdf模板檔案,假設要乙個欄位xm,**如下:

public class databeanimpl implements databean

public void setxm(string xm)

}

這樣不可以了,也就是說這個bean要與pdf模板中的要寫的資料一致。

下面就要進行pdf處理了,第乙個方法是根據乙個模板檔案及databean生成乙個pdf檔案,**如下:

/**

* 根據乙個databean,處理乙個pdf檔案,

* @param templatefile //模板檔案路徑

* @param destfile //目標檔案路徑

* @param databean //資料介面的實現

* @return

* @throws ioexception

* @throws documentexception

*/public void getpdffile(string templatefile,string destfile,databean databean) throws ioexception, documentexception

{ string templatepdf=templatefile;

pdfreader reader = new pdfreader(templatepdf);

pdfstamper stamper = new pdfstamper(reader, new fileoutputstream(destfile));

acrofields form = stamper.getacrofields();

databean db = databean;

listfieldnames = this.getfieldname(db);

for(int i=0;i這個方法中用到兩個方法,乙個是getfieldname,另乙個是getfieldvale分別是取databean實現的名字與值,**如下:

/*** 根據資料bean得到pdf中要寫入的textfield的名字

* @param db

* @return

*/private listgetfieldname(databean db)

{ listfieldnames = new arraylist();

field fields = db.getclass().getdeclaredfields();

for(int i=0;igetfieldvalue方法如下:

private string getfieldvalue(string fieldname,databean db)

{ string value="";

method methods = db.getclass().getdeclaredmethods();

for(int i=0;i好了,主要的方法就是這些了,其實很簡單,就和用到了反射,這樣,根據每個pdf模板,我只要去實現databean就行了,然後向bean賦值,也可以從資料庫中直接取,呼叫getpdffile方法就可以生成pdf檔案了。

按說程式寫到這應該就行,但要是有多頁呢,應該如何處理呢?於是就又寫了個方法

/*** 根據一組databean,生成乙個pdf

* 生成方法,是將多個pdf合併

* @param templatefile

* @param destfile

* @param databean

* @return

* @throws ioexception

* @throws documentexception

*/public void getpdffile(string templatefile,string destpath,string destfilename,listdatabean) throws ioexception, documentexception

{ string filename=destpath+"/"+destfilename;

document document = new document();

pdfcopy copy = new pdfcopy(document, new fileoutputstream(filename));

document.open();

for (int i=0;i呼叫的時候呼叫這個就行了,如果只有一頁,就在list中只放乙個databean就行了。

本程式在itext2.1.7上測試通過,中文問題引用itextasian.jar即可

隨便寫一寫

簡單的來說,就是公私合營的一種模式。針對大型的公共設施建設,這種模式有著很大的優點。天子山鎮因其坐落於著名的天子山腳下而得名,鎮區內分布著奇特的石英砂巖峰林地貌 茂密的原始森林和清澈的溪流,自然村落形成的田園風光獨具特色,當地流傳的向王天子傳說 土家山寨和集鎮上臨街而建的吊腳樓 青石板人行街道 古香...

第一寫部落格

說一下python 與c或c 在語法上的一些不同之處。在python中不會出現像c或c 一樣麻煩的規定符號 一些指令也要簡便許多。在python中 當你打出 按下回車時 電腦會自動幫助你縮排一格 縮排使得python的語言顯得非常精簡 當然要正確使用 否則會報錯 當你輸入pr時按下tab 電腦會自動...

字元陣列的一寫特性

字元陣列是元素型別為字元的陣列,它既具有普通陣列的一般性質,又具有某些特殊性質。字串常量是用雙引號包圍的字串行。儲存字串常量時,系統會在字串行後自動加上 0 標誌字串的結束。字串的長度定義為字串中的有效字元數,不包括結束標誌 0 和雙引號。字串變數是以 0 作為結束標誌的字元陣列。字串變數用於儲存和...