C#如何将HTML内容保存为PDF文件

来源:Java编程网作者:小何头衔:草根站长
导读:本期聚焦于小伙伴创作的《C#如何将HTML内容保存为PDF文件》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何将HTML内容保存为PDF文件》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发过程中,将HTML内容转换为PDF文件是较为常见的需求,无论是生成业务报表、导出网页内容还是保存格式化文档,都需要用到这项技术。不同的实现方案在转换效果、性能、兼容性上各有差异,开发者可以根据实际需求选择合适的工具。

C#如何将HTML内容保存为PDF文件

常用HTML转PDF方案对比

目前C#实现HTML转PDF的主流方案主要有三类,不同方案的特点如下表所示:

方案名称核心依赖优点缺点
iTextSharp + XMLWorkeriTextSharp库开源免费,支持自定义样式,转换精度较高对复杂CSS支持有限,配置相对繁琐
WkHtmlToPdfWkHtmlToPdf工具支持现代CSS,转换效果接近浏览器渲染需要额外安装工具,部署时依赖外部程序
第三方商业库Spire.PDF等功能全面,兼容性好,使用简单商业使用需要付费,免费版有功能限制

基于iTextSharp的实现步骤

1. 环境准备

首先需要安装iTextSharp库,可以通过NuGet包管理器搜索iTextSharp进行安装,也可以手动下载对应版本的dll文件添加到项目引用中。本文使用的是iTextSharp 5.5.13版本,安装完成后即可在代码中调用相关API。

2. 基础转换代码实现

核心逻辑是先解析HTML内容,再将解析后的元素添加到PDF文档中,以下是完整的实现代码:

using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
using iTextSharp.tool.xml.pipeline;
using iTextSharp.tool.xml.html;
using iTextSharp.tool.xml.css;
using iTextSharp.tool.xml.parser;

namespace HtmlToPdfDemo
{
    public class HtmlToPdfHelper
    {
        /// <summary>
        /// 将HTML字符串转换为PDF文件
        /// </summary>
        /// <param name="htmlContent">HTML内容字符串</param>
        /// <param name="outputPath">PDF输出路径</param>
        public static void ConvertHtmlToPdf(string htmlContent, string outputPath)
        {
            // 初始化PDF文档对象,设置页面大小为A4
            Document document = new Document(PageSize.A4);
            try
            {
                // 创建PDF写入器,关联到输出文件流
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputPath, FileMode.Create));
                document.Open();

                // 配置HTML解析器,支持中文需要添加字体
                FontFactory.Register(System.AppDomain.CurrentDomain.BaseDirectory + "fonts/simsun.ttc", "SimSun");
                FontFactory.Register(System.AppDomain.CurrentDomain.BaseDirectory + "fonts/simhei.ttf", "SimHei");

                // 创建XMLWorker实例,用于将HTML转换为PDF元素
                XMLWorkerHelper worker = XMLWorkerHelper.GetInstance();
                // 解析HTML内容并写入PDF
                using (StringReader sr = new StringReader(htmlContent))
                {
                    worker.ParseXHtml(writer, document, sr, null, Encoding.UTF8, new FontProvider());
                }
            }
            catch (Exception ex)
            {
                throw new Exception("HTML转PDF失败:" + ex.Message);
            }
            finally
            {
                // 关闭文档释放资源
                if (document.IsOpen())
                {
                    document.Close();
                }
            }
        }
    }

    /// <summary>
    /// 自定义字体提供器,解决中文显示问题
    /// </summary>
    public class FontProvider : IFontProvider
    {
        public bool IsRegistered(string fontName)
        {
            return true;
        }

        public Font GetFont(string fontName, string encoding, bool embedded, float size, int style, BaseColor color)
        {
            // 优先使用注册的字体,没有则使用默认字体
            if (FontFactory.IsRegistered(fontName))
            {
                return FontFactory.GetFont(fontName, encoding, embedded, size, style, color);
            }
            // 默认使用宋体显示中文
            return FontFactory.GetFont("SimSun", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, size, style, color);
        }
    }
}

3. 调用示例

使用上述工具类转换HTML的代码如下:

using System;

namespace HtmlToPdfDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 待转换的HTML内容
            string html = @"
                <html>
                <head>
                    <style>
                        .title { font-size: 24px; font-weight: bold; text-align: center; }
                        .content { font-size: 14px; line-height: 24px; margin: 20px; }
                    </style>
                </head>
                <body>
                    <div class='title'>HTML转PDF测试</div>
                    <div class='content'>
                        这是一段测试内容,用于验证C#将HTML转换为PDF的功能是否正常。
                        支持中文显示,支持基础CSS样式,转换后的PDF可以正常查看。
                    </div>
                </body>
                </html>
            ";
            // 输出路径
            string outputPath = "test.pdf";
            try
            {
                HtmlToPdfHelper.ConvertHtmlToPdf(html, outputPath);
                Console.WriteLine("PDF生成成功,路径:" + outputPath);
            }
            catch (Exception ex)
            {
                Console.WriteLine("生成失败:" + ex.Message);
            }
        }
    }
}

注意事项

  • 中文显示需要提前注册对应的中文字体,否则会出现乱码或者内容缺失的情况,字体文件需要放在项目可访问的路径下。
  • iTextSharp的XMLWorker对CSS的支持有限,复杂的选择器、flex布局等现代CSS特性可能无法正常渲染,建议转换前简化HTML的样式。
  • 如果HTML中包含图片,需要保证图片路径正确,或者使用绝对路径,否则图片可能无法正常显示到PDF中。
  • 生成的PDF文件如果内容过多,会自动分页,不需要额外处理分页逻辑。

常见问题处理

问题1:转换后中文显示乱码

原因是没有注册中文字体,需要按照上述代码中的方式,将宋体、黑体等常用中文字体注册到FontFactory中,并且在HTML的样式中指定对应的字体名称。

问题2:CSS样式不生效

首先检查CSS语法是否正确,然后确认使用的CSS属性是否在XMLWorker的支持范围内,不支持的属性可以替换为支持的样式实现相同效果。

问题3:图片无法显示

如果是本地图片,使用绝对路径;如果是网络图片,需要确保网络可访问,也可以在代码中将网络图片下载到本地后使用本地路径。

C#HTML_to_PDFPDF_conversioniTextSharp修改时间:2026-07-07 08:06:14

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。