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

时间:2019-03-20 21:01:28

标签: .net pdf html-renderer

这是一个漫长的尝试,但也许有人可能有一些想法。

作为参考-参见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。就是说,图片网址是完全合格的。但是,如果有帮助,它就位于HTTPS后面。

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

1 个答案:

答案 0 :(得分:-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>";

就是这样!对我来说很完美。