ajax调用后将pdf发送到浏览器
send pdf to browser after ajax call
我有一个php脚本,它通过ajax调用进行调用。将值发送到此脚本以构建pdf。我想把pdf发送到浏览器,但由于构建pdf的脚本返回到带有javascript的页面,我不知道如何做到这一点。有什么想法吗?
我推荐一些不同的东西。代替AJAX调用,重定向到如下URL:
./path_to_pdf_script/script.php?param1=val1¶m2=val2
这个脚本将是生成pdf的脚本。将这个标题放在脚本顶部的某个位置:
header('Content-type: application/pdf');
只需echo
pdf内容所在的字符串。如果你想让用户下载这个pdf而不是查看,你可以用这里的例子进行AJAX调用:
来自php.net
如果您希望提示用户保存您正在发送的数据,例如生成的PDF文件,您可以使用»内容处置标头,以提供推荐的文件名并强制浏览器显示保存对话框。
<?php // We'll be outputting a PDF header('Content-type: application/pdf'); // It will be called downloaded.pdf header('Content-Disposition: attachment; filename="downloaded.pdf"'); // The PDF source is in original.pdf readfile('original.pdf'); ?>
您可以使用iframe而不是ajax请求,并强制下载pdf文件。
正如您所注意到的,您的AJAX调用无法直接将PDF输出到浏览器。一种解决方法是删除AJAX并将用户直接发送到生成PDF的页面。这种方法非常常见,并且有很好的记录。但是有一种方法可以使用AJAX生成PDF,这样用户就可以一直呆在网页上,直到文件准备好。
AJAX调用可以用一个带有两个独占字段的JSON对象来回答:
- "pdfurl"如果pdf文件已成功创建并写入磁盘
- "errormsg"(如果有错误)
类似(在PHP中):
<?php
//...
if (writepdf($filename, ...)) {
$result = array('pdfurl' => '/files/' . $filename);
} else {
$result = array('errormsg' => 'Error!');
}
echo json_encode($result);
然后页面的javascript可以包含(jQuery示例):
$.ajax({
type: "GET",
url: "ajaxcreatepdf.php",
data: {userid: 1},
dataType: "json",
success: function(data, textStatus) {
if (data.pdfurl) {
window.location.href = data.pdfurl;
}
else {
$("#messagebox").html(data.errormsg);
}
}
});
Ajax请求对用户不直接可见,因此重定向对没有意义
ajax返回后,您需要将此PDF加载到现有或新的浏览器窗口中。
相关文章:
- 在浏览器中检测本机或第三方PDF插件
- 嵌入式pdf在Opera浏览器中总是名列前茅
- JavaScript代码,用于在浏览器中显示字节数组中的PDF文件(非base64编码)
- 使用无头浏览器Phantomjs打开PDF
- 使用 Selenium 在 IE9 浏览器中查找 PDF 文本
- 限制浏览器中显示的 PDF 的页数
- 等待图标,用于通过 ashx 处理程序在浏览器中加载 pdf
- 设置PDF页面的浏览器标题
- 如何从输入字段在浏览器中显示PDF文件
- 当浏览器请求部分内容范围请求时,如何检测pdf何时加载到iframe中
- 在浏览器中打开PDF禁用嵌入的Javascript
- 如何在浏览器中显示单词/ pdf二进制数据
- 加载PDF文件/网址在Safari浏览器中显示黑屏
- 提供下载pdf或在浏览器中打开的选项
- 如何在网络浏览器中显示MS-Excel和PDF文档
- 如何在不打开浏览器的情况下下载pdf文件
- 在所有浏览器中打印使用 jsPDF 创建的 PDF
- 如何保存.pdf没有 url 的浏览器窗口中弹出的文件
- 将服务器端生成的 PDF 发送到浏览器
- 引导滑块控件覆盖浏览器PDF控件