Эта страница может содержать автоматически переведенный текст.
Дешифровать PDF-документы в C# и VB.NET
PDF-документ может быть защищен паролями, сертификатами или не защищен.
Существуют разные подходы к открытию PDF-документов. Рекомендуемый метод — сначала проверить, защищен ли PDF-файл. Альтернатива — попробовать открыть любой PDF-документ без предварительной проверки на зашифрованность. Библиотека Docotic.Pdf кидает исключение CannotDecryptPdfException для документов, требующих пароля или сертификата.
Проверить, защищен ли PDF-документ
Библиотека предоставляет методы GetEncryptionInfo. для проверки того, зашифрован ли PDF-документ. Эти методы также предоставляют информацию об обработчике шифрования, использованном для шифрования документа.
9.5.17615-dev 14,813 прошло Всего загрузок NuGet 4,924,084В следующем фрагменте кода на C# показано, как проверить, зашифрован ли PDF-файл:
var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
Console.WriteLine("Не зашифрован");
else if (info is PdfStandardEncryptionInfo standardInfo)
Console.WriteLine("Зашифрован паролем");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
Console.WriteLine("Зашифрован цифровым сертификатом(ами)");
Многие PDF-документы, зашифрованные паролями, не требуют пароля для их открытия. Для таких PDF файлов пароль требуется только для режима «владелец» (неограниченного).
if (standardInfo.RequiresPasswordToOpen)
Console.WriteLine("Без пароля невозможно открыть");
else
Console.WriteLine("Не требует пароля");
Для PDF-документа, зашифрованного сертификатами, можно получить информацию о его получателях. Другими словами, вы можете проверить, какие сертификаты могут разблокировать PDF-документ. Пожалуйста, обратите внимание, что права доступа к документу зависят от фактического сертификата, используемого для расшифровки PDF-файла.
// свойство Recipients содержит информацию о сертификатах,
// которые можно использовать для расшифровки PDF-документа
foreach (var recipient in publicKeyInfo.Recipients)
Console.WriteLine(recipient.SerialNumber);
Открыть зашифрованные PDF-документы в .NET
PDF-документ, зашифрованный с помощью паролей, может требовать или не требовать ввода пароля для его открытия. В любом случае, используйте конструктор PDFDocument, чтобы открыть документ.
Если файл PDF не требует пароля, используйте конструктор без обработчика расшифровки. Библиотека Docotic.Pdf откроет документ с «пользовательскими» (ограниченными) разрешениями.
Если для открытия PDF-документа требуется пароль, используйте конструктор с обработчиком типа PdfStandardDecryptionHandler. Используйте тот же конструктор, если вы хотите открыть защищенный PDF-файл с разрешениями «владельца» (неограниченными).
В следующем фрагменте кода показано, как открыть PDF-файл, защищенный паролем, на C#:
using (var document = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password")))
{
// do something with the decrypted document
}
PDF-документы, зашифрованные с помощью сертификатов, требуют наличия соответствующего сертификата для их открытия. Для PDF файла может быть более одного подходящего сертификата. Автор зашифрованного PDF-документа может предоставить разные разрешения для разных подходящих сертификатов сертификатов.
Если у вас установлен соответствующий сертификат в хранилище сертификатов X.509 текущего пользователя, используйте конструктор PdfDocument без обработчика расшифровки. Библиотека Docotic.Pdf использует первый подходящий сертификат из хранилища сертификатов для открытия документа.
В случаях, когда у вас подходящий/желаемый сертификат не установлен в хранилище серртификатов X.509
текущего пользователя, создайте экземпляр
PdfPublicKeyDecryptionHandler и используйте его с
конструктором PdfDocument
. Вы можете создать обработчик, используя сертификат, хранилище ключей
или хранилище сертификатов.
Следующий фрагмент кода на C# создает обработчик расшифровки открытого ключа используя сертификат из хранилища ключей. Затем обработчик используется для открытия PDF-файла, защищенного сертификатом:
var handler = new PdfPublicKeyDecryptionHandler("key-store.p12", "password");
using (var document = new PdfDocument(fileName, handler))
{
// do something with the decrypted document
}
Снять защиту с PDF-файлов
Чтобы снять защиту с PDF-документа, выполните следующие действия:
- откройте PDF-файл с помощью конструктора PdfDocument с соответствующим обработчиком расшифровки
- не устанавливайте обработчик шифрования в параметрах сохранения
- сохраните PDF-документ
Без обработчика шифрования библиотека сохранит PDF-документ незашифрованным.
Чтобы удалить пароли из PDF-файла, откройте документ с обработчиком типа PdfStandardDecryptionHandler. Для документов, защищенных сертификатом, используйте обработчик типа PdfPublicKeyDecryptionHandler.
Проверить разрешения PDF в .NET
Чтобы проверить разрешения, предоставленные для PDF-документа, вам потребуется чтобы сначала создать или открыть документ. Не имеет значения, открываете ли вы зашифрованный PDF-файл или файл без защиты.
В этом фрагменте кода показано, как проверить разрешения PDF на C#:
// create a new or open an existing document
using (PdfDocument document = ...)
{
Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);
}