【问题标题】:Printing PDF using pdf.js使用 pdf.js 打印 PDF
【发布时间】:2013-01-02 08:13:49
【问题描述】:

我正在使用 pdf.js 在页面中嵌入单页 PDF,并且我希望能够仅打印 PDF,而不是整个 HTML 页面。

这可能吗?

【问题讨论】:

  • 你用什么浏览器?我让viewer.js中的supportsPrinting方法默认返回true,我可以在chrome中使用打印(由pdf.js提供)。

标签: javascript pdf printing pdf.js


【解决方案1】:

我之前使用 pdf.js 将 pdf 文档加载到画布上。

画布只包含一页。所以这对我来说是单页的:

  var canvas = document.getElementById('pdfPage');
  var win = window.open('', '', '');
  var html = "<img src='" + canvas.toDataURL() + "'>";
  win.document.write(html);
  win.document.close();
  win.focus();
  win.print();
  win.close();

我仍然需要找出多个页面需要什么。如果我这样做,我会编辑这个答案。

我不得不说这种方法不是最佳的,因为它不会打印“相机就绪”的 pdf 页面,或者换句话说,它的原始形式。它打印pdf页面的图像。区别在于不应存在的页边距和不应存在的页眉/页脚,因为它们不在原始文档中。因此,我将寻找一种方法来打印它,就像 pdf.js 查看器打印它一样——以原始形式并忠实于原始文档。

【讨论】:

  • 你找到什么了吗?
  • @Jamil,在我的答案中搜索 pdf。我已经不在那家公司了。
【解决方案2】:

我们可以在 viewer.js 文件的末尾添加以下代码,它会自动打印 pdf:

(function () {
    function printWhenReady() {
        try{
            if (PDFViewerApplication.initialized) {
                window.print();
            }
            else {
                window.setTimeout(printWhenReady, 3000);
            }
        }catch(ex){
            window.setTimeout(printWhenReady, 3000);
        }
    };

    printWhenReady();
})();

【讨论】:

    【解决方案3】:

    我终于解决了。

    我无法在此处发布我的代码,但这是我所做的:

    我将 PDF 渲染到 2 个画布上,一个用于缩略图,一个用于打印(隐藏)。然后我有一个打印按钮,它打开一个新窗口,其中包含一个img 标签,其中包含使用toImageURL() 的巨大画布的内容。在新窗口上调用了print() 函数,然后调用close() 以在打印后自动关闭它。

    这导致打印的 PDf 几乎是全尺寸,尽管带有来自浏览器的通常的页码和日期戳。

    【讨论】:

    • 一切都在我的回答中。你只需要阅读文档并思考一下,而不是盲目地复制粘贴一些你看不懂的代码。
    • 我更喜欢盲目粘贴代码,而不是阅读答案,这告诉我我应该自己思考更多..
    • 我从未在文档中找到 toImageURL。我确实在文档中找到了一个 toDataURL()。我用过,效果很好。
    • 接受答案的负分很奇怪,这不应该发生。
    • @ImranZahoor 我认为人们不喜欢我解释了我所做的而不是仅仅发布代码(属于客户,所以我无论如何都无法分享)
    猜你喜欢
    • 2016-05-15
    • 2023-04-03
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2022-08-18
    • 2014-02-23
    • 2016-09-25
    相关资源
    最近更新 更多