(一). 功能
创建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
(三). 示例代码下载
http://www.cnblogs.com/files/chengking/create_pdf_file.rar
新闻热点
疑难解答
图片精选