首页 > 开发 > 综合 > 正文

用C#实现生成PDF文档

2024-07-21 02:17:44
字体:
来源:转载
供稿:网友

using system; 
using system.io; 
using system.text; 
using system.collections; 
 
namespace pdfgenerator 

 
public class pdfgenerator 

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 streamwriter ppdf=new streamwriter("e://mypdf.pdf"); 
 
static memorystream mpdf= new memorystream(); 
 
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 void main(string[] args) 

    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(); 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表