diff options
author | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2014-12-15 13:34:00 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2014-12-15 13:34:00 +0100 |
commit | 92f9acff9db4ae299024d4640a4840d8f7c32b2d (patch) | |
tree | 69c14ef62cabe989a4bf95e34a026d62db8759a7 | |
parent | a7cecb51731d054a89b458d8343e896e8dd9e620 (diff) |
Added basic rendering and page size getter
-rw-r--r-- | src/pdf/qpdfdocument.cpp | 28 | ||||
-rw-r--r-- | src/pdf/qpdfdocument.h | 5 | ||||
-rw-r--r-- | tests/auto/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 f05310d..738f896 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 32baebb..c389ab5 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/qpdfdocument/tst_qpdfdocument.cpp b/tests/auto/qpdfdocument/tst_qpdfdocument.cpp index 080f808..f91b407 100644 --- a/tests/auto/qpdfdocument/tst_qpdfdocument.cpp +++ b/tests/auto/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) |