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

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

(三). 示例代码下载