Nodejs读取外部图像并写为pdf

时间:2018-03-17 14:01:18

标签: javascript node.js asynchronous npm

我有一个html文件,其中有一些像{Ticket}这样的变量。在nodejs中,我试图将该变量替换为我拥有的图像。所以基本上输出将是一个pdf文件。

到目前为止,我的代码看起来像这样

ticket.html看起来像这样

IDENTITY

但它创建了一个空白的pdf文件。 我正在使用html-pdf生成pdf文件。我正在努力完成这项任务,但它无法正常工作。所以任何帮助和建议都会非常明显

2 个答案:

答案 0 :(得分:2)

您需要以不同方式将图像插入页面(使用file://协议)。实际上,该项目的GitHub页面上有一个示例,向您展示如何执行此操作herehere

在您的情况下,这将转化为以下内容:

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
  <table>
    <tr>
      <td></td>
      <td><img src="{Ticket}"></td>
    </tr>
  </table>
</body>
</html>

和JS文件:

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

const html = fs.readFileSync('./ticket.html', 'utf8');
const customHtml = html.replace('{Ticket}', `file://${require.resolve('./QRTicket.png')}`);

pdf.create(customHtml).toFile('QRImage.pdf', (err, res) => {
  if (err) return console.log(err);
  console.log(res);
});

修改

此示例假定以下文件夹结构。

.
├── index.js
├── node_modules
├── package.json
├── package-lock.json
├── QRTicket.png
└── ticket.html

使用命令node index.js运行,它将生成带有图像的所需PDF。

答案 1 :(得分:0)

我修改了我的ticket.html,现在我想在一个地方搜索并替换多个字符串。所以现在我的ticket.html就像这样

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <table>
        <tr>
            <td></td>
            <td><img src="{{Ticket}}"></td>
        </tr>
        <tr>
            <td>asdf</td>
            <td>tyui</td>
        </tr>
    </table>
</body>
</html>

现在express.js看起来像这样

const fs = require('fs');
const pdf = require('html-pdf');
const replaceOnce = require('replace-once');

const html = fs.readFileSync('ticket.html', 'utf8');
const image = 'file:///'+path.join(appRoot.path, 'file.png');

var find = ['{{Ticket}}', 'asdf', 'tyui'];
var replace = [image, 'Wills', 'Smith'];

const customHtml = replaceOnce(html, find, replace, 'gi')

pdf.create(customHtml).toFile('QRImage.pdf', (err, res) => {
  if (err) return console.log(err);
  console.log(res);
});