WebEngine小部件Html2Pdf示例
使用Qt WebEngine将网页转换为PDF文档。
Html2Pdf演示了如何使用Qt WebEngine实现一个命令行应用程序,用于将网页转换为PDF文档。
运行示例
要从Qt Creator中运行示例,打开欢迎模式并从示例中选择示例。有关更多信息,请访问构建和运行示例。
转换过程
要将网页转换为PDF文档,我们需要
- 创建一个QWebEngineView。
- 告诉QWebEngineView开始加载目标URL,并等待其完成。
- 告诉QWebEngineView开始将加载的页面转换为PDF文件,并再次等待其完成。
- 一旦转换完成,退出程序。
此过程封装在Html2PdfConverter类中
#include <QApplication> #include <QCommandLineParser> #include <QFile> #include <QTextStream> #include <QWebEngineView> #include <functional> #include <utility> class Html2PdfConverter : public QObject { Q_OBJECT public: explicit Html2PdfConverter(QString inputPath, QString outputPath); int run(); private slots: void loadFinished(bool ok); void pdfPrintingFinished(const QString &filePath, bool success); private: QString m_inputPath; QString m_outputPath; QScopedPointer<QWebEngineView> m_view; };
在构造函数中,我们创建了QWebEngineView并将其连接到其QWebEngineView::loadFinished和QWebEngineView::pdfPrintingFinished信号
Html2PdfConverter::Html2PdfConverter(QString inputPath, QString outputPath) : m_inputPath(std::move(inputPath)) , m_outputPath(std::move(outputPath)) , m_view(new QWebEngineView) { connect(m_view.data(), &QWebEngineView::loadFinished, this, &Html2PdfConverter::loadFinished); connect(m_view.data(), &QWebEngineView::pdfPrintingFinished, this, &Html2PdfConverter::pdfPrintingFinished); }
run()
方法将通过要求QWebEnginePage开始加载目标URL来触发转换过程。然后我们进入主事件循环
int Html2PdfConverter::run() { m_view->load(QUrl::fromUserInput(m_inputPath)); return QApplication::exec(); }
加载完成后,我们开始生成PDF。我们要求QWebEnginePage::printToPdf方法将输出直接写入磁盘
void Html2PdfConverter::loadFinished(bool ok) { if (!ok) { QTextStream(stderr) << tr("failed to load URL '%1'").arg(m_inputPath) << "\n"; QCoreApplication::exit(1); return; } m_view->printToPdf(m_outputPath); }
一旦我们收到PDF转换完成的通知,我们只需报告潜在的错误并退出程序
void Html2PdfConverter::pdfPrintingFinished(const QString &filePath, bool success) { if (!success) { QTextStream(stderr) << tr("failed to print to output file '%1'").arg(filePath) << "\n"; QCoreApplication::exit(1); } else { QCoreApplication::quit(); } }
主函数
我们的main
函数负责设置QApplication并解析命令行参数
int main(int argc, char *argv[]) { QApplication app(argc, argv); QCoreApplication::setOrganizationName("QtExamples"); QCoreApplication::setApplicationName("html2pdf"); QCoreApplication::setApplicationVersion(QT_VERSION_STR); QCommandLineParser parser; parser.setApplicationDescription( QCoreApplication::translate("main", "Converts the web page INPUT into the PDF file OUTPUT.")); parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument( QCoreApplication::translate("main", "INPUT"), QCoreApplication::translate("main", "Input URL for PDF conversion.")); parser.addPositionalArgument( QCoreApplication::translate("main", "OUTPUT"), QCoreApplication::translate("main", "Output file name for PDF conversion.")); parser.process(QCoreApplication::arguments()); const QStringList requiredArguments = parser.positionalArguments(); if (requiredArguments.size() != 2) parser.showHelp(1); Html2PdfConverter converter(requiredArguments.at(0), requiredArguments.at(1)); return converter.run(); }
请注意,即使这是一个命令行应用程序,我们也需要创建QApplication而非QCoreApplication,以便使用Qt WebEngine Widgets。
© 2024 The Qt Company Ltd。本文件中包含的文档贡献的版权属于其各自的拥有者。本文件中提供的文档是在自由软件基金会发布、受版权限制的自由文档许可证1.3版本下授权的。Qt及相应徽标是The Qt Company Ltd.在芬兰和其他国家的商标。所有其他商标均属于其各自的拥有者。