猿问

如何使用jsreport和jsreport Chrome Pdf呈现1k pdf文件?

我试图能够使用Express.js生成端点报告,并使用Express.js生成端点,我在JSON中传递数组,API遍历它并在forEach循环中使用,然后将每个对象用于抓取门户网站,获取响应,然后创建一个PDF文件...


这种方法是伪工作,但是我很确定存在一些并发问题...因为,如果我在JSON数组中传递2个项目,那么API可以毫无问题地创建2个PDF文件,但是如果我传递300个API,随机创建50 ...或60或120。


这是我的jsreport配置


const jsReportConfig = {

  extensions: {

    "chrome-pdf": {

      launchOptions: {

        timeout: 10000,

        args: ['--no-sandbox', '--disable-setuid-sandbox'],

      },

    },

  },

  tempDirectory: path.resolve(__dirname, './../../temporal/pdfs'),

  templatingEngines: {

    numberOfWorkers: 4,

    timeout: 180000,

    strategy: 'http-server',

  },

};

我像这样设置jsreport实例


jsreport.use(jsReportChrome());

jsreport.use(jsReportHandlebars());

jsreport.init()

而且,这就是我呈现报告的方式,该checkInvoiceStatus函数用作HTTP调用,返回返回到Handlebars模板中的HTML响应。


const renderReports = (reporter, invoices) => new Promise(async (resolve, reject) => {

    try {

      const templateContent = await readFile(

        path.resolve(__dirname, './../templates/hello-world.hbs'),

        'utf-8',

      );

      invoices.forEach(async (invoice) => {

        try {

          const response = await checkInvoiceStatus(invoice.re, invoice.rr, invoice.id)

          const $ = await cheerio.load(response);

          const reporterResponse = await reporter.render({

            template: {

              content: templateContent,

              engine: 'handlebars',

              recipe: 'chrome-pdf',

              name: 'PDF Validation',

              chrome: {

                displayHeaderFooter: true,

                footerTemplate: '<table width=\'100%\' style="font-size: 12px;"><tr><td width=\'33.33%\'>{#pageNum} de {#numPages}</td><td width=\'33.33%\' align=\'center\'></td><td width=\'33.33%\' align=\'right\'></td></tr></table>',

              },

            },

            data: {

              taxpayerId: 'CAC070508MY2',

              captcha: $('#ctl00_MainContent_ImgCaptcha').attr('src'),

              bodyContent: $('#ctl00_MainContent_PnlResultados').html(),

            },

          });


我不知道为什么,但是此功能在500毫秒后终止,但是文件是在1分钟后创建的...

绝地无双
浏览 357回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答