如何使用c#打开受密码保护的pdf

时间:2012-10-10 01:46:49

标签: c# pdf adobe itextsharp password-protection

我想在c#.net windows应用程序面板或adobe reader中打开受密码保护的pdf。

我的想法是我想通过系统传递密码并打开pdf。用户可以看到pdf但无法保存。即使用户可以将我们保存在他们的计算机中,当他们重新打开pdf时,该文件也会询问密码。这意味着当他们想要阅读pdf时,他们必须使用系统,如果他们将pdf带到外面,他们就无法打开密码的cos。

我尝试使用Adobe Pdf dll,这个无法传递密码。 而且我也试过用itextsharp,这个可以传递密码但是在传递密码之后,需要保存pdf。因此,当我打开pdf时,该文件没有密码。

我想通过系统直接打开受密码保护的pdf。我不想再保存。

2 个答案:

答案 0 :(得分:5)

有一个类似的问题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); 
    } 
} 

答案 1 :(得分:0)

如果我理解正确,您希望执行一些数字版权管理(DRM)。

为了能够做到这一点,您需要对PDF查看组件进行一些控制,或者该组件必须足够有限。否则,即如果您只是以某种方式将密码转发给Adobe Acrobat,该组件会假定用户是文档的实际所有者,因此可以保存该文件的不受保护的副本。当然,如果您临时创建一个不受保护的副本,例如使用iText(夏普),这个临时文件很容易被抢走。

不幸的是,您没有明确选择“在c#.net窗口应用程序面板内部还是使用adobe reader”是由用户决定还是取决于用户。

因此,如果需要支持Adobe Acrobat / Reader,则必须将DRM enforsing集成到这些产品中,参见http://www.adobe.com/devnet/reader/topic_drm.html(“开发数字版权管理(DRM)插件”)。

另一方面,如果您可以选择,则只需要一些合适的PDF查看器组件。不幸的是我不知道可用于.NET的观众;如果你使用Java,可以适当地定制JPedal。