2012-11-29 62 views
1

我想知道是否有可能做到這一點,而不使用MVC 3中的第三方組件。(我可以免費獲得組件。)有幾個鏈接,但他們似乎主要關注報告和其他代碼聲稱做這種事情的樣本似乎沒有編譯。我沒有任何麻煩,從我的數據庫中保存和檢索PDF,但是當我將PDF作爲FileFileStreamResult返回時,會提示用戶下載。更理想的方法是在瀏覽器中實際渲染PDF。我看了一下iTextSHarp,它在一定程度上完成了這項工作,但它不是一個完整的解決方案。例如,當且僅當客戶端安裝了Adobe Reader時,纔會在視圖中顯示PDF,否則會提示下載。所以在技術上,我主要是在尋找一個PDF查看器。有任何想法嗎?從MVC視圖內的數據庫渲染PDF?

回答

3

截至目前,this似乎是最好的解決方案,但我沒有嘗試過。它需要移植到C#並且使MVC兼容,但是如果你不想在第三方組件like Syncfusion上飛濺,這似乎是要走的路。

編輯12月4日

我花了好幾天的尋找解決方法,我想我已經找到了一個相當不錯的。已經有很多用於ghostscript轉換器的C#包裝器,爲什麼不推出自己的方案? (我最終做了)。該包裝:

Mark Redman's Wrapper

Matt Ephraim's Wrapper

如果你想要一個更實用的解決方案,有2篇在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的缺點:

  1. 有點混亂,難以上手,文檔是somehwat弱
  2. 它只能在最新的瀏覽器(自然的,因爲它使用了這麼多HTML5)。我已經在Firefox 17和Chrome 23上成功測試了它。它在IE9中有一些問題,但在IE10中運行得非常好。但我根本不介意。如果您的網站瀏覽者期望從您的應用程序(或任何其他Web應用程序)獲得如此強大的功能,那麼他們應該使用最新的技術。
  3. 似乎沒有辦法(至少我沒有意識到)將PDF加載爲字節數組/流,因此如果您希望在PDF上創建PDF副本顯示它。除了這些微不足道的打嗝之外,PDF.js確實令人驚歎。

我創建PDF.js here雖小,但功能齊全的MVC演示。

2

我一直在使用iTextSharp,效果很好。我可以設法在單獨的窗口中打開PDF,甚至沒有安裝Adobe(我在我的作品中使用福昕閱讀器)。其實在我的例子中我根本沒有使用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內容存儲在數據庫中的二進制數據。

不管怎樣,也許I'm誤解你的問題,但是這是我如何處理PDF文件在我的項目,我的瀏覽器從來沒有要求我下載PDF:

問候。

+1

謝謝,我錯過了一些東西,因爲我剛剛用IE 9測試了我的代碼......您發佈的解決方案適用於Chrome和FF,但不適用於IE。我認爲Chrome和FF有一些內置PDF閱讀器,而IE不支持,因此會立即提示用戶下載。 –

+0

mhm ....當IE9與某事有關時,這實際上並不令人意外。但實際上我的代碼在IE9中工作。也許你在IE9中有一些嚴格的安全設置? (或者它們可能只是默認設置) – gardarvalur

+0

其實我認爲你需要爲瀏覽器安裝某種查看器才能正常顯示PDF,我沒有安裝Foxit閱讀器,而且沒有任何瀏覽器再提供PDF,而是提示下載。 ..問題依然存在,需要PDF閱讀器。 –