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

如何将HTML字符串转换为HtmlUri用于Haukcode.WkHtmlToPdfDotNet页脚?

解决方案:直接内嵌HTML字符串作为页脚(无需额外接口)

针对使用Haukcode.WkHtmlToPdfDotNet时,无法直接用HTML字符串设置页脚的问题,有两种比搭建控制器更简便的实现方式:

1. 使用Data URI(推荐)

把HTML字符串编码为Base64,拼接成Data URI格式直接赋值给HtmlUrl,无需额外服务或文件:

var converter = new SynchronizedConverter(new PdfTools());

// 你的页脚HTML字符串
var footerHtml = @"<div>
    <table border=""1"" width=""100%"" style=""
        border: 5px solid royalblue;
        border-spacing: 0;
        border-collapse: collapse;
        text-align: center; 
    "">
        <tr>
            <td>
                <p style=""font-size: 14px; font-weight: normal; margin: 0; line-height: 1.1em; color: royalblue;"">
                    Organization: ""INFORMATICA"" LLC.<br/>
                    Date of signing: 05.03.2023 15:49:32<br/>
                    Name: Daria Valeryevna Ivanova<br/>
                    Position: Leading Specialist<br/>
                    Certificate ID: 2DCEFE0001AD0CAA411A1D6CB228DCD6<br/>
                    Signature validity date: 17.02.2025 10:13:52<br/>
                </p>
            </td>
        </tr>
    </table>
</div>";

// 编码为Data URI
var footerDataUri = $"data:text/html;base64,{Convert.ToBase64String(Encoding.UTF8.GetBytes(footerHtml))}";

FooterSettings footer = new FooterSettings()
{
    HtmlUrl = footerDataUri
};

var doc = new HtmlToPdfDocument()
{
    GlobalSettings = {
        ColorMode = ColorMode.Color,
        Orientation = Orientation.Landscape,
        PaperSize = PaperKind.A4
    },
    Objects = {
        new ObjectSettings() {
            PagesCount = true,
            HtmlContent = transformedContent,
            WebSettings = { DefaultEncoding = Encoding.UTF8.HeaderName },
            HeaderSettings = { FontSize = 9, Right = "", Line = false, Spacing = 2.812 },
            FooterSettings = footer
        }
    }
};

try
{
    byte[] pdf = converter.Convert(doc);
    Helpers.FileHelper.SaveData(documentInfo.FileName, pdf);
}
catch (Exception ex)
{
    Console.WriteLine(ex);
    throw;
}

2. 使用临时本地文件

如果HTML内容较大或包含复杂资源,可将字符串写入临时文件,通过file://协议引用,转换完成后删除文件:

var converter = new SynchronizedConverter(new PdfTools());

var footerHtml = @"<div>
    <!-- 你的页脚HTML内容 -->
</div>";

// 创建临时文件
var tempFilePath = Path.Combine(Path.GetTempPath(), $"footer_{Guid.NewGuid()}.html");
File.WriteAllText(tempFilePath, footerHtml, Encoding.UTF8);

// 转换为file:// URI
var footerFileUri = new Uri(tempFilePath).AbsoluteUri;

FooterSettings footer = new FooterSettings()
{
    HtmlUrl = footerFileUri
};

// 后续文档配置和转换逻辑和之前一致...

try
{
    byte[] pdf = converter.Convert(doc);
    Helpers.FileHelper.SaveData(documentInfo.FileName, pdf);
}
catch (Exception ex)
{
    Console.WriteLine(ex);
    throw;
}
finally
{
    // 清理临时文件
    if (File.Exists(tempFilePath))
    {
        File.Delete(tempFilePath);
    }
}

两种方案都无需搭建额外的控制器接口,Data URI是最轻量化的选择,适合大多数场景。

内容的提问来源于stack exchange,提问作者Евгений

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:38:11