无法 运行 Azure WebApp Linux 上的 jsreportlocal(.Net 核心 2.1 MVC)

Unable to run jsreportlocal on Azure WebApp Linux (.Net core 2.1 MVC)

我在 Azure WebApp Linux 上部署了现有的 .Netcore 2.1 MVC。 我需要创建报告 pdf,所以我想使用 jsreport local。

var rs = new LocalReporting().UseBinary(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? JsReportBinary.GetBinary() : jsreport.Binary.Linux.JsReportBinary.GetBinary()).Configure((cfg) =>
    {
         cfg.HttpPort = 1000;
         cfg.AllowedLocalFilesAccess().BaseUrlAsWorkingDirectory();
         return cfg;
    }).AsUtility().Create();
var report = await rs.RenderAsync(new RenderRequest
    {
          Template = new Template
         {
              Recipe = Recipe.ChromePdf,
              Engine = Engine.None,
              Content = contentToPrint
          }
    });

在 windows 上,这段代码工作正常。在 Web 应用程序 (Linux) 上部署后,我收到错误:

渲染错误报告失败:尝试执行渲染命令时发生严重错误:无法启动 chrome!/tmp/jsreport/compile/jsreport-2.4.0-Bk_dhUp8V/chrome/chrome:加载共享库时出错: libX11.so.6: 无法打开共享对象文件: 没有这样的文件或目录故障排除: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md (1). caused by error (1) -> meta = {"remoteStack":"Error: Failed to launch chrome!\n/tmp/jsreport/compile/jsreport-2.4.0-Bk_dhUp8V/chrome/chrome: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory\n\n\nTROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md\n\n at onClose (jsreportRuntime.js:400867:14)\n at Interface.helper.addEventListener (jsreportRuntime.js:400856:50)\n 在 emitNone (events.js:111:20)\n 在 Interface.emit (events.js:208:7)\n 在Interface.close (readline.js:370:8)\n 在 Socket.onend (readline.js:149:10)\n 在 emitNone (events.js:111:20) \n 在 Socket.emit (events.js:208:7)\n 在 endReadableNT (_stream_readable.js:1064:12)\n 在 _combinedTickCallback (internal/process/next_tick.js:138:11 )\n at process._tickCallback (internal/process/next_tick.js:180:9)"}, stack = Error: at responseToBuffer ([eval]:72595:29) at concat ([eval]:72648:40 ) 在 ConcatStream. ([eval]:17182:43) 在 emitNone (events.js:111:20) 在 ConcatStream.emit (events.js:208:7) 在 finishMaybe ([eval]: 97353:14) 在 afterWrite ([eval]:97215:3) 在 _combinedTickCallback (internal/process/next_tick.js:144:20) 在 process._tickCallback (internal/process/next_tick.js:180:9)

Headless chrome 需要一些额外的共享库,这些库在默认的 Azure Web 应用程序 linux 环境中不存在。但是,您可以使用基于 docker 的 azure web 应用程序并安装这些必需的库。

RUN apt-get update && \   
    apt-get install -y gnupg  libgconf-2-4 wget && \
    wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
    sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && \
    apt-get update && \
    apt-get install -y google-chrome-unstable --no-install-recommends

ENV chrome:launchOptions:args --no-sandbox

在文档中查看此内容
https://jsreport.net/learn/dotnet-local#docker
https://jsreport.net/learn/dotnet-local#azure-web-apps

和例子
https://github.com/jsreport/jsreport-dotnet-example-docker