C#编程简单实现生成PDF文档的方法示例

发布时间 - 2026-01-11 02:11:10    点击率:

本文实例讲述了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();
    }
  }
}

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#文件操作常用技巧汇总》、《C#遍历算法与技巧总结》、《C#程序设计之线程使用技巧总结》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》及《C#面向对象程序设计入门教程》

希望本文所述对大家C#程序设计有所帮助。


# C#  # 生成  # PDF文档  # C#实现PDF文档自动化生成的开发实战  # 使用C#生成二维码并插入PDF、Word与Excel文档  # 如何在C#中自动化生成PDF表格  # 在C#中生成PDF的步骤详解  # C#使用iTextSharp生成PDF的示例代码  # C#生成PDF的方法  # C#实现的pdf生成图片文字水印类实例  # C#生成PDF文件流  # C#生成动态pdf文件的实现示例  # 文档  # 程序设计  # 相关内容  # 遍历  # 感兴趣  # 数据结构  # 给大家  # 更多关于  # 所述  # 使用技巧  # 面向对象  # 讲述了  # Byte  # strMsg  # string  # buffer  # ASCII  # ASCIIEncoding  # null  # pdf 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows Hello人脸识别突然无法使用  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何在阿里云香港服务器快速搭建网站?  Python文件异常处理策略_健壮性说明【指导】  如何在建站之星绑定自定义域名?  详解Android图表 MPAndroidChart折线图  如何快速完成中国万网建站详细流程?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel如何处理文件下载请求?(Response示例)  如何在IIS中新建站点并解决端口绑定冲突?  如何在阿里云高效完成企业建站全流程?  做企业网站制作流程,企业网站制作基本流程有哪些?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何用腾讯建站主机快速创建免费网站?  如何快速搭建FTP站点实现文件共享?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  JS经典正则表达式笔试题汇总  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  如何在云主机快速搭建网站站点?  再谈Python中的字符串与字符编码(推荐)  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速搭建虚拟主机网站?新手必看指南  Bootstrap整体框架之CSS12栅格系统  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel模型事件有哪些_Laravel Model Event生命周期详解  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel怎么使用artisan命令缓存配置和视图  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Linux系统命令中tree命令详解  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  php结合redis实现高并发下的抢购、秒杀功能的实例  如何快速打造个性化非模板自助建站?  如何用西部建站助手快速创建专业网站?  如何在香港免费服务器上快速搭建网站?  Linux安全能力提升路径_长期防护思维说明【指导】  Android仿QQ列表左滑删除操作  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel如何生成URL和重定向?(路由助手函数)  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  简单实现jsp分页