You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:45:01