注    册
密 码 忘记密码
保存密码         取消
注    册
密 码 忘记密码
保存密码         取消

我的日志

C#生成pdf的源代码

分类:ASP.NET技术
2007.1.19 18:20 作者:书生天堂 | 评论:0 | 阅读:0

摘自:C#生成pdf的源代码


哪位可以告诉小弟c#生成pdf的源代码?  
---------------------------------------------------------------  
 
//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();  
}  
}

你可以通过这个链接引用该篇文章:http://guanzhx.bokee.com/viewdiary.14748037.html

            怎样将后台生成的在... 上一篇 | 下一篇 数据恢复技术大揭密

我的广告

我的搜索

文章评论

添加评论

马上抢占沙发,进行评论
昵  称:  主  页: (选填)
验证码: 

定制广告