Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript在浏览器中显示PDF流_Javascript_Jquery_Pdf_Browser - Fatal编程技术网

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

如何使用javascript在浏览器中显示PDF流,javascript,jquery,pdf,browser,Javascript,Jquery,Pdf,Browser,我正在使用jquery的ajax方法访问一个现有的WCF web服务(它以字节流的形式返回PDF) 当对服务的调用完成时,我得到一个包含PDF的javascript变量(该变量包含二进制数据,从“%PDF-1.4…”开始) 我想在新的浏览器窗口中显示此PDF,但我很难实现这一点 到目前为止,我的研究表明,我可能能够使用data:uri实现我想要的,因此在ajax调用完成时调用的代码如下所示: function GotPDF(data) { // Here, data contains "

我正在使用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(如file://c:/tmp/example.pdf)将浏览器(IE9)指向本地磁盘上的现有文件,则会得到相同的结果,即一个空白窗口


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

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

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

×将PDF查看器嵌入
嵌入
对象
标记中。它可能不像您想象的那么简单,请查看示例代码。简而言之,应该是这样的:

<object data="your_url_to_pdf" type="application/pdf">
    <embed src="your_url_to_pdf" type="application/pdf" />
</object>

这是基本的代码,但如果你需要更高的跨浏览器兼容性,我建议按照我在链接帖子中说的做

×将文件下载到本地计算机(只需添加生成该文件的web服务方法的完整URL,不要忘记在标题中添加适当的
内容配置

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

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

如果您使用
标记显示来自服务器的流式PDF文件(或其他文件类型),如所示:

<object data="SomeServlet?do=get_doc&id=6" type="application/pdf" width="800" height="400">

确保服务器发送正确的http
内容配置
值,在本例中为
内联