我试图将XML数据从网页转换为PDF文件,我希望我可以完全在JavaScript中做到这一点。我需要能够绘制文本,图像和简单的形状。我希望能够完全在浏览器中完成这些工作。
即使可以用JavaScript在内存中生成PDF,仍然会遇到如何将数据传输给用户的问题。JavaScript很难直接向用户推送文件。
为了将文件传递给用户,您需要执行一个服务器提交,以便让浏览器弹出保存对话框。
话虽如此,生成pdf文件真的不是太难。阅读说明书就可以了。
我刚刚写了一个名为jsPDF的库,它只使用Javascript生成pdf。它还很年轻,我很快就会添加新功能并修复bug。还得到了一些在不支持数据uri的浏览器中解决问题的想法。它是麻省理工学院许可的。
在我开始写这个问题之前,我遇到了这个问题,我想我应该回来让你知道:)
用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>
另一个值得一提的javascript库是pdfmake。
浏览器的支持似乎没有jsPDF强大,也没有形状选项,但是格式化文本的选项比目前jsPDF中可用的选项更高级。
我维护PDFKit,它也支持pdfmake(已经在这里提到过)。它可以在Node和浏览器中工作,并支持其他库不支持的一堆东西:
查看http://pdfkit.org/的完整教程,自己看看PDFKit可以做什么。对于可以生成哪种文档的示例,请使用PDFKit本身http://pdfkit.org/docs/guide.pdf从一些Markdown文件中查看PDF 生成的格式的文档。
你也可以在浏览器中交互式地尝试它:http://pdfkit.org/demo/browser.html。
更新:免费服务不再可用。但是如果你在紧要关头需要一些东西,你可以使用价格合理的服务,而且它应该是可靠的。
https://pdfmyurl.com/plans
你可以通过添加一个链接来使用这个免费服务,它可以从任何url(例如http://www.phys.org)创建pdf:
http://freehtmltopdf.com/?convert=http%3A%2F%2Fwww.phys.org&size=US_Letter&orientation=portrait&framesize=800&language=en
另一个有趣的项目是texlive.js。
它允许您在浏览器中编译(La)TeX到PDF。
对于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文档。里面有两个不同的块,每个块都呈现不同的文本。这些并不是唯一可以使用的有效原语。你可以参考组件或例子部分获取更多信息。