2010-07-18 135 views
5

我正在爲朋友創建電子書。他有word(docx)中的內容,所以我有幾個問題。我之前就如何解決這個問題創建了一個線程,最好的反應是創建PDF。這樣做的要點是我們可以插入文本框,鏈接和目錄。在c#應用程序中託管PDF

現在我想知道是否可以在我的應用程序中託管PDF。我想基本上製作一個「Adobe Reader」。有沒有這樣的圖書館?我可以使用安裝的COM/dll來做到這一點嗎?

之所以這樣做,是因爲我在創建應用程序或「報告卡」或「書籤」功能時,就像是「測驗」部分。

謝謝你們。

回答

6

製作 a 定製PDF瀏覽器控制可能是一項極具挑戰性的任務。您可以在您的應用程序中使用真實的Adobe Reader,因爲它提供的COM控件可以託管在任何Windows應用程序中。以下是具體步驟:

  1. 啓動一個新的WinForms應用程序
  2. 請在工具箱中可用的Acrobat控制(工具 - >添加/刪除工具箱項:在COM組件選項卡打開「安裝Adobe Acrobat 7.0瀏覽器文件」 )。在點擊COM選項卡之前,不要忘記拿一杯咖啡。
  3. 將控件形式
  4. 操縱它:

    axAcroPDF1.LoadFile("mypdf.pdf"); 
    axAcroPDF1.Show(); 
    
+0

我會投票,因爲它會工作..雖然我認爲使用WebBrowser控制更簡單。 – David 2010-07-18 19:55:52

+0

@David,而'WebBrowser'的方法確實更容易實現,與Adobe組件相比,您可以輕鬆控制PDF,使您可以導航,打印... – 2010-07-18 20:01:17

+0

太棒了!但是我可以分發正確的庫嗎?安裝人員應該完成這項工作。如何使用像foxit這樣的輕量級pdf閱讀器,它可以被類似地使用嗎? – masfenix 2010-07-18 20:10:39

1

我知道這已被問過,但我不記得在哪裏。接受的答案是沿着這些路線的東西:

這將是一個非常糟糕的主意,以創建自己的PDF閱讀器,這是因爲:

  1. 你是不是在當時,Adobe 改變規格
  2. 的Adobe控制免費提供 閱讀器,大多數 用戶已經安裝。
  3. 鑑於前面的兩個陳述,爲什麼要花這麼多時間重新發明輪子?當你可以改進它時,重新發明輪子是有意義的,但是當你只是在複製可以免費獲得的功能時,則不是。

找到一種方法可以使用他們已經設計並免費分發的Acrobat reader。

這很容易做到。您只需使用WebBrowser控件(假設這是WinForms)並將DocumentSource設置爲PDF文件即可。 WebBrowser控件將自動使用客戶端PC上已安裝的任何pdf閱讀器,就像Internet Explorer一樣。

1

我有很好的經驗,工作的Aspose庫。它們價格合理,可爲您節省大量時間。

1

您可以通過您的機器上安裝的ActiveX組件以及閱讀器在您的應用程序中嵌入Adobe Reader。您可以從COM Components選項卡將它添加到VS Toolbox。任何安裝了Abobe Reader的用戶都可以使用您的應用查看PDF文檔。 請注意,如果沒有安裝Adobe Reader,您的程序將無法工作,或者您需要以某種方式爲應用程序提供lib。 如果你想要一些不需要Adobe Reader的東西,那麼你可能想看看iText#

+0

缺點是您的應用程序無法在沒有安裝Adobe Reader的機器上工作。我猜OP只是爲朋友建立一些東西,但如果我只是爲了使用其他應用程序而必須安裝adobe reader,我會很不高興...... – 2010-07-18 20:08:49

+0

Acutally,朋友是一家大公司的承包商。該公司需要將其分發給他們的客戶,並且他們不能將任何東西發送出去。 – masfenix 2010-07-18 20:20:56

+0

如果沒有Adobe的許可,公司甚至可以分發adobe庫(正常redist許可證只允許重新分發完整的安裝程序:http://www.adobe.com/products/reader/rdr_distribution1.html)。我希望狐狸有類似的要求 – 2010-07-18 20:38:58

0

使用Adobe ActiveX/com組件的一個潛在問題是用戶必須安裝Adobe Reader才能正常工作(我認爲您不能僅允許和/或僅允許重新分發activeX控件,並且不會我不想強迫我的用戶安裝Adobe Reader)。因此,對於更嚴肅的工作,我會嘗試使用可以隨代碼一起分發的Pdf庫,例如爲開放源代碼庫http://ccxvii.net/mupdf/編寫一個(可能非常小的)P/Invoke包裝器,或者如果您可以/想要它使用一些商業圖書館。

使用web瀏覽器控件的一個問題是,你必須小心地測試如果在IE中禁用PDF作爲嵌入的目標用戶會發生什麼情況。它可能會發生,而不是嵌入你得到一個外部Adobe閱讀器(或任何註冊爲PDF處理程序)彈出!有可能是一種解決方法,但我之前已經被它咬過(導致其中一個「在我的機器上工作」的問題)

+0

這個問題是,庫不支持嵌入鏈接或文本框等的PDF文件,或者它? – masfenix 2010-07-18 20:19:47

+0

那麼,這將取決於圖書館:)我不確定mupdf是誠實的,但是IIRC sumatrapdf基於mupdf和sumatra,至少支持嵌入式鏈接,ToC和書籤。 Tyler Jensen提到Aspose,我想這會支持更高級的pdf功能,但我從來沒有用過它,而且它有點貴...對於mupdf,我想你可以簡單地嘗試看看sumatrapdf是否支持你需要的功能,然後調查一個P/Invoke層爲.net做了多少努力。 – 2010-07-18 20:26:19

+0

哦,當然mupdf是GNU GPL3(「有關商業許可請聯繫[email protected]。」)。所以你一定要確保你遵守許可條款 – 2010-07-18 20:32:57

相關問題