[ASP.NET] 匯出 PDF - 自訂表格內容 - 使用 iTextSharp

摘要:[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

--執行結果-

-