Html to Pdf library in Azure Function
Azure函数显然尚不支持System.Drawing(sanbox信息)。运行对其具有依赖性的函数将引发以下消息:
1
| System.Drawing is not supported on this platform . |
我最初是在WebApp中使用Select.HtmlToPdf从HTML创建PDF文档。但是,由于将PDF生成移至Azure函数,因此不再是选择。
此外,推荐的库是wkhtmltopdf,但是似乎没有.netstandard2.0版本。
如何使用Azure Functions(C#)完成PDF生成?
更新:该功能正在S1-App Service计划上运行。
Update2:使用OdeToCode上显示的方法会给出错误Qt: Could not initialize OLE (error 80010106)
- 您是否在消费计划模式下运行?如果是这样,则沙箱的限制更严格,您需要在应用程序服务计划模式下运行以模仿Web应用程序。 docs.microsoft.com/zh-CN/azure/azure-functions/functions-sca le
-
请阅读这个
-
@Ken W:我正在应用服务模式下运行它
这时,我创建了一个新的netcore2.0 Azure AppService API,该API支持Select.HtmlToPdf,并且可能会在短时间内仍无法使用netcore3.0的情况下将该功能移至容器。
该函数仅使用一些参数调用API,并且可以等待PDF生成异步。
正如Jerry所提到的,它可能与DinkToPdf一起使用。但是,模板html docs不得包含JavaScript,因此该解决方案对于我的用例无效。
我最近提出了一个从HTML页面生成PDF文件的解决方案。我也找不到在Azure函数中运行的适当框架的问题。但是我发现使用wkhtmltopdf可以从HTML页面生成PDF文档。
这里是一个链接:
https://wkhtmltopdf.org/
我发现我可以使用的最低应用服务计划是:B1服务计划。这不适用于消费计划。我使用实验性的Powershell模式进行了此操作,但是使用C#或任何其他受支持的语言也应该可以做到这一点。
我对PDF输出并不感到兴奋,但是可以完成工作。有很多选项可以使用,但是除了纵向或横向模式之外,它似乎对我没有太大的影响。
- 感谢@Filip,您是否恰巧在某处共享源?我实际上最终得到了执行PDF渲染的Azure函数调用和AppService API,但是Id喜欢这个问题的一种解决方案。
对于DinkToPdf,错误Qt: Could not initialize OLE (error 80070005)是由javascript标记或引用引起的。参见Travis所做的测试。删除js后,函数会成功返回PDF,但错误消息仍然存在。
我发现另一个库OpenHtmlToPdf适用于S1中的Azure函数(提到@Filip的B1)应用程序服务计划。只需从@Scott提供的示例中更改BuildPdf方法即可。尚未测试其性能。
1 2 3 4
| private static byte[] BuildPdf(string html)
{
return OpenHtmlToPdf.Pdf.From(html).Content();
} |
-
感谢@Jerry,我无法删除用于PDF生成的html文档中的javascript。此时,具有Azure函数的Im会对支持Select.HtmlToPdf的WebService进行API调用,并且可能会在短时间内仍无法与netcore3.0一起使用时将该功能移至容器。
-
@Ovi我的错,我应该弄清楚js标记限制在DinkToPdf中,而不是在OpenHtmlToPdf中。没关系,因为您已经找到了有效的解决方案,所以如果有兴趣,可以尝试其他方法。顺便说一句,只是找到另一个软件包,我会做一些测试。如果可行,我将其添加到我的解决方案中,以供更多人参考。无论如何,好问题!