Открыть зашифрованный PDF с C ++ / Qt (известные пароли) - PullRequest
0 голосов
/ 17 октября 2019

Я застрял со следующей проблемой:

Мне нужно открыть зашифрованные файлы PDF (с известными паролями) из простой программы C ++ / Qt с редактором PDF по умолчанию на ПК. Я знаю пароль к PDF-файлам, это не проблема здесь. В качестве альтернативы было бы также хорошо, если бы PDF отображался в моем окне Qt, но я думаю, что это было бы еще сложнее.

Я знаю, что могу открывать стандартные PDF-файлы с помощью довольно простых команд, таких как

QDesktopServices::openUrl(QUrl("file:///home/.../fileName.pdf"));

Но я не знаю никакой возможности вставить пароль здесь.

Кто-нибудь знает способ, как это сделать (желательно с использованием в основном стандартных методов C ++ / Qt)?

Большое спасибо и наилучшие пожелания

1 Ответ

0 голосов
/ 17 октября 2019

Вы можете сначала расшифровать исходный файл 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());
    }
}
...