WebEngine Widgets Html2Pdf Ejemplo
Convierte páginas web en documentos PDF utilizando Qt WebEngine.

Html2Pdf demuestra cómo utilizar Qt WebEngine para implementar una aplicación de línea de comandos para convertir páginas web en documentos PDF.
Ejecución del ejemplo
Para ejecutar el ejemplo desde Qt Creatorabra el modo Welcome y seleccione el ejemplo de Examples. Para más información, consulte Qt Creator: Tutorial: Construir y ejecutar.
El proceso de conversión
Para convertir una página web en un documento PDF necesitamos:
- Crear un QWebEngineView.
- Decirle a QWebEngineView que empiece a cargar la URL de destino y esperar a que termine.
- Decirle a QWebEngineView que comience a convertir la página cargada en un archivo PDF y esperar a que termine.
- Una vez finalizada la conversión, salga del programa.
Este proceso está encapsulado en la clase 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; };
En el constructor creamos el QWebEngineView y nos conectamos a sus señales QWebEngineView::loadFinished y 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); }
El método run() desencadenará el proceso de conversión pidiendo a QWebEnginePage que empiece a cargar la URL de destino. A continuación, entramos en el bucle de eventos principal:
int Html2PdfConverter::run() { m_view->load(QUrl::fromUserInput(m_inputPath)); return QApplication::exec(); }
Una vez finalizada la carga, comenzamos la generación del PDF. Pedimos al método QWebEnginePage::printToPdf que escriba la salida directamente en el disco:
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); }
Una vez que recibimos la señal de que la conversión a PDF ha terminado, todo lo que queda es informar de posibles errores y salir del programa:
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(); } }
La función principal
Nuestra función main es responsable de configurar QApplication y analizar los argumentos de la línea de comandos:
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(); }
Tenga en cuenta que para utilizar Qt WebEngine Widgets necesitamos crear un QApplication y no un QCoreApplication, a pesar de que esta es una aplicación de línea de comandos.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.