/**
@mainpage The Poppler Qt5 interface library

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


@section help Current Status

The %Poppler Qt5 interface library is quite stable and working.

@section refimpl Example Programs

Examples programs can be found in the qt5/test directory. The %Poppler
Qt5 interface library is also used in the KDE's
document viewer <a href="http://okular.kde.org">Okular</a>. The source files
for Okular's PDF plugin (%Poppler-based) can be found on the git server
of the KDE project, under
<a
href="http://quickgit.kde.org/?p=okular.git&a=tree&f=generators/poppler">this
URL</a>.


@section req How to use the Poppler Qt5 interface library in three easy steps

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

@code
#include <poppler-qt5.h>
@endcode

A PDF document can then be loaded as follows:
@code
QString filename;

Poppler::Document* document = Poppler::Document::load(filename);
if (!document || document->isLocked()) {

  // ... error message ....

  delete document;
  return;
}
@endcode

Pages can be rendered to QImages with the following commands:

@code
// Paranoid safety check
if (document == 0) {
  // ... error message ...
  return;
}

// Access page of the PDF file
Poppler::Page* pdfPage = document->page(pageNumber);  // Document starts at page 0
if (pdfPage == 0) {
  // ... 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
delete pdfPage;
@endcode

Finally, don't forget to destroy the document:

@code
delete document;
@endcode
 */

