创建pdf文件

来源:互联网 发布:成品油批发价年度数据 编辑:程序博客网 时间:2024/05/07 20:52

   using    System;   
   using    System.IO;   
   using    System.Text;   
   using    System.Collections;   
    
   namespace    paladin.utility  
   {  
   ///    <summary>  
   ///    ToPdf    的摘要说明。  
   ///    </summary>  
   public    class    ToPdf  
   {  
   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    MemoryStream    mPDF=    new    MemoryStream();  
   
   public    ToPdf()  
   {  
   //  
   //    TODO:    在此处添加构造函数逻辑  
   //  
   }  
   
   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    public    void    CreatePdf(string    filePath)  
   {  
   StreamWriter    pPDF=new    StreamWriter(filePath);  
   
   ArrayList    xRefs=new    ArrayList();  
   //Byte[]    buffer=null;  
   float    yPos    =0f;  
   long    streamStart=0;  
   long    streamEnd=0;  
   long    streamLen    =0;  
   string    strPDFMessage=null;  
   //PDF文档头信息  
   strPDFMessage="%PDF-1.1/n";  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   
   xRefs.Add(mPDF.Length);  
   strPDFMessage="1    0    obj/n";  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   strPDFMessage="<<    /Length    2    0    R    >>/n";  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   strPDFMessage="stream/n";  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   ////////PDF文档描述  
   streamStart=mPDF.Length;  
   //字体  
   strPDFMessage="BT/n/F0    "    +    fontSize    +"    Tf/n";  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   //PDF文档实体高度  
   yPos    =    pageDepth    -    pageMargin;  
   strPDFMessage=pageMargin    +    "    "    +    yPos    +"    Td/n"    ;  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   strPDFMessage=    leadSize+"    TL/n"    ;  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   
   //实体内容  
   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);  
   //PDF文档的版本信息  
   xRefs.Add(mPDF.Length);  
   strPDFMessage="2    0    obj/n"+    streamLen    +    "/nendobj/n";  
   ConvertToByteAndAddtoStream(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";  
   ConvertToByteAndAddtoStream(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/n0000000000    65535    f    /n";  
   for(int    i=0;i<xRefs.Count;i++)  
   {  
   strPDFMessage+=xRefFormatting((long)    xRefs[i])+"    00000    n    /n";  
   }  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   strPDFMessage="trailer/n<</n/Size    "+    (xRefs.Count+1)+"/n/Root    6    0    R/n>>/n"; 


   ConvertToByteAndAddtoStream(strPDFMessage);  
   
   strPDFMessage="startxref/n"    +    streamStart+"/n%%EOF/n";  
   ConvertToByteAndAddtoStream(strPDFMessage);  
   mPDF.WriteTo(pPDF.BaseStream);  
   
   mPDF.Close();  
   pPDF.Close();  
   }  
   }  
   }  

 
 
原创粉丝点击