//
Write by wenhui.org
Using
System;
Using
System.IO;
Using
System.Text;
Using
System.collections;
Namespace
PdfGenerator
{Public class PDFGenerator {static float pageWidth = 594.0f; static float pageDepth = 828.0f; static float pageMargin = 30.0f; static float fontSize = 20.0f; static float leadSize = 10.0f; static StreamWriter pPDF = new StreamWriter ( "E: //myPDF.pdf");static MemoryStream mPDF = new MemoryStream (); static void ConvertToByteAndAddtoStream (string strMsg) {Byte [] buffer = null; buffer = ASCIIEncoding.ASCII.GetBytes (strMsg); mPDF.Write (buffer, 0 , buffer.Length); buffer = null;} static string xRefFormatting (long xValue) {string strMsg = xValue.ToString (); int iLen = strMsg.Length; if (iLen <10) {StringBuilder s = new StringBuilder (); INT i = 10-Ilen; S.Append ('0', i); strmsg = S.toString () strmsg;} return strmsg;} static void main (string [] args) {ArrayList Xrefs = new arraylist () ; // Byte [] buffer = null; float ypos = 0f; long streaMstart = 0; long streamend = 0; long streamlen = 0; string strpdfMessage = null; // PDF document header information strpdfMessage = "% PDF-1.1 / n "; ConvertTobyTeandaddTREAM (STRPDFMESSAGE); Xrefs.Add (MPDF.Length); strpdfMessage =" 1 0 obj / n "; ConvertTobytean dAddtoStream (strPDFMessage); strPDFMessage = "<< / Length 2 0 R >> / n"; ConvertToByteAndAddtoStream (strPDFMessage); strPDFMessage = "stream / n"; ConvertToByteAndAddtoStream (strPDFMessage); / ** ///// PDF document describes streamStart = mPDF.Length; // font strPDFMessage = "BT / n / F0" fontSize "Tf / n"; ConvertToByteAndAddtoStream (strPDFMessage); // PDF document entity highly yPos = pageDepth - pageMargin; strPDFMessage = pageMargin "" YPOS "TD / N"; ConvertTobyTeandAddTREAM (STRPDFMESSAGE); StrpdfMessage = LeadSize "TL / N";
ConvertToByteAndAddtoStream (strPDFMessage); // substantial contents strPDFMessage = "(http://www.wenhui.org) Tj / n"; ConvertToByteAndAddtoStream (strPDFMessage); strPDFMessage = "ET / n"; ConvertToByteAndAddtoStream (strPDFMessage); streamEnd = mPDF. Length; streamLen = streamEnd-streamStart; strPDFMessage = "endstream / nendobj / n"; ConvertToByteAndAddtoStream (strPDFMessage); // version information xRefs.Add PDF document (mPDF.Length); strPDFMessage = "2 0 obj / n" streamLen "/ Nendobj/n"; traffictttobyteandaddtream (STRPDFMESSAGE );XREFS.ADD (MPDF.LENGTH) ;STRPDFMESSAGE="3 0 obj / n << / type / page / parent 4 0 r / contents 1 0 r >> / NENDOBJ /n";ConvertToByteAndAddtoStream(strPDFMessage);xRefs.Add(mPDF.Length);strPDFMessage="4 0 obj / n << / Type / Pages / Count 1 / n "; ConvertToByteAndAddtoStream (strPDFMessage); strPDFMessage =" / Kids [ / N3 0 r / n] / n "; convertTOBYTEANDDTOSTREAM (STRPDFMESSAGE); STRPDFMESSAGE =" / resources << / procset [/ pdf / text] / font << / f0 5 0 r >> >> / n "; ConvertTobyteandaddTostReam StrpdfMessage); strpdfMessage = "/ MediaBox [0 0" PageWidth " PageDepth "] / N >> / NENDOBJ / n "; ConvertToByteAndAddtoStream (strPDFMessage); xRefs.Add (mPDF.Length); strPDFMessage =" 5 0 obj / n << / Type / Font / Subtype / Type1 / BaseFont / Courier / Encoding / WinAnsiEncoding >> / nendobj / n " ; ConvertToByteAndAddtoStream (strPDFMessage); xRefs.Add (mPDF.Length); strPDFMessage = "6 0 obj / n << / Type / Catalog / Pages 4 0 R >> / nendobj / n"; ConvertToByteAndAddtoStream (strPDFMessage); streamStart = mPDF .Length; strpdfMessage = "XREF / N0 7 / N000000000000 65535 f / n"; for (int i = 0; i