摘要:[ASP.NET] 匯出 PDF - 自訂表格內容 - 使用 iTextSharp
ASP.NET 匯出 PDF 檔案,之前談過超簡單的方式利用 元件.rendercontrol 「ASP.NET 輕鬆轉 GridView 資料轉檔到 PDF」,也聊過如何自訂匯出的內容「ASP.NET 轉自定內容到 PDF 」,這一次要說的是自訂表格的內容來匯出到PDF檔案。
因為有時候資料並不是那麼單純的出現在 Gridview 中,甚至統計的結果需要一格一格的去填入,這時候就很適合本篇所說的「PDF Table」方式來處理。
下面的例子中,雖然一樣使用 Gridview 當作資料來源,但你可以很容易從程式中分辨哪一段是放入表格的 Header 哪一段是放 Content ,所以只要在那兩段中放入你要插入的內容,便可以輕鬆的轉檔到PDF了。
-----
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
'需要加入參考 iTextSharp.dll ,及 Imports iTextSharp.text
'Imports iTextSharp.text.html.simpleparser 和 Imports iTextSharp.text.pdf
Response.ContentType = "application/pdf"
Response.ContentEncoding = System.Text.Encoding.UTF8
Response.AddHeader("content-disposition", "attachment;filename=apply.pdf") '檔名
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Dim stringWrite As System.IO.StringWriter = New StringWriter
Dim htmlWrite As System.Web.UI.HtmlTextWriter = NewtmlTextWriter(stringWrite)
Dim reader As StringReader = New StringReader(stringWrite.ToString())
Dim doc As Document = New Document(PageSize.A4)
PdfWriter.GetInstance(doc, Response.OutputStream)
'處理中文
Dim fontpath As String = Environment.GetFolderPath(Environment.SpecialFolder.System) + "\..\Fonts\dft_yf3.ttc"'設定選用文字樣式的檔案
FontFactory.Register(fontpath) '登記文字樣式路徑
Dim fontchinese As Font = FontFactory.GetFont("華康雅風體W3(P)", BaseFont.IDENTITY_H, 16.0F)
doc.Open()
' -----↓↓↓ 放入你要在 PDF 顯示的內容 -------------------
GridView1.DataBind()
'要定義 PDF Table 的大小(Column 數量)
Dim pdf_T As PdfPTable = New PdfPTable(GridView1.Columns.Count)
pdf_T.HeaderRows = 1
pdf_T.WidthPercentage = 80 '表格寬度百分比
pdf_T.HorizontalAlignment = 0 '整個表格在文件的位置0=left、1=center、2=right
'--- 表格標題
'如果要自訂標題,就不要用迴圈跑
Dim i, j As Integer
For i = 0 To GridView1.Columns.Count - 1
pdf_T.AddCell(New Phrase(GridView1.HeaderRow.Cells(i).Text, fontchinese))
Next
'--- 表格內文
'利用迴圈規則性的填入內文
For i = 0 To GridView1.Rows.Count - 1
For j = 0 To GridView1.Columns.Count - 1
pdf_T.AddCell(New Phrase(GridView1.Rows(i).Cells(j).Text, fontchinese))
Next
'pdf_T.CompleteRow() ' 強迫跳到下一個 Row
Next
' ----- ^^^^^^^^^^^^^^^^^ --------------------
doc.Add(pdf_T)
doc.Close()
End Sub
--執行結果-
-