@@ -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
326311def load (source ):
327312 """Load a PDF document.
0 commit comments