使用 HtmlRenderer.PdfSharp 将图像加载到 PDF 时出现问题

Problem loading images into PDF using HtmlRenderer.PdfSharp

这有点远景,但也许有人会有一些想法。

供参考 - 请参阅 ,一个类似的问题。

我正在使用 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 之后。

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

经过大量试验,我找到了解决方案。这是对允许此解决方案工作的构建的引用,因此请确保您拥有正确的版本:

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

就是这样!非常适合我。