本篇記錄輸出PDF元件會用到的一些屬性
引用的部分
using iTextSharp.text;
using iTextSharp.text.pdf;
以下紅色部分是製作完整PDF不可缺少的必須步驟~
黑色沒有也不會怎樣,只是你的PDF會沒有資料就是了哈哈哈
參考網址、參考網址、參考網址
//設定字型
string fontPath = System.Environment.GetEnvironmentVariable("windir") + @"\Fonts\KAIU.ttf";
string fontName = "標楷體";
//這是輸出一個檔名為20120926.pdf的檔案
string _fileName = String.Format(@"{0}.pdf", DateTime.Now.ToString("yyyyMMdd"));
//開啟pdf檔案,四個20代表左右上下邊界各20單位(有按照順序)
Document document = new Document(iTextSharp.text.PageSize.A4, 20, 20, 20, 20);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(_fileName, FileMode.Create));
document.Open();
//設定字型
FontFactory.Register(fontPath);
Font fontContentText = FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, 10f, Font.BOLD);
//新增一個一欄的PdfPTable
PdfPTable ptbTitle = new PdfPTable(1);
//新增一行文字,字型可套用剛剛的設定或是自己設
PdfPCell subTitleCell = new PdfPCell(new Phrase("可放抬頭文字", fontContentText));
//將此行文字置中
subTitleCell.HorizontalAlignment = Element.ALIGN_CENTER;
//設定此行文字不要有框線
subTitleCell.BorderWidth = 0;
//將此行文字放到PdfPTable中
ptbTitle.AddCell(subTitleCell);
//新增第二個Cell(不用特別New)
subTitleCell = new PdfPCell(new Phrase("", FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, 18f, Font.BOLD)));
subTitleCell.BorderWidth = 0;
//此Cell的高度會是100單位,注意如果同列只要設定一次,會參照最小值被撐開
subTitleCell.MinimumHeight = 100;
ptbTitle.AddCell(subTitleCell);
//新增了第二個PdfPTable,有四欄(這個是根據gvData的欄數動態產生)
PdfPTable ptb = new PdfPTable(gvData.Columns.Count);
//固定每欄的比例(確定欄數才可以這樣做,不然我也不知道會發生什麼事...)
float[] widths = new float[] { 30, 10, 10, 50 };
ptb.SetWidths(widths);
//將gvData標題循環加入PdfPTable表格標題
for (int h = 0; h < gvData.Columns.Count; h++)
{
//不特別將Cell取名,直接加入到 PdfPTable中,適用於沒有要做客製的時候
ptb.AddCell(new Phrase(gvData.HeaderRow.Cells[h].Text, fontContentText));
}
//將gvData內文循環加入PdfPTableptb.HeaderRows = 1;
//表格內文
for (int i = 0; i < gvData.Rows.Count; i++)
{
for (int j = 0; j < gvData.Columns.Count; j++)
{
ptb.AddCell(new Phrase(gvData.Rows[i].Cells[j].Text.Replace(" ", ""), fontContentText));
}
}
//新增了第三個PdfPTable,頁尾部分
PdfPTable ptfoot = new PdfPTable(4);
PdfPCell contentTitle = new PdfPCell(new Phrase("總結", fontContentText));
ptfoot.AddCell(contentTitle);
PdfPCell content = new PdfPCell(new Phrase("", fontContentText));
content.MinimumHeight = 100;
//跨欄,同理還有RowSpan跨列
content.Colspan = 3;
ptfoot.AddCell(content);
//依序將三個PdfPTable加入document
document.Add(ptbTitle);
document.Add(ptb);
document.Add(ptfoot);
//關閉pdf檔
document.Close();
writer.Close();
//將檔案傳給User
FileInfo downloadFile = new FileInfo(_fileName);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.ClearHeaders();
System.Web.HttpContext.Current.Response.Buffer = false;
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));
System.Web.HttpContext.Current.Response.AppendHeader("Content-Length", downloadFile.Length.ToString());
System.Web.HttpContext.Current.Response.WriteFile(downloadFile.FullName);
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.End();
您好..
回覆刪除我也用同樣方式產出pdf..但是..程式指定A5..
Document document = new Document(iTextSharp.text.PageSize.A5, 20, 20, 20, 20);
產出的pdf檔開起來卻還是A4..
想請問你這有可能哪沒寫好..
謝謝!!
不對阿我突破盲點了!!!
刪除要A5的話印表機放A5的紙就好了阿,在電腦上A4跟A5看起來沒什麼差別阿(以閱讀文字來說)!
因為我找不到輸出後怎麼看檔案是A5還是A4.....
恩~我周末研究看看好嗎?一找到原因馬上回你!
回覆刪除感恩!!
回覆刪除