javascript - 如何使用 javascript 在浏览器中显示 PDF 流

标签 javascript jquery pdf browser

我正在使用 jquery 的 ajax 方法访问现有的 WCF Web 服务(它以字节流的形式返回 PDF)。

当对服务的调用完成时,我最终得到一个包含 PDF 的 JavaScript 变量(该变量包含二进制数据,以“%PDF-1.4...”开头)。

我想在新的浏览器窗口中显示此 PDF,但我很难实现这一点。

到目前为止,我的研究表明,我也许能够使用 data: uri 来实现我想要的目标,因此 ajax 调用完成时调用的代码如下:

function GotPDF(data)
{
    // Here, data contains "%PDF-1.4 ..." etc.
    var datauri = 'data:application/pdf;base64,' + Base64.encode(data);
    var win = window.open("", "Your PDF", "width=1024,height=768,resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no");
    win.document.location.href = datauri;
}

这会导致打开一个新的浏览器窗口,但内容为空白。

有趣的是,如果我使用 file: uri 将浏览器 (IE9) 指向本地磁盘上的现有文件,例如 file://c:/tmp/example.pdf,那么我会得到相同的结果,即一个空白窗口。

有什么方法可以显示此 PDF 数据吗?

最佳答案

您编写的代码不会显示任何内容,只需打开一个空白窗口(location.href 是浏览历史记录的哈希值,而不是页面内容)。

要显示 PDF,您至少有以下选项:

× 将 PDF 查看器嵌入到 object 标记中。可能没有你想象的那么简单,看看this post示例代码。简而言之,它应该是这样的:

<object data="your_url_to_pdf" type="application/pdf">
    <div>No PDF viewer available</div>
</object>

这是基本代码,但如果您需要更高的跨浏览器兼容性,我建议遵循我在链接帖子中所说的内容(它还包含一些关于如何可能尝试检测对PDF 查看器)。

× 将文件下载到本地计算机(只需添加生成该文件的 Web 服务方法的完整 URL,不要忘记添加正确的 Content-Disposition在标题中)。

× 在新的浏览器窗口中打开文件。当您指向要在新窗口中显示的在线 PDF 文件时,创建一个普通 a 标记。将 href 更改为 javascript:functionName,并在该函数中生成您将用于调用 Web 服务方法的 URI。

无论您做什么,都不要忘记在响应中设置正确的 MIME 类型,而且您的方法不应返回字节流(即使已编码),而应返回网络浏览器的有效响应。

关于javascript - 如何使用 javascript 在浏览器中显示 PDF 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840230/

相关文章:

javascript - 有没有一种方法可以在输入框中设置从左对齐文本到居中对齐的过渡动画

javascript - 为什么 chart.js 图表不在 Safari 中绘制数据(适用于 Chrome)

javascript - 寻找同级的多重选择器

linux - 有什么方法可以获取搜索模式 PDF 中的页码吗?

java - 文件解码后 PDF 附件损坏

javascript - meteor 与咒语。横切关注点

javascript - 在react+react-router-dom中将函数引用传递给sibling-ish

jquery - 优雅地回退到移动设备上的普通文件 uploader (Windows 移动问题)

javascript - 检查 for 循环内的 radio 输入(仅包含值的输入)

ruby - 查找要在 pdf 文件中输出的区域