Evince Annotation Support Final Report



Hello:

As a final report I wanted to do a full report, talking about what I
have done, what is missing and what happens since now.

The first step has been to modify poppler so it could support
Annotations. It had a very preliminary annotation support used for
links and forms. Taking the Adobe specification on one hand poppler
has been modified to support correctly the different annotation types
available. In that side I have created a good design so now any new
annotation type could be added very easily. I have been somewhat
restricted in the modifications done in poppler as it is a fork of
xpdf, and this one is maintained too, so the code couldn't vary too
much. At the moment there is support for various of the most common
annotations as Text, Popup, FreeText, etc.

Once I finished in that side, I jumped to the glib bindings. In that
side I created boxed structures where Annotations data should be hold
to be used for any program using poppler. PopplerAnnot type was
created as a common base for any unsupported annotation and
PopplerAnnot* for the annotations supported on the poppler core.

After doing that and create a test program to check the code, I
submitted the code to the poppler project. There are two opened bugs
on their bugzilla, the first one for the poppler core[1] and the
second one for the glib bindings[2].

My idea is to create a technical article on my blog talking about
poppler architecture and my steps implementing this, as I did with the
Evince side[3], in the future, so anyone starting with poppler could
start hacking faster.

The next step was to create the annotations objects in Evince side and
create and interface to be implemented on the different documents
supported by evince so those documents could use annotation support.
EvAnnotation GObject was created to store annotation data. As I said I
created a technical article in my blog talking about how I did
this[3]. At the moment the Annotation interface is only used on the
poppler back end so it's mainly based on PDF implementation, but the
interface could be implemented on the rest back ends extending the
annotation support to them on the future and creating a standard after
talking with KDE people.

At last, I created a widget, EvAnnotationWindow, to be used to
represent annotations on the documents so user could interact with
them. Annotation data is shown in this widget so user could read these
annotations.

Once the code is better and poppler changes are accepted I will send a
patch with the new changes to be accepted on evince.

Future
---------

My first goal is, finish annotation interactivity so user experience
could be richer. I want to write some more articles talking about
evince architecture too, so more people could start hacking using them
as little guides.

One of the other main goals I had is to implement multimedia
annotations on evince, so I could give a try to GStreamer. After that
I will continue hacking evince with its needs.

Summer of Code
------------------------

I can say that it has been a nice experience. The first month and a
half were very interesting when I started learning about poppler and
evince. There were some emotive moments when I achieved some goals, as
for example when I saw the first annotations on evince.

But the second part of summer of code has been somewhat a nightmare. I
moved to a new home and couldn't get a connection, so I my coding were
very slower. I had to move the code to job, and then back to home
trying to sync with new poppler and evince versions. I have some
ambitious goals I had to let to one side to end the project.

Anyway, in the overall and letting the second part to one side it has
been a nice experience.

[1] https://bugs.freedesktop.org/show_bug.cgi?id=11076
[2] https://bugs.freedesktop.org/show_bug.cgi?id=11266
[3] http://annotations.diariolinux.com/?p=15



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