Эта страница может содержать автоматически переведенный текст.
Расшифровка PDF-документов в C# и VB.NET
PDF-документ может быть защищен паролями, сертификатами или не быть защищен.
Существуют разные подходы к открытию PDF-документов. Рекомендуемый способ — сначала проверить, защищен ли PDF-файл. Альтернатива — попытаться открыть любой PDF-документ, не проверяя сначала, зашифрован он или нет. Библиотека Docotic.Pdf выбрасывает исключения CannotDecryptPdfException для документов, которые требуют пароль или сертификат.

Проверка, защищен ли PDF-документ
Библиотека предоставляет методы GetEncryptionInfo для проверки, зашифрован ли PDF-документ. Эти методы также предоставляют сведения об используемом обработчике шифрования.
Следующий фрагмент кода C# показывает, как проверить, зашифрован ли PDF-файл:
var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
Console.WriteLine("Is not encrypted");
else if (info is PdfStandardEncryptionInfo standardInfo)
Console.WriteLine("Is encrypted with a password");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
Console.WriteLine("Is encrypted with a digital certificate(s)");
Многие PDF-документы, зашифрованные с помощью паролей, не требуют пароль для открытия. Для таких PDF-файлов пароль требуется только для режима "owner" (без ограничений).
if (standardInfo.RequiresPasswordToOpen)
Console.WriteLine("Can not be opened without a password");
else
Console.WriteLine("Does not require a password");
Для PDF-документа, зашифрованного сертификатами, можно получить сведения о его получателях. Иными словами, можно проверить, какие сертификаты могут разблокировать PDF-документ. Обратите внимание, что разрешения документа зависят от фактически использованного сертификата для расшифровки PDF-файла.
// свойство Recipients содержит сведения о сертификатах
// которые можно использовать для расшифровки PDF-документа
foreach (var recipient in publicKeyInfo.Recipients)
Console.WriteLine(recipient.SerialNumber);
Открытие зашифрованных PDF-документов в .NET
PDF-документ, зашифрованный с использованием паролей, может как требовать, так и не требовать пароль для открытия. В любом случае используйте конструктор PdfDocument для открытия документа.
Если PDF-файл не требует пароль, используйте конструктор без параметра обработчика расшифровки. Библиотека Docotic.Pdf откроет документ с правами "user" (с ограничениями).
Если PDF-документ требует пароль для открытия, используйте конструктор с обработчиком типа PdfStandardDecryptionHandler. Используйте тот же конструктор, если хотите открыть защищенный PDF-файл с правами "owner" (без ограничений).
Следующий фрагмент кода показывает, как открыть защищенный паролем PDF-файл в C#:
using var document = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password"));
// что-то сделать с расшифрованным документом
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);
// что-то сделать с расшифрованным документом
Удаление защиты из PDF-файлов
Чтобы удалить защиту из PDF-документа, выполните следующие шаги:
- откройте PDF с помощью конструктора PdfDocument с подходящим обработчиком расшифровки
- не настраивайте никакой обработчик шифрования в параметрах сохранения
- сохраните PDF-документ
Без обработчика шифрования библиотека сохранит PDF-документ незашифрованным.
Чтобы удалить пароли из PDF, откройте документ с обработчиком типа PdfStandardDecryptionHandler. Для документов, защищенных сертификатом, используйте обработчик типа PdfPublicKeyDecryptionHandler.
Проверка разрешений PDF в .NET
Чтобы проверить разрешения, предоставленные для PDF-документа, сначала потребуется создать или открыть документ. Не имеет значения, открываете ли вы зашифрованный PDF-файл или файл без защиты.
Этот фрагмент кода показывает, как проверить разрешения PDF в C#:
// создайте новый документ или откройте существующий
using var document = new PdfDocument(fileName);
Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);