Re: [evince] how to add link and annotations in pdf with python and evince library
- From: Davide Nitti <davidenitti gmail com>
- To: Germán Poo-Caamaño <gpoo gnome org>
- Cc: evince-list gnome org
- Subject: Re: [evince] how to add link and annotations in pdf with python and evince library
- Date: Fri, 4 Oct 2019 00:56:44 +0200
thank you very much for the help,
I managed to make the highlighting. do you know how to save the highlights in the same pdf?
I tried to use save_annotation() of evincedocument, but I don't know how to use it. it requires an annotation but get_annotations() gets a mappinglist type.
any better way?
if you also have some idea regarding adding links it would be great (now I infer the position of the cursor in the pdf in a complicated way, add the link using a library like fitz and reload the pdf so it appears in the evince viewer, no so clean! and not smooth)
thanks
Davide
On Thu, Oct 3, 2019 at 8:50 PM Germán Poo-Caamaño <
gpoo gnome org> wrote:
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/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]