Re: [evince] how to add link and annotations in pdf with python and evince library



On Tue, 2019-10-01 at 21:02 +0200, Davide Nitti via evince-list wrote:
I'm making a pdf editor in python reusing evince and Gtk libraries.

I would like to add a link with a click, but I don't know *how to
convert the cursor position I get from the click event to the
position and page in the pdf document.*

I would also like to *add annotations* (highlights for example), this
should be implemented in evince, but I don't know how to import this
feature in python.

You might want to start with something simpler, like adding an
annotation based on the text already selected. Something like the
design proposal in h
ttps://wiki.gnome.org/Design/Apps/DocumentViewer#Discussion

To achieve that, you could do something like:

class ...
    def __init__(...):
        ...

        self.view.connect('button-event',
                          self.on_button_release_event)
        ...
        box = Gtk.Box()
        button = Gtk.Button.new_with_mnemonic("_Highlight")
        button.connect("clicked", self.on_open_clicked)
        box.pack_start(button, True, True, 0)
        button.set_border_width(6)

        self.popover = Gtk.Popover()
        self.popover.add(box)
        self.popover.set_position(Gtk.PositionType.BOTTOM)
        self.popover.set_relative_to(self.view)
        ...

    def on_button_release_event(self, view, event):
        pos = Gdk.Rectangle()
        pos.x, pos.y = event.x + 6, event.y + 6
        pos.width, pos.height = 0, 0
        if self.view.get_has_selection():
            self.popover.set_pointing_to(pos)
            self.popover.show_all()
            self.popover.popup()
        else:        
            self.popover.popdown()

    def on_open_clicked(self, button):
        if self.view.get_has_selection():
            self.view.add_text_markup_annotation_for_selected_text()
            self.popover.popdown()

if you want a different type of markup annotation, then you would need
to set it up to squiggly, StrikeOut, or Underline.

If you want to do it interactively, then you can use:

        self.view.begin_add_annotation(annot_type)

then you can explore the values in EvinceDocument.Annotation*

You can take a look at how is implemented in Evince, for example, in 
https://gitlab.gnome.org/GNOME/evince/blob/master/shell/ev-window.c

search for annotation/annot.

Best,

-- 
Germán Poo-Caamaño
https://calcifer.org/


Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]