def __save(self, target_path, pages): pdf_surface = cairo.PDFSurface(target_path, self.__page_format[0], self.__page_format[1]) pdf_context = cairo.Context(pdf_surface) quality = float(self.__quality) / 100.0 for page in [self.doc.pages[x] for x in range(pages[0], pages[1])]: img = page.img if (img.size[0] < img.size[1]): (x, y) = (min(self.__page_format[0], self.__page_format[1]), max(self.__page_format[0], self.__page_format[1])) else: (x, y) = (max(self.__page_format[0], self.__page_format[1]), min(self.__page_format[0], self.__page_format[1])) pdf_surface.set_size(x, y) new_size = (int(quality * img.size[0]), int(quality * img.size[1])) img = img.resize(new_size, PIL.Image.ANTIALIAS) scale_factor_x = x / img.size[0] scale_factor_y = y / img.size[1] scale_factor = min(scale_factor_x, scale_factor_y) img_surface = image2surface(img) pdf_context.identity_matrix() pdf_context.scale(scale_factor, scale_factor) pdf_context.set_source_surface(img_surface) pdf_context.paint() pdf_context.show_page() return target_path
def __save(self, target_path, pages): pdf_surface = cairo.PDFSurface(target_path, self.__page_format[0], self.__page_format[1]) pdf_context = cairo.Context(pdf_surface) quality = float(self.__quality) / 100.0 for page in [self.doc.pages[x] for x in range(pages[0], pages[1])]: img = page.img if (img.size[0] < img.size[1]): (x, y) = (min(self.__page_format[0], self.__page_format[1]), max(self.__page_format[0], self.__page_format[1])) else: (x, y) = (max(self.__page_format[0], self.__page_format[1]), min(self.__page_format[0], self.__page_format[1])) pdf_surface.set_size(x, y) new_size = (int(quality * img.size[0]), int(quality * img.size[1])) img = img.resize(new_size, Image.ANTIALIAS) scale_factor_x = x / img.size[0] scale_factor_y = y / img.size[1] scale_factor = min(scale_factor_x, scale_factor_y) img_surface = image2surface(img) pdf_context.identity_matrix() pdf_context.scale(scale_factor, scale_factor) pdf_context.set_source_surface(img_surface) pdf_context.paint() pdf_context.show_page() return target_path
def __save(self, target_path, pages): # TODO(Jflesch): Other formats (Letter, etc) pdf_format = self.PDF_A4_FORMAT pdf_surface = cairo.PDFSurface(target_path, pdf_format[0], pdf_format[1]) pdf_context = cairo.Context(pdf_surface) quality = float(self.__quality) / 100.0 for page in [self.doc.pages[x] for x in range(pages[0], pages[1])]: img = page.img if (img.size[0] > img.size[1]): img = img.rotate(90) new_size = (int(quality * img.size[0]), int(quality * img.size[1])) img = img.resize(new_size, Image.ANTIALIAS) scale_factor_x = float(pdf_format[0]) / img.size[0] scale_factor_y = float(pdf_format[1]) / img.size[0] scale_factor = min(scale_factor_x, scale_factor_y) img_surface = image2surface(img) pdf_context.identity_matrix() pdf_context.scale(scale_factor, scale_factor) pdf_context.set_source_surface(img_surface) pdf_context.paint() pdf_context.show_page() return target_path
def print_page_cb(self, print_op, print_context): """ Called for printing operation by Gtk """ SCALING = 2.0 img = self.img (width, height) = img.size # take care of rotating the image if required if print_context.get_width() <= print_context.get_height(): print_orientation = self.ORIENTATION_PORTRAIT else: print_orientation = self.ORIENTATION_LANDSCAPE if width <= height: img_orientation = self.ORIENTATION_PORTRAIT else: img_orientation = self.ORIENTATION_LANDSCAPE if print_orientation != img_orientation: logger.info("Rotating the page ...") img = img.rotate(90) # scale the image down # XXX(Jflesch): beware that we get floats for the page size ... new_w = int(SCALING * (print_context.get_width())) new_h = int(SCALING * (print_context.get_height())) logger.info("DPI: %fx%f" % (print_context.get_dpi_x(), print_context.get_dpi_y())) logger.info("Scaling it down to %fx%f..." % (new_w, new_h)) img = img.resize((new_w, new_h), PIL.Image.ANTIALIAS) surface = image2surface(img) # .. and print ! cairo_context = print_context.get_cairo_context() cairo_context.scale(1.0 / SCALING, 1.0 / SCALING) cairo_context.set_source_surface(surface, 0, 0) cairo_context.paint()
def print_page_cb(self, print_op, print_context): """ Called for printing operation by Gtk """ SCALING = 2.0 img = self.img (width, height) = img.size # take care of rotating the image if required if print_context.get_width() <= print_context.get_height(): print_orientation = self.ORIENTATION_PORTRAIT else: print_orientation = self.ORIENTATION_LANDSCAPE if width <= height: img_orientation = self.ORIENTATION_PORTRAIT else: img_orientation = self.ORIENTATION_LANDSCAPE if print_orientation != img_orientation: print "Rotating the page ..." img = img.rotate(90) # scale the image down # XXX(Jflesch): beware that we get floats for the page size ... new_w = int(SCALING * (print_context.get_width())) new_h = int(SCALING * (print_context.get_height())) print "DPI: %fx%f" % (print_context.get_dpi_x(), print_context.get_dpi_y()) print "Scaling it down to %fx%f..." % (new_w, new_h) img = img.resize((new_w, new_h), Image.ANTIALIAS) surface = image2surface(img) # .. and print ! cairo_context = print_context.get_cairo_context() cairo_context.scale(1.0 / SCALING, 1.0 / SCALING) cairo_context.set_source_surface(surface, 0, 0) cairo_context.paint()