您的位置:首页 > 编程语言 > ASP

Asp.net 2.0 用C# 创建 PDF文件[引用] (示例代码下载)

2007-10-18 11:31 1071 查看
(一). 功能
创建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


(三). 示例代码下载

http://www.cnblogs.com/Files/ChengKing/Create_PDF_File.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐