您的位置:首页 > 编程语言 > C#

用C#实现生成PDF文档

2009-05-15 17:33 465 查看
 
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.1n";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

      

   xRefs.Add(mPDF.Length);   

   strPDFMessage="1 0 objn";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

   strPDFMessage="<< /Length 2 0 R >>n";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

   strPDFMessage="streamn";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

  ////////PDF文档描述   

   streamStart=mPDF.Length;   

  //字体   

   strPDFMessage="BTn/F0 " + fontSize +" Tfn";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

  //PDF文档实体高度   

   yPos = pageDepth - pageMargin;   

   strPDFMessage=pageMargin + " " + yPos +" Tdn" ;   

   ConvertToByteAndAddtoStream(strPDFMessage);   

   strPDFMessage= leadSize+" TLn" ;   

   ConvertToByteAndAddtoStream(strPDFMessage);   

      

  //实体内容   

   strPDFMessage= "(http://www.wenhui.org)Tjn" ;   

   ConvertToByteAndAddtoStream(strPDFMessage);   

   strPDFMessage= "ETn";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

   streamEnd=mPDF.Length;   

      

   streamLen=streamEnd-streamStart;   

   strPDFMessage= "endstreamnendobjn";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

  //PDF文档的版本信息   

   xRefs.Add(mPDF.Length);   

   strPDFMessage="2 0 objn"+ streamLen + "nendobjn";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

      

   xRefs.Add(mPDF.Length);   

   strPDFMessage="3 0 objn<</TYPE R 0 1 Contents 4 Parent Page>>nendobjn";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

      

   xRefs.Add(mPDF.Length);   

   strPDFMessage="4 0 objn<</TYPE ]n ? + pageDepth pageWidth strPDFMessage="/Kids[n3 0 Rn]n" ConvertToByteAndAddtoStream(strPDFMessage); ; 1n?; Count Pages>>n";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

      

   strPDFMessage="startxrefn" + streamStart+"n%%EOFn";   

   ConvertToByteAndAddtoStream(strPDFMessage);   

   mPDF.WriteTo(pPDF.BaseStream);   

      

   mPDF.Close();   

   pPDF.Close();   

   }   

   }   

   }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息