我严格遵循以下示例:https://odetocode.com/blogs/scott/archive/2018/02/14/pdf-generation-in-azure-functions-v2.aspx
我从DinkToPdf repository下载了三个文件
问题是当我添加32位或64位DLL时,出现以下错误:
发生一个或多个错误。 (试图加载格式错误的程序。(HRESULT的异常:0x8007000B)
尤其是此代码:
private static byte[] BuildPdf(string html)
{
byte[] arr = null;
try
{
arr = pdfConverter.Convert(new HtmlToPdfDocument() { Objects = { new ObjectSettings { HtmlContent = html } } });
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
return arr;
}
“我的Azure Function V2 .net Core”项目设置为“任何CPU”,没有其他选项。我在Stack Overflow上看到了有关此错误的其他文章,我觉得这是不同的,因为其他人正在谈论两个可以控制的项目,并且体系结构有所不同,但是在这里我只指出了一些二进制文件,无论是否它们是32或64,错误仍然存在。我还看到有些人更改了IIS的设置,但我没有。有任何想法吗?谢谢!
答案 0 :(得分:1)
发生一个或多个错误。 (试图加载格式错误的程序。(HRESULT的异常:0x8007000B)
此错误是由使用64位dll引起的。默认情况下,VS与32位功能CLI配合使用,因此会出现此错误。有点问题,我们可以将x64 CLI与several steps一起使用。
问题是一个棘手的错误Qt: Could not initialize OLE (error 80070005)
。
当我们的html内容包含一些javascript标记或引用时,函数将挂起。请参见test done by Travis。删除js后,函数会成功返回PDF,但错误消息仍然存在。(我认为这没关系,因为我们可以按预期获得完整的PDF。)
如果不接受此限制,请安装软件包OpenHtmlToPdf,如下所示更改代码。您也可以尝试other packages。
private static byte[] BuildPdf(string html)
{
return Pdf.From(html).Content();
}
请注意,此方法在“消费功能计划”或“免费App服务计划”中无效。