我想在c#.net windows应用程序面板或adobe reader中打开受密码保护的pdf。
我的想法是我想通过系统传递密码并打开pdf。用户可以看到pdf但无法保存。即使用户可以将我们保存在他们的计算机中,当他们重新打开pdf时,该文件也会询问密码。这意味着当他们想要阅读pdf时,他们必须使用系统,如果他们将pdf带到外面,他们就无法打开密码的cos。
我尝试使用Adobe Pdf dll,这个无法传递密码。 而且我也试过用itextsharp,这个可以传递密码但是在传递密码之后,需要保存pdf。因此,当我打开pdf时,该文件没有密码。
我想通过系统直接打开受密码保护的pdf。我不想再保存。
答案 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。