Asp.net 从MVC视图中的数据库渲染PDF?

Asp.net 从MVC视图中的数据库渲染PDF?,asp.net,asp.net-mvc,asp.net-mvc-3,pdf,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Pdf,我想知道在MVC3中不使用第三方组件是否可以做到这一点。(尽管我对免费组件持开放态度。)这里有几个链接,但它们似乎主要关注报告和其他声称做这类事情的代码示例,但它们似乎没有编译。我在数据库中保存和检索PDF时没有遇到任何问题,但当我将PDF作为文件或文件流结果返回时,会提示用户下载。更理想的方法是在浏览器中实际渲染PDF。我看过iTextSHarp,它在一定程度上起到了作用,但它不是一个完整的解决方案。例如,当且仅当客户端安装了Adobe Reader时,它才会在视图中显示PDF,否则会提示下载

我想知道在MVC3中不使用第三方组件是否可以做到这一点。(尽管我对免费组件持开放态度。)这里有几个链接,但它们似乎主要关注报告和其他声称做这类事情的代码示例,但它们似乎没有编译。我在数据库中保存和检索PDF时没有遇到任何问题,但当我将PDF作为
文件
文件流结果
返回时,会提示用户下载。更理想的方法是在浏览器中实际渲染PDF。我看过iTextSHarp,它在一定程度上起到了作用,但它不是一个完整的解决方案。例如,当且仅当客户端安装了Adobe Reader时,它才会在视图中显示PDF,否则会提示下载。所以从技术上讲,我主要是寻找一个PDF浏览器。有什么想法吗?

是这个问题的解决方案。

是这个问题的解决方案。

我一直在使用iTextSharp,效果很好。我可以在单独的窗口中打开pdf,甚至在没有安装Adobe的情况下(我在我的公司中使用Foxit Reader)。实际上,在我的例子中,我根本没有使用iTextSharp

我的观点:

<a href="@Url.Action("RetreiveFile", "File", new { id = fileId })" target="_blank">
    OpenPdf
</a>
    public ActionResult RetreiveFile(int id)
    {
        ComplexClass myClass= _FileModel.GetFile(id);
        byte[] img = myClass.ContentData.ToArray();
        Response.AppendHeader("Content-Disposition", "inline; filename=xyz.pdf");
        return File(img, "application/pdf");
    }
而我的contentdata作为二进制数据存储在数据库中

无论如何,也许我误解了你的问题,但这就是我在项目中处理pdf的方式,我的浏览器从不要求我下载pdf:)


问候。

我一直在使用iTextSharp,效果很好。我可以在单独的窗口中打开pdf,甚至在没有安装Adobe的情况下(我在我的公司中使用Foxit Reader)。实际上,在我的例子中,我根本没有使用iTextSharp

我的观点:

<a href="@Url.Action("RetreiveFile", "File", new { id = fileId })" target="_blank">
    OpenPdf
</a>
    public ActionResult RetreiveFile(int id)
    {
        ComplexClass myClass= _FileModel.GetFile(id);
        byte[] img = myClass.ContentData.ToArray();
        Response.AppendHeader("Content-Disposition", "inline; filename=xyz.pdf");
        return File(img, "application/pdf");
    }
而我的contentdata作为二进制数据存储在数据库中

无论如何,也许我误解了你的问题,但这就是我在项目中处理pdf的方式,我的浏览器从不要求我下载pdf:)

问候。

到目前为止,似乎是最好的解决方案,尽管我还没有尝试过。它需要移植到C#,并使MVC兼容,但如果您不想在第三方组件上花费太多,这似乎是一种方法

编辑12月4日

我花了好几天的时间寻找解决办法,我想我已经找到了一个很好的解决办法。ghostscript转换器已经有很多C#包装器,为什么不推出自己的方案呢?(我最终还是这么做了)。包装纸:

如果您想要更实用的解决方案,下面有两篇关于Codeproject的精彩文章:

然而,我觉得解决方案仍然不是最优的。例如,Ghostscript转换器与文件目录一起工作,这意味着您必须在磁盘上生成PDF文件的物理副本,以便转换器使用,如果使用字节数组可以实现这一点,则效果会更好。不过,也许有办法解决这个问题

编辑12月21日

最后,为了完整性和回答实际问题:

经过进一步研究,我得出结论,目前最好的PDF查看器是神奇的库。我试过一些,对我来说这是目前为止最好的。我甚至尝试过第三方组件(),但即使这样也不如PDF.js那么一致或可靠。PDF.js的缺点是:

  • 有点混乱,很难开始使用,文档有点薄弱
  • 它只适用于最新的浏览器(因为它使用了大量HTML5,所以很自然)。我已经在Firefox 17和Chrome 23上成功地测试了它。它在IE9中有一些问题,但在IE10中工作得非常好。但我一点也不介意。如果您的网站观众期望您的应用程序(或任何其他web应用程序)具有如此强大的功能,那么他们应该使用最新的技术
  • 似乎没有办法(至少我不知道)将PDF作为字节数组/流加载,因此如果希望显示PDF,必须在磁盘上创建一个副本。除了这些微不足道的小问题,PDF.js真是太棒了 我已经为PDF.js创建了一个小型但功能齐全的MVC演示版。

    到目前为止,似乎是最好的解决方案,尽管我还没有尝试过。它需要移植到C#,并使MVC兼容,但如果您不想在第三方组件上花费太多,这似乎是一种方法

    编辑12月4日

    我花了好几天的时间寻找解决办法,我想我已经找到了一个很好的解决办法。ghostscript转换器已经有很多C#包装器,为什么不推出自己的方案呢?(我最终还是这么做了)。包装纸:

    如果您想要更实用的解决方案,下面有两篇关于Codeproject的精彩文章:

    然而,我觉得解决方案仍然不是最优的。例如,Ghostscript转换器与文件目录一起工作,这意味着您必须在磁盘上生成PDF文件的物理副本,以便转换器使用,如果使用字节数组可以实现这一点,则效果会更好。不过,也许有办法解决这个问题

    编辑12月21日

    最后,为了完整性和回答实际问题:

    经过进一步研究,我得出结论,目前最好的PDF查看器是神奇的库。我试过一些,对我来说这是目前为止最好的。我甚至尝试过第三方组件(),但即使这样也不如PDF.js那么一致或可靠。PDF.js的缺点是:

  • 有点混乱,很难开始使用,文档有点薄弱
  • 它只适用于最新的浏览器(因为它使用了大量HTML5,所以很自然)。我已经在Firefox 17和Chrome 23上成功地测试了它。它在IE9中有一些问题,但在IE10中工作得非常好。