4 // Stefan Bund <info@j32.de>
7 \brief PDFWidget non-inline non-template implementation */
9 #include "PDFWidget.hh"
10 //#include "PDFWidget.ih"
14 #include <QNetworkRequest>
15 #include <QNetworkReply>
20 //#include "PDFWidget.mpp"
22 ///////////////////////////////cc.p////////////////////////////////////////
24 prefix_ pykit::PDFWidget::PDFWidget(QString const & id, QNetworkAccessManager * manager,
26 : QLabel(parent), id_ (id), manager_ (manager), currentPage_ (0), dpi_ (96.0), x_ (0), y_ (0)
29 QWebView * webView (dynamic_cast<QWebView*>(parent));
30 if (webView && !id_.isEmpty())
31 webView->page()->mainFrame()->addToJavaScriptWindowObject(id_,this);
34 prefix_ pykit::PDFWidget::PDFWidget(QString const & id, QString const & document,
35 QNetworkAccessManager * manager, QWidget * parent)
36 : QLabel(parent), id_ (id), manager_ (manager), currentPage_ (0), dpi_ (96.0), x_ (0), y_ (0)
39 setFocusPolicy(Qt::WheelFocus);
40 document_.reset(Poppler::Document::load(document));
41 QWebView * webView (dynamic_cast<QWebView*>(parent));
42 if (webView && !id_.isEmpty())
43 webView->page()->mainFrame()->addToJavaScriptWindowObject(id_,this);
47 prefix_ void pykit::PDFWidget::load(QUrl const & url)
49 QNetworkRequest request (url);
50 QNetworkReply * reply (manager_->get(request));
51 connect(reply, SIGNAL(finished()), this, SLOT(netLoadDocument()));
54 prefix_ void pykit::PDFWidget::zoomIn()
57 double n (dpi_ + ZoomStepDpi);
66 prefix_ void pykit::PDFWidget::zoomOut()
69 double n (dpi_ - ZoomStepDpi);
78 prefix_ void pykit::PDFWidget::zoomDPI(double dpi)
91 prefix_ int pykit::PDFWidget::zoomWidth(int w)
98 QSizeF pageSize (document_->page(currentPage_)->pageSizeF());
99 double n = 72.0 * w / pageSize.width();
108 return pageSize.height() * dpi_ / 72.0;
111 prefix_ int pykit::PDFWidget::zoomHeight()
116 QSizeF pageSize (document_->page(currentPage_)->pageSizeF());
117 double n = 72.0 * height() / pageSize.height();
126 return pageSize.width() * dpi_ / 72.0;
129 prefix_ void pykit::PDFWidget::zoomFit()
134 QSizeF pageSize (document_->page(currentPage_)->pageSizeF());
135 double xres = 72.0 * width() / pageSize.width();
136 double yres = 72.0 * height() / pageSize.height();
137 double n = xres < yres ? xres : yres;
148 prefix_ int pykit::PDFWidget::getPDFWidth()
152 QSizeF pageSize (document_->page(currentPage_)->pageSizeF());
153 return pageSize.width() * dpi_ / 72.0;
156 prefix_ int pykit::PDFWidget::getPDFHeight()
160 QSizeF pageSize (document_->page(currentPage_)->pageSizeF());
161 return pageSize.height() * dpi_ / 72.0;
164 prefix_ void pykit::PDFWidget::resizeEvent(QResizeEvent *)
182 prefix_ void pykit::PDFWidget::netLoadDocument()
184 QNetworkReply * reply = static_cast<QNetworkReply*>(sender());
185 if (reply->error() != QNetworkReply::NoError)
187 QByteArray data (reply->read(reply->size()));
188 document_.reset(Poppler::Document::loadFromData(data));
190 reply->deleteLater();
193 prefix_ void pykit::PDFWidget::documentSetup()
197 document_->setRenderHint(Poppler::Document::Antialiasing, true);
198 document_->setRenderHint(Poppler::Document::TextAntialiasing, true);
199 document_->setRenderHint(Poppler::Document::TextHinting, false);
204 prefix_ void pykit::PDFWidget::showPage()
208 QImage image (document_->page(currentPage_)->renderToImage(
209 dpi_, dpi_, x_, y_, width(), height()));
210 setPixmap(QPixmap::fromImage(image));
213 ///////////////////////////////cc.e////////////////////////////////////////
215 //#include "PDFWidget.mpp"
221 // comment-column: 40
222 // c-file-style: "j32"
223 // indent-tabs-mode: nil
224 // ispell-local-dictionary: "american"
225 // compile-command: "make"