用itextsharp打印pdf示例

學習了用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

相關文章
相關標籤/搜索