Esta página puede contener texto traducido automáticamente.
Desencriptar documentos PDF en C# y VB.NET
Un documento PDF puede protegerse con contraseñas, certificados o no estar protegido.
Existen diferentes enfoques para abrir documentos PDF. El método recomendado es comprobar primero si un archivo PDF está protegido. La alternativa es intentar abrir cualquier documento PDF sin comprobar antes si está cifrado o no. La biblioteca Docotic.Pdf genera excepciones CannotDecryptPdfException para documentos que requieren una contraseña o un certificado.

Comprobar si un documento PDF está protegido
La biblioteca proporciona métodos GetEncryptionInfo para comprobar si un documento PDF está cifrado. Estos métodos también proporcionan información sobre el controlador de cifrado usado para cifrar el documento.
El siguiente fragmento de código en C# muestra cómo comprobar si un archivo PDF está cifrado:
var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
Console.WriteLine("No está cifrado");
else if (info is PdfStandardEncryptionInfo standardInfo)
Console.WriteLine("Está cifrado con una contraseña");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
Console.WriteLine("Está cifrado con un certificado digital(s)");
Muchos documentos PDF cifrados con contraseñas no requieren una contraseña para abrirlos. Para estos archivos PDF, solo se requiere una contraseña para el modo de "propietario" (sin restricciones).
if (standardInfo.RequiresPasswordToOpen)
Console.WriteLine("No se puede abrir sin una contraseña");
else
Console.WriteLine("No requiere una contraseña");
Para un documento PDF cifrado con certificados, es posible obtener información sobre sus destinatarios. En otras palabras, puede comprobar qué certificados pueden desbloquear el documento PDF. Tenga en cuenta que los permisos del documento dependen del certificado real utilizado para descifrar el archivo PDF.
// la propiedad Recipients contiene información sobre certificados
// que se pueden usar para descifrar el documento PDF
foreach (var recipient in publicKeyInfo.Recipients)
Console.WriteLine(recipient.SerialNumber);
Abrir documentos PDF cifrados en .NET
Un documento PDF cifrado con contraseñas puede requerir o no una contraseña para abrirlo. En cualquier caso, use un constructor de PdfDocument para abrir el documento.
Si el archivo PDF no requiere una contraseña, use un constructor sin un parámetro de controlador de descifrado. La biblioteca Docotic.Pdf abrirá el documento con permisos de "usuario" (restringidos).
Si el documento PDF requiere una contraseña para abrirlo, use un constructor con un controlador de tipo PdfStandardDecryptionHandler. Use el mismo constructor si desea abrir un archivo PDF protegido con permisos de "propietario" (sin restricciones).
El siguiente fragmento de código muestra cómo abrir un archivo PDF protegido con contraseña en C#:
using var document = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password"));
// hacer algo con el documento descifrado
Los documentos PDF cifrados con certificados requieren un certificado coincidente para abrirlos. Puede haber más de un certificado coincidente para un archivo PDF. El autor del documento PDF cifrado puede conceder diferentes permisos para distintos certificados coincidentes.
Si tiene un certificado coincidente instalado en el almacén de certificados X.509 del usuario actual, use un constructor de PdfDocument sin un parámetro de controlador de descifrado. La biblioteca Docotic.Pdf usará el primer certificado coincidente del almacén de certificados y usará el certificado para abrir el documento.
En los casos en que no tenga instalado en el almacén de certificados X.509 del usuario actual un certificado coincidente o deseado, cree una instancia de PdfPublicKeyDecryptionHandler y úsela con un constructor de PdfDocument. Puede crear un controlador usando un certificado, un almacén de claves o un almacén de certificados.
El siguiente fragmento de código en C# crea un controlador de descifrado de clave pública con un certificado de un almacén de claves. Luego, el controlador se usa para abrir un archivo PDF protegido con certificado:
var handler = new PdfPublicKeyDecryptionHandler("key-store.p12", "password");
using var document = new PdfDocument(fileName, handler);
// hacer algo con el documento descifrado
Quitar la protección de archivos PDF
Para quitar la protección de un documento PDF, siga estos pasos:
- abra el PDF usando un constructor de PdfDocument con un controlador de descifrado adecuado
- no configure ningún controlador de cifrado en las opciones de guardado
- guarde el documento PDF
Sin un controlador de cifrado, la biblioteca guardará el documento PDF sin cifrar.
Para eliminar las contraseñas de un PDF, abra el documento con un controlador de tipo PdfStandardDecryptionHandler. Para documentos protegidos con certificados, use un controlador de tipo PdfPublicKeyDecryptionHandler.
Comprobar permisos de PDF en .NET
Para comprobar los permisos concedidos para un documento PDF, primero tendría que crear o abrir el documento. No importa si abre un archivo PDF cifrado o un archivo sin protección.
Este fragmento de código muestra cómo comprobar los permisos de PDF en C#:
// crear un documento nuevo o abrir uno existente
using var document = new PdfDocument(fileName);
Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);