使用 C++/Qt(已知密码)打开加密的 PDF



我遇到了以下问题:

我需要使用PC上的默认PDF编辑器从简单的C++/Qt程序打开加密的PDF文件(使用已知密码(。我知道PDF的密码,这不是这里的问题。 或者,如果PDF在我的Qt窗口中呈现也可以,但我认为这会更加复杂。

我知道我能够使用相当简单的命令打开标准 PDF,例如

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

但是我不知道在此处插入密码的任何选项。

有没有人知道如何做到这一点(最好主要是使用标准的C++/Qt方法(?

非常感谢和最诚挚的问候

您可以先解密原始PDF文件,例如使用qpdf库将输出保存到临时文件,然后使用QDesktopServices::openUrl()打开此临时文件。

要使用qpdf命令行实用程序解密 PDF 文件,语法为:

qpdf --password=KNOWNPASSWORD --decrypt input.pdf output.pdf

下面是一个使用 Qt 程序中的 qpdf 库进行 PDF 解密的简单示例,使用 pkg-config 实用程序来配置依赖项。

test.pro

QT = core
CONFIG += c++11 console link_pkgconfig
TEMPLATE = app
SOURCES += main.cpp
PKGCONFIG += libqpdf

主.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());
}
}

最新更新