根据问题Open PDF in new browser full window,我似乎可以使用JavaScript打开一个新窗口,其中包含一个PDF文件,代码如下:

window.open('MyPDF.pdf', '_blank');

我希望在从服务器返回时添加一个字节数组,而不是文件名来作为window.open中的URL位置

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

Response.Clear();
Response.ContentType = "application/pdf";
Response.BinaryWrite(pdfByteArray);
Response.Flush();

有没有一种方法可以用javascript打开一个带有PDF字节数组的新窗口.

大概是这样的:

var script = "window.open('" + pdfByteArray + "', '_blank');";
ScriptManager.RegisterClientScriptBlock(Parent.Page, typeof(Page), "pdf", script, true);

推荐答案

看起来window.open将使用数据URI作为位置参数.

所以你可以这样打开它,问题是:Opening PDF String in new window with javascript:

window.open("data:application/pdf;base64, " + base64EncodedPDF);

这里是runnableexample in plunkersample pdf file,它们已经是base64编码的.

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

string fileName = @"C:\TEMP\TEST.pdf";
byte[] pdfByteArray = System.IO.File.ReadAllBytes(fileName);
string base64EncodedPDF = System.Convert.ToBase64String(pdfByteArray);

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

Asp.net相关问答推荐

DataTables-如何修改来自JSON响应或其他DataTables参数的无结果(ZeroRecords)消息

如何使用 Get-Process powershell 命令通过端口号获取进程的 ID

什么是 SNIReadSyncOverAsync,为什么需要很长时间才能完成?

.Net Framework:w3wp.exe 中的异常

如何为发布模式设置调试错误

ASP.NET Core 1.0 ConfigurationBuilder().AddJsonFile("appsettings.json");找不到文件

为什么默认情况下不允许 GET 请求返回 JSON?

无法使用单例Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor中的范围服务MyDbContext

如何在新实现的接口或基类之间做出决定?

MVC5 身份验证中的......与主域之间的信任关系失败

如何在 ASP.Net 网络表单中使用标签?

这个rendersection的代码是什么意思?

svg 无法在 localhost 上的 IIS 网络服务器上运行

HttpResponse.End 或 HttpResponse.Close 与 HttpResponse.SuppressContent

ASP.NET MVC Url Route 支持(点)

SignalR /signalr/hubs 404 未找到

如何将 LINQ 左外连接限制为一行

在 C# 中动态创建 Json

从物理路径获取相对虚拟路径

为什么 IFormFile 显示为空,我该如何解决?