2012-10-10 128 views
1

我想在c#.net窗口應用程序面板或Adobe Reader中打開受密碼保護的pdf。如何用c#打開受密碼保護的pdf#

我的想法是我想通過系統傳遞密碼並打開pdf。用戶可以看到PDF但不能保存。即使用戶可以保存我們的電腦,當他們重新打開PDF時,文件會詢問密碼。這意味着當他們想要閱讀pdf時,他們必須使用該系統,並且如果他們將pdf發送到外部,他們將無法打開密碼。

我試過用Adobe Pdf dll,這個不能傳密碼。 我也嘗試過使用itextsharp,這個可以通過密碼但通過密碼後,需要保存pdf。所以當我打開PDF時,文件沒有密碼。

我想通過系統直接打開密碼保護的pdf。我不想再保存。

回答

4

還有一個類似的問題how can a password-protected PDF file be opened programmatically?我複製了這個問題的一部分,並把它放在這裏。

public static void unprotectPdf(string input, string output) 
{ 
    bool passwordProtected = PdfDocument.IsPasswordProtected(input); 
    if (passwordProtected) 
    { 
     string password = null; // retrieve the password somehow 

     using (PdfDocument doc = new PdfDocument(input, password)) 
     { 
      // clear both passwords in order 
      // to produce unprotected document 
      doc.OwnerPassword = ""; 
      doc.UserPassword = ""; 

      doc.Save(output); 
     } 
    } 
    else 
    { 
     // no decryption is required 
     File.Copy(input, output, true); 
    } 
} 
+0

感謝您的發佈。如果我使用這個功能,pdf文件已經被刪除了密碼。因此,用戶可以保存在本地驅動器中,並且可以隨時打開而無需密碼。 其實我不想刪除密碼。打開pdf後,他們可以保存,但是當他們再次打開PDF後保存後,他們需要輸入密碼。 – CMMaung

0

如果我正確理解你,你想強制執行一些數字版權管理(DRM)。

爲了能夠做到這一點,您需要對PDF查看組件進行一些控制,或者該組件必須有足夠的限制。否則,也就是說,如果您只是以某種方式將密碼轉發給Adobe Acrobat,則該組件假定用戶是文檔的實際所有者,因此可以保存該文件的不受保護的副本。當然,如果您臨時創建一個不受保護的副本,例如使用iText(夏普),該臨時文件可以很容易地被搶走。

不幸的是,你沒有明確是否選擇「內部c#.net Windows應用程序面板或與Adobe閱讀器」取決於你或由用戶。因此,如果Adobe Acrobat/Reader需要支持,則必須將DRM插件集成到這些產品中,請參閱參考資料。 http://www.adobe.com/devnet/reader/topic_drm.html(「開發數字版權管理(DRM)插件」)。

另一方面,如果您有選擇,您只需要一些適當的PDF查看器組件。不幸的是,我不知道可用於.NET的查看器;如果您使用Java,則可以適當地自定義JPedal。