(一). 功能
创建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);102103 //Add 2 object to xRef104 xRefs.Add(mPDF.Length);105 strPDFMessage = "2 0 obj/n" + streamLen + "/nendobj/n";106 ConvertToByteAndAddtoStream(strPDFMessage);107108 //Add Page to xRefs109 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);112113 //Build the Pages114 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);123124 //Add font to xRefs125 xRefs.Add(mPDF.Length);126 strPDFMessage = "5 0 obj/n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>/nendobj/n";127 ConvertToByteAndAddtoStream(strPDFMessage);128129 //Add the catalog to xRefs130 xRefs.Add(mPDF.Length);131 strPDFMessage = "6 0 obj/n<</Type/Catalog/Pages 4 0 R>>/nendobj/n";132 ConvertToByteAndAddtoStream(strPDFMessage);133134 //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 PDF143 strPDFMessage = "trailer/n<</n/Size " + (xRefs.Count + 1) + "/n/Root 6 0 R/n>>/n";144 ConvertToByteAndAddtoStream(strPDFMessage);145 //xRef location entry146 strPDFMessage = "startxref/n" + streamStart + "/n%%EOF/n";147 ConvertToByteAndAddtoStream(strPDFMessage);148 //Write the PDF from Memory Stream to File Stream149 mPDF.WriteTo(pPDF.BaseStream);150 //Close the Stream151 mPDF.Close();152 pPDF.Close();153 }154}
155
(三). 示例代码下载
http://www.cnblogs.com/Files/ChengKing/Create_PDF_File.rar
转载请注明原文地址: https://ibbs.8miu.com/read-14231.html