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.