Hi,

Thank you very much for your feedbacks and suggestions.

After going through all of your feedbacks, I modified the proposal with
them and used some my own ideas also. Additionally, I included the proposed
time line of the project and I would like to see your comments here.


*Project Title*

Implement PDF object inspector and enhance features of PDFReader GUI.


*Abstract*

PDFReader is small GUI application which comes with Apache PDFBox pure java
PDF library. Currently it is only capable of rendering PDFs. This project
is to redesign PDFReader GUI with a plugin framework and implement some
developer oriented features for it. Primary objectives of project are as
follows.

(1). Design a plugin framework for the PDFReader.

(2). Implement PDF basic viewing features. (Zooming, rotating, page
thumbnail viewer)

(3). Implement a PDF object inspector to display PDF object properties.

(4). Implement Export command for converting PDFs into different file
formats (JPEG, PNG, TXT).



*Project Details*

*
*

PDFBox already has so many features required, but currently most of them
only available for developers and from command line. Aim of this project is
extending PDFReader into well designed application which allows access to
some PDFBox features through GUI and integrating some developer oriented
features. However, project itself is not going to consider GUI access to
all available PDFBox features. Instead of that it re-architects PDFReader
into pluggable application which developer can easily integrate other
features by developing plugins.


In that case, most important primary objective of the project is designing
a simple plugin framework for the PDFReader. In the implementation, we can
use JAR Service Provider mechanism as the base of the plugin framework. For
that first, it's required to identify what are pluggable classes which is
going to use in the application and define interfaces for those classes
with the basic methods. Then we can implement some mechanism for plugin
developer to define what are the classes to use, and where (which
JAR/directory) to load them from. When application loads, it will check
specific locations for plugins and create instance of those plugins using
class loader. Here after application can use those plugin instances as
components of application itself.


Rotating and zooming functions are basic features which is available in
every PDF viewer and it allow user to view PDF pages from different
perspectives. However current PDFReader is unable to provide those
features. This project will address to this problem as part of second
primary objective by implementing some menu commands for those features. In
the implementation, it will be matter of changing some codes in PageDrawer
and other related class which are responsible to render PDF pages using
Java2D.


Other interesting feature which is going to archive as another part of
second objective is developing page thumbnail viewer for the PDFReader.
This will be cool GUI component for user to navigate through the PDF
Document very easily. It will be image list which has small image of the
every PDF page of the current document with page numbers. User can simply
click on the image to jump the particular page. This component will be
developed as plugin for PDFReader and user will be able to show and hide
using the menu command.


Third objective is implementing an object inspector for PDFReader and it
will be very much useful to developer who wants to debug PDF documents.
User can enable click one the any object on the PDF viewer and then in a
small window, it will show the information about particular object while
highlighting the object inside the viewer. As an example if user click on
image of the PDF it will show the information such as image size, color
space, resolution and bit depth. If object is text, it will show the
details about font, color space and color values. In implementation this
also will be developed as another plugin for the PDFReader.


Export feature is last primary objective which I'm going to implement
within this project and it also will be developed as several plugins. As
most of the available software, it's good idea to add 'Export' menu item
into file menu. This menu item will have submenu which contains different
commands for different file formats (JPEG, PNG, TXT) and each of those
commands will popup small dialog box which allows user to change export
settings such as page range, password, encoding type, file name and
location. After change those settings, user can simply click 'OK' button of
the settings dialog box to start the converting process. Every command for
particular file format will be developed as a plugin and in future
developers can easily integrate commands for new file formats to convert
PDFs.


In addition to these primary objectives there are few secondary objectives
which I'm going to consider with this project and major one will be the
'Add Text' feature. It will allow user to draw textbox in any place of the
PDF page and type new text. There will be Small window or view will appear
in this mode and user can change the font size, color and other related
properties. These new text objects will added to PDF page by inserting new
optional content group to the page and in case user wants to remove or edit
this newly added text, it's possible before saving PDF permanently.



Add 'print' menu item, develop plugin for mange (add, edit, delete)
bookmarks and View for the basic PDF properties will be the set of another
secondary objectives which I'm going to look at within this project. Since
most of them are already available in command line, it will be easy to add
those features as plugins for GUI if there will be enough time after
achieving primary objectives.



*Benefits to PDFBox*

Most of the modern code libraries are delivered with GUI application to
test the features before studying API. However, features of PDFBox are
mostly accessible through the command line interface and it discourages
users and new developers from using PDFBox. By having GUI for access these
features any user can simply use them and developer can test the features
without going through the code. Since designing plugin framework is a
primary objective of the project, developers will be able to easily append
new features for GUI in future.

PDF object inspector will be great tool for developer and it will make easy
debugging PDFs. Furthermore, it will help to new developers to study the
structure of PDF file and understanding PDFBox core functionalities.



*Project Timeline and Deliverables*

*May 21 - May 28*

·   Read and understand the current PDFReader Code

·   Create basic design for plugin framework

*May 28 - Jun 08*

                Discuss plugin framework design with community

 *Jun 08 - Jun 18*

                Implement plugin framework

 *Jun 18 - Jun 25*

                Code some basic examples and test cases for plugin framework

 *Jun 25 - Jul 02*

                Implement basic zooming and rotating features

 *Jul 02 - Jul 09*

                Implement page thumbnail viewer

 *Jul 09 - Jul 11*

                Study and Create design for Object Inspector

 *Jul 12 - Jul 13*

                Submit mid-term evaluation

 *Jul 13 - Jul 23*

                Implement PDF Object Inspector

 *Jul 23 - Jul 30*

                Implement export PDF feature

 *Jul 30 - Aug 06*

                Implement some secondary objectives

 *Aug 06 - Aug 13*

                Test, debug the code and complete documentation

 *Aug 13 - Aug 20*

                Submit the design and conclusion



*Exams and other commitments*

I have semester end examination of University from 28th May to 8th June.
After that I can work fulltime (40+ hours per week) on this project until
end.




On Wed, Apr 4, 2012 at 12:44 PM, mehdi houshmand <med1...@gmail.com> wrote:

> >
> >
> > <snip>
> > How about just implementing the "add text" feature? That should be
> > relatively easy. Add a new optional content group to the page and add
> > all text as part of that. That makes this a cool tool to fill out forms
> > that were scanned, or that are not AcroForms. I fully agree that the
> > replace feature is going to be tough, relatively speaking.
> >
>
> Yeah, my bad here, I shouldn't have missed it but I'm inclined to agree
> with Andreas. If we implemented deleting text, it could get pretty tricksy,
> especially when CID coded fonts are used. This is a perfect candidate of a
> secondary objective.
>
>
> > I wouldn't put the bar too high for this project. Get some low-hanging
> > fruit that adds some cool and useful functionality to the GUI. More can
> > always be added later.
> >
> > More ideas for low-hanging fruit (as additional tasks if you end up with
> > spare time after the main objectives above):
> > - Allow the "Save As..." menu item not only save a modified PDF, but
> > also bitmaps (PNG, JPEG), plain text and HTML (i.e. from text
> extraction).
> > That would make a plug-in for each output format, so we could add others
> > later.
> > - Add a "Print..." menu item.
> > - Integrate preflight as a plug-in into the application.
> > - Split, concatenate, page reorder, page rotation (not just viewing but
> > modifying the PDF), overlay/underlay.
> > - Menu item: "Create PDF from image(s)" and "Add page from image".
> > - A dialog/view listing the fonts in the PDF.
> > - A dialog/view for the basic PDF properties like in Acrobat's
> > Properties Dialog.
> > - A dialog/view listing all images with their properties and effective
> > resolution in the PDF.
> > - I could go on and on... :-) I'm seeing a serious itch going to catch
> > me once you've set up a good base for that GUI. I'm so looking forward
> > to this!
> >
> > Anyway, points 1 and 2 will be the most important tasks because they
> > provide the basis for easily adding additional functionality.
> >
>
> Yeah, those look like good tasks, maybe we'll add the two you suggest to
> the primary objectives and the rest into secondary or even tertiary
> objectives. It's good to see you getting geared up for this Jeremias, we're
> no doubt going to call on your expertise ;-).
>
> Thanks for the support
>
> Mehdi
>



-- 
Thanks & Regards,
Tharaka Wijebandara,
Faculty of Information Technology,
University of Moratuwa.

Reply via email to