我想知道是否可以在不使用MVC 3中的第三方组件的情况下执行此操作。(虽然我对免费组件持开放态度。)有几个链接,但它们似乎主要关注报告和其他声称做这种事情的代码示例似乎没有编译。我在保存和从我的数据库中检索PDF方面没有任何问题,但当我将PDF作为File
或FileStreamResult
返回时,会提示用户下载。更理想的方法是在浏览器中实际呈现PDF。我已经看过iTextSHarp,它在一定程度上完成了这项工作,但它不是一个完整的解决方案。例如,当且仅当客户端安装了Adobe Reader时,它才会在视图中显示PDF,否则会提示下载。从技术上讲,我主要是在寻找一个PDF查看器。有什么想法吗?
答案 0 :(得分:3)
截至目前,this似乎是最佳解决方案,但我还没有尝试过。它需要被移植到C#并使MVC兼容,但是如果你不想在第三方组件like Syncfusion上展开,这似乎是要走的路。
12月4日编辑
我花了好几天寻找解决方法,我想我找到了一个非常好的解决方案。 ghostscript转换器已经有很多C#包装器,为什么不推出自己的方案呢? (我最终做了)。包装器:
如果你想要一个更实用的解决方案,Codeproject上有两篇很棒的文章:
How To Convert PDF to Image Using Ghostscript API
Convert a PDF into a series of images using C# and GhostScript
但是我觉得解决方案仍然不是最优的。例如,Ghostscript转换器与文件目录一起工作,这意味着您必须在磁盘上生成PDF文件的物理副本以供转换器使用,如果可以使用字节数组实现这一目标会好得多。可能有办法解决这个问题。
12月21日编辑
最后,为了完整起见并回答实际问题:
经过一番研究后,我得出结论,目前最好的PDF查看器是精彩的PDF.js库。我已经尝试了一些,对我来说这是迄今为止最好的。我甚至尝试过第三方组件(Syncfusion's Pdf Viewer),甚至不像PDF.js那样一致或可靠。 PDF.js的缺点:
我已经创建了一个小型但功能齐全的PDF.js here MVC演示。
答案 1 :(得分:2)
我一直在使用iTextSharp,效果很好。我可以设法在单独的窗口中打开pdf,甚至没有安装Adobe(我在我的comp中使用福昕阅读器)。实际上在我的例子中我根本没有使用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:)
问候。
答案 2 :(得分:-1)
iTextSharp是解决此问题的方法。