學習了用itextsharp輸出PDF文檔,支持用XML定義文檔,可定義多個數據源,簡單的表達式,用於項目中效果還不錯,其中PdfPageEvent類由包大人提供。express
示例程序定義了一個簡單的xml文件,如圖:學習
輸出的PDF文檔,如圖:測試
------------------------華麗的分隔線-----------------------------字體
定義PDF打印的Xml格式說明spa
參考示例:合同PDF打印,SettingItem表 /Application/Wxht/PdfSetting.net
PDF文檔結構:orm
文檔包含表格: Document.Add(Table)xml
表格包含單元格:Table.Add(Cell)blog
單元格內能夠有文本或圖片Cell.Add(Text),Cell.Add(Image) , 也能夠內嵌表格Cell.Add(Table)繼承
Xml文檔結構:
<Document Margin = "10,30,10,100" >
<Document.PageEvent>
定義頁眉頁腳
</Document.PageEvent>
<table Font.Size="11" HeaderRows = "1" RelativeWidths="{*} - 470,90" >
<tr DataContext =」Default[*]」 > 循環顯示該行內容
<td Content=」{wxhth}」 /> 單元格內顯示字段值
<td>
<table> 單元格內嵌套表格 </table>
</td>
</tr>
</table>
<Document.DataSource> 定義數據源
<DataSource Name="Default">
<![CDATA[ SQL語句 ]]>
</DataSource>
</Document.DataSource>
</Document>
節點及屬性說明:
大小寫敏感, 相似XAML語法
Document |
大小寫敏感, 是Xml的根節點 |
Document.Margin |
頁邊距, 整型列表, 能夠用空格或逗號(,)或堅線(|)分隔, 如 Margin =」10,30,10,100」 表示左邊距爲10,上邊距爲30,右邊距10,下邊距爲100 |
Document.PageEvent |
用於定義頁腳, 可設置一個圖片, 一般是簽名 |
Table |
也能夠記做TABLE或table, 用於定義表格, 一般一個文檔以一個表格排版 |
Table.HeaderRows |
表頭行數,該表跨頁時, 每頁會重複打印此行, 通用於用定義單據擡頭部分 |
Table.RelativeWidths |
表格分列, 以逗號分隔, 支持簡單表達式, {*} 表示父Table的寬度 |
Tr |
表格的行, 意義不大, 不會真正分行, 也能夠記做tr或TR |
Tr.DataContext |
可用於定義數據源, 多行數據源, 循環呈現多行, 如: Default[*], |
Td |
表格的單元格, 也能夠記做: td或TD |
Td.Content |
單元格文本內容, 默認有內邊距, 左邊齊, 垂直居中, 支持表達式 |
Td.ColSpan |
合併3列單元格, 若是知足所屬Table的總列數, 自動換行, 真正實現分行 |
Td.RowSpan |
合併3行單元格 |
Td.HorizontalAlignment |
水平對齊, 屬性值能夠是 c或Center. |
Font.Name |
文本字體大小, 若是未定義, 繼承父節點的定義 |
Font.Size |
文本字體大小, 若是未定義, 繼承父節點的定義 |
Font.Style |
若是未定義, 繼承父節點的定義, 例如: Bold+UnderLine |
Cell.Border |
邊框寬度, 若是未定義, 繼承父節點的定義。 以左上右下順序定義, 只能是個位數, 相領單元格同時定義邊框會加粗。 1:表示左邊框爲1, 等同於:1000 1111:表示有邊框 0000:表示無邊框, 默認無邊框 |
Cell.Padding |
內邊距, 整型列表, 能夠用空格或逗號(,)或堅線(|)分隔。 若是未定義, 繼承父節點的定義 Padding =」10,30」 表示左內邊距爲10,上內邊距爲30,右內邊距0,下內邊距爲0 |
Cell.Height |
單元格高度, 默認自動高度 |
Cell.Table |
單元內顯示子表, 一般用於排版分列 |
Cell.Image |
單元格內顯示圖片 Image.Source 圖片絕對路徑, 空值不顯示圖片, 支持表達式 也能夠是byte[]類型,format必須是Stream, 如 {mtPic:Stream} Image.Width 圖片寬度 |
Document.DataSource |
定義數據源, 支持多個數據源 |
DataSource.Name |
定義數據源名稱, 默認第一個數據源做爲 「Default」 數據源 |
表達式語法:
{colname} |
取默認數據源的第0行colname列值, 例如: {mdka} |
{tablename.colname:format} |
取指定數據源的第0行colname列值, 以fomat格式顯示, 列如: {Default.wxdj:#,##0.00#} 以2位或3位小數顯示單價 {qyrq:yyyy/MM/dd} 日期以yyyy/MM/dd格式顯示 |
=expression |
計算表達式, 以等號開始, 例如: Cell.Content=」= 1 + 2」 顯示 3 Cell.Content=」=’a’+’b’ 「 單引號會自動替換成雙引號, 顯示 ab Cell.Content=」=DateTime.Parse('{qyrq:yyyy-MM-dd}').ToString('yyyy/MM/dd')」 日期值轉成yyyy-MM-dd格式字符串, 分析字符串, 轉換成日期值 最後以 yyyy/MM/dd 格式字符串顯示 Image.Source=」=State==’批准’?’c:\pic.jpg’:string.Empty」 批准時顯示圖片 Image Source="{colPic:Stream}" 顯示二進制類型字段的圖片 |
{=expression} |
經過Table計算表達式, 一般用於統計, 例如: Cell.Content=」 {=sum(amt):0.00}」 合計金額 Cell.Content="='$'+{=sum(amt):0.##}" 合計金額 |
tablename[*] |
定義行的數據上下文, 例如: Tr.DataContext=」Default[*]」 以默認數據源行重複顯示 Tr.DataContext=」Table2[0]」 以Tabe2, 取第0行做爲數據源 Tr.DataContext=」Table2[*]」 以Table2 做爲數據源, 自動重複顯示 |
此程序原用於測試,現上傳到CSDN。