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分页
上一篇:ubuntu如何实现定时触发任务
下一篇:轻松搭建个人网站:零成本入门指南
上一篇:ubuntu如何实现定时触发任务
下一篇:轻松搭建个人网站:零成本入门指南

