Fix pdf issues on printers
pyCairo by default renders the PDF surfaces with a resolution of 72 dpi which is so low that the bitmap gets blurred compared to original. Since pyCairo 1.12.0, a new method set_device_scale(x_scale, y_scale) is added, which allows changing the canvas resolution.
This commit is contained in:
parent
0b094b594b
commit
3b094ae449
@ -32,7 +32,7 @@ class PDFParser(abstract.AbstractParser):
|
||||
def __init__(self, filename):
|
||||
super().__init__(filename)
|
||||
self.uri = 'file://' + os.path.abspath(self.filename)
|
||||
self.__scale = 2 # how much precision do we want for the render
|
||||
self.__scale = 200 / 72.0 # how much precision do we want for the render
|
||||
try: # Check now that the file is valid, to avoid surprises later
|
||||
Poppler.Document.new_from_file(self.uri, None)
|
||||
except GLib.GError: # Invalid PDF
|
||||
@ -90,8 +90,8 @@ class PDFParser(abstract.AbstractParser):
|
||||
page_width, page_height = page.get_size()
|
||||
logging.info("Rendering page %d/%d", pagenum + 1, pages_count)
|
||||
|
||||
width = int(page_width) * self.__scale
|
||||
height = int(page_height) * self.__scale
|
||||
width = int(page_width * self.__scale)
|
||||
height = int(page_height * self.__scale)
|
||||
img_surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
|
||||
img_context = cairo.Context(img_surface)
|
||||
|
||||
@ -105,7 +105,12 @@ class PDFParser(abstract.AbstractParser):
|
||||
buf.seek(0)
|
||||
|
||||
img = cairo.ImageSurface.create_from_png(buf)
|
||||
pdf_surface.set_size(page_width*self.__scale, page_height*self.__scale)
|
||||
if cairo.version_info < (1, 12, 0):
|
||||
pdf_surface.set_size(width, height)
|
||||
else:
|
||||
print("lol")
|
||||
pdf_surface.set_size(page_width, page_height)
|
||||
pdf_surface.set_device_scale(1 / self.__scale, 1 / self.__scale)
|
||||
pdf_context.set_source_surface(img, 0, 0)
|
||||
pdf_context.paint()
|
||||
pdf_context.show_page() # draw pdf_context on pdf_surface
|
||||
|
Loading…
Reference in New Issue
Block a user