C#生成pdf的类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();  
}  
}  

解决方案 »

  1.   

    http://www.yesky.com/SoftChannel/72342380468109312/20030723/1716351.shtml用C# Builder生成PDF文件
      

  2.   

    U can use xml to do this , too
      

  3.   

    there should be plenty of html2pdf components out there
    Doc Converter COM Component 
    http://www.verypdf.com/pdfcamp/doc2pdf_readme.htmlor use the html2pdf services at
    http://html2pdf.seven49.net/see
    http://authors.aspalliance.com/articles/renderpdf.aspxhttp://authors.aspalliance.com/articles/refer2pdfVBNET.html
      

  4.   

    谢谢楼上朋友的帮助,特别是saucer.我己另开三贴,加上在VC论坛上的一贴,共送出一千分。请 vabug(边缘) 到
    http://expert.csdn.net/Expert/topic/2546/2546942.xml?temp=.2621424
    接分请 redbb(. Dotneter .) 到
    http://expert.csdn.net/Expert/topic/2546/2546954.xml?temp=.6346399
    接分请 redbb(. Dotneter .) 到请 saucer(思归) 到
    http://expert.csdn.net/Expert/topic/2546/2546963.xml?temp=.9249994
    接分另外其它up过的朋友都有分,再次感谢。
      

  5.   

    结贴了,本贴分全给Saucer了,请以上Up过的朋友去以下贴接分。
    http://expert.csdn.net/Expert/topic/2546/2546963.xml?temp=.9249994