~mutse-young/ubuntu-docviewer-app/trunk

« back to all changes in this revision

Viewing changes to src/plugin/poppler-qml-plugin/pageImageProvider.cpp

  • Committer: David Planella
  • Date: 2014-10-28 22:01:16 UTC
  • mfrom: (31.2.8 add-poppler-plugin)
  • mto: This revision was merged to the branch mainline in revision 35.
  • Revision ID: david.planella@ubuntu.com-20141028220116-bryaeq3if69o6r6o
Merged branch to add Poppler plugin

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2013 Canonical, Ltd.
 
3
 *
 
4
 * This program is free software: you can redistribute it and/or modify it
 
5
 * under the terms of the GNU General Public License version 3, as published
 
6
 * by the Free Software Foundation.
 
7
 *
 
8
 * This program is distributed in the hope that it will be useful, but
 
9
 * WITHOUT ANY WARRANTY; without even the implied warranties of
 
10
 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
 
11
 * PURPOSE.  See the GNU General Public License for more details.
 
12
 *
 
13
 * You should have received a copy of the GNU General Public License along
 
14
 * with this program.  If not, see <http://www.gnu.org/licenses/>.
 
15
 *
 
16
 * Author: Anthony Granger <grangeranthony@gmail.com>
 
17
 */
 
18
 
 
19
 
 
20
#include <poppler/qt5/poppler-qt5.h>
 
21
#include <QQuickImageProvider>
 
22
#include <QDebug>
 
23
#include <QPaintDevice>
 
24
 
 
25
#include "pageImageProvider.h"
 
26
 
 
27
PageImageProvider::PageImageProvider(Poppler::Document *pdfDocument):QQuickImageProvider(QQuickImageProvider::Image)
 
28
{
 
29
    this->document = pdfDocument;
 
30
}
 
31
 
 
32
QImage PageImageProvider::requestImage(const QString & id, QSize * size, const QSize & requestedSize)
 
33
{
 
34
    float scale = 1.0;
 
35
    QString type = id.section("/", 0, 0);
 
36
    QImage result;
 
37
    QSizeF pageSize;
 
38
    QSizeF pageSizePhys;
 
39
    float res = 0;
 
40
    Poppler::Page *page;
 
41
 
 
42
    if (type == "page")
 
43
    {
 
44
        int numPage = id.section("/", 1, 1).toInt();
 
45
 
 
46
        qDebug() << "Page" << numPage << "requested";
 
47
 
 
48
        page = document->page(numPage -1);
 
49
 
 
50
        pageSize = page->pageSizeF();
 
51
 
 
52
        pageSizePhys.setWidth(pageSize.width() / 72);
 
53
        //pageSizePhys.setHeight(pageSize.height() / 72);
 
54
 
 
55
        qDebug() << "Requested size :" << requestedSize.width() << ";" << requestedSize.height();
 
56
 
 
57
        //if (pageSizePhys.height() >= pageSizePhys.width())
 
58
            res = requestedSize.width() / pageSizePhys.width();
 
59
        /*else
 
60
            res = requestedSize.height() / pageSizePhys.height();*/
 
61
 
 
62
        qDebug() << "Size :" << pageSizePhys.width() << ";" << pageSizePhys.height();
 
63
        qDebug() << "Resolution :" << res;
 
64
 
 
65
        result = page->renderToImage(scale * res, scale * res); //For poppler the first page have the id 0
 
66
    }
 
67
 
 
68
    return result;
 
69
}