[ASP.NET]以iTextSharp手繪表格並產生PDF下載
大家使用iTextSharp的機緣都不太一樣, 由於單位Crystal Report的License數量有限主管要我去找一個免費產生PDF方法, 避免Crystal Report的License使用過多, 於是乎就找上了iTextSharp.
Crystal Report 與 iTextSharp比較表
Crystal Report | iTextSharp | |
視覺化界面 | YES | NO |
轉換成PDF | YES | YES |
費用 | YES | NO |
第一次總是特別辛苦的, 為了畫出一張收據, 沒有視覺化界面的幫忙, 透過大腦的想像, 終於完成了任務, 但是對於使用Crystal Report的老手們, 應該相當不習慣, 因為看不見畫的東西, 對他們是不方便的, 但可以省錢, 我想老闆不會說不, 最後我把我學習的成果做成一個範例.
請記得先去網站下載iTextSharp.dll這個檔案加入參考
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//文件初始化
Document Doc= new Document();
MemoryStream Memory= new MemoryStream();
PdfWriter PdfWriter = PdfWriter.GetInstance(Doc, Memory);
//字型設定
string FontPath = Server.MapPath("kaiu.ttf");
BaseFont bfChinese = BaseFont.CreateFont(FontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font ChFont = new Font(bfChinese, 9);
//文件開啟
Doc.Open();
//設定表格需要幾攔幾列 (如果不設列,可能會在使用RowSpan或ColSpan發生錯誤)
iTextSharp.text.Table Tb = new iTextSharp.text.Table(4,5);
//設定表格的Padding
Tb.Padding = 4;
//自動填滿欄位(如果沒有填滿欄位,不會畫出欄位的線條)
Tb.AutoFillEmptyCells = true;
//抬頭
Paragraph Title = new Paragraph("iTextSharp畫表格測試", ChFont);
//內容水平置中
Title.SetAlignment("center");
//Cell內容
iTextSharp.text.Cell Tc;
Tc= new iTextSharp.text.Cell(new Phrase("點部落",ChFont));
//內容水平置中
Tc.HorizontalAlignment = Element.ALIGN_CENTER;
//內容高度置中 (Top,Middle感覺不到有沒有移動)
Tc.VerticalAlignment = Element.ALIGN_TOP;
Tc.Rowspan = 2;
Tc.Colspan = 2;
//將Cell加入表格
Tb.AddCell(Tc);
Tc = new iTextSharp.text.Cell(new Phrase("www.dotblogs.com.tw", ChFont));
//內容水平置中
Tc.HorizontalAlignment = Element.ALIGN_CENTER;
//內容高度置中(Top,Middle感覺不到有沒有移動)
Tc.VerticalAlignment = Element.ALIGN_TOP;
Tc.Rowspan = 2;
Tc.Colspan = 2;
Tb.AddCell(Tc);
//加入抬頭
Doc.Add(Title);
//把表格加入文件
Doc.Add(Tb);
//開啟新的一頁
Doc.NewPage();
//加入抬頭
Doc.Add(Title);
//把表格加入文件
Doc.Add(Tb);
//文件關閉
Doc.Close();
//檔案下載
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=pdfExample.pdf");
Response.ContentType = "application/octet-stream";
Response.OutputStream.Write(Memory.GetBuffer(), 0, Memory.GetBuffer().Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
Response.Flush();
Response.End();
}
}