Skip to content

Commit 09107b5

Browse files
committed
Clean up PdfRenderer.draw()
The purpose of this change is to make the code more readable by eliminating an unnecessary helper method.
1 parent bd393f8 commit 09107b5

File tree

1 file changed

+24
-39
lines changed

1 file changed

+24
-39
lines changed

qpageview/pdf.py

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -265,12 +265,33 @@ def draw(self, page, painter, key, tile, paperColor=None):
265265
xMultiplier = 1
266266
yMultiplier = 1
267267

268+
# Set rendering options
269+
RenderFlag = QPdfDocumentRenderOptions.RenderFlag
270+
renderOptions = QPdfDocumentRenderOptions()
271+
# This ridiculous back-and-forth conversion is necessary because
272+
# PyQt6's enum types don't implement bitwise OR
273+
renderFlags = 0
274+
if not self.antialiasing:
275+
renderFlags |= RenderFlag.TextAliased.value
276+
renderFlags |= RenderFlag.ImageAliased.value
277+
renderFlags |= RenderFlag.PathAliased.value
278+
renderOptions.setRenderFlags(RenderFlag(renderFlags))
279+
268280
# Render the image at the output device's resolution (or double
269281
# that if we are oversampling)
270282
s = matrix.scale(xMultiplier, yMultiplier).mapRect(source)
271-
image = self._render_image(doc, num,
272-
xres * xMultiplier, yres * yMultiplier,
273-
int(s.width()), int(s.height()), paperColor)
283+
renderSize = QSize(int(s.width()), int(s.height()))
284+
with locking.lock(doc):
285+
image = doc.render(num, renderSize, renderOptions)
286+
287+
if paperColor:
288+
# QtPdf leaves the page background transparent, so we need to
289+
# paint it ourselves
290+
content = image.copy()
291+
bgPainter = QPainter(image)
292+
bgPainter.fillRect(image.rect(), paperColor)
293+
bgPainter.drawImage(0, 0, content)
294+
bgPainter.end()
274295

275296
if tile != (0, 0, key.width, key.height):
276297
# Crop the image to the tile boundaries
@@ -286,42 +307,6 @@ def draw(self, page, painter, key, tile, paperColor=None):
286307
painter.eraseRect(target)
287308
painter.drawImage(target, image, QRectF(image.rect()))
288309

289-
def _render_image(self, doc, pageNum,
290-
xres=72.0, yres=72.0, w=-1, h=-1, paperColor=None):
291-
"""Render an image.
292-
293-
This always renders the full page because that is the only rendering
294-
mode supported by QtPdf. If you need a smaller area, you can crop
295-
the returned QImage by calling its copy(x, y, w, h) method.
296-
297-
The document is properly locked during rendering and render options
298-
are set.
299-
300-
"""
301-
RenderFlag = QPdfDocumentRenderOptions.RenderFlag
302-
with locking.lock(doc):
303-
options = QPdfDocumentRenderOptions()
304-
305-
# This ridiculous back-and-forth conversion is necessary because
306-
# PyQt6 won't let you just 'OR' together RenderFlag constants.
307-
renderFlags = 0
308-
if not self.antialiasing:
309-
renderFlags |= RenderFlag.TextAliased.value
310-
renderFlags |= RenderFlag.ImageAliased.value
311-
renderFlags |= RenderFlag.PathAliased.value
312-
options.setRenderFlags(RenderFlag(renderFlags))
313-
314-
image = doc.render(pageNum, QSize(int(w), int(h)), options)
315-
if paperColor:
316-
# QtPdf leaves the page background transparent, so we need to
317-
# paint it ourselves.
318-
content = image.copy()
319-
painter = QPainter(image)
320-
painter.fillRect(image.rect(), paperColor)
321-
painter.drawImage(0, 0, content)
322-
painter.end()
323-
return image
324-
325310

326311
def load(source):
327312
"""Load a PDF document.

0 commit comments

Comments
 (0)