Узел html -pdf Автоконфигурация не удалась - PullRequest
1 голос
/ 01 апреля 2020

У меня есть простой проект, использующий пакет html -pdf, я хотел бы сделать простой файл PDF с таким кодом:

...
    pdf.create(html).toStream(function(err, stream){
            if (err) reject(err) ;
            else  stream.pipe(fs.createWriteStream(path.join(__dirname, '../../../assets/docs/idv_docs/')+data.link+'.pdf'));
          });
...

, но я получаю сообщение об ошибке:

Error: html-pdf: Received the exit code '1'

    cc-server_1  | Auto configuration failed
    cc-server_1  | 139666354437760:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(libssl_conf.so): libssl_conf.so: cannot open shared object file: No such file or directory
    cc-server_1  | 139666354437760:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
    cc-server_1  | 139666354437760:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:conf_mod.c:285:module=ssl_conf, path=ssl_conf
    cc-server_1  | 139666354437760:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:conf_mod.c:222:module=ssl_conf
    cc-server_1  |
    cc-server_1  |     at ChildProcess.respond (/usr/src/app/node_modules/html-pdf/lib/pdf.js:121:31)
    cc-server_1  |     at ChildProcess.emit (events.js:311:20)
    cc-server_1  |     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)

Ответы [ 2 ]

4 голосов
/ 03 апреля 2020

Обновление: проверенный код, это работает для меня:

const pdf = require('html-pdf');
const path = require('path');
const fs = require('fs');

let dir = path.join(__dirname, '/test');
let test = new Promise((resolve, reject) => {
    pdf.create(html).toStream(function (err, stream) {
        if (err) return reject(err);
        // making directory if doesn't exist
        if (!fs.existsSync(dir)) {
            fs.mkdirSync(dir, { recursive: true });
        }
        stream.pipe(fs.createWriteStream(path.join(dir, `${data.link}.pdf`)));
    });
});

В качестве альтернативы, вы можете использовать shelljs:

const pdf = require('html-pdf');
const path = require('path');
const fs = require('fs');
const shell = require('shelljs');

let dir = path.join(__dirname, '../../../assets/docs/idv_docs');
let test = new Promise((resolve, reject) => {
    // getting our html file
    pdf.create(html).toStream(function (err, stream) {
        if (err) return reject(err);

        // making directory if doesn't exist
        shell.mkdir('-p', dir);

        // creating the pdf file
        stream.pipe(fs.createWriteStream(path.join(dir, `${data.link}.pdf`)));
    });
});
0 голосов
/ 10 апреля 2020

Я использую создать это работает для меня

//pdf.js

const pdf = require('html-pdf');

function toPDF (html, options,  output) {
    return new Promise(function (resolve, reject) {
        pdf.create(html, options).toFile(output, function(error, response) {
            if (error) {
                reject(error);
            }
            else {
                resolve(response);
            }
        });
    });
}

module.exports = {
    toPDF: toPDF
}

При использовании

const options = { format: 'A4', base: './assets' }
const fileName = `PDFDemo-${Date.now()}`
const output = `./pdf/${fileName}.pdf`
let pdfResult = await pdfUtil.toPDF(html, options, output)
...