#include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication a(argc, argv); QPrinter printer; printer.setResolution(QPrinter::HighResolution); QWebEngineView* viewer = new QWebEngineView(); viewer->settings()->setAttribute(QWebEngineSettings::PrintElementBackgrounds, true); QAction * act = new QAction("Print", viewer); act->setShortcut(Qt::CTRL + Qt::Key_P); viewer->addAction(act); static int fileCounter = 0; QPageLayout layout; layout.setPageSize(QPageSize(QPageSize::A4)); layout.setOrientation(QPageLayout::Landscape); layout.setMargins(QMarginsF(0, 0, 0, 0)); int which = 0; if (which == 0) { // Print to QPrinter. QObject::connect(act, &QAction::triggered, [&]() { QPrintDialog printDialog(&printer); if (printDialog.exec() == QDialog::Accepted) { printer.setPaperSize(QPrinter::A5); printer.setPageOrientation(QPageLayout::Landscape); printer.setPageMargins(0, 0, 0, 0, QPrinter::Millimeter); printer.setFullPage(false); viewer->page()->print(&printer, [&](bool result) { qDebug() << "QPrinter callback. Result:" << result; }); } }); } else if (which == 1) { // Print to PDF file path. QObject::connect(act, &QAction::triggered, [&]() { ++fileCounter; viewer->page()->printToPdf(QString("E:\\a%1.pdf").arg(fileCounter), layout); qDebug() << "Called printToPdf with file path."; }); } else if (which == 2) { // Print to PDF in QByteArray, and then write the contents with QFile. QObject::connect(act, &QAction::triggered, [&]() { ++fileCounter; viewer->page()->printToPdf([](const QByteArray& content){ QFile f(QString("E:\\a%1.pdf").arg(fileCounter)); if (!f.open(QIODevice::WriteOnly)) return; f.write(content); f.close(); qDebug() << "pdfPrintingFinished QByteArray finished"; }, layout); qDebug() << "Called printToPdf with QByteArray"; }); } viewer->load(QUrl("https://www.google.com")); viewer->show(); QObject::connect(viewer->page(), &QWebEnginePage::pdfPrintingFinished, [&](const QString &filePath, bool ok){ qDebug() << "pdfPrintingFinished filePath" << filePath << "ok" << ok; }); int result = a.exec(); delete viewer; return result; }