Sptember 11 2012. This release introduces multi-threaded rendering which manifests itself in a huge boost of performance, a major redo of text selection and extraction, and a new Pan & Zoom tool.

Version numbers: jPDFNotes v5.00, jPDFViewer v6.50.New Features

Out-Of-Thread Rendering – 2992 – [jPDFNotes, jPDFViewer]

We’ve implemented a new rendering which splits each page of a PDF document into multiple tiles that can be rendered and cached independently. This new strategy enables implementing out of thread rendering and improving image caching and memory usage. This will be make it easier to work with large PDF documents or documents containing intensive images and graphics in a few ways:

  • Rendering Improvement: Huge boost of performance when rendering big documents.
  • Annotation Drawing Improvement [jPDFNotes]: Smoother drawing of annotations when marking up intensive PDF documents, for instance the pencil annotation outline could be a little jagged.
  • GUI Responsiveness: Page rendering is done out-of-thread so the user interface remains completely responsive when scrolling, navigating and scaling within documents.

Major Redo of Text Selection
– 2658 – [jPDFNotes, jPDFViewer]

  • Column Detection. Text selection and extraction now supports multi-column documents (such as research or magazine articles). We think that our new algorithm is first-in-class when compared to other PDF tools and we hope you’ll enjoy it too.
  • Cursor Based. New cursor-based text selection and highlight to replace our previous rectangular selection. The new selection follows the natural order of text within pages and handle selection across columns.

New Pan & Zoom Tool
– 3202 – [jPDFNotes, jPDFViewer]

Our new pan and zoom tool allows users to zoom in and out of high-resolution pages and move around the page (“pan”) while keeping a larger view of the page. This is a great enhancement for media, print and graphics professionals.


Handle Very Large CCITT Fax Images– 2991 – [jPDFNotes, jPDFViewer]

Used to display red “X”s when rendering pages with big fax images (200Mb+) and the library was running out of memory.

Memory Improvement – 3030, 3025 – [jPDFNotes, jPDFViewer] 

  • Displaying Documents with Link Annotations [jPDFNotes]. Resize handle that are used to resize annotations on a page are now created when a link is edited the first time instead of at creation time so we don’t create unused resize handles. This is especially important when rendering a document with many link annotations. Next version, the same change will be implemented for other types of annotations.
  • Closing a Document. There were a number of objects that were keeping references to PDFDocument, and so holding it in memory even after a document was cleared.

Unicode Mapping Missing – 2111 – [jPDFNotes, jPDFViewer]
Improved text extraction to handle cases where there isn’t a method available for mapping the character codes to Unicode values.

API Change: FieldListener – 2240 – [jPDFNotes, jPDFViewer]

Added new method valueChanged in FieldListener interface. Field types that will fire an event are Check Boxes, Radio Buttons, Choice Fields, and Text Fields.

Selected Fields in Reset and Submit – 2454 , 2455 – [jPDFNotes, jPDFViewer]

Reset and submit fields based on the include/exclude flag and the fields array in form buttons.

Remember Color in Color Chooser – 2592 – [jPDFNotes]

When editing annotations colors, recent color swaps were not remembered within the color chooser component. Recent colors will now be remembered within a session.

Improved Form Field Editing – 2624 – [jPDFNotes]

When pasting text into a field, convert tab characters to spaces. Tab characters are not supported by fields. In previous version, we used to remove tab characters if they are pasted from another application. We are now replacing tab characters with spaces which makes more sense.

Ligature Characters – 3084 – [jPDFNotes, jPDFViewer]

Improvements on displaying, searching and selecting ligature characters such as fl, fi, etc…


Error with Java 7 in Text Search – 2097 – [jPDFNotes, jPDFViewer]

The log for the error was the following:
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeHi(Unknown Source)Display Error Rendering Page – 2968 – [jPDFNotes, jPDFViewer]

This is a regression bug for an issue introduced in version 4.70. When having an issue rendering a page in a document, we used to show “Error Rendering Page” and below “Error Reading File”. In version 4.70 the pages are blank.

Loupe Tool – 3034 – [jPDFNotes, jPDFViewer]
The loupe tool dialog was sometimes not displaying the correct text after zooming in / out. This seemed to happen with documents that take more time to render.

Some Fax Images Not Displaying – 2808 – [jPDFNotes, jPDFViewer]
Regression issue introduced in version 4.70. Some fax images were not displaying correctly.

Stamps on Rotated Documents – 3165 – [jPDFNotes]
Regression bug introduced in version 4.70. Wrong stamps dimensions on landscape documents.

Edit Rotated Callout Annotations – 3023 – [jPDFNotes]

Flatten Rotated Form Fields– 2648 – [jPDFNotes]
When flattening form fields on rotated forms, they would sometimes end up rotated.

Links to Mapped Drive – 2567 – [jPDFNotes]
Adding a link to a page in another document located on a different drive would sometimes fail.

Zooming While Drawing – 2941 – [jPDFNotes]
When changing scale / zooming while in the process of adding an annotation (line, polyline, polygone) would add the annotation at the wrong location on the page.

Import XFDF – 2837 – [jPDFNotes, jPDFViewer]
When importing annotations from XFDF, if there is a parent and IRT annotation in the XFDF file and the parent annotation is already present in the document, we throw a null pointer exception.

Many internal improvements and fixes.

Press Release: Qoppa Software’s fall release of Java PDF libraries and components improves PDF text extraction and rendering performance