\n
Asp.net 2.0 用C# 创建 PDF文件(示例代码下载)
\n
(一). 功能
创建PDF文件
(二). 代码
1using System;
2using System.Data;
3using System.Configuration;
4using System.Web;
5using System.Web.Security;
6using System.Web.UI;
7using System.Web.UI.WebControls;
8using System.Web.UI.WebControls.WebParts;
9using System.Web.UI.HtmlControls;
10using System.IO;
11using System.Text;
12using System.Collections;
13
14public 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
(三). 示例代码下载
\n
http://www.cnblogs.com/Files/ChengKing/Create_PDF_File.rar