2011年7月14日 星期四

ASP.NET]以iTextSharp手繪表格並產生PDF下載

大家使用iTextSharp的機緣都不太一樣, 由於單位Crystal Report的License數量有限主管要我去找一個免費產生PDF方法, 避免Crystal Report的License使用過多, 於是乎就找上了iTextSharp.
 Crystal Report 與 iTextSharp比較表
 Crystal ReportiTextSharp
視覺化界面YESNO
轉換成PDFYESYES
費用YESNO
 
第一次總是特別辛苦的, 為了畫出一張收據, 沒有視覺化界面的幫忙, 透過大腦的想像, 終於完成了任務, 但是對於使用Crystal Report的老手們, 應該相當不習慣, 因為看不見畫的東西, 對他們是不方便的, 但可以省錢, 我想老闆不會說不, 最後我把我學習的成果做成一個範例.
 
請記得先去網站下載iTextSharp.dll這個檔案加入參考 
01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Web;
05using System.Web.UI;
06using System.Web.UI.WebControls;
07using System.IO;
08using iTextSharp.text;
09using iTextSharp.text.pdf;
10  
11public partial class _Default : System.Web.UI.Page 
12{
13    protected void Page_Load(object sender, EventArgs e)
14    {
15        //文件初始化
16        Document Doc= new Document();
17  
18        MemoryStream Memory= new MemoryStream();
19  
20        PdfWriter PdfWriter = PdfWriter.GetInstance(Doc, Memory);
21  
22        //字型設定
23        string FontPath = Server.MapPath("kaiu.ttf");
24  
25        BaseFont bfChinese = BaseFont.CreateFont(FontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
26  
27        Font ChFont = new Font(bfChinese, 9);
28  
29        //文件開啟
30        Doc.Open();
31  
32        //設定表格需要幾攔幾列 (如果不設列,可能會在使用RowSpan或ColSpan發生錯誤)
33        iTextSharp.text.Table Tb = new iTextSharp.text.Table(4,5);
34        //設定表格的Padding
35        Tb.Padding = 4;
36        //自動填滿欄位(如果沒有填滿欄位,不會畫出欄位的線條)       
37        Tb.AutoFillEmptyCells = true;
38  
39        //抬頭
40        Paragraph Title = new Paragraph("iTextSharp畫表格測試", ChFont);
41        //內容水平置中
42        Title.SetAlignment("center");
43  
44        //Cell內容
45        iTextSharp.text.Cell Tc;
46        Tc= new iTextSharp.text.Cell(new Phrase("點部落",ChFont));
47        //內容水平置中
48        Tc.HorizontalAlignment = Element.ALIGN_CENTER;
49        //內容高度置中 (Top,Middle感覺不到有沒有移動)
50        Tc.VerticalAlignment = Element.ALIGN_TOP;
51        Tc.Rowspan = 2;
52        Tc.Colspan = 2;
53          
54        //將Cell加入表格
55        Tb.AddCell(Tc);
56  
57        Tc = new iTextSharp.text.Cell(new Phrase("www.dotblogs.com.tw", ChFont));
58        //內容水平置中
59        Tc.HorizontalAlignment = Element.ALIGN_CENTER;
60        //內容高度置中(Top,Middle感覺不到有沒有移動)
61        Tc.VerticalAlignment = Element.ALIGN_TOP;
62        Tc.Rowspan = 2;
63        Tc.Colspan = 2;
64  
65        Tb.AddCell(Tc);
66        
67        //加入抬頭
68        Doc.Add(Title);
69        //把表格加入文件
70        Doc.Add(Tb);
71  
72        //開啟新的一頁
73        Doc.NewPage();
74  
75        //加入抬頭
76        Doc.Add(Title);
77        //把表格加入文件
78        Doc.Add(Tb);
79  
80        //文件關閉
81        Doc.Close();
82  
83  
84        //檔案下載
85        Response.Clear();
86        Response.AddHeader("Content-Disposition", "attachment; filename=pdfExample.pdf");
87        Response.ContentType = "application/octet-stream";
88  
89        Response.OutputStream.Write(Memory.GetBuffer(), 0, Memory.GetBuffer().Length);
90        Response.OutputStream.Flush();
91        Response.OutputStream.Close();
92        Response.Flush();
93        Response.End();
94  
95    }
96}

沒有留言:

張貼留言