彭宁新的网站系统
当前位置:中国站长 > C#    
程序开发C语言Java/JSP移动开发汇编语言C#C++VBDelphi
CGI论坛SilverlightActionScript
用C#实现生成PDF文档
整理时间:12-10-2009 整理人员:夏天   ( 得分:5 )
阅读人次:1259
  1. using System;   
  2. using System.IO;   
  3. using System.Text;   
  4. using System.Collections;   
  5. namespace PDFGenerator   
  6. {   
  7.      public class PDFGenerator   
  8.      {   
  9.           static float pageWidth = 594.0f;   
  10.           static float pageDepth = 828.0f;   
  11.           static float pageMargin = 30.0f;   
  12.           static float fontSize = 20.0f;   
  13.           static float leadSize = 10.0f;   
  14.           static StreamWriter pPDF = new StreamWriter("E:\\myPDF.pdf");   
  15.           static MemoryStream mPDF = new MemoryStream();   
  16.           static void ConvertToByteAndAddtoStream(string strMsg)   
  17.           {   
  18.                 Byte[] buffer = null;   
  19.                 buffer = ASCIIEncoding.ASCII.GetBytes(strMsg);   
  20.                 mPDF.Write(buffer, 0, buffer.Length);   
  21.                 buffer = null;   
  22.           }   
  23.           static string xRefFormatting(long xValue)   
  24.           {   
  25.                 string strMsg = xValue.ToString();   
  26.                 int iLen = strMsg.Length;   
  27.                 if (iLen < 10)   
  28.                 {   
  29.                      StringBuilder s = new StringBuilder();   
  30.                      int i = 10 - iLen;   
  31.                      s.Append("0", i);   
  32.                      strMsg = s.ToString() + strMsg;   
  33.                 }   
  34.                 return strMsg;   
  35.           }   
  36.           static void Main(string[] args)   
  37.           {   
  38.                 ArrayList xRefs = new ArrayList();   
  39.                 //Byte[] buffer=null;   
  40.                 float yPos = 0f;   
  41.                 long streamStart = 0;   
  42.                 long streamEnd = 0;   
  43.                 long streamLen = 0;   
  44.                 string strPDFMessage = null;   
  45.                 //PDF文档头信息   
  46.                 strPDFMessage = "%PDF-1.1\n";   
  47.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  48.                 xRefs.Add(mPDF.Length);   
  49.                 strPDFMessage = "1 0 obj\n";   
  50.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  51.                 strPDFMessage = "<< /Length 2 0 R >>\n";   
  52.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  53.                 strPDFMessage = "stream\n";   
  54.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  55.                 /**/  
  56.                 ////////PDF文档描述   
  57.                 streamStart = mPDF.Length;   
  58.                 //字体   
  59.                 strPDFMessage = "BT\n/F0 " + fontSize + " Tf\n";   
  60.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  61.                 //PDF文档实体高度   
  62.                 yPos = pageDepth - pageMargin;   
  63.                 strPDFMessage = pageMargin + " " + yPos + " Td\n";   
  64.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  65.                 strPDFMessage = leadSize + " TL\n";   
  66.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  67.                 //实体内容   
  68.                 strPDFMessage = "(http://www.wenhui.org)Tj\n";   
  69.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  70.                 strPDFMessage = "ET\n";   
  71.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  72.                 streamEnd = mPDF.Length;   
  73.                 streamLen = streamEnd - streamStart;   
  74.                 strPDFMessage = "endstream\nendobj\n";   
  75.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  76.                 //PDF文档的版本信息   
  77.                 xRefs.Add(mPDF.Length);   
  78.                 strPDFMessage = "2 0 obj\n" + streamLen + "\nendobj\n";   
  79.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  80.                 xRefs.Add(mPDF.Length);   
  81.                 strPDFMessage = "3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";   
  82.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  83.                 xRefs.Add(mPDF.Length);   
  84.                 strPDFMessage = "4 0 obj\n<</Type /Pages /Count 1\n";   
  85.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  86.                 strPDFMessage = "/Kids[\n3 0 R\n]\n";   
  87.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  88.                 strPDFMessage = "/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";   
  89.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  90.                 strPDFMessage = "/MediaBox [ 0 0 " + pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";   
  91.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  92.                 xRefs.Add(mPDF.Length);   
  93.                 strPDFMessage = "5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";   
  94.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  95.                 xRefs.Add(mPDF.Length);   
  96.                 strPDFMessage = "6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";   
  97.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  98.                 streamStart = mPDF.Length;   
  99.                 strPDFMessage = "xref\n0 7\n0000000000 65535 f \n";   
  100.                 for (int i = 0; i < xRefs.Count; i++)   
  101.                 {   
  102.                      strPDFMessage += xRefFormatting((long)xRefs[i]) + " 00000 n \n";   
  103.                 }   
  104.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  105.                 strPDFMessage = "trailer\n<<\n/Size " + (xRefs.Count + 1) + "\n/Root 6 0 R\n>>\n";   
  106.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  107.                 strPDFMessage = "startxref\n" + streamStart + "\n%%EOF\n";   
  108.                 ConvertToByteAndAddtoStream(strPDFMessage);   
  109.                 mPDF.WriteTo(pPDF.BaseStream);   
  110.                 mPDF.Close();   
  111.                 pPDF.Close();   
  112.           }   
  113.      }   
  114. }  
 
操作系统
Windows系列苹果
Linux架设服务器
数据库
MySqlSQL Server
ACCESSVFP
SybaseDB2
Oracle
综合应用
网络技术黑客技术
电脑故障病毒安全
程序开发
C语言Java/JSP
移动开发汇编语言
C#C++
VBDelphi
CGI论坛
SilverlightActionScript
平面&三维
PhotoShopFlash
3DmaxCAD
CorelDraw
网页设计
JavascriptVML教程
Php语言AJAX
XMLASP
ASP.NETCss
HTML语法Dom
电脑基础
域名知识虚拟主机
网站知识VPS知识
主机知识服务器架设
邮箱知识IDC增值服务
最新推荐
  • C#中的析构函数
  • 防止对 Visual Basic .NET...
  • C# 2.0:使用匿名方法、迭...
  • .net中内存占用的问题
  • ASP.NET缓存:方法和最佳实...
  • UBB(c#完整版)
  • C#实现web信息自动抓取
  • C#实现的18位身份证格式验...
  • 本类热门
  • sideBar控件的使用方法
  • C# 2.0:使用匿名方法、迭...
  • .net中内存占用的问题
  • 防止对 Visual Basic .NET...
  • ASP.NET缓存:方法和最佳实...
  • C#中的析构函数
  • UBB(c#完整版)
  • C#实现web信息自动抓取

  • 粤ICP备12087766号   |  

    粤公网安备 44139902100106号