Javascript 窗口。使用PDF流而不是PDF位置打开

Javascript 窗口。使用PDF流而不是PDF位置打开,javascript,asp.net,.net,pdf,window.open,Javascript,Asp.net,.net,Pdf,Window.open,基于这个问题,看起来我可以使用JavaScript打开一个包含PDF文件的新窗口,其中包含以下代码: window.open('MyPDF.pdf','u blank'); 我希望在从服务器返回时添加一个字节数组,而不是文件名作为URL位置 我目前正在返回PDF文件,如: Response.Clear(); Response.ContentType=“application/pdf”; 二进制写入(pdfByteArray); Response.Flush(); 有没有一种方法可以在java

基于这个问题,看起来我可以使用JavaScript打开一个包含PDF文件的新窗口,其中包含以下代码:

window.open('MyPDF.pdf','u blank');
我希望在从服务器返回时添加一个字节数组,而不是文件名作为URL位置

我目前正在返回PDF文件,如:

Response.Clear();
Response.ContentType=“application/pdf”;
二进制写入(pdfByteArray);
Response.Flush();
有没有一种方法可以在javascript中用PDF字节数组打开一个新窗口

大概是这样的:

var script=“window.open(“+pdfByteArray+”,“\u blank”);
ScriptManager.RegisterClientScriptBlock(Parent.Page,typeof(Page),“pdf”,script,true);

它看起来像
窗口。open
将以数据URI作为位置参数

所以你可以这样打开它,从问题::

window.open(“数据:应用程序/pdf;base64,”+base64EncodedPDF);
这是一个,已经用base64编码了

然后在服务器上,可以将字节数组转换为base64编码,如下所示:

stringfilename=@“C:\TEMP\TEST.pdf”;
byte[]pdfByteArray=System.IO.File.ReadAllBytes(文件名);
string base64EncodedPDF=System.Convert.ToBase64String(pdfByteArray);

注意:这似乎很难在IE中实现,因为URL长度对于发送整个PDF来说太小了。

注意:我已经在最新版本的IE和其他浏览器(如Mozilla和Chrome)中验证了这一点,这对我来说很有效。希望它对其他人也有用

if(数据==“”| |数据==未定义){
警报(“无法打开PDF”);
}else{//对于使用atob的IE,请将base64编码数据转换为字节数组
if(window.navigator&&window.navigator.msSaveOrOpenBlob){
var byteCharacters=atob(数据);
var byteNumbers=新数组(byteCharacters.length);
for(变量i=0;i
为什么不创建一个处理程序(.ashx)来执行输出并使用window.open指向该窗口。您只能将uri/url传递给window.open在阅读了关于类似问题的各种其他注释后,似乎有些人声称限制在2048字节到32KB之间。不幸的是,这两个对我来说都太小了。看起来仍然没有可靠的方法告诉用户PDF下载何时完成生成ajax轮询线程。我需要导入哪个库才能使用
System.Convert.ToBase64String
?我无法在
System
pkg中找到
Convert
。我在后端使用php,因此在发送pdf内容之前,我使用了base64_编码(数据)(跳过您在那里编写的System.Convert.tobase64字符串;它对我不起作用)。谢谢@KyleMit绝妙的解决方案我需要更进一步,自动触发浏览器的“打印”功能。但是当我从新窗口对象调用
window.print()
时,它什么也不做。我甚至尝试调用一个
setTimeout
,以确保它已加载,但不起作用。有人有什么想法吗?我终于可以使用.NET的组合:Response.Write(System.Convert.ToBase64String(bytearray));以及上面的javascript块。谢谢@KyleMit!在Chrome中,打开PDF时,我不允许将顶部框架导航到数据URL。