【问题标题】:Convert HTML to searchable PDF using PhantomJS / Node.js使用 PhantomJS / Node.js 将 HTML 转换为可搜索的 PDF
【发布时间】:2015-03-02 09:24:47
【问题描述】:

我正在使用 HTML 模板生成 PDF 的服务器端,该模板使用来自客户端和服务器的数据完成。下面的代码有效,但是:
1) PDF 文件比在客户端“另存为 PDF”时大 5 倍。
2) PDF 不可搜索。

我假设这两个问题都源于 PhantomJS 生成基于光栅与矢量的 PDF。我应该做些什么不同(希望我只是缺少一个或两个 PhantomJS 选项......)??

    var phantom = require('phantom');

    req.body['invoicenumber'] = 15010001;
    phantom.create(function(ph){
        ph.createPage(function(page) {
            page.set('paperSize', { format: 'Letter',orientation: 'portrait', margin: '1cm' });
            page.open("html/template.html", function(status) {
                page.evaluate(function(data) {
                    $(function() { populate(data); });
                    },function() {
                        var quotenumber
                        page.render('quotes/'+req.body['invoicenumber']+'.pdf', function(){
                            ph.exit();
                            res.send(req.body['invoicenumber']+'.pdf');
                    });
                },req.body); 
            });     
        });
    })

次要更新:增加页边距以使页面不放大会减小文件大小,但仍然是客户端“另存为 PDF”的 2.5 倍...

【问题讨论】:

  • 为了可搜索,必须将文本制作为文本,而不是图像,而不是矢量图形(即轮廓文本)。
  • 过去我扫描文档时,使用“光栅到矢量”来创建可搜索的文档。如果在这种情况下“大纲文本”是正确的术语,我会更正。
  • 事实上,如果您将其称为“光栅到矢量”,它会创建可搜索的文本,那么一切都很好。在这种情况下,转换器实际上做了 OCR(光学字符识别),而这正是我们所需要的。 OCR 创建文本,而“简单”矢量化所做的只是将形状转换为轮廓矢量对象,如果发生这种情况,您就有矢量,但文本尚未被识别为这样。换句话说,没有必要觉得自己被纠正了……
  • 为什么不将页面保存为html,然后才将其转换为pdf? (例如html2pdf
  • 如果可能的话,我会考虑改用 wkhtmltopdf,因为就我的经验而言,它可以生成迄今为止我测试过的工具中最小的 pdf。我没用过,但是有一个Node.is wrapper for wkhtmltopdf。输出包含实际文本,而不是光栅/矢量输出。由于它基于 webkit,因此可以在渲染之前运行 Javascript 来修改(以及几乎可以在浏览器中执行的任何操作)html。我没有添加它作为答案,因为它不使用 PhantomJS。

标签: node.js pdf phantomjs


【解决方案1】:

在 html 模板中尝试使用这些标头标签 (h1,h2...h6) 中的任何一个来包装您的内容。这些标题标签内的内容将在生成的 pdf 中呈现为文本。因此它应该是可搜索的。这也将减少大量的 pdf 文件大小。不知道为什么 div、p、table 等标签在 pdf 中呈现为图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2019-01-27
    • 2013-01-11
    • 1970-01-01
    • 2019-10-24
    相关资源
    最近更新 更多