June 17 2014. This release adds rendering improvements with faster display of the first page, thanks to on-demand loading of annotations,  and support for infinite size JPEG images. It also adds undo functionality and many annotations and document security improvements.

Version number: 2014R1 (v2104R1)

Java PDF Components: jPDFViewer, jPDFNotes, jPDFEditor

This is the full Qoppa’s PDF engine API changes from previous version:
API Change

Delayed Loading of Annotations – [All PDF Components]
4320, 4321, 4322, 4323: Loading of annotations was moved outside the AWT thread event. This will greatly improve performance when opening a PDF document containing lots of annotations. The first page should render much faster for such documents.

Handle very large JPEG / JPG images – [All PDF Components]
4246 – Better performance and memory management when rendering large JPG images (200Mb+). The library would sometimes display red “X”s as it was running out of memory trying to render pages containing large JPG images.

Undo – 4246 – [jPDFNotes, jPDFEditor]
Users are now able to undo most actions! Check out the new Edit menu with Undo/Redo in jPDFNotes andjPDFEditor sample applications, with the Ctrl-Z/Y accelerator keys for Undo / Redo. Enable / Disable the new undo feature with PDFNotesBean.getUndoManager().setEnabled(false).

New quick annotations properties toolbar and new color picker component.

Annotations Editing Improvements – [jPDFNotes, jPDFEditor]
It is easier than ever to review and comment PDF documents with the latest version of jPDFNotes and jPDFEditor.
4078, 4217 – A new user-friendly color chooser shows a wider palette of standard colors and can bet set to remember custom colors across sessions.
3706, 4486 – A new annotation properties toolbar allows easy access to common annotations properties such as fill and border color, border width, and font size. To add the quick annotations properties toolbar, use


See jPDFNotesSamples.annotProperties for sample frame with the annotation toolbar.
817 – Multiple annotations alignment and resizing. When multiple annotations are selected, they can be aligned and resized all at once from the context menu new “Align” menu item. See pdfNotesBean.getAnnotAlignmentToolBar() if you wish to make this available as a toolbar as well.
3078 – A new tool called “Edit Interactive Object” has also been added to the toolbar (off by default). This tool makes it easier to select and align multiple annotations and move links. To make it visible, call


674- A smoothing algorithm was implemented to have smooth curves and lines for the pencil annotation, for handwriting and signatures. It is also now possible to resize a pencil annotation by dragging the annotation corner.
3768 – Added “locked” to the annotations properties dialog which prevents an annotation to be inadvertently deleted or moved. Sticky and Always shows have been removed from the properties dialog as they are more general settings. They are available under the tools properties dialog (right-click on toolbar icon).
1120 – Support for non integer line and border thickness in graphical annotations.
4555 – There are new Annotations settings to change the default annotation selection color and stroke. See AnnotationTools.
4046 – Double clicking an annotation in comments pane tree will now open the note.
4053 – Make annotation note popup resizable.
4174 – Add a selection border when editing a borderless text box to be able to see the bounds of the annotation.
4260 – Reply annotations are no longer movable or editable through the user interface as they were not handled properly. They are still shown on the page and returned in AbstractPDFPage.getAnnotations().
4357 – Fix when applying rotated stamps when rubber stamp tool is sticky.

Other Annotations Improvements – [All PDF Components]
4047 – Comments Pane: Show total number of comments in a PDF document.
389 – Comments Pane: There is a new option menu (look for down arrow) on the Comments Pane’s toolbar to export all annotations to text or to xml. Print was also moved under the new options menu.
3256 – Added a delay when display tooltip for annotations (no delay for sticky notes) so users can scroll though a comment-filled document without seeing tons of notes popping up.
4134 – Make annotation note indicator more discrete, less intrusive.
2122 – Option to make text markup annotations not sticky (they are sticky by default). See TextMarkupTools.setHighlightSticky()…
4279 – Document Specific: No more opaque annotations when using FormXObject with backdrop and composite.

Document Permissions  – [All PDF Components]
3982, 4266 – 3 Levels of Document Permissions When enforcing permissions within a PDF document, Qoppa’s libraries now check against 3 permissions types. The existing API was modified to reflect this change.
4335, 4473, 4542 – Permissions Enforcement: Reviewed all methods in PDFDocument and PDFPage to make sure that permissions are enforced at the API low-level enforce rather than relying on GUI or client layers to enforce them. When extracting text and images or applying redaction, permissions were not always enforced.
4192 – New Permission Exceptions – The PDFSecurityException now has 2 subclasses: PDFPasswordException, PDFPermissionException.

Digital Signatures Improvements – [All PDF Components]
678 – Added support for Windows and Mac certificates to be used when validating signature (root certificates) or applying signatures (own certificates) allowing signing with hardware / USB / Smart Card keys.
4642 – Allow validation of certificate that was issued by a CA, but where the CA’s certificate is not included in the chain. If we have the CA’s certificate in our list of trusted certificates, the chain should still validate since we know who the issuer is.
506 – Improvements in the way signature fields such as name, email, etc.. are read is from the cn entry and displayed in the signature appearance.
4674 – Show red border around required signature fields like we do for all other required fields.

Form Fields – [All Components]
4452 – Expose methods to query XFA status (Acroform.isXFAStatic(), Acroform.isXFADynamic())
4313 – Ability to convert a form from xfa static to xfa dynamic (some field actions, formatting, calculating and validating) may be lost. See Acroform.removeXFA();
4483 – Don’t open xfa dynamic forms (which can not be rendered) and show a warning.
4312 – Partial exports of annotations in FDF format to only export a set of annotations.
4661 – Document Specific – Incorrect tab order due to a page rotated not taken into account.
4335 – [jPDFNotes, jPDFEditor] WidgetComponent.getEditingComponent() is now persistent and will not be invalid after calling startEditing(), which means that an external application can now monitor or add listeners to the editing component.
611 – Field reset now resets signature fields.
3903 – Fix issue with right alignment and formatting in comb fields.
4154 – Document Specific – Fix StringIndexOutOfBoundsException  within a text field.
4494 – When clicking on an interactive text field, the cursor is now set at the end of the field.  Previously, the whole text would be selected and highlighted. The text os still selected and highlighted when tabbing through fields. This is more consistent with what other viewers do.
4500 – Fix an issue when displaying tooltip for button fields.
4428 – Fix issue with icons not painting upon flattening button fields.
4511 – Handle bad HTML response format when submit forms and show response as text instead of HTML in such case.
4543 – Handle “invalid” forms where the DR dictionary is missing (add a DR dictionary).
4545 – Multi-line text fields that are Auto Size Font but Do Not Scroll should still be editable similar to regular text fields.
4570 – Fix check boxes appearance by looking at the appearance state versus value of the field when the 2 are incompatible (to be consistent with other viewers).
4522 – Document specific. Regression. Arabic characters not displaying in form field.

JavaScript –  [All Components]
4213, 4643, 4144- Many JavaScript improvements and bug fixes: Doc.submitForm, Doc.addField, app.Response, page open and close actions.
4597 – Implemented resetForm and fixed hanging issue.
3760 – JavaScript events for choice fields such as “event.willCommit”
4422 – Default behavior changed to show warning dialog upon formatting or validation error instead of beeping.
3922 – Display expected format for date fields in validation warning dialog.
4533 – In getting a field value from JavaScript, a space character was trimmed to an empty value when it shouldn’t.

Document / Content Stream –  [All Components]
2279, 4454 – When document were encrypted but with no fileID we used to throw an exception (java.util.zip.ZipException: unknown compression method).
4311 – Fix issue with copying page content with scaling.
4356 – Document Specific – Fix issue when merging 2 PDFs  with an output document having a corrupted page tree.
4261 – Document Specific – Fix issue with text and lines not painting. The issue was with not handling correctly indexed color spaces within stroke color drawing commands.
4093 – Handle bookmarks with invalid named destinations formatted as [page, /name, x, y].
3870 – New option to show tool tips for bookmarks to allow reading long bookmarks (off by default). See BookmarkPanel.setToolTipDisplay()
4296 – Document Specific – Header/footer getting added upside down.
3874 – Document Specific – Handle invalid appearance stream dictionary in form fields and allow editing.

Text Extraction –  [All Components]
4662 – Document Specific – Fonts were not loading.
4137, 4007 – Improved error handling in text extraction. When trying to extract text through getText() method and a page could not be rendered, even though there was an internal exception, the exception did not bubble up, and so the host application had no way to tell that there was a problem with the PDF, it simply got an empty string. We now throw the exception as expected.
3083 – Document Specific. Fixed issue with text encoding error which affected rendering and text extraction.
2706 – Document Specific. Extracting text out of a document would give an exception.
4618 – Document Specific. Handle PDFs for which the BaseEncoding entry had an invalid encoding name in the Encoding dictionary (used to give an NPE).

PDF Rendering –  [All Components]

4455 – Added support for Mac OS X Retina display. PDF documents will render at the correct resolution and text will not be blurry. Adding text markups and highlights in Retina is supported in Java 1.7 only (though text highlights will not be as crisp as expected).
3876 – Try and display pages even though they may contain “garbage” and invalid commands at the end of a stream (Used to show Error Rendering Page Unrecognized Command).
4005 – Fix issue with top half of document created with FileMaker Pro not displaying.
4113 – Remember bookmark tree node setting (node expanded or collapsed). Use the outline info to display the tree state properly. Also save the current tree state when document is saved.
4133 – Error Rendering Page: Missing font bbox.
3672 – Allow opening PDFs created by “PDF Creator Ultimate” where the document info object is at the wrong location compared to the index. We used to throw a “Missing Root Catalog”.
4082 – Fix issue opening IRS form f941.pdf.
3701 – Document Specific – Pages were not rendered (exception com.qoppa.pdf.PDFException: Illegal character ‘>’)

Content Editing –  [jPDFEditor]
2199 – Improve text content editing for strings with fonts that don’t include the space character.
4567 – Fix a bug where editing a text object would change other text objects in the document and corrupt their font.
4481 – Fix number formatting issue in non US locales in the text object properties dialog.
2200 – issues with modifying text state properties.
2281 – Font in edit content drop down doesn’t populate.
4601 – Font names will now sjhow under text edit dialog for type3 fonts.

Redaction –  [jPDFEditor]
4142 – Double-clicking on an image with the redaction tool will now set an annotation over that image.
3792 – New, improved layout for redaction annotation properties dialog.
4143 – Redaction annotations were not using the default author defined in AnnotationTools for the annotation’s creator.
4216 – Remove the option “Apply Redaction” from the redaction annotation mouse menu. The option “Apply All Redactions” remains. The goal was to make sure that users to do not inadvertently choose to apply a single redaction versus all. The API still allows to burn one annotation at the time.
4226 – Show a warning message before applying all redactions with options for user to cancel the action.
4227 – Show redaction icon for redaction annotations in Comments pane tree.
4524 – The option ‘Always show dialog’ in the Redaction tool properties did not work.

OCR –  [Optional in jPDFEditor]
3651 –  Handle mixed content pages allowing to OCR the images only on a page and ignoring any existing text content. Do not OCR pages which already contain invisible text.
3795 – Fix issue with displaying header/footer after OCR.

Images –  [All Components]
4434 – Fix issue with getPageSubImage  – DocumentSpecific had to do with Clip.
4459 – Handle JPG images which ICC profile contains some flags that Java’s ICC engine cannot handle (java.awt.color.CMMException: Invalid image format).
4425 – Missing elements when converting a PDF to images. This was an issue due to not properly setting the backdrop color / luminosity as defined by the softmask clip area .

Runtime Args –  [All Components]
4423 – New runtime arguments for debugging is now documented -qoppa.debug=true
4049 – New runtime argument for setting license key qoppa.jpdfimageskey=12345

User Interface –  [All Components]
4306 – New ‘Previous View’, ‘Next View’ navigation buttons available on the toolbar (can be turned off).
4625 – Ability to customize page thumbnail size beyond the 3 standard options (small, medium, large), using the scroll-wheel (CTRL + scroll on Windows and Linux, ALT + scroll on Mac) .
4139 – Show all file attachments in the attachment pane even attachments that were added as annotations.
1225 – Print or export (to XML, text) Bookmark list from the new options menu in Bookmarks pane.
4303 – (jPDFEditor)  Allow adding and deleting bookmarks. Look for the new options menu in the Bookmarks pane.
4476 – Fix translation issue: InsertPage=Leere Seite einfügen
4615 – [jPDFEditor, jPDFNotes] Interactive object selection tool invisible by default (can be turned on)
228 – Added print progress (showing current page) in print dialog.
4563 – [jPDFEditor] When the redaction tool is active, clicking the CTRL key will not force the cross cursor drag mode for rectangular selection rather than cursor selection.
466 – New cover page mode, which shows the first page on its own. See PDFViewerBean.PAGEMODE_COVER and PDFViewerBean.PAGEMODE_COVER_CONTINUOUS.
4671 – Navigation issue with Page Up/Down not working correctly in Facing, Single and Cover page modes
4020 – New improved icon for Select Text tool on the toolbar.
4065 – More helpful tool tips using a verb form (such as ‘Search Text’, ‘Select Text’) for tools on the toolbar.
4038 – Text search doesn’t recover after error.

Applets –  [All Components]
4085 – Config.xml scale and rotation properties are now being applied not only on the first stamp but all subsequent stamps as well when the tool is sticky.

Many bug fixes –  [All Components]

Qoppa’s new library to Optimize PDF documents, coming this summer!