ASP NET 匯出PDF

由 andy 發表於 六月 13, 2011 / 尚無評論

詳細的教學請參考 這裡  本篇將整個說明的部份範例整合並做詳細的註解,分享給有需要的人。

<%@ Import Namespace="System.IO" %>

<%@ Import Namespace="iTextSharp.text" %>

<%@ Import Namespace="iTextSharp.text.html.simpleparser" %>

<%@ Import Namespace="iTextSharp.text.pdf" %>

<%@ Import Namespace="System.Collections.Generic" %>



protected void Button1_Click(object sender, EventArgs e)

    {

        Document doc = new Document(PageSize.A4,50,50,80,50);//宣告一個文件,設定文件大小(Margin:左,右,上,下)

        MemoryStream Memory = new MemoryStream();//使用記憶體暫存將內容擷取至doc

        PdfWriter PdfWriter = PdfWriter.GetInstance(doc, Memory);//使用PdfWriter 將doc的內容導入Memory 並繪製成pdf

        //各種字型設定 BaseFont設定字型

        BaseFont bfChinese = BaseFont.CreateFont(Request.PhysicalApplicationPath+@"font\MSJH.TTF", BaseFont.IDENTITY_H,         BaseFont.NOT_EMBEDDED);

        //↑中文字須配合中文字型 將中文字抓到目錄下

        //設定字型其他樣式

        Font ChFont = new Font(bfChinese, 12);

        Font ChFont_blue = new Font(bfChinese, 15, Font.NORMAL, new BaseColor(51, 0, 153));

        //Chunk為文字片段簡單說就是string 不會自行斷行 ("內容",字型物件)

        Chunk c0 = new Chunk("<c0>第一句</c0>",ChFont);

        //Phrase為句子 可以將chunk彙整至Phrase 但Phrase也是句子也不會斷行需透過 \n 或 Environment.NewLine

        Phrase p1 = new Phrase(c0);

        

        Chunk c1 = new Chunk("<c1>第二句</c1>", ChFont);

        Chunk c2 = new Chunk("<c2>第三句 </c2>", ChFont);

        //透過chunk將個別的文字先寫入後再透過Phrase 的Add將個別的chunk加入

        Phrase p2 = new Phrase(c1);

        p2.Add(c2);

        //段落 可以設定樣式如下

        Paragraph pg = new Paragraph();

        pg.Add(p1);

        pg.Add(p2);

        pg.Alignment=1;//設定左右對齊 0:左 1:置中 2:右 

        pg.FirstLineIndent = 20f;//段落首句縮排

        pg.SetLeading(0.0f, 2.0f);//設定行句



        //宣告一個Table 後面(4)代表分割成4個欄位 使用float{1,4} 代表用比例切兩個欄位

        PdfPTable table = new PdfPTable(new float[]{1,4});

        //強制鎖定表格大小

        table.TotalWidth = 400f; 

        table.LockedWidth = true;

        

        //先告一個Cell 所有Cell都是由上而下由左至右排序要跳過的時候就用Colspan合併欄位 

        PdfPCell header = new PdfPCell(new Phrase("參賽報名資料",ChFont));

        PdfPCell name = new PdfPCell(new Phrase("姓名", ChFont));

        PdfPCell inputName = new PdfPCell(new Phrase(TextBox1.Text, ChFont));

        PdfPCell tel = new PdfPCell(new Phrase("電話", ChFont));

        PdfPCell inputTel = new PdfPCell(new Phrase(TextBox2.Text, ChFont));

        header.Colspan = 2;

        table.AddCell(header);

        table.AddCell(name);

        table.AddCell(inputName);

        table.AddCell(tel);

        table.AddCell(inputTel);

        

        doc.Open();

        //doc.Add(new Paragraph(10f, "HelloWorld!\nI am Andy", ChFont));

        doc.Add(table);

        doc.Close();

         

        //產生下載檔案

        Response.Clear();

        Response.AddHeader("Content-Disposition","attachment;filename=table.pdf");

        Response.ContentType="application/pdf";

        Response.ContentEncoding= System.Text.Encoding.UTF8;

        Response.OutputStream.Write(Memory.GetBuffer(),0,Memory.GetBuffer().Length);

        Response.OutputStream.Flush();

        Response.OutputStream.Close();

        Response.Flush();

        Response.End();

        

    } 

 

關於作者

喜愛閱讀心理學與程式,資訊技術相關書籍,電影偏愛血淋淋,需要動腦的懸疑解謎,災難科幻類型.平時運動:游泳,慢跑等...最愛的一句話: Divide and Conquer! 無法掌握現在,如何談及未來!目前職業是程式設計師.

評論

此文章尚無評論。

發表評論

*