这让我有些慌张。我喜欢Azure功能的想法,但故障排除可能具有挑战性。我试图对我公司的免费订阅进行概念验证,将HTML传递给函数并让它吐出PDF。 HTML将包含患者数据,因此我们无法使用公共服务,而且使用大多数普通的HTML到PDF解决方案时,使用javascript和CSS太复杂了。使用Gecko引擎的ABCPdf实际上做得非常好。我们正在迁移到Azure App实例,因此我们无法以这种方式运行它,我希望Azure Functions将是下一个最佳选择。
这是我得到的错误。
2017-03-23T12:44:36.941执行函数时出现异常:Functions.NNMakePDF。 ABCpdf:无法加载DLL' ABCpdf10-32.dll':找不到指定的模块。 (HRESULT异常:0x8007007E)。
这是我的project.json
{
"框架":{ " net46":{ "依赖":{ " ABCpdf":" 10.1.2.1", " ABCpdf.ABCGecko":" 10.1.2.1" } } } }
这里是run.csx中的代码,虽然我不认为它是完全相关的
using System.Net;
using System.Net.Http.Headers;
using WebSupergoo.ABCpdf10;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("Processing PDF Request");
string html = await req.Content.ReadAsStringAsync();
XSettings.InstallLicense("License Key Goes Here");
Doc theDoc = new Doc();
theDoc.HtmlOptions.UseScript = true; // set to true if your layout is JavaScript-dependent
// add the first page of HTML. We save the returned ID as this will be used to add subsequent pages
theDoc.Page = theDoc.AddPage();
int imageID;
theDoc.HtmlOptions.Engine = EngineType.Gecko;
imageID = theDoc.AddImageHtml(html);
// now chain subsequent pages together. We stop when we reach a page which wasn't truncated
while (true)
{
if (!theDoc.Chainable(imageID))
{ break; }
theDoc.Page = theDoc.AddPage();
imageID = theDoc.AddImageToChain(imageID);
}
// After adding the pages we can flatten them. We can't do this until after the pages have been added because flattening will invalidate our previous ID and break the chain - flattening reduces the file size dramatically.
for (int i = 1; i <= theDoc.PageCount; i++)
{
theDoc.PageNumber = i;
theDoc.Flatten();
}
byte[] binaryPDF = theDoc.GetData();
log.Info($"PDF Generated. Length={binaryPDF.Length}");
var res = new HttpResponseMessage(HttpStatusCode.OK);
res.Content = new ByteArrayContent(binaryPDF);
res.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
res.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline");
return res;
}
我尝试在run.csx旁边添加一个bin文件夹并将ABCpdf10-32.dll放在那里,但它没有帮助。
答案 0 :(得分:3)
我们正在迁移到Azure App实例,因此我们无法以这种方式运行
功能应用程序在App Service之上运行,因此所有限制都是继承的。
以下链接表示您的HTML-to-PDF生成库可能被沙箱阻止: https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#pdf-generation-from-html