我正在使用NodeServices在AspNetCore应用程序中创建PDF . 应用程序在本地计算机上运行正常,但在 生产环境 中部署时,在调用pdf函数时,我收到以下错误:
错误:在Process.ChildProcess._handle.onexit(internal / child_process.js)的_errnoException(util.js:1022:11)处生成D:\ home \ site \ wwwroot \ node_modules \ phantomjs \ lib \ phantom \ bin \ phantomjs ENOENT :190:19)在onErrorNT(internal / child_process.js:372:16)处于_combinedTickCallback(internal / process / next_tick.js:138:11)at process._tickCallback(internal / process / next_tick.js:180:9) Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException:渲染报告期间出错:spawn D:\ home \ site \ wwwroot \ node_modules \ phantomjs \ lib \ phantom \ bin \ phantomjs ENOENT错误:spawn D:\ home \ site \ wwwroot \ node_modules \ phantomjs \ lib \ phantom \ bin \ phantomjs在onErrorNT上的Process.ChildProcess._handle.onexit(internal / child_process.js:190:19)的_errnoException(util.js:1022:11)ENOENT(internal / child_process.js: 372:16)在process._tickCallback(internal / process / next_tick.js:180:9)的_combinedTickCallback(internal / process / next_tick.js:138:11)
我确认所有文件都在正确的位置 . 部署中存在 node_modules
.
Azure上的节点版本:8.9.4
生成PDF的代码:
module.exports = function (callback, html) {
var jsreport = require('jsreport-core')();
jsreport.init().then(function () {
return jsreport.render({
template: {
content: html,
engine: 'jsrender',
recipe: 'phantom-pdf'
}
}).then(function (resp) {
callback(/* error */ null, resp.content.toJSON().data);
}).catch(function (e) {
callback(/* error */ e, null);
});
}).catch(function (e) {
callback(/* error */ e, null);
});
};
2 回答
问题在于安装Node包 . 我在Azure上使用Hosted Linux来构建解决方案 . 切换到托管VS2017构建,一切正常 . https://github.com/pofider/phantom-html-to-pdf/issues/68
如果您将Azure App Service与免费计划一起使用,则无法在服务器上呈现pdf . 这是因为该服务在沙箱中运行,因此无法运行第三方可执行文件,如node.exe . 您需要将服务计划升级为“基本”或更高版本 .