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

ram*_*ram 67 javascript jquery jquery-ui

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

详细地:

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

是否可以使用JavaScript或jquery?

Ray*_*nos 25

,使用jspdf创建pdf文件.

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

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

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

编辑:显然它的支持很少

所以答案是编写自己的PDF编写器或者让现有的PDF编写器为您(在服务器上)执行此操作.

  • 我确定有人可以用火柴或牙签建造房子,但最终 - 一个完全成熟的pdf编译器支持拼接,图形,字体嵌入,样式和功能齐全的查找表是不可能的.看一下jspdf的源代码 - 它只支持最简单的标签而不支持查找字典.一个完全成熟的pdf编译器在C++或Delphi中很难做到,即使是纯粹的JS实现也会有自杀倾向.有些公司多年来只销售他们的pdf编译器(例如gnostice).这不是"一个班轮". (4认同)

Bil*_*try 20

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

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

  • 没有答案就晚了:)。谢谢 (5认同)
  • html2pdf 超级容易使用!但它将所有内容呈现为图像并将该图像放入 PDF 中。所以没有可选择的文本。 (3认同)
  • 这就是我使用的方法,尽管它确实很难将分页符放在正确的位置。我必须在里面添加额外的 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";};` (2认同)

小智 12

Ya很容易用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>
Run Code Online (Sandbox Code Playgroud)

jsfiddle链接在这里

  • 这是垃圾 (15认同)
  • 它不正确支持多页或 css 样式。 (3认同)
  • JSFiddle 链接指向 404 页面 (3认同)
  • 图像无法以 pdf 格式打印 :( 您有解决方案吗?? (2认同)
  • 不支持表格 :( 喜欢这种方法 (2认同)

Hie*_*yen 8

我使用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");
      });
});
Run Code Online (Sandbox Code Playgroud)

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


Kum*_*mar 6

这是我将如何做到这一点,它的想法不是防弹设计,你需要修改它

  • 用户单击"另存为PDF"按钮
  • 使用ajax向服务器发送呼叫
  • 服务器响应使用HTML生成的PDF的URL,我非常熟练地使用了Apache FOP
  • 处理ajax响应的js执行location.href指向JS发送的URL,并且一旦该URL加载,它就使用内容处置标头作为附件发送文件,强制用户下载文件.


sin*_*469 5

你可以使用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
Run Code Online (Sandbox Code Playgroud)


Jon*_*den 0

简而言之:不。第一个问题是对文件系统的访问,出于安全原因,大多数浏览器默认将其设置为“否”。现代浏览器有时支持数据库形式的简约存储,或者您可以要求用户启用文件访问。

如果您有权访问文件系统,那么保存为 HTML 并不那么困难(请参阅 JS 文档中的文件对象) - 但 PDF 就不那么容易了。PDF 是一种相当高级的文件格式,确实不适合 Javascript。它要求您以 Javascript 不直接支持的数据类型写入信息,例如单词和四边形。您还需要预先定义必须保存到文件中的字典查找系统。我确信有人可以让它工作,但所涉及的精力和时间最好花在学习 C++ 或 Delphi 上。

但是,如果用户给予您不受限制的访问权限,则应该可以导出 HTML

  • 不管你的个人观点如何,乔恩,你能不能停止断言“Javascript 不是真正的语言”,因为那是废话。Javascript 是一种极其强大的语言,与 C 或 C++ 等低级编译语言相比,它针对不同的目的进行了优化。有些事情在 JS 中可以做到,而在 C 或 C++ 中却无法做到,但这是否意味着 C 和 C++ 不是“真正的”语言?不,只是它们的用途不同。JS 与任何其他图灵完备语言一样,都是一种真实的编程语言。 (12认同)
  • 为什么 C++ 和 Delphi _继承地_更擅长创建 PDF 编写器? (2认同)
  • 因为这些语言是为了开发高级软件而构建的。JavaScript 则不然。Javascript 从未完成,这就是原型系统悬而未决的原因。作者本来计划向其中添加一个包含真实类和更多数据类型的 HL - 但他没有时间。因此它是“按原样”发布的。它不支持指针,原始内存分配很痛苦,它不支持您在其他语言中找到的一些本机数据类型,它不支持打包结构(C 中的 struct,Pascal 中的 Record)......这个列表是无穷无尽的。我喜欢 JS,但它只是一个浏览器玩具,而不是真正的语言。 (2认同)
  • “但它是一个浏览器玩具,而不是真正的语言。” 这就像说Scheme 不是真正的语言一样。“很明显,在 JavaScript 下它会更长”,不。Java 比 JavaScript 更加冗长。它应该比 Java 版本短 2/3 左右。“但它会非常慢,而且基本上”,你所说的“非常慢”是指比 C++ 慢 3/4 倍?我们能不能别再把js当作二等公民了。谢谢。 (2认同)