@Galdar
Web, JS, PHP, NGINX, Linux

Как исправить ошибку конвертации из HTML в PDF?

В ошибке пишет что проблема с путем или с файлом в который записывает, путь проверил многократно, другие функции создания файла работают и конвертор из xls в pdf то же работает, но почему в этой библиотеки такая ошибка, кто сталкивался или знает как решить, гугли но ответа не нашел(
html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%= title %></title>
</head>
<body style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size:10px; padding:20px 40px; margin: 0; line-height:1.5;">
    
    <table cellspacing="0" cellpadding="0" width="100%">

        <tr>

            <% for( let i in column ){ %>
                <th><%- column[ i ] %></th>
            <% } %>
         
        </tr>

        <tr>

            <% for( let i in value ){ %>

                <% for( let v in value[ i ] ){ %>

                    <td><%- value[ i ][ v ] %></td>
                    
                <% } %>

            <% } %>

        </tr>

    </table>

</body>
</html>



Код

let params = {

        "title": fileName,
        "column": arrayColumn,
        "value": resultData["result"]

    }

    ejs.renderFile( manifest.file.templ.pdf, params, ( err, html ) => {

        if( err ) console.log( err );

        const options = { "format": "Letter"}

        console.log(`${timePath}${fileName}`);

        convert_HTML_PDF.create( html, options ).toFile( `${timePath}${fileName}`, (err, res) => {

            console.log(res);

            if( err ) console.log( err );

        })

    })



Ошибка

Error: html-pdf: Unknown Error
Auto configuration failed
140068023615104: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
140068023615104:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
140068023615104:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:conf_mod.c:285:module=ssl_conf, path=ssl_conf
140068023615104:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:conf_mod.c:222:module=ssl_conf

at ChildProcess.respond (/var/test/node_modules/html-pdf/lib/pdf.js:134:17)
at ChildProcess.emit (events.js:314:20)
at Process.ChildProcess._handle.onexit (internal/child_process.js:276:12)



Проверив библиотеку отдельно от основного проекта она работает. Значит какие-то проблемы с библиотеками в основном проекте или в самой структуре, но что может мешать?

Теперь чистый проект с двумя библиотеками для сборки pdf файла выдает эту же ошибку. Сервер не перезагружал, просто стало выдавать ошибку с пустого места, ни че не менял. Думаю уже дело в настройках сервера, но что, что мешает?
package.json

{
  "name": "html-pdf-converter",
  "version": "1.0.0",
  "description": "HTML to PDF converter",
  "main": "index.js",
  "author": "",
  "license": "ISC",
  "dependencies": {
    "ejs": "2.5.7",
    "html-pdf": "^3.0.1"
  }
}



index

const http = require('http');
const fs = require('fs');
const port = 6006;
const htmlPdf = require('html-pdf');
const ejs = require('ejs');

const requestHandler = (request, response) => {

    if (request.url.indexOf('.') != -1){

        response.end(fs.readFileSync(__dirname + request.url));

    } else {

        let date = new Date();
        let month = date.getMonth() + 1;
        month = (month < 10 ? '0' + month : month);
        let day = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate());
        date = day + '.' + month + '.' + date.getFullYear();

        const params = {
            name: "Аида Дроган",
            email: "aida.drogan.box@gmail.com",
            id: "127001",
            company: "#BlondieCode",
            logo: "/images/logo.png",
            date: date,
            quantity: 1,
            price: 66,
            currency: "BTC",
            product: "Вундер-Вафля (меч, серебро)",
            units: "штука"
        };

        ejs.renderFile(__dirname + '/template.ejs', params, (err, html) => {

            const options = { format: 'A4'};
            const fileName = __dirname + '/file.pdf';

            const renderHtml = html.replace(/img src=\"\//g, 'img src="file://' + __dirname + "/");

            htmlPdf.create(renderHtml, options).toFile(fileName, (err) => {

                if (err) {
                    console.log('Ошибка конвертации', err)
                }

                response.end(html);
            });

        })
    }

};

const server = http.createServer(requestHandler);

server.listen(port, (err) => {

    if (err) {
        return console.log('Ошибка сервера', err)
    }

    console.log(`Вишу на порту ${port}`);
});

  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
@Galdar Автор вопроса
Web, JS, PHP, NGINX, Linux
Временное решение проблемы

https://github.com/bazelbuild/rules_closure/issues/351

В проекте выполнить: export OPENSSL_CONF=/dev/null

Этот способ такое себе, на данный момент заметил что данная настройка сбрасывается и периодически ее нужно прописывать заново. Если кто-то найдет способ более надежный отпишите плиз.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы