【问题标题】:Problem loading images into PDF using HtmlRenderer.PdfSharp使用 HtmlRenderer.PdfSharp 将图像加载到 PDF 时出现问题
【发布时间】:2019-08-11 16:47:41
【问题描述】:

这有点远,但也许有人可能有一些想法。

供参考 - 请参阅Images don't display in PDF,一个类似的问题。

我正在使用 Htmlrenderer.PdfSharp 库从 HTML 内容创建 PDF 文件。一切都完美无缺,除了图像。它们只是显示一个大红色框。

PDF 在本地以调试模式运行时可以正常工作,但在服务器上部署时却不行。我有一些额外的信息可能会有所帮助 - 在执行创建 PDF 的命令时:

        using (MemoryStream ms = new MemoryStream())
        {
            var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4);
            pdf.Save(ms);
            res = ms.ToArray();
        }

在服务器上,我收到以下一些错误:

Exception thrown: 'System.Security.Authentication.AuthenticationException' in System.dll

在本地运行我没有收到这些错误。我感觉这与 .NET 引擎无法正确解析图像 URL 有关。话虽如此,图像 URL 是完全限定的。但是,如果有帮助的话,它在 HTTPS 之后。

我无法继续调试。如果有人有任何想法,我很乐意听取他们的意见 - 即使只是更多的地方我可以尝试寻找线索。

【问题讨论】:

    标签: .net pdf html-renderer


    【解决方案1】:

    经过相当多的实验,我找到了解决方案。以下是允许此解决方案工作的构建的参考,因此请确保您拥有正确的版本:

    https://github.com/ArthurHub/HTML-Renderer/pull/41

    解决方法是将有问题的图片加载到字节数组中,然后使用图片的base64字符串表示将图片直接加载到HTML中:

    byte[] array = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"[YourImageFilePathHere]"));
    

    这将从项目部署路径中的文件夹中获取文件 - 在我的例子中,我有一个名为 images 的文件夹,我的相关图像位于其中。

    接下来,在 CSS 中(或者,如果您愿意,可以选择内联):

    htmlContent += " img.logo { width:110px;height:110px;content: url('data:image/jpeg;base64," + Convert.ToBase64String(array) +"')} ";
    

    最后,在 HTML 中:

    string imageUrl = "<img class=\"logo\"></img>";
    

    就是这样!非常适合我。

    【讨论】:

    • 你可以使用在线工具转换为base64,然后将其内联到html模板中
    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2019-04-16
    • 2010-12-05
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多