(一). 功能
创建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

2

3

4

5

6

7

8

9

10

11

12

13

14

15



16

17

18

19

20

21

22

23

24

25

26

27

28

29

30



31

32

33

34

35

36

37

38

39



40

41

42

43



44

45

46

47

48

49

50

51

52



53

54

55

56



57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138



139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

(三). 示例代码下载
http://www.cnblogs.com/Files/ChengKing/Create_PDF_File.rar
[本文核心代码为引用,方便查看用]