在弹出窗口中显示 PDF

本文关键字:显示 PDF 窗口 | 更新日期: 2023-09-27 18:31:01

我正在使用 asp.net mvc,我想在jquery对话框中或在boostrap模式弹出窗口中显示pdf。

我尝试了 ajax 调用,但如果控制器操作返回带有 Return File(....) 的文件,那么它会在弹出窗口中给出错误的输出。

如果我使用 iframe,

那么当我在 iframe 中指定 url 时,它会重定向到 Httpget 控制器操作,但我希望它重定向到 httppost 控制器操作(因为我也必须发布表单)。

实际上,我想在弹出窗口或iframe中打开pdf的原因是因为现在pdf正在同一窗口中打开,但我希望它在新的浏览器选项卡中或在弹出窗口中或在iframe内打开,以便访问者继续使用网站而无需按浏览器后退按钮。

我被困住了..请帮忙..!!!

在弹出窗口中显示 PDF

您只能将GET请求与iframe一起使用,这是正确的方法。因此,如果您使用 POST 请求创建 PDF,则需要返回某种文件 ID 或文件名。然后在您的 iframe 中,使用 ID 或文件名获取文件。

  1. 用于创建返回IDfilename的 PDF 的 POST 请求
  2. 在 iframe 中/path/to/your/pdf_files/<filename>.pdf GET 请求。

更新:

如果要显示来自先前 POST 请求的小文件(不建议将此方法用于大文件),而不将它们保存在任何位置,请使用数据 URL:

  <iframe type="application/pdf"
        width="95%"
        height="95%"
        src="data:application/pdf;base64,<base64_encoded_pdf_file_string_here>">
  </iframe>

只需<base64_encoded_pdf_file_string_here>替换为文件的实际 base64 字符串表示形式即可。

为了获取流的base64字符串,请使用Convert.ToBase64String方法。

有点肮脏的方式,但你可以创建一个"代理"页面,在那里你将首先指导你的IFRame,在那里你将有一个表单(或者你甚至可以在没有代理页面的情况下仅使用javascript来构建它 - 它可以是不可见的,表单本身)。然后,借助 javascript 将数据传递到 iframe 中的此表单,并在该表单上发出提交操作。这样,您将发出POST请求(当然,如果您正确配置了表单)。

UPD:一个简单的例子:

var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
var form = iframe.contentDocument.createElement("form");
form.action="http://example.com/myuri";
form.method="post";
iframe.contentDocument.body.appendChild(form);
var data = iframe.contentDocument.createElement("input"); // You can create more of these "data" variables if you wish to pass more data to the server
data.type="hidden";
data.name="data_field";
data.value="somevalue";
form.appendChild(data);
form.submit(); // This actually executes the form and passing all data as POST data to the server