Poppler Qt6 24.06.0
The Poppler Qt6 interface library

The Poppler Qt6 interface library, libpoppler-qt6, is a library that allows Qt6 programmers to easily load and render PDF files. The Poppler Qt6 interface library uses poppler internally to do its job, but the Qt6 programmer will never have to worry about poppler internals.

Current Status

The Poppler Qt6 interface library is quite stable and working.

Example Programs

Examples programs can be found in the qt6/test directory. The Poppler Qt6 interface library is also used in the KDE's document viewer Okular. The source files for Okular's PDF plugin (Poppler-based) can be found on the git server of the KDE project, under this URL.

How to use the Poppler Qt6 interface library in three easy steps

Programmer who would like to use the Poppler Qt6 interface library simply need to add the following line to their C++ source files:

#include <poppler-qt6.h>

For using the Qt6 interface on Android, there is an additional step - you must place the following font files in the assets/share/fonts directory of the Android APK:

  • NimbusMonoPS-Regular.otf
  • NimbusMonoPS-Bold.otf
  • NimbusMonoPS-BoldItalic.otf
  • NimbusMonoPS-Italic.otf
  • NimbusSans-Regular.otf
  • NimbusSans-Bold.otf
  • NimbusSans-BoldItalic.otf
  • NimbusSans-Italic.otf
  • StandardSymbolsPS.otf
  • NimbusRoman-Bold.otf
  • imbusRoman-BoldItalic.otf
  • NimbusRoman-Italic.otf
  • NimbusRoman-Regular.otf
  • D050000L.otf

These are used as substitute fonts for the base-14 fonts, and this step is required in order to reliably display documents with unembedded fonts. You can easily find these font files included within GhostScript.

A PDF document can then be loaded as follows:

QString filename;
std::unique_ptr<Poppler::Document> document = Poppler::Document::load(filename);
if (!document || document->isLocked()) {
// ... error message ....
return;
}
static std::unique_ptr< Document > load(const QString &filePath, const QByteArray &ownerPassword=QByteArray(), const QByteArray &userPassword=QByteArray())
Load the document from a file on disk.

Pages can be rendered to QImages with the following commands:

// Paranoid safety check
if (!document) {
// ... error message ...
return;
}
// Access page of the PDF file
std::unique_ptr<Poppler::Page> pdfPage = document->page(pageNumber); // Document starts at page 0
if (!pdfPage) {
// ... error message ...
return;
}
// Generate a QImage of the rendered page
QImage image = pdfPage->renderToImage(xres, yres, x, y, width, height);
if (image.isNull()) {
// ... error message ...
return;
}
// ... use image ...
// after the usage, the page must be deleted

Finally, don't forget to destroy the document:

delete document;