GSoC/2021/StatusReports/Mahmoud Ahmed Khalil
Contents
- Improve Custom/Image Stamp Annotation Handling in Okular
- Mentor
- Status Reports
- Links
- Completed Tasks
- Future Work
- Contact Me
Improve Custom/Image Stamp Annotation Handling in Okular
Okular is a powerful universal document reader that supports different types of document formats, one very important format is the PDF format. PDF files can have what is called an Annotation, an Annotation represents additional object that can be added to the document for clarification purposes, such objects can be text, shapes overlaid on the document, or even sounds/videos and other rich media formats.
A common annotation that is used in a lot of use cases and scenarios is a Stamp Annotation. Stamp Annotation is meant to be like a rubber stamp that gets added to the document. Currently Okular doesn't fully support Stamp Annotation, the reason is that the underlying rendering library we're using (Poppler) doesn't have means to add custom stamps, or in another words Poppler doesn't know yet how to take a stamp annotation and save it in the document in a way that other renderers can parse it and render it as well.
So, the goal of this project was to extend Poppler in order to be able to save new stamp annotations information so that we don't rely on how other renderers generate some of standard stamps and also they would have a way to render the custom ones. Ideally I wanted to make poppler render default standard stamps by itself without depending much on their appearance streams(think of this as a stream that represents instruction for the backend renderer to draw the stamps) but I'll be still working on this after GSoC.
Mentor
- Albert Astals Cid
Status Reports
Poppler Status
Poppler Backend
- Implemented a new helper class called `AnnotStampImageHelper`, this class takes in image data (width, height, color space, etc.) and create a new Image XObject (image that can be understood by poppler) and saves it in the document
- Modified the `AnnotStamp` implementation to support the new functionality and reference the created object
Qt5 Frontend
- Added new APIs to support the new functionality in Poppler
- Extended the library to be able to extract the important information from a QImage and pass it to the `AnnotStampImageHelper` to be able to create image objects that will be added to the document
- Created a wrapper class to hold in the important information about the appearance stream of the annotation so that users will be able to store it