gpt4 book ai didi

c# - 动态创建的 PDF 不在 64 位 IE9 窗口中嵌入/呈现内联

转载 作者:行者123 更新时间:2023-11-30 20:07:26 24 4
gpt4 key购买 nike

我们正在使用 Reporting Services 生成 PDF 报告,我们需要将其呈现到浏览器窗口并嵌入到浏览器中。我们已经这样做了很长时间,并且一直有效……直到 IE9。

在 IE6、IE7 和 IE8 中,我们从代表 PDF 报告的 Reporting Services 生成字节数组,然后将其二进制写入浏览器,一切正常。 PDF 显示嵌入在浏览器中。

在 IE9 中,我们尝试完全相同的事情,但 PDF 并未嵌入浏览器窗口中。浏览器窗口保持打开状态且为空白/空白,PDF 在 Adob​​e Reader 中的单独窗口中打开。

这是我们的代码片段:

try 
{
// Set all the Reporting Services variables and parameters and render the report
// ...
byte[] result = rs.Render(format, devInfo, out extension, out mimeType, out encoding, out warnings, out streamIDs);

// Force the render out of the report to the browser
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AppendHeader("content-length", result.Length.ToString());
Response.AppendHeader("Pragma", "cache");
Response.AppendHeader("Expires", "3600");
Response.Buffer = true;
Response.Cache.SetCacheability(HttpCacheability.Private);
Response.CacheControl = "private";
Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;

switch (outputformat)
{
case "PDF":
Response.AppendHeader("content-disposition", "inline; filename=report.pdf");
Response.ContentType = "application/pdf";
break;
default:
break;
}

Response.BinaryWrite(result);
Response.Flush();
Response.Close();
Response.End();
}
catch (System.Exception ex)
{
// ...
}

我们如何才能使 PDF 呈现并嵌入到 IE9 浏览器窗口中?

谢谢!

最佳答案

希望这对其他人有帮助,我发现了一个使用 jquery 的 hack/work around of sorts

function MyFunction(someprams) {
if (navigator.userAgent.indexOf("x64") == -1) {
window.open("yourpage2.aspx?PramName=PramVal, 'winowname', 'window opions here')
} else {
$.get("yourpage1.aspx", { PramName1: PramVal1, PramName1: PramVal1 },
function(data) {
$('#divid').html(data);
});
}
}

那么只需在页面中添加一个 div 即可:

yourpage1 是调用和流式传输 pdf 并设置缓存 header 的页面

然后 yourpage2 是一个 aspx 页面,上面有一个 ifram,我动态设置了 src: iframeid.Attributes.Add("src", "yourpage1.aspx?"pram1="& Request.QueryString("PramVal1") )请注意 ifram 需要在服务器标签上运行,因为你可能希望它加载 ifram 高度 100%,你可以这样做CSS:

html { height: 100%;}
body { height: 100%;}

html:

<iframe id="iframeid"  runat="server" scrolling="no" marginwidth="0" marginheight="0"
frameborder="0" vspace="0" hspace="0" style="overflow: visible; width: 100%;
height: 100%;"></iframe>

如果用户是 IE 32 位,那么这个剂量是多少,然后会打开一个新窗口,显示其中的 pdf(实际上在一个框架中,但你不能告诉)或者如果他们是 IE 64,则完全跳过使用窗口并加载将 pdf 直接流式传输到我们页面的页面。这会强制 adobe pdf 不在浏览器窗口中打开,而是直接作为 pdf 文件打开,因此所有这一切都有效,并且在 64 位和 32 位 IE 中看起来都不错

我确实发现流阅读器导致了问题,但这很好用,

Dim oWebClient As System.Net.WebClient = Nothing
Dim data() As Byte
try
oWebClient = New System.Net.WebClient
data = oWebClient.DownloadData(pdfurl)
//add Response.AddHeader stuff here e.g.
Response.AddHeader("Content-Length", data.Length.ToString)
Response.BinaryWrite(data)

关于c# - 动态创建的 PDF 不在 64 位 IE9 窗口中嵌入/呈现内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8447519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com