jsreport / jsreport-phantom-pdf

jsreport recipe which is rendering pdf from html using phantomjs
GNU Lesser General Public License v3.0
11 stars 8 forks source link

error with node16 and phantom-server strategy #39

Open abenhamdine opened 3 years ago

abenhamdine commented 3 years ago

jsreport-phantom-pdf was working perfectly with nodehs 14.16.0 but after upgrading to nodejs 16.4.0 we have an error 'phantomjs not found'

2021-07-03T18:32:46+02:00 Error: Cannot find module 'phantomjs'
2021-07-03T18:32:46+02:00 Require stack:
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-workers/lib/phantomWorker.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-workers/lib/phantomManager.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-workers/index.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/serverStrategy.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/conversion.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/index.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/jsreport-phantom-pdf/lib/phantom.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/jsreport-phantom-pdf/index.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/server/reports/jsreportConfigured.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/server/reports/generateReportFile.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/server/reports/reportsMgr.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/server/reports/routerReports.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/server/app/app.js
2021-07-03T18:32:46+02:00 - /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/server/server.js
2021-07-03T18:32:46+02:00 at Function.Module._resolveFilename (node:internal/modules/cjs/loader:927:15)
2021-07-03T18:32:46+02:00 at Function.Module._load (node:internal/modules/cjs/loader:772:27)
2021-07-03T18:32:46+02:00 at Module.require (node:internal/modules/cjs/loader:999:19)
2021-07-03T18:32:46+02:00 at require (node:internal/modules/cjs/helpers:93:18)
2021-07-03T18:32:46+02:00 at new module.exports (/home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-workers/lib/phantomWorker.js:28:36)
2021-07-03T18:32:46+02:00 at module.exports.PhantomManager.start (/home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-workers/lib/phantomManager.js:42:37)
2021-07-03T18:32:46+02:00 at ensurePhantom (/home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/serverStrategy.js:19:13)
2021-07-03T18:32:46+02:00 at module.exports (/home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/serverStrategy.js:40:5)
2021-07-03T18:32:46+02:00 at /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/conversion.js:69:50
2021-07-03T18:32:46+02:00 at /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/conversion.js:30:17
2021-07-03T18:32:46+02:00 at writeHtmlFile (/home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/conversion.js:10:16)
2021-07-03T18:32:46+02:00 at /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/conversion.js:26:13
2021-07-03T18:32:46+02:00 at writeHtmlFile (/home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/conversion.js:10:16)
2021-07-03T18:32:46+02:00 at /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/phantom-html-to-pdf/lib/conversion.js:22:9
2021-07-03T18:32:46+02:00 at /home/bas/app_a3accf6f-face-4001-9d7e-ba9f1379feb7/node_modules/graceful-fs/graceful-fs.js:61:14
2021-07-03T18:32:46+02:00 at FSReqCallback.oncomplete (node:fs:185:23)

our configuration of jsreport :

const jsreportConfig = {
    dataDirectory: path.join(__dirname, './data'),
    tempDirectory: path.join(__dirname, './temp'),
    templatingEngines: {
        numberOfWorkers: numberOfWorkers,
        // 60 mn au lieu de 30s par défaut
        timeout: 60 * 1000 * 60,
        templateCache: {
            max: 100, //LRU cache with max 100 entries, see npm lru-cache for other options
            enabled: true //disable cache
        },
        allowedModules: '*'
    },
    //jsreport-core is also able to load configuration from other sources including configuration file, environment variables and command line parameters. This can be opted in through option loadConfig:true. If this option is set to true the configuration is merged from the following sources in the particular order:
    loadConfig: false,
    //the temporary files used to render reports are cleaned up by default
    autoTempCleanup: true,
    //set to false when you want to always force crawling node_modules when searching for extensions and starting jsreport
    extensionsLocationCache: true
}

const jsreport = require('jsreport-core')(jsreportConfig)

//https://jsreport.net/learn/pdf-utils
//Pour gérer merge, append de pdfs ou utilisation du nombre de pages dans un template
jsreport.use(require('jsreport-pdf-utils')())
jsreport.use(require('jsreport-scripts')())

jsreport.use(require('jsreport-handlebars')())
//jsreport.use(require('jsreport-debug')());
jsreport.use(require('jsreport-templates')())
jsreport.use(require('jsreport-xlsx')())
// utilisation de phantom-pdf
// via https://github.com/pofider/phantom-html-to-pdf
jsreport.use(require('jsreport-phantom-pdf')({
    strategy: 'phantom-server',
    // timeout passé à 2h
    timeout: 2 * 60 * 60 * 1000,
    allowLocalFilesAccess: true
}))

excerpt of package.json

    "jsreport-chrome-pdf": "1.10.0",
    "jsreport-core": "2.10.1",
    "jsreport-handlebars": "2.1.0",
    "jsreport-pdf-utils": "1.11.0",
    "jsreport-phantom-pdf": "2.6.1",
    "jsreport-scripts": "2.6.0",
    "jsreport-templates": "2.4.0",
    "jsreport-xlsx": "2.5.0",
pofider commented 3 years ago

Hm, this works for me also on node 16. Maybe try to add phantomjs module to your deps in package.json explicitly.

Note phantomjs project is archived. Sooner or later it will stop working with newer versions of nodejs. You should migrate to the chrome-pdf

abenhamdine commented 3 years ago

Hm, this works for me also on node 16. Maybe try to add phantomjs module to your deps in package.json explicitly.

thx for your response, I will try !

Note phantomjs project is archived. Sooner or later it will stop working with newer versions of nodejs. You should migrate to the chrome-pdf

Yes definitely, you're right. We have just started the migration, but chrome-pdf renders templates a bit differently, and we have to track all the visual changes.