如何修改C#代码实现字节流转PDF文件替代生成Word文档
HTML转PDF输出代码调整方案
原有逻辑说明
你的现有代码本质是将拼接好的HTML内容写入后缀为.doc的文件,属于借助Word兼容HTML能力实现的简易Word导出,并非生成标准二进制Word文件。因此要切换为导出PDF,核心是将已拼接完成的HTML内容转换为标准PDF格式输出。
具体改造步骤
- 安装依赖包:
.NET Framework项目可直接安装NuGet包iTextSharp,.NET Core/.NET 5+项目可安装兼容包iTextSharp.LGPLv2.Core,二者都基于LGPL协议可免费使用。 - 替换原有导出逻辑:
无需生成临时doc文件,直接在内存中将HTML转换为PDF字节流后返回即可,调整后的代码如下:
// 需提前引入以下命名空间 using iTextSharp.text; using iTextSharp.text.pdf; using iTextSharp.tool.xml; using System.IO; // 拼接完整HTML内容 string fullHtml = string.Format("<html>{0}</html>", sbHtml); byte[] pdfFileBytes; // 内存中完成HTML转PDF using (var memoryStream = new MemoryStream()) { using (var pdfDoc = new Document()) { using (var pdfWriter = PdfWriter.GetInstance(pdfDoc, memoryStream)) { pdfDoc.Open(); using (var stringReader = new StringReader(fullHtml)) { // 解析HTML写入PDF XMLWorkerHelper.GetInstance().ParseXHtml(pdfWriter, pdfDoc, stringReader); } pdfDoc.Close(); } } pdfFileBytes = memoryStream.ToArray(); } // 配置PDF文件名与返回格式 string pdfFileName = $"{tdindb.TDCode}-test.pdf"; return File(pdfFileBytes, System.Net.Mime.MediaTypeNames.Application.Pdf, pdfFileName);
常见问题处理
- 中文显示空白:需要手动注册中文字体到转换逻辑中,示例代码如下:
// 以注册系统自带宋体为例,确保部署环境存在对应字体文件 BaseFont simsunFont = BaseFont.CreateFont(@"C:\Windows\Fonts\simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); Font normalFont = new Font(simsunFont, 12, Font.NORMAL);
- 样式不生效:建议将CSS样式写为HTML行内样式,避免外部样式、内部样式表无法被解析的问题。
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

