【问题标题】:How to show a pdf returned by stream (in a JsonResult)?如何显示流返回的pdf(在JsonResult中)?
【发布时间】:2012-02-08 18:44:50
【问题描述】:

我有一个 pdf,我通过 GetTestReport 操作在 json 结果中通过流返回:

return this.Json(pdfInBytes);

在我看来:

$.post('@Url.Action("GetTestReport", "Reports")', function(data) {
    // What have i put here?
});

如何在整个页面或特定 div 中显示 pdf?

【问题讨论】:

标签: c# jquery asp.net-mvc json pdf


【解决方案1】:

PDF 不能嵌入到文档中,它本身就是文档,您不能将其放入 JSON 结果中,您将其 URL 放入 JSON。

然后您仍然可以将它放在 iFrame 中(它将是源 src)。或者您可以通过window.open('you_pdf_url.pdf'); 将其显示在新标签中。

【讨论】:

  • 但是有了这个,我必须物理地创建文件,对吗?我不能这样做,所以我必须创建一个流或转换为字节以传递给浏览器,就像我们对 txt 文件所做的那样,但使​​用 FileResult 而不是使用 JsonResult。所以,你的意思是我们不能用 JsonResult 做到这一点,只能用 FileResult?
  • 不,您仍然可以传递将动态创建它的 URL。
  • 我的 pdf 在物理上不存在,我以字节为单位,所以,url 将指向哪里?
  • 字节数是什么意思?我知道它不是某个地方存在的PDF文件,它是由一个软件生成的。好吧,生成 PDF 的脚本不应该将其全部内容发送到 JSON。它的内容,如你所说的字节(如果我理解得很好),应该通过 URL 提供,并且这个 URL 应该发送到 JSON,然后直接加载到窗口或 iFrame 中。如果您想在浏览器环境中显示它,这是唯一的方法。
  • 当我说以字节为单位时,我的意思是我将 pdf 导出到一个流(例如,MemoryStream 或 Stream),也就是一个字节数组。
【解决方案2】:

Nabab 是正确的,您不能将 PDF 转换为 JSON。

您的操作“GetTestReport”应使用 FileStreamResult 返回 pdf 本身:

return new FileStreamResult(pdfMemoryStream, "application/pdf"); 

您没有指定控制器的名称,因此我们假设它称为“home”。这意味着如果您浏览到 /Home/GetTestReport,您的 pdf 将提供给客户端并显示在浏览器中。

那个网址就是你需要的!您可以在 ViewModel 中使用它或使用 JSON 将其发送到浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2023-03-22
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多