diff options
-rw-r--r-- | src/pdf/qpdfdocument.cpp | 28 | ||||
-rw-r--r-- | src/pdf/qpdfdocument.h | 5 | ||||
-rw-r--r-- | tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp | 10 |
3 files changed, 41 insertions, 2 deletions
diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp index f05310d4a..738f896cb 100644 --- a/src/pdf/qpdfdocument.cpp +++ b/src/pdf/qpdfdocument.cpp @@ -94,3 +94,31 @@ int QPdfDocument::pageCount() const return 0; return FPDF_GetPageCount(d->doc); } + +QSizeF QPdfDocument::pageSize(int page) const +{ + QSizeF result; + if (!d->doc) + return result; + FPDF_GetPageSizeByIndex(d->doc, page, &result.rwidth(), &result.rheight()); + return result; +} + +QImage QPdfDocument::render(int page, const QSizeF &pageSize) +{ + if (!d->doc) + return QImage(); + + FPDF_PAGE pdfPage = FPDF_LoadPage(d->doc, page); + if (!pdfPage) + return QImage(); + + QImage result(pageSize.toSize(), QImage::Format_ARGB32); + result.fill(Qt::transparent); + FPDF_BITMAP bitmap = FPDFBitmap_CreateEx(result.width(), result.height(), FPDFBitmap_BGRA, result.bits(), result.bytesPerLine()); + + FPDF_RenderPageBitmap(bitmap, pdfPage, 0, 0, result.width(), result.height(), 0, 0); + + FPDFBitmap_Destroy(bitmap); + return result; +} diff --git a/src/pdf/qpdfdocument.h b/src/pdf/qpdfdocument.h index 32baebbcb..c389ab570 100644 --- a/src/pdf/qpdfdocument.h +++ b/src/pdf/qpdfdocument.h @@ -2,6 +2,7 @@ #define QPDFDOCUMENT_H #include <QObject> +#include <QImage> #include "qtpdfglobal.h" class QPdfDocumentPrivate; @@ -28,6 +29,10 @@ public: int pageCount() const; + QSizeF pageSize(int page) const; + + QImage render(int page, const QSizeF &pageSize); + private: QScopedPointer<QPdfDocumentPrivate> d; }; diff --git a/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp b/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp index 080f8085b..f91b407bb 100644 --- a/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp +++ b/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp @@ -21,16 +21,20 @@ void tst_QPdfDocument::pageCount() QTemporaryFile tempPdf; tempPdf.setAutoRemove(true); QVERIFY(tempPdf.open()); + + QPageLayout layout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF()); + { QPrinter printer; printer.setOutputFormat(QPrinter::PdfFormat); printer.setOutputFileName(tempPdf.fileName()); + printer.setPageLayout(layout); { QPainter painter(&printer); - painter.drawText(0, 0, QStringLiteral("Hello Page 1")); + painter.drawText(100, 100, QStringLiteral("Hello Page 1")); printer.newPage(); - painter.drawText(0, 0, QStringLiteral("Hello Page 2")); + painter.drawText(100, 100, QStringLiteral("Hello Page 2")); } } @@ -38,6 +42,8 @@ void tst_QPdfDocument::pageCount() QCOMPARE(doc.pageCount(), 0); QCOMPARE(doc.load(tempPdf.fileName()), QPdfDocument::NoError); QCOMPARE(doc.pageCount(), 2); + + QCOMPARE(doc.pageSize(0).toSize(), layout.fullRectPoints().size()); } QTEST_MAIN(tst_QPdfDocument) |