把dataset中数据转换成pdf格式 然后打印出来 怎么实现 ?
请高手执教 万分感谢!!!

解决方案 »

  1.   

    //创建pdf文件      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();   
       }   
       }   
       }