Я решил написать программу, чтобы открыть зашифрованный PDF-документ, запросить у пользователя пароль, расшифровать его и сохранить в другом документе без шифрования. У меня нет проблем при открытии PDF-документа, зашифрованного 256-битным AES. Но когда я пытался сохранить дешифрованный PDF-документ, он выдает PoDoFo::PdfError
со следующим сообщением:
PoDoFo encountered an error. Error: 8 ePdfError_InternalLogic
Error Description: An internal error occurred.
Callstack:
#0 Error Source: C:/repo/mingw-w64-podofo/src/podofo-0.9.6/src/base/PdfWriter.cpp:211
#1 Error Source: C:/repo/mingw-w64-podofo/src/podofo-0.9.6/src/base/PdfParserObject.cpp:403
Information: Unable to parse the stream for object 4 0 obj .
#2 Error Source: C:/repo/mingw-w64-podofo/src/podofo-0.9.6/src/base/PdfEncrypt.cpp:411
Information: Error AES-decryption data
Мой код:
#include <iostream>
#include <string>
#include <podofo/podofo.h>
int main(){
PoDoFo::PdfMemDocument *doc = new PoDoFo::PdfMemDocument();
std::string pdf_path;
std::cout << "Please enter the PDF path: " << std::flush;
std::getline(std::cin, pdf_path);
try{
doc->Load(pdf_path.c_str());
}
catch(PoDoFo::PdfError &error){
if (error.GetError() == PoDoFo::ePdfError_InvalidPassword){
std::cout << "The PDF document is encrypted. Please enter the password: " << std::flush;
std::string password;
std::getline(std::cin, password);
try{
doc->SetPassword(password);
}
catch(PoDoFo::PdfError &error){
error.PrintErrorMsg();
}
}
}
std::cout << "Please enter the PDF path to save the decrypted PDF: " << std::flush;
std::string save_pdf_path;
std::getline(std::cin, save_pdf_path);
try{
doc->Write(save_pdf_path.c_str());
}
catch(PoDoFo::PdfError &e){
e.PrintErrorMsg();
}
return 0;
}
Сообщение об ошибке выше напечатано в строке 33, при сохранении документа PDF. При тестировании я использовал веб-сайт PdfProtectFree для шифрования произвольного файла PDF.