使用 JavaScript 生成 PDF 文件

IT技术 javascript pdf pdf-generation
2021-01-23 22:27:54

我正在尝试将 XML 数据从网页转换为 PDF 文件,我希望我可以完全在 JavaScript 中完成此操作。我需要能够绘制文本、图像和简单的形状。我希望能够完全在浏览器中执行此操作。

6个回答

我刚刚编写了一个名为jsPDF的库,它可以单独使用 Javascript 生成 PDF。它仍然很年轻,我将很快添加功能和错误修复。还对不支持数据 URI 的浏览器中的变通方法有了一些想法。它是在自由的 MIT 许可下获得许可的。

我在开始写之前遇到了这个问题,并认为我会回来告诉你:)

用 Javascript 生成 PDF

示例创建一个“Hello World”PDF 文件。

// Default export is a4 paper, portrait, using milimeters for units
var doc = new jsPDF()

doc.text('Hello world!', 10, 10)
doc.save('a4.pdf')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.debug.js"></script>

@JamesHall,我要感谢你为写这篇文章所做的所有工作,感谢 MIT 授权它让世界变得更美好,因为你可以为自己的利益将它商业化。
2021-03-14 22:27:54
你确实有点启发了它:),我在互联网上环顾四周,看看它是否已经存在,发现有些人会发现它很有用。如果您愿意帮忙,请告诉我。我是twitter上的@MrRio。
2021-03-15 22:27:54
否决投票者可以向我们提供他们“更好”的想法或解决方案吗?这是一项出色的努力。
2021-03-20 22:27:54
我是否部分启发了 jsPDF?我在你宣布它的那天就了解了 jsPDF。到目前为止看起来很棒。我最终选择了 Prawn,因为它很容易成为满足我要求的最佳 PDF 生成库。我仍然喜欢在浏览器中完成我的所有工作,因为我不确定我会在我部署到的系统上安装 Ruby。我正在密切关注 jsPDF。我很想帮忙,但我的时间非常有限。这在未来可能会改变。
2021-03-22 22:27:54
它仍然非常活跃。0.9.0rc2 今天发布。
2021-04-05 22:27:54

另一个值得一提的 javascript 库是pdfmake

浏览器支持似乎不如 jsPDF 强大,也似乎没有形状选项,但是格式化文本的选项比 jsPDF 中当前可用的选项更高级。

这个 IE 友好吗?
2021-03-12 22:27:54
这个答案应该得到更多的支持,pdfmake 比 jspdf 强大得多。然而只是一个旁注,它是 PDFKit 库的包装器。
2021-03-15 22:27:54
通过比较这两个游乐场,在我看来,jsPDF 似乎更侧重于“图形”PDF 创建,而 pdfmake 更侧重于生成格式良好的“普通”文档,它似乎有更多的通用文本格式选项。
2021-03-20 22:27:54
“pdfmake.min.js - 0.1.22 - 9 hours ago”还没死,今天更新。
2021-03-26 22:27:54
另一边说明,jspdf 没有 utf-8 支持,而 pdfmake 仅对默认字体有 utf-8 支持。
2021-03-31 22:27:54

我维护PDFKit,它也支持 pdfmake (已经在这里提到)。它适用于 Node 和浏览器,并支持许多其他库不支持的东西:

  • 嵌入子集字体,支持 unicode。
  • 许多高级文本布局内容(列、分页、完整的 unicode 换行、基本的富文本等)。
  • 为高级排版(OpenType/AAT 连字、上下文替换等)处理更多字体内容。即将推出:如果您有兴趣,请查看 fontkit 分支。
  • 更多图形内容:渐变等。
  • 使用浏览器和流等现代工具构建。可在浏览器和节点中使用。

查看http://pdfkit.org/的完整教程,亲自了解 PDFKit 可以做什么。有关可以生成哪些类型的文档的示例,请查看使用 PDFKit 本身从某些 Markdown 文件生成的 PDF 文档http ://pdfkit.org/docs/guide.pdf

您也可以在此处的浏览器中以交互方式进行尝试:http : //pdfkit.org/demo/browser.html

@devonggovett 你能看看我关于你图书馆的问题吗?
2021-03-23 22:27:54
我最近一直在使用 PDFKit,虽然它有一些小故障,但它运行良好并且非常可靠。我会推荐它。
2021-03-24 22:27:54
这不是服务器端库吗?我认为讨论是在客户端 js 库上。
2021-03-27 22:27:54
如答案中所述,PDFKit 在 Node 和浏览器中均可使用。请参阅浏览器演示的链接。
2021-04-01 22:27:54
这会压缩图像吗?我正在开发一个功能类似于 camscanner 的网络应用程序,我正在寻找通过 javascript 创建 PDF 以利用压缩和多页格式。
2021-04-05 22:27:54

另一个有趣的项目是texlive.js

它允许您在浏览器中将 (La)TeX 编译为 PDF。

hello world 示例渲染得很好,但需要大约 30 秒才能完成。
2021-03-24 22:27:54

对于React粉丝来说,还有另一个很棒的 PDF 生成资源:React-PDF

它非常适合在 React 中创建 PDF 文件,甚至可以让用户从客户端下载它们而无需服务器!

这是 React-PDF 的一个小示例片段,用于创建 2 节 PDF 文件

import React from 'react';
import { Page, Text, View, Document, StyleSheet } from '@react-pdf/renderer';

// Create styles
const styles = StyleSheet.create({
  page: {
    flexDirection: 'row',
    backgroundColor: '#E4E4E4'
  },
  section: {
    margin: 10,
    padding: 10,
    flexGrow: 1
  }
});

// Create Document Component
const MyDocument = () => (
  <Document>
    <Page size="A4" style={styles.page}>
      <View style={styles.section}>
        <Text>Section #1</Text>
      </View>
      <View style={styles.section}>
        <Text>Section #2</Text>
      </View>
    </Page>
  </Document>
);

这将生成一个单页的 PDF 文档。在里面,两个不同的块,每个块都呈现不同的文本。这些不是您可以使用的唯一有效原语。您可以参考组件示例部分了解更多信息。