是否可以使用 JavaScript 或 jquery 将 HTML 页面保存为 PDF?

IT技术 javascript jquery jquery-ui
2021-02-04 01:09:23

是否可以使用 JavaScript 或 jquery 将 HTML 页面保存为 PDF?

详细:

我生成了一个包含表格的 HTML 页面。它有一个按钮“另存为 PDF”。如果用户单击该按钮,则该 HTML 页面必须转换为 PDF 文件。

是否可以使用 JavaScript 或 jquery?

6个回答

是的,使用jspdf来创建一个 pdf 文件。

然后,您可以将其转换为数据 URI 并将下载链接注入 DOM

但是,您需要自己编写 HTML 到 pdf 的转换。

只需使用页面的打印机友好版本,让用户选择他想要打印页面的方式。

编辑:显然它的支持最少

因此,答案是编写您自己的 PDF 编写器或让现有的 PDF 编写器为您完成(在服务器上)。

jspdf 看起来很有趣,但是演示在 Firefox 5.0 和 IE 中都不起作用!
2021-03-25 01:09:23
我敢肯定有人可以用火柴或牙签盖房子,但归根结底——支持拼接、图形、字体嵌入、样式和全功能查找表的完全成熟的 pdf 编译器是不可能的。看看 jspdf 的源代码 - 它只支持最简单的标签,不支持查找字典。一个完全成熟的 pdf 编译器甚至在 C++ 或 Delphi 中都很难做到,纯 JS 实现将是自杀式的。有些公司多年来只销售他们的 pdf 编译器(例如,参见 gnostice)。这不是“一个班轮”。
2021-03-25 01:09:23
JavaScript(作为一种语言)完全取决于它。JavaScript 运行受浏览器安全模型和 API 的限制较少。
2021-04-03 01:09:23
@JonLennartAasenden 是的,它的支持很少。如果你愿意,你仍然可以用 js 编写一个 PDF 编写器。然而,这不是一件容易的事。纯 JS 实现与 C++ 或 Delphi 一样具有自杀性。不要假装JS是二等公民。
2021-04-07 01:09:23
jspdf 对功能的支持很少,它甚至不支持图形。但是除非有样式系统和渲染的东西——它基本上只对小笔记有用。否则,您还必须在 JS 中编写一个完整的 HTML 渲染器(或者欺骗并使用带有 drawElement 的画布,我似乎记得它只在 firefox 中受支持)。如果你问我,Javascript 真的不适合这行编码。也许调用外部网络服务是最简单的方法。
2021-04-13 01:09:23

这可能是一个迟到的答案,但这是最好的:https : //github.com/eKoopmans/html2pdf

纯 JavaScript 实现。允许您仅通过 ID 指定单个元素并对其进行转换。

迟到没有答案 :) 。谢谢
2021-03-25 01:09:23
这就是我使用的,虽然它确实很难将分页符放在正确的位置。我不得不在&nbsp;里面添加额外的 div ,并将 X padding-top(X = 页码)添加到我之前分页的元素中,因为每个页面的内容都会越来越高。不确定这是引导冲突还是什么。这是我添加的代码,在调用 html2pdf 之前运行的函数中:elements = document.getElementsByClassName("newBox"); for (var i = 0; i < elements.length; i++) {elements[i].style.paddingTop = elements[i].style.paddingTop = i + "px";};
2021-04-03 01:09:23

雅它很容易做到与 javascript。希望这段代码对你有用。

您将需要JSpdf 库

<div id="content">
     <h3>Hello, this is a H3 tag</h3>

    <p>a pararaph</p>
</div>
<div id="editor"></div>
<button id="cmd">Generate PDF</button>

<script>
    var doc = new jsPDF();
    var specialElementHandlers = {
        '#editor': function (element, renderer) {
            return true;
        }
    };

    $('#cmd').click(function () {
        doc.fromHTML($('#content').html(), 15, 15, {
            'width': 170,
                'elementHandlers': specialElementHandlers
        });
        doc.save('sample-file.pdf');
    });

    // This code is collected but useful, click below to jsfiddle link.
</script>

jsfiddle 链接在这里

图像无法以 pdf 格式打印 :( 你有解决方案吗??
2021-03-21 01:09:23
不支持表格 :( 喜欢这种方法
2021-03-28 01:09:23
它不正确支持多页或 css 样式。
2021-04-01 01:09:23
JSFiddle 链接指向 404 页面
2021-04-06 01:09:23

您可以使用 Phantomjs。在此处下载并使用以下示例测试 html->pdf 转换功能https://github.com/ariya/phantomjs/blob/master/examples/rasterize.js

示例代码:

phantomjs.exe examples/rasterize.js http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/xhtml/index.html sample.pdf
您可以将它与 javascript 而不是命令行实用程序一起使用吗?
2021-04-11 01:09:23
@Dynamic 不,这是一个可以通过 javascript 控制的无头浏览器。您可以告诉它通过 javascript 将网页打印为 PDF,但实现不是 javascript。但是,通过将它包装在一个使用页面队列进行打印的应用程序中,将它用于这个确切的场景,我使用 javascript 将条目添加到队列中。同样,您可以将其包装在服务中。尽管您与 chrome 打印受到相同的限制(例如 css 和 js 以创建打印友好的视图),但仍要控制打印方式
2021-04-11 01:09:23

我使用jsPDFdom-to-image库将 HTML 导出为 PDF。

我张贴在这里作为参考谁关心。

$('#downloadPDF').click(function () {
    domtoimage.toPng(document.getElementById('content2'))
      .then(function (blob) {
          var pdf = new jsPDF('l', 'pt', [$('#content2').width(), $('#content2').height()]);
          pdf.addImage(blob, 'PNG', 0, 0, $('#content2').width(), $('#content2').height());
          pdf.save("test.pdf");
      });
});

演示:https : //jsfiddle.net/viethien/md03wb21/27/

如果我转到响应模式并下载 pdf,则 pdf 页面无法正常显示,当我使用响应模式下载时,有没有办法达到与桌面模式相同的结果。
2021-04-13 01:09:23