JavaScript中将HTML和CSS转换为PDF

6
我知道有很多库可用,但似乎没有一个完全符合我的情况。所以我希望在这里得到一些建议...
技术:我在后端使用Node.js和Express.js,在前端使用html/css/js。浏览器支持IE8及以上版本、Chrome、Firefox和其他现代浏览器。
我需要做的是:为用户提供一个“转换为PDF”按钮,用户点击后将会把DOM中的一部分转换为PDF格式。当后端调用另一个应用程序的API时,这个DOM的HTML内容是动态生成的。CSS是静态的。
除此之外,我有很大的自由度可以做任何我想做的事情,只要不必向第三方发送明文数据等。
有什么推荐的方法吗?
更新:正在研究wkhtmltopdf。

你找到了哪些库,为什么它们不符合你的情况? - Bergi
嗯,比如说,jspdf看起来很棒,但它不支持CSS。 - Max
2个回答

5
基本上,这就是我最终做的事情。
console.log("before");
fs.writeFile(html_filename, html, function (err) {
  if (err) {res.writeHead(400); res.end("" + err); return;}

  console.log("wrote html fine; now converting");
  exec('wkhtmltopdf ' + html_filename + ' ' + pdf_filename, function (err, stdout, stderr) {
    if (err) {res.writeHead(400); res.end("" + err); return;}

    console.log("converted; now reading");
    fs.readFile(pdf_filename, function (err, data) {
      if (err) {res.writeHead(400); res.end("" + err); return;}

      console.log("read fine; now serving");
      res.writeHead(200, {"content-type" : "application/pdf"});
      res.end(data);
    });
  });
});

我认为它有点丑陋,因为需要创建一个文件,然后转换它,再提供服务,最后删除这两个文件。我怀疑在这里存在可扩展性问题。此外,wkhtmltopdf似乎与osx不兼容。但是,在Linux上不存在这样的问题。


0

尝试使用wkhtmltopdf。您可以轻松查看Ruby on Rails驱动程序的当前实现,并将其应用于node和express。您基本上调用一个命令行应用程序,它将使用您的打印CSS将其转换为PDF。


我一直在尝试让wkhtmltopdf工作,但遇到了很大的问题。 - Max
目前,当我手动从终端或从节点执行wkhtmltopdf时,我的Mac dock中会弹出一个新进程,我必须点击它才能继续。否则它就会挂起。 - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接