64bool QPdfIOHandler::read(QImage *image)
67 if (m_doc.isNull() || m_page >= m_doc->pageCount())
71 const bool xform = (m_clipRect.isValid() || m_scaledSize.isValid() || m_scaledClipRect.isValid());
72 QSize pageSize = m_doc->pagePointSize(m_page).toSize();
73 QSize finalSize = pageSize;
75 if (xform && !finalSize.isEmpty()) {
76 bounds = QRectF(QPointF(0,0), QSizeF(finalSize));
79 if (m_clipRect.isValid()) {
80 tr1 = -m_clipRect.topLeft();
81 finalSize = m_clipRect.size();
83 if (m_scaledSize.isValid()) {
84 sc = QSizeF(qreal(m_scaledSize.width()) / finalSize.width(),
85 qreal(m_scaledSize.height()) / finalSize.height());
86 finalSize = m_scaledSize;
87 pageSize = m_scaledSize;
89 if (m_scaledClipRect.isValid()) {
90 tr2 = -m_scaledClipRect.topLeft();
91 finalSize = m_scaledClipRect.size();
94 t.translate(tr2.x(), tr2.y());
95 t.scale(sc.width(), sc.height());
96 t.translate(tr1.x(), tr1.y());
97 bounds = t.mapRect(bounds);
99 qCDebug(qLcPdf) << m_page << finalSize;
100 if (image->size() != finalSize || !image->reinterpretAsFormat(QImage::Format_ARGB32_Premultiplied)) {
101 *image = QImage(finalSize, QImage::Format_ARGB32_Premultiplied);
102 if (!finalSize.isEmpty() && image->isNull()) {
104 qWarning(
"QPdfIOHandler: QImage allocation failed (size %i x %i)", finalSize.width(), finalSize.height());
108 if (!finalSize.isEmpty()) {
109 QPdfDocumentRenderOptions options;
110 if (m_scaledClipRect.isValid())
111 options.setScaledClipRect(m_scaledClipRect);
112 options.setScaledSize(pageSize);
113 image->fill(m_backColor.rgba());
115 if (!m_doc.isNull()) {
116 QImage pageImage = m_doc->render(m_page, finalSize, options);
117 p.drawImage(0, 0, pageImage);
127QVariant QPdfIOHandler::option(ImageOption option)
const
131 return QImage::Format_ARGB32_Premultiplied;
133 const_cast<QPdfIOHandler *>(
this)->load(device());
134 return m_doc->pagePointSize(qMax(0, m_page));
140 return m_scaledClipRect;
141 case BackgroundColor:
144 return m_doc->metaData(QPdfDocument::MetaDataField::Title);
151void QPdfIOHandler::setOption(ImageOption option,
const QVariant & value)
155 m_clipRect = value.toRect();
158 m_scaledSize = value.toSize();
161 m_scaledClipRect = value.toRect();
163 case BackgroundColor:
164 m_backColor = value.value<QColor>();