コード例 #1
0
    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)
コード例 #2
0
 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()
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
 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()
コード例 #6
0
 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))
コード例 #7
0
 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))
コード例 #8
0
 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())
コード例 #9
0
 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))
コード例 #10
0
 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))
コード例 #11
0
 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)
コード例 #12
0
 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()
コード例 #13
0
    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')