使用 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>";
就是这样!非常适合我。
这有点远景,但也许有人会有一些想法。
供参考 - 请参阅
我正在使用 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>";
就是这样!非常适合我。