如何在操作方法的浏览器选项卡中显示pdf文件

时间:2012-11-04 15:04:49

标签: asp.net-mvc

我试图在mvc应用程序中执行pdf viewer功能。当用户点击"阅读pdf"链接它应该打开一个新的选项卡/窗口,用户应该能够查看pdf文件。所以我检查了一些例子,但我无法找到。你能建议我任何文章或例子吗?

2 个答案:

答案 0 :(得分:4)

在第一个视图中显示锚标记并传递ID(以标识要显示的PDF)

@Html.ActionLink("read the pdf","view","doc",new { @id=123},null)

现在在doc控制器中,有一个动作方法,它有一个名为id的参数,并使用File方法返回pdf。

public ActionResult View(int id)
{
  byte[] byteArrayOfFile=GetFieInByteArrayFormatFromId(id);
  return File(byteArrayOfFile,"application/pdf");
}

假设GetFileInByteArrayFormatFromId是返回PDF文件的字节数组格式的方法。

如果您知道物理存储的PDF文件的完整路径,您也可以使用此overload返回PDF。

public ActionResult Show()
{
  string path="FullPAthTosomePDFfile.pdf";
  return File(path, "application/pdf","someFriendlyName.pdf");
}

在浏览器中显示PDF而不下载

根据最终用户的浏览器设置,上述解决方案将询问用户是否希望下载或打开文件,或者只是下载/打开文件。如果您希望直接在浏览器中显示文件内容而不将其下载到用户的计算机,则可以将文件流发送到浏览器。

public ActionResult Show(int id)
{
    // to do : Using the id passed in,build the path to your pdf file

    var pathToTheFile=Server.MapPath("~/Content/Downloads/sampleFile.pdf");
    var fileStream = new FileStream(pathToTheFile,
                                        FileMode.Open,
                                        FileAccess.Read
                                    );
    return  new FileStreamResult(fileStream, "application/pdf");           
}

上面的代码希望您在sampleFile.pdf位置拥有一个名为~/Content/Downloads/的pdf文件。如果使用不同的名称/命名约定存储文件,则可以更新代码以从传入的Id中构建唯一的文件名/路径。

答案 1 :(得分:0)