(一). 功能
创建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
staticfloatpageWidth=594.0f;
17
staticfloatpageDepth=828.0f;
18
staticfloatpageMargin=30.0f;
19
staticfloatfontSize=10.0f;
20
staticfloatleadSize=10.0f;
21
22
//指定要生成PDF文件的路径
23
staticStreamWriterpPDF=newStreamWriter("E:\\net\\WebSites\\Create_PDF_File\\test.pdf");//指定生成的路径
24
25
staticMemoryStreammPDF=newMemoryStream();
26
27
//ConverttheTextDatatoPDFformatandwritebackto
28
//MemoryStream
29
staticvoidConvertToByteAndAddtoStream(stringstrMsg)
30

{
31
Byte[]buffer=null;
32
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
33
mPDF.Write(buffer,0,buffer.Length);
34
buffer=null;
35
}
36
37
//FormatthedatalengthinxRefFormat
38
staticstringxRefFormatting(longxValue)
39

{
40
stringstrMsg=xValue.ToString();
41
intiLen=strMsg.Length;
42
if(iLen<10)
43

{
44
StringBuilders=newStringBuilder();
45
inti=10-iLen;
46
s.Append('0',i);
47
strMsg=s.ToString()+strMsg;
48
}
49
returnstrMsg;
50
}
51
protectedvoidPage_Load(objectsender,EventArgse)
52

{
53
54
}
55
protectedvoidButton1_Click(objectsender,EventArgse)
56

{
57
//CreateaArrayListforxRefsofPDFDocument
58
ArrayListxRefs=newArrayList();
59
floatyPos=0f;
60
longstreamStart=0;
61
longstreamEnd=0;
62
longstreamLen=0;
63
stringstrPDFMessage=null;
64
//PDFHeaderMessage
65
strPDFMessage="%PDF-1.1\n";
66
ConvertToByteAndAddtoStream(strPDFMessage);
67
68
//ID1ForContaint
69
//ID2ForLengthoftheStream
70
//writetheText
71
72
//1>StartanewPage
73
xRefs.Add(mPDF.Length);
74
strPDFMessage="10obj\n";
75
ConvertToByteAndAddtoStream(strPDFMessage);
76
strPDFMessage="<</Length20R>>\n";
77
ConvertToByteAndAddtoStream(strPDFMessage);
78
strPDFMessage="stream\n";
79
ConvertToByteAndAddtoStream(strPDFMessage);
80
81
//Getthestartofthestream
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
//AddthetextdatatothePDFmemorystream
92
strPDFMessage="(Doatest)Tj\n";
93
ConvertToByteAndAddtoStream(strPDFMessage);
94
strPDFMessage="ET\n";
95
ConvertToByteAndAddtoStream(strPDFMessage);
96
//GettheEndofthestream
97
streamEnd=mPDF.Length;
98
//GettheLengthofthestream
99
streamLen=streamEnd-streamStart;
100
strPDFMessage="endstream\nendobj\n";
101
ConvertToByteAndAddtoStream(strPDFMessage);
102
103
//Add2objecttoxRef
104
xRefs.Add(mPDF.Length);
105
strPDFMessage="20obj\n"+streamLen+"\nendobj\n";
106
ConvertToByteAndAddtoStream(strPDFMessage);
107
108
//AddPagetoxRefs
109
xRefs.Add(mPDF.Length);
110
strPDFMessage="30obj\n<</Type/Page/Parent40R/Contents10R>>\nendobj\n";
111
ConvertToByteAndAddtoStream(strPDFMessage);
112
113
//BuildthePages
114
xRefs.Add(mPDF.Length);
115
strPDFMessage="40obj\n<</Type/Pages/Count1\n";
116
ConvertToByteAndAddtoStream(strPDFMessage);
117
strPDFMessage="/Kids[\n30R\n]\n";
118
ConvertToByteAndAddtoStream(strPDFMessage);
119
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F050R>>>>\n";
120
ConvertToByteAndAddtoStream(strPDFMessage);
121
strPDFMessage="/MediaBox[00"+pageWidth+""+pageDepth+"]\n>>\nendobj\n";
122
ConvertToByteAndAddtoStream(strPDFMessage);
123
124
//AddfonttoxRefs
125
xRefs.Add(mPDF.Length);
126
strPDFMessage="50obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
127
ConvertToByteAndAddtoStream(strPDFMessage);
128
129
//AddthecatalogtoxRefs
130
xRefs.Add(mPDF.Length);
131
strPDFMessage="60obj\n<</Type/Catalog/Pages40R>>\nendobj\n";
132
ConvertToByteAndAddtoStream(strPDFMessage);
133
134
//xRefsEntry
135
streamStart=mPDF.Length;
136
strPDFMessage="xref\n07\n000000000065535f\n";
137
for(inti=0;i<xRefs.Count;i++)
138

{
139
strPDFMessage+=xRefFormatting((long)xRefs[i])+"00000n\n";
140
}
141
ConvertToByteAndAddtoStream(strPDFMessage);
142
//TrailerforthePDF
143
strPDFMessage="trailer\n<<\n/Size"+(xRefs.Count+1)+"\n/Root60R\n>>\n";
144
ConvertToByteAndAddtoStream(strPDFMessage);
145
//xReflocationentry
146
strPDFMessage="startxref\n"+streamStart+"\n%%EOF\n";
147
ConvertToByteAndAddtoStream(strPDFMessage);
148
//WritethePDFfromMemoryStreamtoFileStream
149
mPDF.WriteTo(pPDF.BaseStream);
150
//ClosetheStream
151
mPDF.Close();
152
pPDF.Close();
153
}
154
}
155
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.Page15

{16
staticfloatpageWidth=594.0f;17
staticfloatpageDepth=828.0f;18
staticfloatpageMargin=30.0f;19
staticfloatfontSize=10.0f;20
staticfloatleadSize=10.0f;21

22
//指定要生成PDF文件的路径23
staticStreamWriterpPDF=newStreamWriter("E:\\net\\WebSites\\Create_PDF_File\\test.pdf");//指定生成的路径24

25
staticMemoryStreammPDF=newMemoryStream();26

27
//ConverttheTextDatatoPDFformatandwritebackto28
//MemoryStream29
staticvoidConvertToByteAndAddtoStream(stringstrMsg)30


{31
Byte[]buffer=null;32
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);33
mPDF.Write(buffer,0,buffer.Length);34
buffer=null;35
}36

37
//FormatthedatalengthinxRefFormat38
staticstringxRefFormatting(longxValue)39


{40
stringstrMsg=xValue.ToString();41
intiLen=strMsg.Length;42
if(iLen<10)43


{44
StringBuilders=newStringBuilder();45
inti=10-iLen;46
s.Append('0',i);47
strMsg=s.ToString()+strMsg;48
}49
returnstrMsg;50
}51
protectedvoidPage_Load(objectsender,EventArgse)52


{53

54
}55
protectedvoidButton1_Click(objectsender,EventArgse)56


{57
//CreateaArrayListforxRefsofPDFDocument58
ArrayListxRefs=newArrayList();59
floatyPos=0f;60
longstreamStart=0;61
longstreamEnd=0;62
longstreamLen=0;63
stringstrPDFMessage=null;64
//PDFHeaderMessage65
strPDFMessage="%PDF-1.1\n";66
ConvertToByteAndAddtoStream(strPDFMessage);67

68
//ID1ForContaint69
//ID2ForLengthoftheStream70
//writetheText71

72
//1>StartanewPage73
xRefs.Add(mPDF.Length);74
strPDFMessage="10obj\n";75
ConvertToByteAndAddtoStream(strPDFMessage);76
strPDFMessage="<</Length20R>>\n";77
ConvertToByteAndAddtoStream(strPDFMessage);78
strPDFMessage="stream\n";79
ConvertToByteAndAddtoStream(strPDFMessage);80

81
//Getthestartofthestream82
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
//AddthetextdatatothePDFmemorystream92
strPDFMessage="(Doatest)Tj\n";93
ConvertToByteAndAddtoStream(strPDFMessage);94
strPDFMessage="ET\n";95
ConvertToByteAndAddtoStream(strPDFMessage);96
//GettheEndofthestream97
streamEnd=mPDF.Length;98
//GettheLengthofthestream99
streamLen=streamEnd-streamStart;100
strPDFMessage="endstream\nendobj\n";101
ConvertToByteAndAddtoStream(strPDFMessage);102

103
//Add2objecttoxRef104
xRefs.Add(mPDF.Length);105
strPDFMessage="20obj\n"+streamLen+"\nendobj\n";106
ConvertToByteAndAddtoStream(strPDFMessage);107

108
//AddPagetoxRefs109
xRefs.Add(mPDF.Length);110
strPDFMessage="30obj\n<</Type/Page/Parent40R/Contents10R>>\nendobj\n";111
ConvertToByteAndAddtoStream(strPDFMessage);112

113
//BuildthePages114
xRefs.Add(mPDF.Length);115
strPDFMessage="40obj\n<</Type/Pages/Count1\n";116
ConvertToByteAndAddtoStream(strPDFMessage);117
strPDFMessage="/Kids[\n30R\n]\n";118
ConvertToByteAndAddtoStream(strPDFMessage);119
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F050R>>>>\n";120
ConvertToByteAndAddtoStream(strPDFMessage);121
strPDFMessage="/MediaBox[00"+pageWidth+""+pageDepth+"]\n>>\nendobj\n";122
ConvertToByteAndAddtoStream(strPDFMessage);123

124
//AddfonttoxRefs125
xRefs.Add(mPDF.Length);126
strPDFMessage="50obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";127
ConvertToByteAndAddtoStream(strPDFMessage);128

129
//AddthecatalogtoxRefs130
xRefs.Add(mPDF.Length);131
strPDFMessage="60obj\n<</Type/Catalog/Pages40R>>\nendobj\n";132
ConvertToByteAndAddtoStream(strPDFMessage);133

134
//xRefsEntry135
streamStart=mPDF.Length;136
strPDFMessage="xref\n07\n000000000065535f\n";137
for(inti=0;i<xRefs.Count;i++)138


{139
strPDFMessage+=xRefFormatting((long)xRefs[i])+"00000n\n";140
}141
ConvertToByteAndAddtoStream(strPDFMessage);142
//TrailerforthePDF143
strPDFMessage="trailer\n<<\n/Size"+(xRefs.Count+1)+"\n/Root60R\n>>\n";144
ConvertToByteAndAddtoStream(strPDFMessage);145
//xReflocationentry146
strPDFMessage="startxref\n"+streamStart+"\n%%EOF\n";147
ConvertToByteAndAddtoStream(strPDFMessage);148
//WritethePDFfromMemoryStreamtoFileStream149
mPDF.WriteTo(pPDF.BaseStream);150
//ClosetheStream151
mPDF.Close();152
pPDF.Close();153
}154
}
155
(三). 示例代码下载
http://www.cnblogs.com/Files/ChengKing/Create_PDF_File.rar
[本文核心代码为引用,方便查看用]
本文介绍如何使用C#编程语言从头开始构建一个简单的PDF文件。通过具体步骤和代码示例,展示了设置页面尺寸、字体大小及将文本转换为PDF格式的方法。
1239

被折叠的 条评论
为什么被折叠?



