蛍窃
喘C#旗鷹伏撹匯倖酒汽議PDF猟周゜
| namespace PDFGenerator |
| { |
| /// < summary> |
| /// Application : Ge | neration of PDF file from te | xt |
| /// Author : Pramod Kumar Singh |
| /// Date : 25th July 2001 |
| ///< /summary> |
| public class PDFGenerator |
| { |
| static float pageWidth = 594.0f; |
| static float pageDepth = 828.0f; |
| static float pageMargin = 30.0f; |
| static float fontSize = 10.0f; |
| static float leadSize = 10.0f; |
| //Create a PDF file. |
| //PDF on Disk |
| static StreamWriter | pPDF=new StreamWriter("F:\T | emp\myPDF.pdf"); |
| //PDF in Memory |
| static MemoryStream | mPDF= new MemoryStream(); |
| //Convert the Text Data to PDF f | ormat and write back to |
| //Memory Stream |
| static void ConvertToByteAndAddt | oStream(string strMsg) |
| { |
| Byte[] buffer=null; |
| buffer=ASCIIEncoding | .ASCII.GetBytes(strMsg); |
| mPDF.Write(buffer,0,buffer.Length); |
| buffer=null; |
| } |
| //Format the data length in xRef Format |
| static string xRefFormatting(lon | g xValue) |
| { |
| string strMsg =xValue.ToString(); |
| int iLen=strMsg.Length; |
| if (iLen< 10) |
| { |
| StringBuilder s=new StringBuilder(); |
| //string s=null; |
| int i=10-iLen; |
| s.Append('0',i); |
| strMsg=s.ToString() + strMsg; |
| } |
| return strMsg; |
| } |
| //Entry Point |
| static void Main(string[] args) |
| { |
| //Create a ArrayList | for xRefs of PDF Document |
| ArrayList xRefs=new ArrayList(); |
| Byte[] buffer=null; |
| float yPos =0f; |
| long streamStart=0; |
| long streamEnd=0; |
| long streamLen =0; |
| string strPDFMessage=null; |
| //PDF Header Message |
| strPDFMessage="%PDF-1.1n"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //ID 1 For Containt |
| //ID 2 For Length of the Stream |
| //write the Text |
| //1> Start a new Page |
| xRefs.Add(mPDF.Length); |
| strPDFMessage="1 0 objn"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| strPDFMessage="< < /Length 2 0 R >>n"; |
| ConvertToByteAndAddtoStream(strP | DFMessage); |
| strPDFMessage="streamn"; |
| ConvertToByteAndAddtoStream(strP | DFMessage); |
| //Get the start of the stream |
| streamStart=mPDF.Length; |
| strPDFMessage="BTn/ | F0 " + fontSize +" Tfn"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| yPos = pageDepth - pageMargin; |
| strPDFMessage=pageMargin + " " + | yPos +" Tdn" ; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| strPDFMessage= leadSize+" TLn" ; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //Add the text data to the PDF m | emory stream |
| strPDFMessage= "(Pra | mod Kumar Singh)Tjn" ; |
| ConvertToByteAndAddtoStream(strP | DFMessage); |
| strPDFMessage= "ETn"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //Get the End of the stream |
| streamEnd=mPDF.Length; |
| //Get the Length of the stream |
| streamLen=streamEnd-streamStart; |
| strPDFMessage= "endstreamnendobjn"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //Add 2 object to xRef |
| xRefs.Add(mPDF.Length); |
| strPDFMessage="2 0 objn"+ strea | mLen + "nendobjn"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //Add Page to xRefs |
| xRefs.Add(mPDF.Length); |
| strPDFMessage="3 0 objn< < /Type/Page/Parent 4 0 R/Contents 1 0 R>>nendobjn"; |
| ConvertToByteAndAddtoStream(strP | DFMessage); |
| //Build the Pages |
| xRefs.Add(mPDF.Length); |
| strPDFMessage="4 0 objn< < | ; /Type /Pages /Count 1n"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| strPDFMessage="/Kids[n3 0 Rn]n"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| strPDFMessage="/Resources< < /ProcSet[/PDF/Text]/Font< < /F0 5 0 R>> >>n"; |
| ConvertToByteAndAddtoStream(strP | DFMessage); |
| strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]n>>nendobjn"; |
| ConvertToByteAndAddtoStream(strP | DFMessage); |
| //Add font to xRefs |
| xRefs.Add(mPDF.Length); |
| strPDFMessage="5 0 objn< < /Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>nendobjn"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //Add the catalog to xRefs |
| xRefs.Add(mPDF.Length); |
| strPDFMessage="6 0 objn< < /Type/Catalog/Pages 4 0 R>>nendobjn"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //xRefs Entry |
| streamStart=mPDF.Length; |
| strPDFMessage="xref | n0 7n0000000000 65535 f n" | ; |
| for(int i=0;i< xRefs.Count;i++) |
| { |
| strPDFMessage+=xRefF | ormatting((long) xRefs[i])+" | 00000 n n"; |
| } |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //Trailer for the PDF |
| strPDFMessage="trailern< < n/Size "+ (xRefs.Count+1)+"n/Root 6 0 Rn>>n"; |
| ConvertToByteAndAddtoStream(strP | DFMessage); |
| //xRef location entry |
| strPDFMessage="start | xrefn" + streamStart+"n%%E | OFn"; |
| ConvertToByteAndAddt | oStream(strPDFMessage); |
| //Write the PDF from Memory Stre | am to File Stream |
| mPDF.WriteTo(pPDF.BaseStream); |
| //Close the Stream |
| mPDF.Close(); |
| pPDF.Close(); |
| } |
| } |
| } |