是否可以使用jQuery生成PDF?

我正在使用Ajaxfunction来检索我的内容,我需要在jQuery.ajax()成功时导出PDF。 我怎样才能做到这一点?

jQuery不能(因为JavaScript不能)从数据创建PDF,没有…它可以从你的服务器获得一个(像任何其他请求),但它不能生成一个。 JavaScript根本没有一种机制(虽然现在有一些HTML5选项正在实现)来创建/保存跨浏览器的文件,尤其是二进制文件。

如果可能的话,服务器端是生成PDF的更好选择。 对于大多数用户来说,它可能会更快,并且通过标准HTTP请求返回文件比当前客户端选项更强大。

也就是说,这个库将在客户端生成PDF: http : //snapshotmedia.co.uk/blog/jspdf

在支持数据URI的浏览器中,它可以直接返回PDF。 在其他浏览器中,您可以将其与名为D​​ownloadify的Flash组件耦合以实现相同的目的。

如果您在AJAX成功中从服务器检索PDF数据并需要将其作为下载输出给用户,则可以使用一小段base64编码来完成。 如果我理解正确,您很可能有一个场景,您的服务器可能会成功返回PDF或其他一些数据类型(如XML)。 在这种情况下,您有两个步骤来处理请求:

1)通过其标题确定内容类型。 以下是根据响应拆分处理程序的示例:

 $.ajax({ type: "POST", url: "/test", data: someData, success: function(response, status, xhr){ var ct = xhr.getResponseHeader("content-type") || ""; if (ct.indexOf('xml') > -1) { // handle xml here } if (ct.indexOf('pdf') > -1) { // handle pdf here } } }); 

2)获得PDF内容后,您可以使用base64数据技巧重定向浏览器以显示pdf。 首先,在base64中编码数据内容。 有许多库可以帮助您在Javascript中执行此操作。 然后,通过document.location.href返回您的内容:

 document.location.href = 'data:application/pdf;base64,' + base64PDFData; 

那应该得到你需要的东西。 理论上,您可以在此方法中将任何内容类型转发到浏览器。

编辑

我应该提一下, 由于安全限制,遗憾的是数据uri无法在IE中运行。

我想你可以使用这个插件

http://parall.ax/products/jspdf

将其添加到您的脚本:

  
 DocRaptor.createAndDownloadDoc("YOUR_API_KEY_HERE", { test: false, // test documents are free, but watermarked type: "pdf", name: planStatus+"_" +assessmentYear+"_"+employeeId+ ".pdf", document_content: document.querySelector('#MyDoc').innerHTML, // use this page's HTML // document_content: "

Hello world!

", // or supply HTML directly // document_url: "http://example.com/your-page", // or use a URL // javascript: true, // enable JavaScript processing // prince_options: { // media: "screen", // use screen styles instead of print styles // } })

如果您正在处理的HTML是一个表,您可以使用带有TableTools的jquery.dataTables插件来生成PDF。 它在幕后使用Flash,并且在格式化方面受到严格限制,但它确实生成了PDF。

http://datatables.net/extras/tabletools/