-- 作者:admin
-- 发布时间:11/9/2004 2:25:00 AM
-- C#生成 PDF文件
发信人: Nineghost (AMANI), 信区: DotNET 标 题: C#生成 PDF文件 发信站: BBS 水木清华站 (Wed Dec 12 15:50:14 2001) 发信人: lizhenguo (夸父·追日), 信区: ShareCode 标 题: 用C#代码生成一个简单的PDF文件 发信站: 哈工大紫丁香 (2001年12月10日13:57:28 星期一), 站内信件 用C#代码生成一个简单的PDF文件 www.chinacs.net 2001-10-11 中文C#技术站 using System; using System.IO; using System.Text; using System.Collections; namespace PDFGenerator { /// <summary> /// Application : Generation of PDF file from text /// 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:\\Temp\\myPDF.pdf"); //PDF in Memory static MemoryStream mPDF= new MemoryStream(); //Convert the Text Data to PDF format and write back to //Memory Stream static void ConvertToByteAndAddtoStream(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(long 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.1\n"; ConvertToByteAndAddtoStream(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 obj\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="<< /Length 2 0 R >>\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="stream\n"; ConvertToByteAndAddtoStream(strPDFMessage); //Get the start of the stream streamStart=mPDF.Length; strPDFMessage="BT\n/F0 " + fontSize +" Tf\n"; ConvertToByteAndAddtoStream(strPDFMessage); yPos = pageDepth - pageMargin; strPDFMessage=pageMargin + " " + yPos +" Td\n" ; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage= leadSize+" TL\n" ; ConvertToByteAndAddtoStream(strPDFMessage); //Add the text data to the PDF memory stream strPDFMessage= "(Pramod Kumar Singh)Tj\n" ; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage= "ET\n"; ConvertToByteAndAddtoStream(strPDFMessage); //Get the End of the stream streamEnd=mPDF.Length; //Get the Length of the stream streamLen=streamEnd-streamStart; strPDFMessage= "endstream\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); //Add 2 object to xRef xRefs.Add(mPDF.Length); strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); //Add Page to xRefs xRefs.Add(mPDF.Length); strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n "; ConvertToByteAndAddtoStream(strPDFMessage); //Build the Pages xRefs.Add(mPDF.Length); strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/Kids[\n3 0 R\n]\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nend obj\n"; ConvertToByteAndAddtoStream(strPDFMessage); //Add font to xRefs xRefs.Add(mPDF.Length); strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding /WinAnsiEncoding>>\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); //Add the catalog to xRefs xRefs.Add(mPDF.Length); strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); //xRefs Entry streamStart=mPDF.Length; strPDFMessage="xref\n0 7\n0000000000 65535 f \n"; for(int i=0;i<xRefs.Count;i++) { strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n"; } ConvertToByteAndAddtoStream(strPDFMessage); //Trailer for the PDF strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n"; ConvertToByteAndAddtoStream(strPDFMessage); //xRef location entry strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n"; ConvertToByteAndAddtoStream(strPDFMessage); //Write the PDF from Memory Stream to File Stream mPDF.WriteTo(pPDF.BaseStream); //Close the Stream mPDF.Close(); pPDF.Close(); } } } -- Love is like a butterfly, The more you chase it, the more it eludes you, But if you just let it fly, it will come to you when you least expect it. Love can make you happy but often it hurts, but love's only special when you give it to someone who is really worth it. So take your time and choose the best. ※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.214.7] 上一篇 返回上一页 回到目录 回到页首 下一篇
|