Вы можете сначала расшифровать исходный файл PDF, например, с помощью библиотеки qpdf , сохранив вывод во временный файл, а затем открыть этот временный файл с помощью QDesktopServices::openUrl()
.
. расшифровать файл PDF с помощью утилиты командной строки qpdf
, синтаксис:
qpdf --password=KNOWNPASSWORD --decrypt input.pdf output.pdf
Вот простой пример дешифрования PDF с использованием библиотеки qpdf из программы Qt с использованием утилиты pkg-config длянастроить зависимость.
test.pro
QT = core
CONFIG += c++11 console link_pkgconfig
TEMPLATE = app
SOURCES += main.cpp
PKGCONFIG += libqpdf
main.cpp
#include <QCoreApplication>
#include <qpdf/QPDF.hh>
#include <qpdf/QPDFWriter.hh>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString inputFile = "input.pdf";
QString outputFile = "output.pdf";
QString userPassword = "USERPASS";
try
{
QPDF qpdf;
qpdf.processFile(inputFile.toLocal8Bit(), userPassword.toLocal8Bit());
QPDFWriter w(qpdf, outputFile.toLocal8Bit());
w.setPreserveEncryption(false);
w.write();
}
catch (std::exception& e)
{
qFatal("Error. %s", e.what());
}
}