首页 > 解决方案 > 使用 HtmlRenderer.PdfSharp 将图像加载到 PDF 时出现问题

问题描述

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

供参考 - 请参阅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 之后。

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

标签: .netpdfhtml-renderer

解决方案


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

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>";

就是这样!非常适合我。


推荐阅读