用C#代码生成一个简单的PDF文件

    技术2022-05-11  52

    using System;using System.IO;using System.Text;using System.Collections;

    namespace PDFGenerator{///

    /// Application : Generation of PDF file from text /// Author : Pramod Kumar Singh /// Date : 25th July 2001 ///

    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 Diskstatic StreamWriter pPDF=new StreamWriter("F://Temp//myPDF.pdf");//PDF in Memorystatic MemoryStream mPDF= new MemoryStream();

    //Convert the Text Data to PDF format and write back to//Memory Streamstatic 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 Formatstatic 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 Pointstatic void Main(string[] args){//Create a ArrayList for xRefs of PDF DocumentArrayList xRefs=new ArrayList();Byte[] buffer=null;float yPos =0f;long streamStart=0;long streamEnd=0;long streamLen =0;string strPDFMessage=null;//PDF Header MessagestrPDFMessage="%PDF-1.1/n";ConvertToByteAndAddtoStream(strPDFMessage);

    //ID 1 For Containt//ID 2 For Length of the Stream//write the Text

    //1> Start a new PagexRefs.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 streamstreamStart=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 streamstrPDFMessage= "(Pramod Kumar Singh)Tj/n" ;ConvertToByteAndAddtoStream(strPDFMessage);strPDFMessage= "ET/n";ConvertToByteAndAddtoStream(strPDFMessage);//Get the End of the streamstreamEnd=mPDF.Length;//Get the Length of the streamstreamLen=streamEnd-streamStart;strPDFMessage= "endstream/nendobj/n";ConvertToByteAndAddtoStream(strPDFMessage);

    //Add 2 object to xRefxRefs.Add(mPDF.Length);strPDFMessage="2 0 obj/n"+ streamLen + "/nendobj/n";ConvertToByteAndAddtoStream(strPDFMessage);

    //Add Page to xRefsxRefs.Add(mPDF.Length);strPDFMessage="3 0 obj/n<>/nendobj/n";ConvertToByteAndAddtoStream(strPDFMessage);

    //Build the PagesxRefs.Add(mPDF.Length);strPDFMessage="4 0 obj/n<ConvertToByteAndAddtoStream(strPDFMessage);strPDFMessage="/Kids[/n3 0 R/n]/n";ConvertToByteAndAddtoStream(strPDFMessage);strPDFMessage="/Resources<> >>/n";ConvertToByteAndAddtoStream(strPDFMessage);strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]/n>>/nendobj/n";ConvertToByteAndAddtoStream(strPDFMessage);

    //Add font to xRefsxRefs.Add(mPDF.Length);strPDFMessage="5 0 obj/n<>/nendobj/n";ConvertToByteAndAddtoStream(strPDFMessage);

    //Add the catalog to xRefsxRefs.Add(mPDF.Length);strPDFMessage="6 0 obj/n<>/nendobj/n";ConvertToByteAndAddtoStream(strPDFMessage);

    //xRefs Entry streamStart=mPDF.Length;strPDFMessage="xref/n0 7/n0000000000 65535 f /n";for(int i=0;i{strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n /n";}ConvertToByteAndAddtoStream(strPDFMessage);//Trailer for the PDFstrPDFMessage="trailer/n<</n/Size "+ (xRefs.Count+1)+"/n/Root 6 0 R/n>>/n";ConvertToByteAndAddtoStream(strPDFMessage);//xRef location entrystrPDFMessage="startxref/n" + streamStart+"/n%%EOF/n";ConvertToByteAndAddtoStream(strPDFMessage);//Write the PDF from Memory Stream to File StreammPDF.WriteTo(pPDF.BaseStream);//Close the StreammPDF.Close();pPDF.Close();}}} 


    最新回复(0)