def set_page(self, page): if self.document.get_n_pages() > 0 and \ page < self.document.get_n_pages() and\ page >= 0: self.no_page = page self.show_page.set_text(str(self.no_page + 1)) self.show_title_page.set_text(str(self.no_page + 1)) if str(self.no_page) in self.pages.keys(): rotation_angle = self.pages[str(self.no_page)].rotation_angle flip_horizontal = self.pages[str(self.no_page)].flip_horizontal flip_vertical = self.pages[str(self.no_page)].flip_vertical self.check_horizontal.set_active(flip_horizontal) self.check_vertical.set_active(flip_vertical) if rotation_angle == 0.0: self.rotate_0.set_active(True) elif rotation_angle == 1.0: self.rotate_90.set_active(True) elif rotation_angle == 2.0: self.rotate_180.set_active(True) elif rotation_angle == 3.0: self.rotate_270.set_active(True) pageOptions = self.pages[str(self.no_page)] else: rotation_angle = 0 flip_horizontal = False flip_vertical = False self.check_horizontal.set_active(False) self.check_vertical.set_active(False) self.rotate_0.set_active(True) pageOptions = PageOptions(flip_horizontal=False, flip_vertical=False, rotation_angle=0.0) self.viewport1.set_page(self.document.get_page(self.no_page), pageOptions)
def on_apply_clicked(self, widget, clear=False): if clear: self.reset() flip_horizontal = self.check_horizontal.get_active() flip_vertical = self.check_vertical.get_active() if self.rotate_90.get_active(): rotation_angle = 1.0 elif self.rotate_180.get_active(): rotation_angle = 2.0 elif self.rotate_270.get_active(): rotation_angle = 3.0 else: rotation_angle = 0.0 to_update = [] if self.check_this.get_active(): to_update = [ self.no_page ] elif self.check_all.get_active(): to_update = range(0, self.document.get_n_pages()) elif self.check_range.get_active(): to_update = get_pages_from_ranges( get_ranges(self.range.get_text())) for i in to_update: if clear and str(i) in self.pages.keys(): del self.pages[str(i)] else: self.pages[str(i)] = PageOptions(rotation_angle, flip_horizontal, flip_vertical) if self.no_page in to_update: self.preview()
def __init__(self, width=630.0, height=630.00, margin=10, border=1.0, force=False): Gtk.DrawingArea.__init__(self) self.add_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) self.height = height self.width = width self.image_surface = None self.border = border self.page = None self.zoom = 1 self.rotation_angle = 0.0 self.flip_horizontal = False self.flip_vertical = False self.page_width = -1 self.page_height = -1 self.margin_width = -1 self.margin_height = -1 self.margin = margin self.pageOptions = PageOptions() self.connect('draw', self.on_expose, None) self.set_size_request(self.width, self.height)
def set_page(self, page): if self.document.get_n_pages() > 0 and \ page < self.document.get_n_pages() and\ page >= 0: self.no_page = page self.show_page.set_text(str(self.no_page + 1)) self.show_title_page.set_text(str(self.no_page + 1)) if str(self.no_page) in self.pages.keys(): self.x = self.pages[str(self.no_page)].text_x self.y = self.pages[str(self.no_page)].text_y font = self.pages[str(self.no_page)].text_font size = self.pages[str(self.no_page)].text_size color = self.pages[str(self.no_page)].text_color text = self.pages[str(self.no_page)].text_text self.button_font.set_font(font + ' ' + str(size)) self.button_color.set_rgba(color) self.textmark.set_text(text) pageOptions = self.pages[str(self.no_page)] else: self.reset() pageOptions = PageOptions(text_x=0, text_y=0, text_font='Ubuntu', text_size=12, text_color=Gdk.RGBA(0, 0, 0, 1), text_text='') self.viewport1.set_page(self.document.get_page(self.no_page), pageOptions)
def on_apply_clicked(self, widget, clear=False): if clear: self.reset() text = self.textmark.get_text() color = self.button_color.get_rgba() font = self.button_font.get_font() size = int(self.button_font.get_font_desc().get_size()/1000) x = self.x y = self.y if self.check_this.get_active(): to_update = [ self.no_page] elif self.check_all.get_active(): to_update = range(0, self.document.get_n_pages()) elif self.check_range.get_active(): to_update = get_pages_from_ranges( get_ranges(self.range.get_text())) for i in to_update: if clear and str(i) in self.pages.keys(): del self.pages[str(i)] else: self.pages[str(i)] = PageOptions(text_text=text, text_color=color, text_font=font, text_size=size, text_x=x, text_y=y) if self.no_page in to_update: self.preview()
def preview(self): text = self.textmark.get_text() color = self.button_color.get_rgba() font = self.button_font.get_font() size = int(self.button_font.get_font_desc().get_size()/1000) self.viewport1.set_page_options(PageOptions(text_text=text, text_color=color, text_font=font, text_size=size, text_x=self.x, text_y=self.y))
def preview(self): file_watermark = self.file_entry.get_label() zoom = float(self.zoom_entry.get_value() / 100.0) if not os.path.exists(file_watermark): file_watermark = None self.viewport1.set_page_options(PageOptions( image_x=self.x, image_y=self.y, image_zoom=zoom, image_file=file_watermark))
def set_page(self, page): if self.document.get_n_pages() > 0 and \ page < self.document.get_n_pages() and\ page >= 0: self.no_page = page self.show_page.set_text(str(self.no_page + 1)) self.show_title_page.set_text(str(self.no_page + 1)) self.viewport1.set_page(self.document.get_page(self.no_page), PageOptions())
def preview(self): text = '{}/{}'.format(str(self.no_page + 1), str(self.document.get_n_pages())) color = self.button_color.get_rgba() font = self.button_font.get_font() size = int(self.button_font.get_font_desc().get_size()/1000) self.viewport1.set_page_options(PageOptions(text_text=text, text_color=color, text_font=font, text_size=size, text_x=self.x, text_y=self.y))
def preview(self): flip_horizontal = self.check_horizontal.get_active() flip_vertical = self.check_vertical.get_active() if self.rotate_90.get_active(): rotation_angle = 1.0 elif self.rotate_180.get_active(): rotation_angle = 2.0 elif self.rotate_270.get_active(): rotation_angle = 3.0 else: rotation_angle = 0.0 self.viewport1.set_page_options( PageOptions(flip_horizontal=flip_horizontal, flip_vertical=flip_vertical, rotation_angle=rotation_angle))
def set_page(self, page): if self.document.get_n_pages() > 0 and \ page < self.document.get_n_pages() and\ page >= 0: self.no_page = page self.show_page.set_text(str(self.no_page + 1)) self.show_title_page.set_text(str(self.no_page + 1)) if str(self.no_page) in self.pages.keys(): self.x = self.pages[str(self.no_page)].image_x self.y = self.pages[str(self.no_page)].image_y self.zoom_entry.set_value(self.pages[str(self.no_page)].image_zoom * 100.0) self.file_entry.set_label(self.pages[str(self.no_page)].image_file) pageOptions = self.pages[str(self.no_page)] else: self.reset() pageOptions = PageOptions(image_x=0, image_y=0, image_zoom=1.0, image_file=None) self.viewport1.set_page(self.document.get_page(self.no_page), pageOptions)
def on_apply_clicked(self, widget, clear=False): if clear: self.reset() file_watermark = self.file_entry.get_label() if not os.path.exists(file_watermark): file_watermark = None zoom = float(self.zoom_entry.get_value() / 100.0) if self.check_this.get_active(): to_update = [ self.no_page] elif self.check_all.get_active(): to_update = range(0, self.document.get_n_pages()) elif self.check_range.get_active(): to_update = get_pages_from_ranges( get_ranges(self.range.get_text())) for i in to_update: if clear and str(i) in self.pages.keys(): del self.pages[str(i)] else: self.pages[str(i)] = PageOptions(image_x=self.x, image_y=self.y, image_zoom=zoom, image_file=file_watermark) if self.no_page in to_update: self.preview()
def run(self): document = Poppler.Document.new_from_file('file://' + self.file_in, None) number_of_pages = document.get_n_pages() filename, filext = os.path.splitext(self.file_in) file_out = filename + self.extension + filext self.emit('start', number_of_pages) pdfsurface = cairo.PDFSurface(file_out, 200, 200) context = cairo.Context(pdfsurface) for i in range(0, number_of_pages): self.emit('todo', '{}/{}'.format(i, number_of_pages)) current_page = document.get_page(i) if str(i) in self.pageOptions.keys(): pageOptions = self.pageOptions[str(i)] else: pageOptions = PageOptions(flip_horizontal=False, flip_vertical=False, rotation_angle=0.0) if pageOptions.rotation_angle == 1.0 or \ pageOptions.rotation_angle == 3.0: pdf_height, pdf_width = current_page.get_size() else: pdf_width, pdf_height = current_page.get_size() pdfsurface.set_size(pdf_width, pdf_height) context.save() if pageOptions.flip_vertical: context.scale(1, -1) context.translate(0, -pdf_height) if pageOptions.flip_horizontal: context.scale(-1, 1) context.translate(-pdf_width, 0) if pageOptions.rotation_angle > 0.0: mtr = cairo.Matrix() mtr.rotate(pageOptions.rotation_angle * math.pi / 2.0) context.transform(mtr) if pageOptions.rotation_angle == 1.0: context.translate(0.0, -pdf_width) elif pageOptions.rotation_angle == 2.0: context.translate(-pdf_width, -pdf_height) elif pageOptions.rotation_angle == 3.0: context.translate(-pdf_height, 0.0) current_page.render(context) context.restore() if pageOptions.image_file: context.save() watermark_surface = tools.create_image_surface_from_file( pageOptions.image_file, pageOptions.image_zoom) image_height = watermark_surface.get_height() image_width = watermark_surface.get_width() y = (pageOptions.image_y - image_height / MMTOPIXEL / 2) / RESOLUTION x = (pageOptions.image_x - image_width / MMTOPIXEL / 2) / RESOLUTION context.translate(x, y) context.scale(1.0 / MMTOPIXEL / RESOLUTION, 1.0 / MMTOPIXEL / RESOLUTION) context.set_source_surface(watermark_surface) context.paint() context.restore() if pageOptions.text_text: context.save() context.set_source_rgba(*pageOptions.text_color) context.select_font_face(pageOptions.text_font) context.set_font_size(pageOptions.text_size * 1.5) x_bearing, y_bearing, font_width, font_height, _,\ _ = context.text_extents(pageOptions.text_text) y = (pageOptions.text_y + (font_height + y_bearing) / 2) / RESOLUTION x = (pageOptions.text_x - (font_width + x_bearing) / 2) / RESOLUTION context.move_to(x, y) context.translate(x, y) context.scale(1.0 / RESOLUTION, 1.0 / RESOLUTION) context.show_text(pageOptions.text_text) context.restore() context.show_page() if self.stop is True: break self.emit('donef', (float(i) / float(number_of_pages))) pdfsurface.flush() pdfsurface.finish() if self.stop is True: self.emit('interrupted') else: self.emit('finished')