忙,每天都在忙,幾乎沒有時間寫**,每天在各種文件中開啟來開啟去
閒言少敘,下個專案要用到寫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 作為結束標誌的字元陣列。字串變數用於儲存和...