欢迎光临
我们一直在努力

用C#实现生成PDF文档(原码)-.NET教程,C#语言

建站超值云服务器,限时71元/月

//write by wenhui.org

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

}

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 用C#实现生成PDF文档(原码)-.NET教程,C#语言
分享到: 更多 (0)