Definir Privilégios, Criptografar e Descriptografar Arquivo PDF usando C++
Definir Privilégios em um Arquivo PDF Existente
Para definir privilégios em um arquivo PDF existente, o Aspose.PDF para C++ usa a classe DocumentPrivilege e especifica os direitos que você deseja aplicar ao documento. Uma vez que os privilégios tenham sido definidos, passe este objeto como um argumento para o método Encrypt do objeto Document.
O trecho de código a seguir mostra como definir os privilégios de um arquivo PDF.
void SecuringAndSigning::SetPrivilegesOnExistingPDF() {
// String para nome do caminho.
String _dataDir("C:\\Samples\\");
// Carregar um arquivo PDF de origem
auto document = MakeObject<Document>(_dataDir + u"input.pdf");
// Instanciar objeto de Privilégios de Documento
// Aplicar restrições em todos os privilégios
auto documentPrivilege = DocumentPrivilege::get_ForbidAll();
// Permitir apenas leitura de tela
documentPrivilege->set_AllowScreenReaders(true);
// Criptografar o arquivo com senha de Usuário e Proprietário.
// Precisa definir a senha, para que uma vez que o usuário visualize o arquivo com a senha do usuário,
// Apenas a opção de leitura de tela é habilitada
document->Encrypt(u"user", u"owner", documentPrivilege, CryptoAlgorithm::AESx128, false);
// Salvar documento atualizado
document->Save(_dataDir + u"SetPrivileges_out.pdf");
}
Criptografar Arquivo PDF usando Diferentes Tipos de Criptografia e Algoritmos
Para criptografar o arquivo PDF use o método Encrypt do objeto Document para criptografar um arquivo PDF.
O trecho de código a seguir mostra como criptografar arquivos PDF.
void SecuringAndSigning::EncryptPDFFile() {
// String para nome do caminho.
String _dataDir("C:\\Samples\\");
// Carregar um arquivo PDF de origem
auto document = MakeObject<Document>(_dataDir + u"input.pdf");
// Instanciar objeto de Privilégios do Documento
// Aplicar restrições em todos os privilégios
auto documentPrivilege = DocumentPrivilege::get_ForbidAll();
// Permitir apenas leitura de tela
documentPrivilege->set_AllowScreenReaders(true);
// Criptografar o arquivo com senha de Usuário e Proprietário.
// É necessário definir a senha, para que uma vez que o usuário visualize o arquivo com a senha de usuário,
// Apenas a opção de leitura de tela esteja habilitada
document->Encrypt(u"user", u"owner", documentPrivilege, CryptoAlgorithm::AESx128, false);
// Salvar documento atualizado
document->Save(_dataDir + u"SetPrivileges_out.pdf");
}
Descriptografar Arquivo PDF usando Senha do Proprietário
Para descriptografar o arquivo PDF, você primeiro precisa criar um objeto Document e abrir o PDF usando a senha do proprietário. Depois disso, você precisa chamar o método Decrypt.
void SecuringAndSigning::DecryptPDFFile() {
// String para nome do caminho.
String _dataDir("C:\\Samples\\");
// Abrir documento
auto document = MakeObject<Document>(_dataDir + u"Decrypt.pdf", u"password");
// Descriptografar PDF
document->Decrypt();
// Salvar PDF atualizado
document->Save(_dataDir + u"Decrypt_out.pdf");
}
Alterar Senha de um Arquivo PDF
Como seus PDFs podem conter informações importantes e confidenciais, eles devem permanecer seguros. Assim, pode ser necessário alterar a senha do seu documento PDF.
Se você quiser alterar a senha de um arquivo PDF, você primeiro precisa abrir o arquivo PDF usando a senha do proprietário com o objeto Document. Depois disso, você precisa chamar o método ChangePasswords.
O seguinte trecho de código mostra como alterar a senha de um arquivo PDF.
void SecuringAndSigning::ChangePassword_PDF_File() {
// String for path name.
String _dataDir("C:\\Samples\\");
// Open document
auto document = MakeObject<Document>(_dataDir + u"ChangePassword.pdf", u"owner");
// Change password
document->ChangePasswords(u"owner", u"newuser", u"newowner");
// Save updated PDF
document->Save(_dataDir + u"ChangePassword_out.pdf");
}
Como - determinar se o PDF de origem está protegido por senha
Um documento PDF criptografado com a senha do usuário não pode ser aberto sem uma senha. Precisamos determinar se o documento está protegido por senha antes de tentarmos abri-lo. Às vezes, existem documentos que não exigem informações de senha ao serem abertos, mas exigem informações para editar o conteúdo do arquivo. Portanto, para atender aos requisitos acima, a classe PdfFileInfo presente no Aspose.PDF.Facades fornece as propriedades que podem ajudar a determinar as informações necessárias.
Obter informações sobre a segurança do documento PDF
PdfFileInfo contém três propriedades para obter informações sobre a segurança do documento PDF.
- A propriedade PasswordType retorna o valor de enumeração PasswordType:
-
PasswordType.None - o documento não está protegido por senha
-
PasswordType.User - o documento foi aberto com a senha de usuário (ou de abertura do documento)
-
PasswordType.Owner - o documento foi aberto com a senha de proprietário (ou permissões, edição)
-
PasswordType.Inaccessible - o documento está protegido por senha, mas a senha é necessária para abri-lo enquanto uma senha inválida (ou nenhuma senha) foi fornecida.2. propriedade booleana HasOpenPassword - é usada para determinar se o arquivo de entrada requer uma senha ao abri-lo.
-
- propriedade booleana HasEditPassword - é usada para determinar se o arquivo de entrada requer uma senha para editar seu conteúdo.
Determinar a senha correta a partir de um Array
Às vezes, é necessário determinar a senha correta a partir de um array de senhas e abrir o documento com a senha correta. O trecho de código a seguir demonstra os passos para iterar através do array de senhas e tentar abrir o documento com a senha correta.
void SecuringAndSigning::DetermineCorrectPasswordFromArray() {
// String para nome do caminho.
String _dataDir("C:\\Samples\\");
// Carregar arquivo PDF de origem
auto info = MakeObject<PdfFileInfo>(_dataDir + u"IsPasswordProtected.pdf");
// Determinar se o PDF de origem está criptografado
Console::WriteLine(u"Arquivo está protegido por senha {0}", info->get_IsEncrypted());
const int count = 5;
String passwords[count] = { u"test", u"test1", u"test2", u"owner", u"sample" };
for (int passwordcount = 0; passwordcount < count; passwordcount++)
{
try
{
auto document = MakeObject<Document>(_dataDir + u"IsPasswordProtected.pdf", passwords[passwordcount]);
auto pages = document->get_Pages()->get_Count();
if (pages > 0)
Console::WriteLine(u"Número de páginas no documento é = {0}", pages);
}
catch (Aspose::Pdf::InvalidPasswordException ex)
{
Console::WriteLine(u"Senha = {0} não está correta", passwords[passwordcount]);
}
}
Console::WriteLine(u"Teste concluído");
}