summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@theqtcompany.com>2014-12-15 13:34:00 +0100
committerSimon Hausmann <simon.hausmann@theqtcompany.com>2014-12-15 13:34:00 +0100
commit92f9acff9db4ae299024d4640a4840d8f7c32b2d (patch)
tree69c14ef62cabe989a4bf95e34a026d62db8759a7
parenta7cecb51731d054a89b458d8343e896e8dd9e620 (diff)
Added basic rendering and page size getter
-rw-r--r--src/pdf/qpdfdocument.cpp28
-rw-r--r--src/pdf/qpdfdocument.h5
-rw-r--r--tests/auto/qpdfdocument/tst_qpdfdocument.cpp10
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)