我希望检查一个pdf文件是否受密码保护以便查看。也就是我想知道这个pdf文件是否有用户密码。
我在一些论坛上找到了一些关于使用isencrypted
函数的帮助,但它并没有给出正确的答案。
是否可能检查pdf是否受到密码保护?
使用PdfReader.IsEncrypted
方法的问题在于,如果您尝试在需要密码的PDF上实例化一个PdfReader
,并且您没有提供该密码,那么您将会得到一个BadPasswordException
异常。
考虑到这一点,您可以编写如下的方法:
public static bool IsPasswordProtected(string pdfFullname) {
try {
PdfReader pdfReader = new PdfReader(pdfFullname);
return false;
} catch (BadPasswordException) {
return true;
}
}
请注意,如果您提供了无效的密码,则在尝试构造PdfReader
对象时会得到相同的BadPasswordException
异常。您可以使用此方法创建一个验证PDF密码的方法:public static bool IsPasswordValid(string pdfFullname, byte[] password) {
try {
PdfReader pdfReader = new PdfReader(pdfFullname, password);
return false;
} catch (BadPasswordException) {
return true;
}
}
虽然它看起来不太美观,但据我所知,这是检查PDF是否受密码保护的唯一方法。希望有人能提供更好的解决方案。
private void CheckPdfProtection(string filePath)
{
try
{
PdfReader reader = new PdfReader(filePath);
if (!reader.IsEncrypted()) return;
if (!PdfEncryptor.IsPrintingAllowed(reader.Permissions))
throw new InvalidOperationException("the selected file is print protected and cannot be imported");
if (!PdfEncryptor.IsModifyContentsAllowed(reader.Permissions))
throw new InvalidOperationException("the selected file is write protected and cannot be imported");
}
catch (BadPasswordException) { throw new InvalidOperationException("the selected file is password protected and cannot be imported"); }
catch (BadPdfFormatException) { throw new InvalidDataException("the selected file is having invalid format and cannot be imported"); }
}
参考:检查完整权限
你应该能够直接检查属性PdfReader.IsOpenedWithFullPermissions。
PdfReader r = new PdfReader("YourFile.pdf");
if (r.IsOpenedWithFullPermissions)
{
//Do something
}
如果有人需要帮助,这里是我在vb.net中使用的简单解决方案。使用fullpermissions进行检查的问题(如上所述)是您实际上无法打开防止您打开它的密码保护PDF。我在下面的代码中还有一些关于检查的内容。itextsharp.text.pdf实际上有一些你可能会发现有用的异常,如果这不是你需要的,请查看它。
Dim PDFDoc As PdfReader
Try
PDFDoc = New PdfReader(PDFToCheck)
If PDFDoc.IsOpenedWithFullPermissions = False Then
'PDF prevents things but it can still be opened. e.g. printing.
end if
Catch ex As iTextSharp.text.pdf.BadPasswordException
'this exception means the PDF can't be opened at all.
Finally
'do whatever if things are normal!
End Try