我正在使用Ajax功能来检索我的内容,我需要在jQuery.ajax()
成功时导出PDF。我怎么能这样做?
答案 0 :(得分:16)
jQuery不能(因为JavaScript不能)从数据创建PDF,没有......它可以从服务器获取一个(就像任何其他请求一样),但它不能生成一个。 JavaScript根本没有一种机制(尽管现在有一些HTML5选项正在实现)来创建/保存跨浏览器的文件,特别是二进制文件。
答案 1 :(得分:5)
如果可能的话,服务器端是生成PDF的更好选择。大多数用户可能会更快,并且通过标准HTTP请求返回文件比当前客户端选项更强大。
也就是说,这个库将在客户端生成PDF:http://snapshotmedia.co.uk/blog/jspdf
在支持数据URI的浏览器中,它可以直接返回PDF。在其他浏览器中,您可以将其与名为Downloadify的Flash组件耦合以实现相同目的。
答案 2 :(得分:5)
如果您在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中编码数据内容。有一个number of libraries可以帮助您在Javascript中执行此操作。然后,通过document.location.href:
返回您的内容document.location.href = 'data:application/pdf;base64,' + base64PDFData;
那应该得到你需要的东西。理论上,您可以使用此方法将任何内容类型转发到浏览器。
修改强>:
我应该提一下,遗憾的是,数据uri无法在IE due to security restrictions中使用。
答案 3 :(得分:5)
我认为你可以使用这个插件
答案 4 :(得分:3)
将此添加到您的脚本中:
<script src="https://docraptor.com/docraptor-1.0.0.js"></script>
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: "<h1>Hello world!</h1>", // 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
// }
})
答案 5 :(得分:2)
如果您正在处理的HTML是一个表,您可以使用带有TableTools的jquery.dataTables插件来生成PDF。它在幕后使用Flash,并且在格式化方面受到严格限制,但它确实生成PDF。