Asp.net 2.0 用C# 创建 PDF文件[引用] (示例代码下载)
发布日期:2022-02-19 23:50:21 浏览次数:16 分类:技术文章

本文共 5060 字,大约阅读时间需要 16 分钟。

(一). 功能
   创建PDF文件
(二). 代码
1 using  System;
  2 using  System.Data;
  3 using  System.Configuration;
  4 using  System.Web;
  5 using  System.Web.Security;
  6 using  System.Web.UI;
  7 using  System.Web.UI.WebControls;
  8 using  System.Web.UI.WebControls.WebParts;
  9 using  System.Web.UI.HtmlControls;
 10 using  System.IO;
 11 using  System.Text;
 12 using  System.Collections;
 13
 14 public  partial  class  _Default : System.Web.UI.Page 
 15 {
 16    static float pageWidth = 594.0f;
 17    static float pageDepth = 828.0f;
 18    static float pageMargin = 30.0f;
 19    static float fontSize = 10.0f;
 20    static float leadSize = 10.0f;
 21
 22    //指定要生成PDF文件的路径    
 23    static StreamWriter pPDF = new StreamWriter("E://net//WebSites//Create_PDF_File//test.pdf");//指定生成的路径
 24    
 25    static MemoryStream mPDF = new MemoryStream();
 26
 27    //Convert the Text Data to PDF format and write back to
 28    //Memory Stream
 29    static void ConvertToByteAndAddtoStream(string strMsg)
 30    {
 31        Byte[] buffer = null;
 32        buffer = ASCIIEncoding.ASCII.GetBytes(strMsg);
 33        mPDF.Write(buffer, 0, buffer.Length);
 34        buffer = null;
 35    }

 36
 37    //Format the data length in xRef Format
 38    static string xRefFormatting(long xValue)
 39    {
 40        string strMsg = xValue.ToString();
 41        int iLen = strMsg.Length;
 42        if (iLen < 10)
 43        {
 44            StringBuilder s = new StringBuilder();            
 45            int i = 10 - iLen;
 46            s.Append('0', i);
 47            strMsg = s.ToString() + strMsg;
 48        }

 49        return strMsg;
 50    }

 51    protected void Page_Load(object sender, EventArgs e)
 52    {
 53
 54    }

 55    protected void Button1_Click(object sender, EventArgs e)
 56    {
 57        //Create a ArrayList for xRefs of PDF Document
 58        ArrayList xRefs = new ArrayList();        
 59        float yPos = 0f;
 60        long streamStart = 0;
 61        long streamEnd = 0;
 62        long streamLen = 0;
 63        string strPDFMessage = null;
 64        //PDF Header Message
 65        strPDFMessage = "%PDF-1.1/n";
 66        ConvertToByteAndAddtoStream(strPDFMessage);
 67
 68        //ID 1 For Containt
 69        //ID 2 For Length of the Stream
 70        //write the Text
 71
 72        //1> Start a new Page
 73        xRefs.Add(mPDF.Length);
 74        strPDFMessage = "1 0 obj/n";
 75        ConvertToByteAndAddtoStream(strPDFMessage);
 76        strPDFMessage = "<< /Length 2 0 R >>/n";
 77        ConvertToByteAndAddtoStream(strPDFMessage);
 78        strPDFMessage = "stream/n";
 79        ConvertToByteAndAddtoStream(strPDFMessage);
 80
 81        //Get the start of the stream
 82        streamStart = mPDF.Length;
 83        strPDFMessage = "BT/n/F0 " + fontSize + " Tf/n";
 84        ConvertToByteAndAddtoStream(strPDFMessage);
 85        yPos = pageDepth - pageMargin;
 86        strPDFMessage = pageMargin + " " + yPos + " Td/n";
 87        ConvertToByteAndAddtoStream(strPDFMessage);
 88        strPDFMessage = leadSize + " TL/n";
 89        ConvertToByteAndAddtoStream(strPDFMessage);
 90
 91        //Add the text data to the PDF memory stream
 92        strPDFMessage = "(Do a test)Tj/n";
 93        ConvertToByteAndAddtoStream(strPDFMessage);
 94        strPDFMessage = "ET/n";
 95        ConvertToByteAndAddtoStream(strPDFMessage);
 96        //Get the End of the stream
 97        streamEnd = mPDF.Length;
 98        //Get the Length of the stream
 99        streamLen = streamEnd - streamStart;
100        strPDFMessage = "endstream/nendobj/n";
101        ConvertToByteAndAddtoStream(strPDFMessage);
102
103        //Add 2 object to xRef
104        xRefs.Add(mPDF.Length);
105        strPDFMessage = "2 0 obj/n" + streamLen + "/nendobj/n";
106        ConvertToByteAndAddtoStream(strPDFMessage);
107
108        //Add Page to xRefs
109        xRefs.Add(mPDF.Length);
110        strPDFMessage = "3 0 obj/n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>/nendobj/n";
111        ConvertToByteAndAddtoStream(strPDFMessage);
112
113        //Build the Pages
114        xRefs.Add(mPDF.Length);
115        strPDFMessage = "4 0 obj/n<</Type /Pages /Count 1/n";
116        ConvertToByteAndAddtoStream(strPDFMessage);
117        strPDFMessage = "/Kids[/n3 0 R/n]/n";
118        ConvertToByteAndAddtoStream(strPDFMessage);
119        strPDFMessage = "/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>/n";
120        ConvertToByteAndAddtoStream(strPDFMessage);
121        strPDFMessage = "/MediaBox [ 0 0 " + pageWidth + " " + pageDepth + " ]/n>>/nendobj/n";
122        ConvertToByteAndAddtoStream(strPDFMessage);
123
124        //Add font to xRefs
125        xRefs.Add(mPDF.Length);
126        strPDFMessage = "5 0 obj/n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>/nendobj/n";
127        ConvertToByteAndAddtoStream(strPDFMessage);
128
129        //Add the catalog to xRefs
130        xRefs.Add(mPDF.Length);
131        strPDFMessage = "6 0 obj/n<</Type/Catalog/Pages 4 0 R>>/nendobj/n";
132        ConvertToByteAndAddtoStream(strPDFMessage);
133
134        //xRefs Entry 
135        streamStart = mPDF.Length;
136        strPDFMessage = "xref/n0 7/n0000000000 65535 f /n";
137        for (int i = 0; i < xRefs.Count; i++)
138        {
139            strPDFMessage += xRefFormatting((long)xRefs[i]) + " 00000 n /n";
140        }

141        ConvertToByteAndAddtoStream(strPDFMessage);
142        //Trailer for the PDF
143        strPDFMessage = "trailer/n<</n/Size " + (xRefs.Count + 1+ "/n/Root 6 0 R/n>>/n";
144        ConvertToByteAndAddtoStream(strPDFMessage);
145        //xRef location entry
146        strPDFMessage = "startxref/n" + streamStart + "/n%%EOF/n";
147        ConvertToByteAndAddtoStream(strPDFMessage);
148        //Write the PDF from Memory Stream to File Stream
149        mPDF.WriteTo(pPDF.BaseStream);
150        //Close the Stream
151        mPDF.Close();
152        pPDF.Close();
153    }

154}

155

(三). 示例代码下载

          

 

转载地址:https://blog.csdn.net/lerrywang008/article/details/1830627 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)
下一篇:搭建以太坊开发环境的曲折之路

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.67.29.197]2022年09月30日 10时50分30秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章