Node,phantomjs&将html转换为pdf:忽略元素维度?

时间:2016-10-27 17:36:33

标签: html node.js pdf phantomjs

我想从HTML文档生成PDF,其中HTML文档包含以cm为单位指定的元素。我们的想法是指定元素或图像以适合指定的页面。问题是我不能让维度得到尊重。

这是我正在使用的测试HTML:

<html>
<head>
   <title>test case</title>
</head>
<body>
     <div style="width: 21cm; height: 27cm; border: solid 1px black;">This should be within page bounds!?</div>
</body>
</html>

尝试使用NodeJS模块&#39; phantomjs-pdf&#39; (0.1.2),我使用了以下代码:

var pdf = require('phantomjs-pdf');

var options = {
    "html" : "./test-data/document.html",
};

pdf.convert(options, function(result) {

    /* Using a buffer and callback */
    result.toBuffer(function(returnedBuffer) {});

    /* Using a readable stream */
    var stream = result.toStream();

    /* Using the temp file path */
    var tmpPath = result.getTmpPath();

    /* Using the file writer and callback */
    result.toFile("out.pdf", function() {});
});

输出文件是21cm x 29.71.cm(美国信件)。

我已经尝试了另一个软件包&#39; html-pdf&#39;,它似乎也是基于PhantomJS的并且得到了相同的行为,这表明该问题可能与PhantomJS有关?

有什么建议吗?

我愿意使用替代软件包从HTML转换为PDF,条件是元素维度得到尊重。这是因为我将使用一个图像作为背景(PNG或SVG,取决于支持),它代表一个预期的文档模板,然后将基于一个绝对位置放置HTML元素与页面的给定部分。元件。

我使用的是NodeJS 6.7.0,MacOS X 10.12,我通过MacPorts安装了PhantomJS 2.0.0。

1 个答案:

答案 0 :(得分:0)

在发现https://github.com/fraserxu/electron-pdf后我放弃了PhantomJS。到目前为止,它已超出预期。因为Electron运行Chromium,所以printToPDF功能可以像你期望的那样工作。您可以npm install electron-pdf并使用CLI对您的应用进行评估。由于您希望Letter大小添加-p Letter并可能将边距设置为无。

在任何一种情况下,我都发现(浏览器)窗口大小(以像素为单位)需要与PDF大小相匹配。对于Letter,这将是(8.5“* 96)乘以(11”* 96)96是HTML的标准像素/英寸比率。如果你想以厘米为单位使用这个比例。