
               CHANGELOG for Big Faceless PDF library
               --------------------------------------

The version numbering scheme in use across all our products is designed
to simplify upgrade management for developers:

  * A "patch level" change indicates a minor feature or bugfix.
    Methods MAY have been added to the API, but none have been
    removed.
    eg. Code written for version 1.0.0 will work on version 1.0.9

  * A "minor level" change indicates a change to the API which
    may require some code changes. API changes are minor, but
    are necessary for bug fixes or new features.
    eg. Code written for version 1.0.3 MAY require changes for 1.1

  * A "major level" indicates big changes to the API or
    considerable extra functionality. Developers can expect
    significant changes to bring their code up to date.
    eg. Code written for version 1.1 is unlikely to work under 2.0

-----------------------------------------------------------------------------

2.18.1  (released 2015-10-27)
-------------------------------
* Fixed a race condition revolving around the PDF(PDF) constructor, and the 
  subsequent use of PDFs created that way in multiple threads.

* Migrated all internal multi-threaded operations across to use an Executor,
  and added the PDF.setExecutor method to allow this Executor to be set by
  the customer. 

* Calling the PDF.getEmbeddedFiles() method would result in the PDF being 
  identified as containing Embedded Files (and so failing various PDF/A
  validation tests). Mainly evident when verifying PDF/A documents from the
  viewer.

* Fix to handle encrypted PDFs created by iText that have unusual combination
  of usage flags, and fixed use of empty owner password with Acrobat 3
  encryption 

* Corrected handling of "Artifact" tags when creating Structured PDF

* Added PageExtractor.Text.getHorizontalScale, and fixes to the output of
  PageExtractor.Text.getVisualBounds when this is not 1

* Viewer: Added new, all encompassing loadPDF method for those not using the
  Importer

* Viewer: Added DocumentPanel.get/setAssociatedFile method

* Viewer: Added Exporter.completed method, to make subclassing simpler

* Viewer: when saving back to the same file the PDF was opened from, don't
  require the use of multiple-revisions if the PDF was opened as an InputStream


2.18    (released 2015-09-25)
-------------------------------
* API change: deprecated the PDF.getFullOutputProfile and PDF.setOutputProfile
  methods in favour of the new "OutputProfiler" class.

* Added OutputProfiler class, which gives more control over verifying and
  modifying a PDF to match a specific profile. New functionality includes
  support for doing this in a background thread, and the ability to replace
  colors or fonts in a PDF to those required by the target profile.
  More details in our blog at http://bfo.com/blog/tags/outputprofile

* Fixes to special handling for PMingLiU font when it's embedded - the HKSCS
  character range was not being correctly handled.

* Fail before OutOfMemory when instructed to create images with
  dimensions > 65535 during render.

* Don't mark the PDF as containing embedded files just because we've called
  PDF.getEmbeddedFiles.

* Improved OutputProfile.setOutputIntent - many parameters can be specified as
  null, the method will now derive the correct values to use from the others.

* Fixed error when using certain fonts that mapped the "fi" ligature to the
  private use area, resulting in a missing glyph when rendering.
 
* Added PDFFont.isBold/isItalic/isSerif methods

* Added OutputProfile.FontInfo.getUsedCharacters method, to show which
  characters are used by each font in a PDF during profiling. Also modified 
  to include fonts created but unused in the PDF in the list

* JavaDoc uses SyntaxHighlighter for the embedded examples

* Viewer: the Print dialog displayed when calling DocumentPanel.print() can
  now be the "native" dialog, the "java" dialog, or an autoselection between the
  two - sadly necessary as neither provide the full functionality.

* Viewer: fixed some subtle bugs in ZoomLevel, and unified the min/max levels
  for the various zoom functions with new methods in the PDFViewer class

* Viewer: size of splitpane and whether it is opened/closed is correctly stored
  in preferences and used when the viewer is reloaded



2.17.1  (released 2015-07-28)
-------------------------------
* Rewrite of the StructureManager class to fix numerous bugs, and tested with
  JAWS screen reader

* Corrected subtle error in L*a*b* ColorSpace to RGB.

* Added Form.isXFA, for quick checking of XFA.

* Fixed PDFPage.drawShape handling of Quadratic bezier

* OutputProfile has a new "setOutputIntent" method, to set the intent without
  going through the constructor.

* Fixed handling of soft-hyphens, which would not align properly and
  occasionally disappear altogether.

* Handle OTF fonts that are missing everything except the CFF table

* Added BarCode.getContentRectangle, for exact position of barcodes

* Added two new RenderingHints to PagePainter to help those implementing their
  own Graphics2D object identify text drawn as shapes

* Align behaviour when dealing with damaged DCT image content to that of Acrobat,
  to handle documents that rely on it.

* PageExtractor.Text now has a getOutlineColor method, and this and getColor
  will return null if the text is drawn in a mode that doesn't fill (or stroke)

* Behave correctly when a user-password but no owner-password is set on a
  StandardEncryptionHandler

* Fix bad-glyphs error when changing the value of a field that uses an
  embedded font, then immediately flattening the form.

* Don't reset arabic/hebrew documents to right-to-left binding when saving

* More fixes for bad XFA documents

* Fix for checkboxes with values that are punctuation

* Fixed rare case where editing certain PDFs could break the "Reader Extensions"
  signature in Acrobat.

* Added PDFParser.setPrintAsImageResolution, to control the resolution of the
  image for printing. This can be useful for memory-constrained environments.

* JavaScript was getting the timezone wrong for date/time fields, now fixed.

* Removed memory-leak potential for a certain customer who is torturing our
  viewer API in a particularly horrendous way

* Improved our guess for the MediaBox of a page where it's not specified (we
  now assume it's the same as the neighbouring ones).

* Fix for breaking behaviour under Java 5 for some documents.

* Logging has been modified to allow the system to be tapped into, and modified
  the viewer to report these via the new "WarningNotifier" Viewer feature.

* Some more subtle PDF/A validation tweaks based on a new test corpus.

* Added awful hack to work around Acrobat bug when using a CID font in a form.

* Creating a PDFCanvas from a Page will use the smaller of the CropBox/MediaBox
  rather than just the CropBox.

* Text Extraction without a valid license no longer replaces "e" with "a", but
  changes the first word extracted on each page to "DEMO" instead.

* Viewer: many protected methods in ViewerWidget made public

* Viewer: tweaked the "Save" feature changes in the previous release to better
  cope with missing/locked files, Windows locking, and other edge cases.

* Viewer: added EmbeddedFilePanel to display embedded files

* Viewer: when saving, use a PDF file suffix for files converted from bitmaps.

* Viewer: fixed unusual situation where page zoom could get stuck on 101%

* Viewer: fixed "ghost" window after returning from full-screen mode

* Viewer: fixed NPE when can occur occasionally when there are no SidePanels

* Viewer: many small "snagging" issues fixed.



2.17    (released 2015-03-31)
-------------------------------
* Viewer: made "Save" feature save without prompt, and new "SaveAs" feature
  will prompt for the filename - they now function exactly as a "Save" and
  "SaveAs" feature would be expected to, but due to the change in functionality
  in Save this release is tagged 2.17 rather than 2.16.4

* Reduced memory footprint when rendering very large documents containing an
  old-style XRef table. This can make quite a difference for some files.

* Support the JPEG-2000 API at https://github.com/jai-imageio/jai-imageio-jpeg2000
  as well as the legacy Sun version of the same code, and mitigate a memory
  leak in both versions.

* PDF/A-2 fixes - applied the changes from the technical corrigenda; added the
  "XMPMetaDataInfoMismatchTrailingZero" and "CIDSetCoverageIncompleteTolerant"
  features to the OutputProfile to deal with some ambiguity in the spec;
  fixes to the CIDSet font object for PDF/A-2; fixes to handling of the
  .notdef glyph.

* Print a warning rather than throw an exception when rendering a PDF to a
  Graphic2D with no alpha channel - it will work sometimes, just not always.

* Removed unused "cloneEntry" method from Cache interface.

* Correct text size calculation when extracting text and the text has been
  scaled unevenly.

* Allow files that contain an invalid PDFName to be read without exceptions.

* Fix for Type 1 fonts that claim to use a custom encoding.

* Fixed redaction of images where the image detail is stored in the mask, not
  the image itself.

* Some improvements to the way we modify documents make it less likely that we
  will break a reader-extenions signature unnecessarily.

* Fixed repair of compressed XRef PDFs with damaged streams.

* Fixes to allow an OutputProfile to be set on a PDF twice.

* More fixes for XFA, this time to do with edge cases in the <picture> clauses
  and FormChoice fields.

* Viewer: fixed a deadlock in the PagePainter which could be triggered by
  JavaScript in the PDF modifying the form data.

* Correctly handle TTF fonts with "0/1" cmaps - was mostly working before, but
  not always.

* Removed assumptions preventing the viewer being used in an SWT application.

* Fixed clipping for Type3 fonts, previously working in 99% of cases, now 100%.

* DiskCache uses File.createTempFile, to allow multiple JVMs to run with the
  same cache directory.

* Viewer: quicker freeing of resources when a page paint is interrupted -
  this should result in a much lower memory footprint when scrolling rapidly
  through a document.

* Viewer: fixes to handling of temporary files in Save and SaveAs on Windows.

* Viewer: allow runtime overriding of whether a file loaded by an Importer is
  added to the "Most Recently Opened" list.

* Viewer: when saving the PDF, the stream it was loaded from is closed. This
  has no impact for most, but will allow the file to be deleted immediately
  on Windows.

* Viewer: don't allow DocumentPanels to be dragged so far out of the Desktop
  that they can't be dragged back.

* Viewer: the Quit feature now calls PDFViewer.close() first.

* Viewer: fixes to navigation in ThumbnailPanel, and increased max thumbnail
  size.



2.16.3  (released 2015-01-23)
-------------------------------
* Fixed linearized loading, broken in previous release

* Fixed rare bug in Acrobat X (AES256) encryption which could result in
  invalid encryption or a failure to decrypt.

* Fixed NullPointerException after calling FormElement.duplicate and when
  dealing with an annotation that has no rectangle, or for Screen annotations
  with no "Type" field.

* Don't fail when XFA form values are illegal according to AcroForm.

* Fixed handling of format events in JavaScript, broken in previous release.

* Fixed display of soft-hyphens when laying out text, broken a few releases ago.

* Viewer: fixed the behaviour of the Save dialog when the filename is modified
  in the text field; depending on how the field was blurred and the L&F, the
  the new filename was sometimes ignored and the previous filename used (since
  2.16.2), and fixed the display of save options (currently only for TIFF) for
  the various Look & Feels. This also fied a NullPointerException that was
  specific to a particular series of selections under the Windows L&F.

* Viewer: fixed some focus issues relating to multi-line text items.

* Viewer: clicking with the "zoom to selection" tool caused the viewer to
  try to zoom to an infinite zoom level and hang - now fixed.

* Viewer: Fixed deadlock which could occur when a field changed the value
  of another field in the viewer using JavaScript.

* Viewer: Fixed handling of JavaScript events, in particular, an event which
  triggered another event wasn't always being handled properly.

* Viewer: deleting a page in JavaScript that contains the sole Widget for
  a field will also delete the field, to match Acrobat's behaviour. Also fixed
  the value of Field.page, which was off by one.

* Viewer: JavaScript closeDoc method closes window regardless of dirty state,
  to match Acrobat's behaviour.



2.16.2  (released 2014-12-16)
-------------------------------
* Fixed exception when rendering newly generated PDFs for the second time,
  broken in previous release.

* Added Deutsche Post "PostMatrix" barcodes

* Fixed exception when trying to paint XObject with SoftMask that has been
  clipped away entirely.

* Fix to choreography issue setting line endings in line annotations.

* Fix to edge-case for XFA picture clause processing

* Fix for particular format of broken OpenType tables.

* PagePainter.drawSubImage no longer overrides the clip on the Graphics2D

* Viewer: Thumbnail panel scrolling is improved, particularly when reordering
  pages.

* Viewer: Fixed error when trying to save PDF to a new file, broken in previous
  release. Filename is updated to match when the file format is changed, and any
  additional options for the selected file-format are displayed without a popup.

* Viewer: Many settings (e.g. zoom level, last side panel selected, size of side
  panel, size of thumbnails) are stored in preferenced and will be used the next
  time the viewer is loaded if nothing else has a preference.

* Viewer: Improved keyboard navigation. Ctrl-Enter or Ctrl-Esc can be used to
  OK/Cancel a dialog, and Ctrl-Up and Ctrl-Down can be used to page through
  the document as well as PageUp/PageDown (which are missing on many laptops)

* Viewer: MultiPageDocumentViewport was holding references to a closed PDF
  longer than it needed to - now fixed.

* Viewer: many small usability improvements.



2.16.1  (released 2014-11-21)
-------------------------------
* Our tolerance of damaged PDFs was reduced in 2.16 and we were more likely to
  throw an error during load than in previous versions - now fixed.

* Using an unembedded TrueType font will now work even if the font is missing a
  POST table. Also some related fixes to parsing unembedded fonts.

* Some memory improvements for certain workflows relating to modifying existing
  pages.

* Corrections to XFA formatting to handle some unusual cases.

* Added PageExtractor.Text.getVisualBounds(), to give an exact visual bounding
  box for text. Also fixed some related bugs in PageExtractor.cropText 

* Viewer: correctly mark a PDF as dirty when a hidden form field is changed

* Viewer: fixed round trip edits of text annotatations in non-ASCII languages.

* Viewer: fix for a curious race condition relating to intiialization of
  JFileChooser

* Viewer: don't fail with exception if OS has no default printer set.

* Viewer: Allow Save feature to be disabled unless PDF is "dirty"

* Viewer: Allow configuration of margins size and border colors for Viewports

* Viewer: Allow replacement of the default TransferHandler, to intercept copy/paste
  operations.

* Viewer: Added Importer.addToMostRecent, to prevent a file being added to the
  "Most Recently Loaded" list.

* Viewer: corrections to Chinese translation



2.16    (released 2014-09-05)
-------------------------------
* We're finally using generics in our method signatures both internally and
  externally throughout the library, including the viewer. This means a few
  methods have had generics added to their signatures, and in one or two places
  the signatures have changed. This shouldn't affect existing classes but source
  code being (re)compiled against this Jar may need tweaking.
  Here's a list of the changed method signatures:

  * Collection<? extends Text> PageExtractor.getTextUnordered -> Collection<Text>
    (and the same for PageExtractor.getTextInDisplayOrder)

  and in the viewer

  * PDFViewer(Collection) -> PDFViewer(Collection<ViewerFeature>)
  * PDFViewer.getFeature now returns feature of specified class, so you can do
    PDFImporter importer = viewer.getFeature(PDFImporter.class)
  * TextTool.select(Collection) -> TextTool.select(Collection<PageExtractor.Text>)
  * TextSelection.RangeList and KeyStoreAliasList have generic-correct supertype
  * BackgroundSignatureVerifier methods take Collection<FormSignature>

* Complete rewrite of rendering layer - this will result in a microscopic
  difference to the bitmaps in conversions of most files, and a large
  improvement for a few. See http://bfo.com/blog/

* Complete rewrite of redaction - redacted area should now be much closer to the
  specified area (previously we tended to redact too much). Redaction will now
  fail if digital signatures or XFA are in place - a signature would retain the
  previous version of the PDF, which misses the point of redaction. Also added
  an easy method to Redactor to identify annotations that may need removal.

* Reduced memory footprint when working with documents loaded by PDFReader.
  How much varies per document, but a 10% reduction seems about average.

* XFA parsing has been redone and should now load all valid XFA documents without
  warning or error.

* Rewrite of the structural tags facility - beginTag/endTag on LayoutBox/PDFCanvas
  and PDFPage. More documentation and added a new example "StructuredPDF.java"

* Added support for ECDSA encryption with SHA256/384/512 hash algorithms

* Correct render forms when NeedAppearances flag is true

* Added AnnotationNote.setOpenRectangle, to control location of popup.

* Fixed some incorrect warnings about XMP processing instructions

* Removed the deprecated DSE200HandlerFactory class, which hasn't worked properly
  for some time and whose functionality has long since been absorbed into the
  AcrobatSignatureHandlerFactory class.

* Viewer: fix some possible deadlocks that could arise from customized workflows

* Viewer: don't fail when trying to save to a filename < 3 characters long

* Viewer: improvements to German translation

* Viewer: added DocumentPanel.get/setWindowTitle, and improved UI when two
  documents with identical names are open



2.15.3  (released 2014-05-21)
-------------------------------
* Several fixes to XFA, in particular regarding field formatting.

* Improved algorithm for text extraction now gives better results for most
  documents. Added identification of super and subscript digits from the text.

* Changed mapping from PDF font to OS font from 1:1 to 1:many, required
  to correctly render characters from the more recent HKSCS supplements on
  Windows.

* Identified and fixed a bug in the official Adobe-CNS-6 mappings for CIDs 16976
  and 16977 (U+24156 and U+24157, both from HKSCS-2008), which had the wrong
  Unicode values. The "bfopdf-cmap.jar" file has changed as a result.

* Several fixes for JavaScript under Java 8

* Handle ToUnicode maps that map every possible codepoint to identity
  in a saner way.

* XMP metadata now requires namespaces end in a '/' or '#', to match Acrobat's
  incorrect implementation of bizarre and entirely unnecessary clause in
  badly written specification (ISO 16684-1:2011(E) 6.2, p14).

* Don't decode an image in PageExtractor.Image just to get its dimensions

* Fix infinite loops when particular values passed into pathArc, and when
  the PageLabels in a PDF has corrupted data.

* Fixed font sizing of text with small-caps, broken a few releases ago

* Moving pages between documents more reliable for files created with NitroPDF.

* Correctly render text with font size < 1.

* Fixed subtle and long-standing bug triggered by printing certain documents
  containing an inline image.
  
* Subtle correction to PDF/A-2 and A-3 rules regarding default page blend modes

* Viewer: Save dialog works when no Exporter features are defined



2.15.2  (released 2014-03-03)
-------------------------------
* Added generics to method signatures where appropriate. Java 4 is supported
  (as before) with the "bfopdf-14.jar" Jar.

* Tested and verified with Java 8 - mainly adding support for the "Nashorn"
  JavaScript engine.

* Added signing/verifying of PAdES signatures to AcrobatSignatureHandlerFactory

* Added support for the latest release of the Hong Kong Supplementary character
  set (HKSCS-2008) to the MSung and MHei fonts. The changes for this are in the
  "bfopdf-cmap.jar" as well as the core Jar, so remember to upgrade both.

* Faster cloning of PDFs with PDF(PDF) constructor

* If an OutOfMemoryError occurs when drawing a bitmap image while rendering the
  page, we'll try to draw it at a lower resolution before failing completely.

* Viewer: aded facility to load the KeyStore from a Jar

* Viewer: When calling Importer.setFile(), if the file is not absolute the Save
  dialog will default to the last directory used by the user. Useful for saving
  files loaded from streams or URLs.



2.15.1  (released 2013-12-18)
-------------------------------
* Viewer: Fixed memory leak when reloading PDFs in the same PDFViewer.

* Viewer: Fixed exceptions that sometimes occur when changing the
  DocumentPanel's PDF, as is done when the MultiWindows feature is disabled.

* Viewer: Fixed position of window after zooming to selection, selecting text
  in a search panel, or otherwise running a GoToFitRectangle action when a
  CropBox is set on the page.

* Fixed race condition in PDF, only apparent if you're accessing it
  simultaneously from multiple threads, as we are in the viewer since 2.15


2.15    (released 2013-12-13)
-------------------------------
* No change, but we've renumbered the release to 2.15 because the behaviour of
  the PDF page list is, technically, an API change. We've documented why here:
  http://bfo.com/blog/2013/12/13/bfo_pdf_library_2_15_but_what_happened_to_2_14_1.html


2.14.1  (released 2013-12-12)
-------------------------------
* Added support for loading linearized documents to the viewer - if you want
  your custom features to take advantage of this then they may need rewriting,
  but should have no impact for most.

* Added PDF/A-2b and PDF/A-3b support to the OutputProfile class, and fixed a
  few (very specific) issues with PDF/A-1b.

* Added support for creating PDF portfolios.

* Pages can now categorically only belong to one document. This was enforced
  half-heartedly with previous releases, but this release is more rigourous.
  Pages can now be rearranged in the list or moved between documents, with an
  iterator if preferred, and they will only ever exist in one place at a time.

* Fixed names of inks in Separation (Spot) colors, broken a few releases ago

* Fixed subtle but long-standing issue with glyph position, usually only
  noticable in particular symbol fonts. Improved rendering of glyphs on Windows.

* Made public our LabColorSpace class to allow colors defined in the CIELAB
  space. Primarily useful as a means of defining PANTONE Spot colors.

* Correctly identify documents with Spot colors and RGB alternates as
  containing RGB - broken a few releases ago. Fixed a few other edge-cases
  relating to colorspaces and the OutputProfile class.

* Font features can be set on the style as well as the font - which means a font
  can have a feature enabled for a single word in a LayoutBox without needing to
  clone it. Deprecated PDFFont.linearize as part of the cleanup in this area.

* Changed manifest to allow applets to run with (ill-considered) changes made in
  Java 7u45. 

* Fixes to RTL text processing with OpenType layout algorithm

* When profiling or extracting text, don't load unembedded fonts if we don't need
  to.

* Fixes to repairing bookmarks

* Viewer: will prompt if a password is required when loading a PDF over HTTP.

* Viewer: added cut/paste option for pages, and correctly order pages cut/pasted
  this way.

* Viewer: fixed failure to redraw after reordering pages in some circumstances

* Many other small fixes and improvements



2.14  (released 2013-08-05)
-------------------------------
* Basic support for Linearized or "on-demand" loading. This is a large revision
  which allows Linearized or "web-ready" PDF files to be loaded from an HTTP URL
  in the background. Many changes still need to be made to the Viewer to allow
  for this, but this revision puts the necessary changes into the core API.
  New methods are in the PDFReader class and PDF.getLoadState(), and new classes
  are LoadState and LinearizedExeption.
  *****  Existing functionality for non-linearized PDFs remains unchanged. *****

* Added new methods to PDFReader - setSource, addEncryptionHandler - and
  deprecated (with replacement) some of the more convoluted constructors.

* Increased speed  when concatenating very large PDFs and merging resources by
  several orders of magnitude.

* Fixed typo when purging resources which deletes any non-hyperlink annotations.

* Fixed issue resulting in missing text when flattening Forms in rare PDFs.

* Added PDFPage.setMeasurementUnits, to assign real-world dimensions to an area
  of the page (useful for CAD or Geo PDFs).

* Fixed PDF/A related issues when calling PDF.setMetaData.

* Modified XMP metadata creation to never include a UUID, in line with latest
  revision of XMP specification (to produce more acceptable PDF/A files).

* Progress of save is reported much more accurately, and progress on load can
  be reported via new PDFReader.getProgress() method.

* Fixed rare issue when merging resources, which could result in fonts with
  missing glyphs.

* Conversion to bitmap on Windows machines with huge numbers of installed fonts
  could be slow - now cache the list.

* Added the option to discard rather than repair damaged form fields when
  repairing a damaged PDF on load: set the "RepairRemoved" property to not-null.

* Fixed requote feature in LayoutBox where there are complex nested quotes.

* Viewer: fixed some Event Dispatch Thread violations when dialogs are displayed
  by the KeyStore management classes.

* Viewer: use the ".pdf" suffix when saving a PDF created from an image.

* Viewer: API change: the DocumentViewport.getNextSelectablePage has changed
  to DocumentViewport.getNextSelectablePageIndex. Shouldn't matter unless you're
  creating a custom Viewport.

* Viewer: multi-line annotations do not add extra newlines on every edit.



2.13.2   (released 2013-05-08)
-------------------------------
* Map returned from PDF.getNamedActions() didn't fully implement Map interface.

* Added ColorContent, ColorImage, GrayscaleContent and GrayscaleImage to
  OutputProfile class, to categorically determine if a PDF contains color or
  grayscale content.

* Slightly modified column spacing during text extraction - previously the two
  columns would overlap by one character.

* Minor fixes for some specific damaged PDFs.

* Removed the last finalizers from the API - although most use-cases wouldn't
  have created many finalizable objects, there are certain ways to use the API
  that do and this should help performance in those situations.

* Viewer: reverted Java 1.5 incompatible change in previous release.

* Viewer: ensure action() method is always called in our features (needed by
  overloaders - reverting change in previous release).

* Viewer: fixed occasional NPE from PagePanel.doLayout on deleting annotation.

* Viewer: fixed order of activated/loaded/deactived events.

* Viewer: improved french translation.



2.13.1   (released 2013-04-18)
-------------------------------
* Fixed NullPointers which could occur when working with documents that had been
  cloned, a problem introduced in the previous release.

* Fixed clash between Tomcat ClassLoader and JavaScript sandbox, which would
  result in exceptions and no JavaScript being executed (since 2.11.25)

* Correctly render form fields that have their style changed during formatting

* Correctly clip Shading patterns that specify a BBox

* Don't allow invalid CreationDate or ModDate to be set in PDF info dictionary.

* Correctly position text with vertical writing direction.

* Don't fail on documents with existing but zero-size MediaBox or CropBox

* Viewer: allow ViewerWidgets to define javax.swing.Action and share that action
  between buttons, menus and potentially other objects. This makes for easier
  code when that Action has complex rules for when it's enabled (eg it depends
  on the DocumentPanel permission). See ViewerWidget API docs for details.

* Viewer: fixed memory leak when repeatedly opening Documents in a viewer
  without MultiWindow, added in previous release.

* Viewer: corrected the order of DocumentPanelEvents when closing Documents.

* Viewer: added dual-page view (two-up)

* Viewer: Opening a PDF can now be properly (ie immediately) cancelled

* Viewer: background tasks are automatically cancelled when their parent window
  is closed.

* Viewer: correctly run JavaScript actions after the first in a linked-list of
  actions on a Widget

* Viewer: fixed race when rapidly scrolling through PDF which could result in
  Annotations not being rendered correctly

* Viewer: correctly deal with pages being deleted by JavaScript during load

* Viewer: corrected ordering of overlapping annotaitons, lost in a previous
  revision

* Viewer: corrected parenting of dialogs when Viewer is itself in a JDialog

* Viewer: corrected order of OK/Cancel buttons when LAF is Nimbus on Windows

* Viewer: corrected "zoom to fit" operation on SinglePageView



2.13     (released 2013-03-20)
-------------------------------
* Many internal changes paving the way for improvements in future releases.

* Fixed an exception when running JavaScript under Java 5

* Allow recompression of DCT encoded images by denying OutputProfie.FilterDCT

* Fixes to JavaScript run when a field is flattened

* Treat truncated tables in OpenType fonts as missing rather than failing.

* Regression fix relating to right-aligned text, broken in the last release
  and mainly reproducible in the Report Generator

* Added improved "requote" feature to PDFFont, deprecate PDFFont.requote method

* Fix for limitations in Windows relating to fractional font metrics

* Ignore embedded ColorSpaces in images that are valid but wrong order

* Accept XMP PDFs with missing template or datasets

* Added OutputProfile.PDFPortfolio, to identify PDF portfolios when loaded

* INCOMPATIBLE CHANGE: Viewer: AreaSelectionAction and TextSelectionAction
  interfaces both have a new "isEnabled" method which must be implemented.

* Viewer: Added "permissions" to the DocumentPanel, which are a superset of
  the restrictions imposed by encrypted documents. This allows us to temporily
  remove the ability to save (for example) and allows us to respect limitations
  imposed by a digital signature, a background task or anything else.
  See DocumentPanel.hasPermission and DocumentPanelEvent.permissionChanged

* Viewer: Specifying the "respectSignatureCertification" option will respect the
  limitations placed on a PDF containing a certifying signature. This is not
  the default behaviour for backwards compatibility. See DocumentPanel
  initialization parameters documentation.

* Viewer: when selecting a character in the middle of a long line of text, one
  bug could cause the drawn rectangle to be out by up to half a character, and
  another could cause the selection to be short by one character. This could
  cause problems when redacting part of a word.

* Viewer: repaint pages in SinglePageDocumentViewport after rotation

* Viewer: allow cancelling when importing or exporting an image

* Viewer: better management of long running background tasks.

* Viewer: added before and after hooks to the Exporter class, which can be
  used by custom subclasses to modify a PDF before and after save if necessary.

* Viewer: clean up the PDFViewerApplet's resources when it's destroyed.

* Viewer: fixed potential deadlock when annotations are being rebuilt while
  thumbnails are painted.

* Viewer: fixed coordinates when jumping to hyperlink that specifies all four

* Viewer: NetworkSave fires Doc/WillSave and Doc/DidSave JavaScript events

* Viewer: improvements to german translation

* Viewer: many small fixes resulting from extensive testing


2.12     (released 2012-10-24)
-------------------------------
* Text Extraction will only decode images if they're asked for, which should
  speed up extraction by a large factor for some documents.

* Text Extraction now has hooks to "recode" an incorrectly encoded font,
  although the mapping must be created manually.

* Revert change to LayoutBox from 2.11.22 relating to trailing spaces on a line.

* Improvements to color fidelity, particularly relating to shading patterns.

* Removed unnecessary restriction on setting ModDate and CreationDate in PDF -
  these are still set automatically, but it's now possible to override them.

* Some dashed lines were turned to solid when rendering - now fixed.

* Correctly render (rare) documents with uncolored Tiling pattens.

* Correctly render documents with unfeasibly large soft-masks, as sometimes
  created by InDesign 6. Previous builds would run but would fade graphics with
  a blocky appearance.

* Fixes for various incorrectly constructed PDFs and PNGs.

* Correctly resolve relative URIs in hyperlinks where the PDF has a a Base URI.

* PDF.getFullOutputProfile no longer locks entire PDF object for its duration,
  which could cause deadlocks in the viewer.
 
* Viewer: reworked the event notifications between the PDF core and the viewer,
  resulting in less synchronization and better stability. See the
  PDF.useAWTEventModel() method for detail


* Viewer: Changing or closing a PDF in a DocumentPanel may now call PDF.close().
  This will immediately free resources for the PDF (allowing the file to be
  deleted on Windows), but if anyone is still holding a link to the PDF object
  after its DocumentPanel has closed it will cause problems. This is not on
  by default but may be set with the "org.faceless.pdf2.viewer2.EarlyClose"
  property.

* Viewer: PagePanel completely refactored to better handle interruptions and
  fix a number of special case rendering errors. Note this release does not
  allow the page to be changed once set.

* Viewer: Windows L&F now has Cancel button on the right - the Windows way.

* Viewer: improvements to ThumbnailPanel. Added new ThumbnailSelectionAction
  subinterface and three implementations to delete/extract/rotate thumbnails.
  This approach makes it possible to add custom actions to the ThumbnailPanel as
  Features. Also cleaned up keyboard control, selection with right button,
  resize when a page is rotated, and better release of resources when the
  DocumentPanel is closed.

* Viewer: Text selection (via TextTool) can now work in "natural" or "display"
  order - for documents created with columns or out-of-order text, this affects
  how drag selection of text works.

* Viewer: added new "stateChanged" event, which is a generic way to inform the
  viewer that something transient has changed - eg a signature was verified.

* Viewer: undo/redo of annotations correctly updates modification & creation
  date, and the author can optionally be changed too (see
  AnnotationComponentFactory API documentation for details).

* Viewer: fixed text selection of rich text when text on a page is not strictly
  top-left to bottom-right.

* Viewer: NetworkSave will pause background tasks, fire JavaScript Doc/WillSave
  and DidSave events and clear the "dirty" flag on the DocumentPanel, exactly as
  the same as the regular Save feature.

* Viewer: correctly position page on GoToRectangle actions.

* Viewer: added NullDocumentViewport, to completely disable the DocumentViewport
  in a PDF. If this is used at all, we anticipate it's by people who want just
  the thumbnail panel visible.

* Viewer: improved German translation, moved page rotation to "edit" rather than
  "view" menu (as it changes the PDF).

* Viewer cleanup: removed some very old deprecated code; many small bug fixes



2.11.25  (released 2012-07-13)
-------------------------------
* SECURITY: Fixed potential JavaScript security issue. Customers are encouraged
  to upgrade and can contact BFO directly for more detail.

* Correctly enforce the restrictions that an annotation can only be in one page
  or belong to one field, without having to a) tidy things up before we render
  the PDF and b) throw loads of ConcurrentModificationExceptions.

* Added support for barcode fields with the new FormBarCode class

* Added support for 16-bit PNG images

* Added support for optional supplemental codes to EAN-8 / EAN-13 BarCodes

* Added ability to create binary DataMatrix and PDF417 BarCodes

* Fix hang when converting a single image to JBIG2 (multiple images are OK)

* Added "kerning" feature to fonts, to optionally turn off kerning

* Added ability to use embedded fonts in rich text annotations

* Fixed extraction of uLaw and aLaw encoded audio streams from PDFSound

* Fixed rare issue when merging fonts that could cause spaces to disappear

* Fixed occasional issue in FormChoice.setValue when field is a Combo Box

* Fixed issue in LayoutBox which could cause the last letter of a line to be
  repeated, with very specific input

* Tweaked position of bullets in radio buttons

* Correct algorithm for inter-line spacing in TrueType fonts can now be used
  by setting the "correctleading" feature in the font. Not on by default for
  compatibility.

* Added "ContentIsDamaged" feature to OutputProfile, to better identify some
  badly damaged PDFs

* Fix for exception decoding some valid-but-odd DCT encoded images

* Viewer: added SelectArea tool and associated AreaSelectionAction, and changed
  TextSelectAction from abstract class to interface to match. Also added
  CropPage feature as an AreaSelectionAction.

* Viewer: rewrote MultiPageDocumentViewport for efficiency, particularly when
  scrolling rapidly with mousewheel. Added smooth scrolling where possible.

* Viewer: added ability to capture handwritten signatures using an iPad, iPhone
  or Android device via the new SignatureCapture feature (not on by default)

* Viewer: removed double-buffer related deadlock in TextTool when rapidly
  changing text selections

* Viewer: implemented Doc.getNthFieldName and Doc.exportAsXFDFStr in JavaScript

* Viewer: optimizations to default SecurityManager for across-the-board speedup

* Viewer: slightly more compact when using Nimbus theme, and fixed for Java 7

* Viewer: added option to prompt before overwrite to Save feature

* Viewer: added support for barcode fields

* Viewer: improvements to error dialogs



2.11.24  (released 2012-05-30)
-------------------------------
* Added support for Type 1, 4 and 5 shading patterns, fixes for type 6 and 7,
  and corrected gradient rotation.

* Fixed exception when signing a PDF with an invisible signature, broken in
  previous release.

* Fixed occasional stretching of fonts after merge in MergeResources

* Reverted slight change to text layout algorithm in 2.11.22 so two are now
  identical

* Fix for rendering duotone indexed images with soft masks

* Fix for removal of LZW compression

* Added "ImageLengthIncorrect" OutputProfile feature, to catch truncated images

* Fixed mapping of unofficial-yet-acceptable codes for bullet char in
  WinAnsiEncoding, which could cause bullets to go missing when rasterizing PDF

* Viewer: selected text will stay selected if text selection tool is inactive.

* Viewer: About feature can be configured with custom logo/text properties

* Viewer: Fixed ClosedByInterruptException in ThumbnailPanel with no multiple
  DocumentPanels



2.11.23  (released 2012-04-30)
-------------------------------
* Added reading/writing PDFs with AES-256 Encryption as used by Acrobat X.

* Corrected version numbers when reading/writing PDFs with ISO 32000 extensions.

* Fixed exceptions when rendering documents containing progressive JPEG images,
  broken in previous release.

* Reduced memory footprint when moving pages from one PDF to another.

* Fixed crash and/or incorrect glyph widths in resulting document when merging
  certain types of font with the MergeResources feature.

* Reduced memory footprint when profiling or extracting text from documents
  with large bitmap images.

* Fixed issue with OpenType layout engine that would prevent features being set
  on digits.

* Fixed a minor deviation from spec for StandardFont class.



2.11.22  (released 2012-04-19)
-------------------------------
* Added OpenType layout engine - slower than the default one so it's disabled
  by default, but it can be enabled to support Indic languages such as Hindi,
  Bengali etc, or to use special features of the font like swash capitals.

* Replaced ImageIO-based JPEG and JPEG2000 decode with new implementation,
  drastically reducing memory footprint when displaying PDFs containing very
  large JPEG images and allowing reading to be interrupted, for example by
  scrolling the page containing the image out of view in the viewer.
  
* PostScript functions are an order-of-magnitude faster - this will mainly
  help those rasterizing PDFs containing DeviceN colors.

* Added PDFImage.quantize() method, to convert CMYK or RGB images to indexed.

* Changes to position/size of text in text and choice fields to closer match
  Acrobat.

* Added methods to get the open/closed rectangles of an AnnotationNote without
  having to change its state.

* Fixed some PDF/A verification failures on valid documents.

* Fixed "early-break" issue when laying out text, which could cause a line to
  break into two lines a word early.
  
* Fixed bug when justifying text on the line - wasn't correctly aligning to the
  right edge of the line.

* Fixed rasterizing of PDFs containing exceptionally large XObjects or Tiling
  Patterns - was previously giving incorrect results or OutOfMemoryError.

* Don't break usage rights when original PDF has weird default form styles.

* Fixed setJavaScript, which wasn't correctly clearing previous JavaScript.

* Fixed rendering of Type3 fonts with Identity FontMatrix.

* Fixed extraction of font names and details into OutputProfile.

* Added WidgetAnnotation.isOverflowing(), to give a rough idea of when too much
  text has been placed into a text field.

* Don't fail when Apache Batik's patched version of Mozilla Rhino is installed.

* Fixed long-standing issue relating to explicit Bidi directional override
  characters, which were not working correctly.

* Fixed occasional disappearing images in Windows 16-bit color environments.

* Fixes for rendering some PDF edge-cases - symbolic OpenType fonts, 16-bit
  indexed JPEG2000 images, Lab/YCbCr JPEG2000 images.

* Added PDF.isLicensed() to identify whether a valid license is available.

* Viewer: Added "setFile" method to Importer, to set the default filename for a
  loaded PDF, and integrated support for this into the PDFViewerApplet.

* Viewer: fixed support for JCEKS format keystores containing SecretKey objects.

* Viewer: correctly redraw when JS deletes the currently displayed page.

* Viewer: better interrupting when scrolling rapidly through image-heavy pages
  (particularly through changes to JPEG decoding, mentioned above).



2.11.21  (released 2012-02-09)
-------------------------------
* Fixed regression introduced in previous release where some documents with
  compressed XRef streams would fail to open in Acrobat.

* Fixed regression introduced in previous release where adding JPEG images to
  a PDF could result in them being uncompressed.

* Fixed regression from 2.11.19 where merging multiple copies of the same PDF
  could result in larger files than necessary, or with errors if PDF was
  encrypted.

* Improvements to the "MergeResources" step for PDF/A and PDF/X documents, will
  now merge compatible but different subsets of same OpenType font.

* XFA forms containing picture clauses for field formatting are now supported.

* Signing documents with PKCS#7 Signatures no longer requires a "dummy sign"
  first to establish the size of the object.

* Stamp annotations added to rotated pages by our API were displayed in the
  wrong place by our viewer, despite being correct. Now fixed.

* Improvements to memory usage when rendering PDF to bitmap image on Windows
  with 16-bit display.

* Fixed positioning of tiling patterns when rendering under the most complex
  circumstances.

* Can flatten Highlight annotations with missing appearances.

* Subtle fix to Type 1 fonts when rendering now gives better text rendering.

* Workaround for several bugs in Crimson XML parser, as supplied with Java 1.4.

* PostScript functions are now thread safe - was only manifesting itself when
  rendering pages containing images in PostScript-based SpotColorSpaces (rare).

* Invisibly signing a PDF/A document doesn't break PDF/A compliance.

* Fixed errors relating to: truncated IndexColor maps, truncated kerning tables
  in OpenType fonts, missing CMaps in Type1 fonts, three-cornered rectangles,
  fonts with (some) missing glyph contours, OpenType fonts claiming to be
  CompactFonts, rare inverted CMYK and skewed images when displaying PDF,
  decoding of indexed JPEG2000 images and rendering of forms with noninvertible
  transforms.

* It's now possible to prevent the use of "fi" and "fl" ligatures in Latin
  fonts by calling PDFFont.setFeature("latinligature", false) or by setting
  the System property "org.faceless.pdf2.NoLatinLigatures", to control for
  all fonts.

* Fixed incomplete list of fonts returned from OutputProfile.getFonts()

* Viewer: Improvements to interrupt handling mean that rapid scrolling through
  an image-heavy document is more responsive and less of a memory hog.

* Viewer: certain types of PageLabel could cause the viewer to display the
  wrong pagenumber (eg 11 for 1, 22, for 2). Fixed.

* Viewer: fixed ability to disable flatten/edit/delete functionality for some
  or all annotations.

* Viewer: creating a very large pattern on a very small zoom level could cause
  an integer overflow, leading to an exception trying to create a huge bitmap.

* Viewer: added JCEKS KeyStore support.

* Viewer: added EGIZSignature support to signature panel, and format signature
  dates in locale-sensitive way.



2.11.20  (released 2011-12-06)
-------------------------------
* "bfopdf.jar" jar is now compiled for Java 5.0 or later; customers running
  Java 1.4 now need to use the "bfopdf-14.jar" instead, which is a backported
  version of the main jar. Changed to allow us to benefit from the improvements
  to Java, while still continuing to support our customers using Java 1.4.

* Fixes to setOutputProfile, which was sometimes not failing when it should
  have. This could result in profiles being applied incorrectly, so documents
  that should have failed when being converted to PDF/A were succeeding.

* Updated Lucene to support 3.4

* Added Code-93 barcodes

* Bug fixes to ensure moving annotation around between pages does the right
  thing every time, and don't clear annotation unique ID when we clone a PDF

* Fixes to compression of zero-length AES streams, and when modifying digitally
  signed, encrypted PDFs

* Fixes for TrueType fonts with FPGM, and Type1 fonts missing required fields

* Fixed removal of Movie/Sound annotations when denied in an OutputProfile

* Fixed long-standing bug where some dates from a read-in PDF may have been out
  by a few hours, due to incorrect timezone handling.

* Allow user-configurable fallback fonts when rendering Chinese/Japanese/Korean

* Viewer: don't OutOfMemory if drawing scaled down huge patterns

* Viewer: fixed reversed test which could result in pages not redrawing properly
  when the zoom changes in SinglePageDocumentViewport.

* Viewer: Don't lose rendering hints (eg anti-aliasing) when changing Viewports

* Viewer: added Feature.setFeatureName, to make subclasses our standard features
  easier.

* Viewer: fixed NPE in PageNumber.



2.11.19  (released 2011-10-25)
-------------------------------
* Verified API against Java 7 and fixed some Java 1.4 compatibility issues

* JBIG2 classes from JPedal are now included and have been optimized. There's
  no longer any need to use "jbig2dec" or include the "jbig2.jar" in your
  classpath.

* Speed improvements for text extraction and PDF creation

* Improvements to XFDF reading and writing - properly handles more unusual
  annotation types. Also added JavaScript import from FDF - for FDF files
  containing JavaScript THIS MAY CAUSE JAVASCRIPT TO EXECUTE AT THE POINT
  OF IMPORT. This is configurable, see the FDF class API docs for more info.

* Rendering bitmap images with a Blend Mode is now working

* Added PropertyChangeEvent support to PDFPage and PDF classes

* Added PageExtractor.getStyledText method, to extract an AttributedString.
  Styling information is limited to font, size and color.

* Now any annotation can be flattened (with PDFAnnotation.flatten()), not just
  form fields

* Added getPageLabel/setPageLabel to PDF, and integrated labels into the Viewer

* Viewer Applet: Can set look and feel with "swing.defaultlaf" parameter

* Viewer: Documents can now be flagged as "dirty", meaning they need to be
  saved before closing. This optional feature is on by default, but to close
  dirty documents without a prompt, set the viewer property
  "unpromptedDirtyClose" to "true".

* Viewer: Fixes for Nimbus L&F and improved layout for some of the dialogs

* Viewer: NetworkSave and form submission can be usefully cancelled, and
  NetworkSave feature has optional "fieldname" parameter, to send PDF to network
  in the same way as an HTML Form upload

* Viewer: The viewer property "currentUser" can be used to set the user name for
  any annotations

* Viewer: Added ability to set document actions WillSave, DidSave, WillPrint,
  DidPrint and WillClose (implemented JavaScript methods Doc.setAction and
  Doc.setPageAction)

* Viewer: Can right-click to flatten annotations, as well as edit or delete

* Viewer: text copies to the clipboard will copy as rich-text as well as plain

* Viewer: Fixed drag selection over multiple pages

* Viewer: Improvements to AnnotationFactories, to make them look more
  consistent and adjust their size to their content. AnnotationStampFactory
  has been rewritten and can better be extended for custom stamps.

* Viewer: Fixed import of FDF (implemented Doc.importAnFDF and Doc.importAnXFDF)

* Viewer: better synchronization should remove occasional exceptions when
  moving/deleting annotations while the thumbnail panel is rendering them



2.11.18  (released 2011-08-24)
-------------------------------
* When reading/writing a PDF using AES encryption, document restrictions (eg
  printing, text extraction) weren't maintained properly. Now fixed.

* Fixed Classloader issue when executing JavaScript in PDFs under Apache Tomcat

* Added PDFPage.setThumbnail (although feature is unused in modern PDF Viewers)

* Improved stretching of glyphs when rendering substituted fonts with different
  metrics to the original.

* Added basic hooks for use of Elliptic Curve cryptography in signatures.

* Fixed reversed test on FormCheckbox.isSelected

* Fixed reversal of red/blue when printing certain types of RGB images

* Fixes to results returned by getFullOutputProfile() on versioned PDFs

* Fix to issues when moving annotations between form fields.

* Fixed interaction between FormText.setNumberOfCombs and FormText.setMaxLength

* Fixed specific issue identifying form fields where "FT" property is inherited,
  and where checkbox Opt array is invalid

* Fixed encoding issue for certain Type 1 fonts, eg "Palatino Light"

* Fixed embedding of XMP metadata loaded from JPEG images.

* Viewer: Implemented JavaScript function Doc.submitForm, and rewrote
  FormSubmitActionHandler to enable this. Also added a much easier way to
  execute custom JavaScript in the viewer

* Viewer: Added PDFViewer.close() method, to ensure clean shutdown of the viewer
  components.

* Viewer: if a new signature is cancelled before signing, remove it.

* Viewer: default to system default printer in print dialog

* Viewer: fixed JavaScript formatting of zip/phone numbers, and fixed call to
  blur event which was missed when focus was lost via tab key.



2.11.17  (released 2011-06-27)
-------------------------------
* Updated bfopdf-cmap.jar - if you see ObjectInputStreamException when working
  with documents containing Chinese/Japanese/Korean text then make sure you have
  installed the latest version of this Jar.

* Fixed a confusion regarding FNC1 characters in barcodes: previously we allowed
  "\n" to mean FNC1 in Code128 barcodes, but "\n" is actually a valid character
  so this was broken some time ago. FNC1 is now specified with U+EFC1 character
  (defined as BarCode.FNC1), and this may be used in DataMatrix codes as well.

* Fixed threading issue when cloning a PDF containing XMP form using new PDF(PDF)

* Fixed issue where subsetting CFF font could prevent page containing font from
  being printed by Acrobat.

* Fixed SecurityException caused by editing form fields which fire JavaScript
  events in an environment where a SecurityManager is installed.

* Added workaround for Sun Bug 7007299 which could cause NullPointerException
  when multiple threads are rendering unrelated PDFs with unembedded fonts.

* PDFParser.setFont() will take an OpenTypeFont as well as a Font class, to
  avoid use of system fonts completely in case workaround (above) doesn't do it

* Fixed NullPointerException from specific PDF with XFA form

* More fixes to DataMatrix barcodes. We now have a test-suite just for these...

* Fixed divide-by-zero in ColorBurn composite

* Fixed misread of number of pages in certain (invalid) PDF documents. 

* Don't mark a document as Linearized when it's loaded if linearization has
  been broken.

* Now PDFParser.getBlackAndWhiteColorModel(0) can be used to auto-determine
  an appropriate threshold.

* Added ability to create "cloudy" AnnotationShape objects, via new
  PDFStyle.setFormStyle(FORMSTYLE_CLOUDY1) and FORMSTYLE_CLOUDY2 constants.

* Improved reporting of warnings related to XMP formatting errors

* Fixed exception with rendering when blendmode and softmask were both active

* Viewer: Added the "NetworkSave" feature, to save a PDF back to an HTTP URL

* Viewer: fixed buggy creation of new digital identities in KeyStoreManager

* Viewer: basic support for RTL locales.



2.11.16  (released 2011-04-18)
-------------------------------
* Fixed issue where certifying a PDF sometimes only applied a regular signature

* Tweaked rules for CMYK PDF/A documents relating to link annotations.

* Exhaustive barcode testing fixed bugs in PDF417, MaxiCode, Codabar, Aztec
  and Datamatrix BarCode output

* Fixed regression bug where valid signatures were sometimes failing to verify
  (introduced in 2.11.14)

* Viewer: fixed issue where at high zoom levels, parts of a large (full page)
  image sometimes wouldn't display.

* Removed Java 1.3 compatibility - Java 1.4 or greater is now required to use
  the PDF Library.

* A new BFO signing key is used to sign the Jar



2.11.15  (released 2011-03-28)
-------------------------------
* Viewer: PKCS#11 KeyStore added in previous release is not available in
  64-bit Windows JVM, which would cause a ClassNotFoundException when using
  the viewer

* Fixed bug when rendering PDFs containing a TextRise on unembedded fonts,
  which would cause text to be positioned incorrectly

* Viewer: modified Viewports to better implement drag scrolling.

* Viewer: prevent OutOfMemory with high zoom levels on pages containing very
  large annotations.



2.11.14  (released 2011-03-09)
-------------------------------
* Added support for (hardware-based) PKCS#11 based KeyStores when signing.

* Added AnnotationRichMedia class, to embed Flash into a PDF

* Added "Aztec Code" Barcode

* Fixed validation of signatures with SHA256/284/512 digests and when PDF is
  encrypted (broken a couple of releases ago)

* Replaced BouncyCastle code with considerably smaller home-grown ASN.1 parser

* Added methods to FormSignature to restrict the users options when signing
  a blank signature created with this class (see setRequiredNNN methods).

* Updated QR-Code character set to ISO-8859-1 (new for version 2 of the spec),
  fixed DataMatrix encoding rules and fixed issue with specific type of Code128

* Tweaked some low-level data structures for speed/memory improvements.

* Fixed a few bugs relating to cloning form fields, either by calling
  FormElement.duplicate() or by duplicating a page containing them. Also fixes
  for radio buttons and checkboxes with duplicate values.

* Fixed a bug when subsetting of OpenType fonts when the Form is flattened -
  subset wasn't always happening.

* Fixed native code memory leak when decoding JPEG images. Note this leak only
  occurs when decoding thousands of DCT compressed images on one PDF page -
  an unusual situation. In 99.9% of cases the memory is properly recovered on
  the next minor garbage collection.

* Fixed text extraction for a few (unusual) documents, broken in 2.11.11
 
* Fixed error when linearizing documents previously created with Object
  Compression - results were not necessarily linearized correctly.

* Corrected end-of-line whitespace trimming for text in Arabic or Hebrew locales

* Correctly extract embedded files created by FoxIt.

* Fix to XFA parsing for certain (unusual) documents.

* Renamed and corrected spell-check methods on FormText, which were the wrong
  way around.

* Spec says PDFs must have < 1kb of trailing garbage, but as Acrobat accepts
  documents with more, now so do we.

* Viewer: Can now drag-select text over multiple pages.

* Viewer: Fixed behaviour of RadioButtons and Checkboxes for more obscure
  combinations of flags, and when data values contain duplicates.

* Viewer: Fixed positioning of page when a "Go To Rectangle" action is performed

* Viewer: Fixed status of "zoom to fit" buttons when zoom is changed manually.

* Viewer: Remove NPE when TextHighlighter is given a list of words before
  extraction has finished

* Viewer: Fixed text extraction/selection after page is rotated and when zoom
  is changed.

* Viewer: Position of "OK/Cancel" buttons is consistant across all dialogs

* Viewer: One-touch expand button on split-pane divider now always work

* Viewer: Fixed rendering of images on Solaris



2.11.13  (released 2010-12-23)
-------------------------------
* Redaction now removes all references to images that are completely redacted

* Add support for vertical chinese/japanese CMaps

* Fixed StackOverflowError when loading PDF with 250,000+ bookmarks

* Added "bfo.printasimage" PDF option, to work around bugs in Apple/Java 1.5
  and possibly other setups.

* Fixed mixing of fill, text and border colors in Link annotations

* Fixed positioning of annotations using beginTextLink

* Added ability to remove Document Structure tags via an OutputProfile

* Viewer: Added properties to control size of thumbnail images, width of
  SidePanel and initial page mode.

* Viewer: Fixed obscure race condition in thumbnail panel which sometimes
  resulted in higher CPU usage immediately after load.

* Viewer: Added swipe and rotate gestures on OS X

* Updated Producer field to use to bfo.com



2.11.12  (released 2010-11-11)
-------------------------------
* Bug fixes and improvements to MaxiCode barcode generation, and improvements
  to Code128 barcodes to use the most efficient representation.

* Improvements and extensions to the SignatureHandler API enable customized
  signature handlers to be better implemented.

* Fixes to FDF: export includes annotation appearances, and import imports all
  annotations correctly.

* Tweaked document structure when creating documents with translucent RGB colors
  so Acrobat won't (incorrectly) convert them to CMYK before displaying.

* Added fixes for: pages containing corrupt inline JPEG images; ObjectStreams
  with garbage mid-stream; Type 1 fonts that modify "internaldict"; PMingLiu
  font that was causing trouble

* Fixed rendering of pages containing 1-bit images to 1-bit Rasters, and "x or w
  not on byte boundary" errors, both broken in 2.11.10.

* Fix for broken rendering of images when on Windows with 16-bit Color,
  introduced in 2.11.10

* Fixes for change to font selection for Sun Java on Ubuntu Linux made in
  1.6.0_18, which required non-standard "DejaVu" font to be installed. We now
  check for this and fall back to standard Java "Lucida" if it's not installed.

* Added PageExtractor methods required for the Adobe Highlight File Format
  (http://partners.adobe.com/public/developer/en/pdf/HighlightFileFormat.pdf)

* Added options to PageExtractor to ignore "artifacts" when extracting.

* Don't set language tag in XMP, as it breaks PDF/A validation in Acrobat 9

* Added PDFStyle.setTextDoubleUnderline() method

* Fixed creation of AnnotationLink with visual appearance.

* Viewer: fixed some Swing Component manipulation that was not done in the EDT.

* Viewer: fixed position of Free Text annotations with callouts on rotated pages

* Viewer: fixed memory leak when documents were being opened and closed after
  text extraction had been run.

* Viewer: added new DocumentPanelEvents "pageChanged" and "pagePositionChanged",
  for more accurate notifications of scroll and pagenumber changes. Fixed
  pagenumber sometimes failing to update correctly in MultiPageDocumentViewport.
  Anyone implementing their own DocumentViewport subclass will probably need to
  update their class to reflect these changes.

* Viewer JavaScript: added Doc.zoom, Doc.scroll, Field.borderStyle, App.openDoc,
  App.execMenuItem, App.runtimeHighlight and App.runtimeHighlightColor,
  Doc.print

* Viewer: correctly save KeyStore when a Certificate has been imported



2.11.11  (released 2010-06-02)
-------------------------------
* Fixed error introduced in previous release which resulted in text extraction
  on pages after the first failing to work correctly when performed in the
  viewer.

* Fixed bug causing failure to parse JBIG2 images at certain zoom levels

* Improvements to font substitution for Chinese/Japanese/Korean when rasterizing

* Fixed orientation of rotated annotations fields being added to rotated pages
  during FDF import

* Fixes for some OpenType fonts containing glyphs > U+10000 

* Viewer: added italian translation



2.11.10  (released 2010-05-14)
-------------------------------
* Major rewrite of the rendering engine should give much better results when
  rasterizing PDF to bitmap images, particularly when dealing with PDFs
  containing bitmap images. Memory use is down and speed is up.

* Added OpenTypeFont(OpenTypeFont) constructor, to quickly create a clean
  copy of an OpenTypeFont without having to reload it from source.

* Fixed issues where rasterizing a PDF to a bitmap could leave a dark line
  to the right or bottom of the bitmap.

* Added workaround for Bug 6775390, which was causing RasterFormatException
  when rasterizing some types of PDF

* Corrections to Type 1 Font parser that was giving incorrect results for
  some accents on characters

* Fixed issues when Linearizing PDF - since 2.11.8 the Linearization tables
  weren't being positioned correctly, which means although the first page was
  loading quickly, navigation to subsequent pages was slower than necessary.

* Corrected cropping of text in PageExtractor.cropText() method

* Fixed issues when signing/verifying/linearizing > 2GB PDF files

* Fixed bug preventing editing forms containing characters > U+10000

* Corrected rasterizing ImaskMasks on Patterns

* Correctly render PDFs that define DefaultRGB/CMYK/Gray ColorSpaces, and
  approximation of ColorSpaces is now much more accurate.

* Much faster rendering of PDFs containing CMYK images.

* Corrected positioning of text in AnnotationText objects with thick borders

* Work around Acrobat bug where specifying "QuadPoints" on an annotation can
  render it uneditable

* Improvements to XFA processing - although editing XFA-based documents is
  still limited to completing form fields, this should now work for all static
  XFA 3.1 or earlier forms.

* Fixed incorrect reporting of errors when loading large (>40MB) Linearized PDF

* Fixed PDFCanvas.setWatermarkOrBackground() method

* Fixed loading of PDF/E documents

* Fixed failure to load some very large objects from an ObjStm

* Correct function parsing for some types of function, which sometimes resulted
  in incorrect Color reproduction for Spot/DeviceN colors

* JavaScript: Added support for arguments to Doc.saveAs to select file format

* Improvements to heuristics used when text extraction doesn't specify encoding.

* Viewer: Fixed exception when dragging Callout box over its line, and clip
  correctly when a box contains too much text.

* Viewer: Fixed rare thread deadlock under certain circumstances, introduced in
  last release.



2.11.9   (released 2010-02-26)
-------------------------------
* Added beginTag/endTag methods to PDFPage, PDFCanvas and LayoutBox, to add
  structured tags to a PDF.

* Optimization to SecurityManager used to limit JavaScript should speed up
  operations that make repeated calls to SecurityManager.checkPermission()

* Corrected the algorithms for HardLight, SoftLight and Exclusion blends

* Added support for rendering with Soft Mask (SMask key in ExtGState dicts)

* Added preliminary support for rendering Type 6 and Type 7 shading patterns

* Improvements to the PDFSound class, which now handles any format supported
  by the javax.sound package.

* New font renderer fixes problems rendering some old-style Type 1 fonts

* Added OutputProfile.FontInfo class, to retrieve information about the fonts
  used in a PDF.

* Fixed failure to load PDFs containing an invalid Trapped key

* Fixed API so library once again runs on Java 1.4

* Fixed incorrect color change when drawing underlined and struck-out text

* Correctly load PDFs where the trailer dictionary is a stream instead.

* Added mouseX, mouseY, pageNum and numFields to JavaScript Doc and "rect", to
  Field

* StandardFont objects now allocate faster and have reduced memory footprint

* Handle invalid fonts where ToUnicode is specified as a name

* Workaround what we think are invalid CFF fonts where FontMatrix is identity

* Workaround for some XFA forms that were failing to parse properly

* Fix for OpenType fonts where the loca table is unordered

* Viewer: Fixed dragging selection of text on Windows

* Viewer: Fixed selector for dotted lines when creating Line annotations

* Viewer: log Exceptions to the standard logger, in the same was as the PDF API

* Viewer: Fixed a leak due to a race when scrolling pages containing many
  annotations



2.11.8   (released 2009-11-11)
-------------------------------
* Added the ability to Redact documents with the new Redactor class. Text can
  also be selected and redacted using the Viewer.

* Added the ability to set "Callouts" on AnnotationText objects.

* Added a new PDFImage constructor, PDFImage(Image, String), to control how
  PDF images created from AWT Images are compressed. This allows images to be
  saved to the PDF using JPEG or JPEG-2000 compression. No longer convert
  all images constructed this way to RGB.

* Fixes to color calibration. RGB colors create with the java.awt.Color class in
  the normal way have their correct colorspace used in PDF. This may result in
  slightly brighter colors when displaying a PDF created with BFO in Acrobat,
  but the results are now correct and platform independent. The old behaviour
  can be used instead by setting the System property
  "org.faceless.pdf2.NoDefaultRGB" to not null. Similar changes have been added
  to the CMYK ColorSpace to use a more typical conversion to RGB, and the API
  docs for that class show how to use a standard SWOP space or others to obtain
  different results.

* Rasterizing pages containing bitmap images has been parallelized, for speed
  improvements on multi-core machines.

* Fixed writing Linearized Encrypted documents.

* Changes to allow working with PDF files > 2GB in size.

* Fixed AnnotationShape for Ink annotations (the Pencil tool in Acrobat).

* Added BarCode.getBufferedImage() method, to render BarCodes to bitmap images.

* Added PageExtractor.cropText() method, to crop selected text to a rectangle.

* Fixes to parsing of PNGs containing (cHRM && !gAMA) || (cHRM && iCCP) chunks,
  and added code to override the ColorSpace of a PDFImage - necessary when the
  original image has an incorrect space embedded.

* Added support for Blend modes to AnnotationStamp class, with setBlendMode().

* Bookmark parsing is more lenient with damaged documents.

* Fixed text extraction to correctly take kerning into account when determining
  spacing.

* Fixed rare ConcurrentModificationException when rendering.

* Minor tweak to PDF/A: output documents are always PDF-1.4 (although PDF-1.3
  header is valid, it was causing issues with some 3rd party software).

* Fixed parsing of CFF fonts with different Font DICTs for ranges of CIDs.

* Fixed glyph sizing for fonts where all glyphs use DW then modified by kerning.

* Fixed parsing of CMYK JPEG-2000 image objected embedded in the PDF.

* Fixed "Function must be a Dictionary or Stream" when rendering some gradients.

* Added workaround for AWT failure to respect "FontMatrix" in Type1 fonts.

* Don't stretch font to match it's width for non-substituted fonts.

* PublicKeyEncryptioHandler throws an exception if the wrong password was
  specified for the private key.

* Bugfixes to Java 1.6 JavaScript engine, and implemented a few more methods.

* Viewer handles the changing of the Field.readonly property from JavaScript.

* Viewer: fixed race condition which sometimes resulted in form fields not
  being visually updated.



2.11.7   (released 2009-09-02)
-------------------------------
* Added AnnotationShape and associated editors in the Viewer, to create and
  manipulate lines, arrows, polylines, ellipses and rectangles using the
  java.awt.geom package.

* Improvements to the way AnnotationLink and AnnotationMarkup work on rotated
  pages. This now works when creating or moving annotations on all types of
  rotated pages. Improved set/getCorners and set/getRectangle interaction.
  Correctly position all forms of rotated annotation on all variations of
  rotated page in the Viewer and when rendering.

* Added ability to arbitrarily rotate AnnotationStamp objects.

* Added the AnnotationSound class, to manage sound annotations as created by
  Acrobat. Note this is the "Acrobat 5 and earlier" approach as described in
  Acrobat 9.

* Added PDFStyle.setBlendMode() method, which can be used to modify the blend
  mode of PDF content or some annotations that use blend modes (shapes & text).

* Added PDFCanvas.drawShape(java.awt.geom.Shape), related clip/path methods
  and PDFCanvas.transform(java.awt.geom.AffineTransform).

* Fixed non-JavaScript date formatting when the date format contains commas.

* Fixed, again, a small memory leak first fixed in 2.3.5 that reappeared.

* Catch particular type of corruption when loading PDF Tokens from stream.

* Add optimization for daft approach occasionally used by GhostScript when
  rendering lines. See OutputProfile.SinglePixelImage.

* Added PageExtractor.Text.getBaseline()

* Improvements to text extraction algorithm should result in less words being
  run together, and to prevent any concurrency issues if extraction is started
  from multiple threads simultaneously.

* Text extractor no longer joins together adjacent words with different colors.
  What is "different" can be set by the "org.faceless.pdf2.TextColorDistance"
  System property, which may vary from 0 to about 170 (which would treat all
  colors as identical, the behaviour prior to 2.11.6).

* Fix case where imagemask size != image size and image is not RGB.

* Prevent out-of-gamut results caused by unwanted switch to RGB when rendering
  CMYK PDFs containing complex blends.

* Added workaround for unidentified bug in AWT with non-standard Composites.

* Added support for the JBIG decoding using the BSD-licensed JBIG2 decoder from
  http://www.jpedal.org/support_JBIG.php and improvements to the garbage
  collection of temporary files when using the "jbig2dec" native JBIG2 decoder.

* PDFs containing annotations without matching fields are repaired by adding
  those fields rather than remove the annotations, matching Acrobat's behaviour.

* Added support for javax.sound.sampled.AudioInputStream to PDFSound objects.

* Fixes to the WidgetAnnotation.get/setAction method to correctly handle the
  two ways Acrobat may do this.

* Numerous improvements to FDF and XFDF exporting - exporting of annotations
  now properly supported.

* Fixed linearization where bookmarks should be displayed but are missing.

* Improvements to text sizing algorithm for auto-sized text in text fields.

* Removed dependency on log4j 1.2.15 causing a NoSuchMethodError - now earlier
  versions can be used as well.

* Viewer: Made consistant the approach to initializing viewer features via the
  "initialization parameter" concept. Many features can now be configured at
  runtime - for instance Thumbnails can be made read-only, initial view of the
  viewer can be set and more. See the API docs for each feature and also
  http://bfo.com/products/pdf/docs/api/org/faceless/pdf2/viewer2/doc-files/initparams.html

* Viewer: Text selection has been rewritten and is vastly improved. Selection
  now works across the entire document, which means a selection is not garbage
  collected if a page has been scrolled away. Text can be selected by mouse
  as before, or now also programmatically via a regular expression.

* Viewer: Actions may be performed on selected text via the TextSelectionAction
  class, by right-clicking on selected text. Actions are supplied to create
  markup annotations of various types.

* Viewer: Signatures can be verified when a PDF is loaded or programatically, 
  with the new BackgroundSignatureVerifier feature.

* Viewer: Text extraction of a PDF may be started in the background via the new
  BackgroundTextExtractor feature.

* Viewer: long running tasks like thumbnail painting are now paused while the
  PDF is being saved, to avoid concurrency issues.

* Viewer: Lines and Arrow annotations can be drawn intuitively onto the PDF via
  the new AnnotatonAddLine feature.

* Viewer: Fixed deadlock when JavaScript was updating a field that had just
  been edited.

* Viewer: Side panels (thumbnails, signatures, search results) are optinally
  displayed as icons now thanks to the new SidePanel.getIcon() method.

* Viewer: Thumbnail panel now scrolls to follow the current page, as Acrobat.
  This can be controlled programatically.

* Viewer: All appropriate annotations can be deleted as well as edited by right
  clicking on them. Editing annotations requires a double click, not a single.

* Viewer: Further corrections to fix component focus, started in 2.11.6

* Viewer: Sounds embedded in the PDF are now played.

* Viewer: Add default-disabled Features, see ViewerFeature.isEnabledByDefault().

* Viewer: Timeout for form submissions can be controlled.



2.11.6   (released 2009-07-06)
-------------------------------
* All BFO warning (and debug, if enabled)  messages are now logged using
  log4j if available, or java.util.logging.* if not.

* Large synchronization audit fixed some issues when reading from one PDF
  in multiple threads, particularly when using the viewer.

* Fixed problem that could result in corruption when repeatedly saving a
  PDF containing compressed XRef tables and multiple revisions.

* Modified AnnotationStamp so Acrobat correctly handles custom stamps,
  and added some new types of standard stamp.

* Added FDF.getXFDF() method, for exporting XFDF from a PDF, and added support
  for this to the Viewer. Fixed FDF export, broken some releases ago.

* More PDF/A related fixes, and added a number of new OutputProfile.Features.

* Fixed RichText content in text fields

* Added subsetting for CFF fonts

* Fixed error with some Windows JDKs when rasterizing JPEG images

* Fixed unusual cases of Linear & Radial shading, added preliminary support for
  Coons & Tensor-Product Patch shading (Type 6 & 7).

* Fixed blending, broken in previous release and resulting in opaque highlight
  annotations.

* Correctly handle masked images where the mask and image are different sizes,
  as created by Luratech products.

* Added PageExtractor.Image.getUniqueId(), to identify extracted images.

* Added PageExtractor.Image.getMetaData() and Text.getFontMetaData(), to
  return any embedded XMP MetaData for those items in the PDF.

* Fixed long-standing bug in CCITT.G3 2D encoding - now rarely seen in very
  old TIFF images.

* Further fixes to handle some types of corrupt PDF

* Viewer: Page Up/Page Down/Home and End keys navigate correctly through the
  PDF via the Viewport ActionMap. Standard ScrollBar keybindings are overridden,
  previous KeyListener approach didn't work reliably and was removed.

* Viewer: Fixed missing glyphs in some fonts after a search was run.

* Viewer: PDFTool (the class run by "java -jar bfopdf.jar") has more options.

* Viewer: Stamps no longer slowly grow when clicked on due to rounding error

* Viewer: Calling DocumentPanel.redraw(page) will work as expected.

* Viewer: Don't allow JavaScript to be run on the console if no PDF is loaded

* Viewer: Fixed page jump when zoom level is changed in Column view

* Viewer: Dont fail under 1.6 when saving PDFs to filenames containing an
  invalid regex backreference.

* Viewer: Improved display under OS X, including addition of a Dock Icon.

* Viewer: Added keyboard shortcuts to "Open Recent" menu.

* Viewer: Thumbnail panel now scrolls to follow the current page, and renders
  more reliably.



2.11.5   (released 2009-05-13)
-------------------------------
* Our Jar Signing Key has been renewed, which means those running the Jar as an
  applet will probably need to reauthorize the Jar.

* A large number of PDF/X and PDF/A related fixes. The PDF Library now
  correctly handles all PDF/A-1b test cases from the Isartor Test Suite
  (http://www.pdfa.org).

* Improved heuristics used when extracting text in symbolic TrueType fonts,
  and fixed sometimes broken extraction of text in Type 3 fonts.

* Fixed an issue where editing a rights-enabled PDF containing an ICC
  ColorSpace could invalidate those rights.

* Fixed AccessControlExceptions when trying to run certain operations on forms
  from JavaScript

* Parallelize PDF.getFullOutputStream() for performance on multi-core hosts.

* Added support for Blend Modes, used for advanced transparency

* Fixed PostScript "--invalidaccess--" reading some Type1 fonts on IBM JVMs

* Fixed "Invalid Hex Character" issue when reading truncated ASCIIHex streams

* Correctly create a PDFCanvas from rotated, cropped PDFPages.

* Better handling of non-standard CMaps, as created by FOP, PDF-XChange and GS.

* Fixes to rendering of Radial shading patterns at extreme zoom levels.

* Handle OpenType fonts where multiple glyphs are stored at the same offset.

* Fix for Type 2 Font "flex" operator, as seen in embedded Garamand CFF

* Fixed ink bleed for BarCodes - was allowing twice as much as specified.
  Also fixed incorrect handling of newlines in Code128 codes.

* Added ability to set XMP Metadata on annotations.

* Fonts with missing Widths array render properly.

* Fixes for customers extending PKCS7SignatureHandler.

* Handle Mask arrays on non-indexed Images, and remove false-positive cache
  hit on ImageMasks that are rendered in two different colors.

* Workaround JIT compiler issue causing occasional NPEs with inline images.

* Viewer: Fixed scrollbar jumping when form fields off screen have focus

* Viewer: Fixed FileFilters used when loading and saving signing keys.

* Viewer: Fixed TextHighlighter redrawing after zoom level has been reset.

* Viewer: JSManager can now be shared across multiple PDFViewer objects

* Viewer: Workaround unusual error in DirectColorModel native code that could
  cause black blobs on the screen.

* Viewer: several fixes to Thumbnail Panel, for better refreshing when the
  PDF is edited. It also prioritizes drawing based on the viewport position.



2.11.4   (released 2009-03-03)
-------------------------------
* SECURITY: Fixed potential JavaScript security issue. Customers are
  encouraged to upgrade and can contact BFO directly for more detail.

* Added DataMatrix barcodes

* Added support for "locking" annotations, both to PDF API and to Viewer.

* Fixes for PDF/A to match PDF/A verification in Acrobat 9.

* Added LayoutBox.setWordBreaksAllowed() method, to prevent word-break
  opportunities between font changes.

* Improved text extraction for RTL documents.

* Improvements to "last resort" method of text extraction, for fonts that
  really shouldn't be extractable but still do something in Acrobat.

* Fixed issues rendering some JPEG200 encoded bitmaps

* Viewer: Improved TextTool and TextHighlighter - both can now handle rotated
  text in any direction, and can highlight, outline, underline or double-
  underline. The default type of highlight can be set by system properties.

* Viewer: Opening, Saving, Printing are now privileged actions, so they can
  to be called from untrusted code (ie JavaScript).

* Viewer: Fix Z-index of overlapping annotations, and add the component before
  JavaScript event fires

* Viewer: Fixed PagePanel to handle more than 2^31 mapped pixels.

* Viewer: Fix event.value for RadioButton mouse events, broken in 2.11.2

* Fixes for incorrect CFF fonts, OpenTypes with glyphs in the U+FF00 range,
  overflowing Type 0 functions, CCITT decoding for particularly ancient TIFF.



2.11.3   (released 2009-02-13)
-------------------------------
* Fix to handle change to Applet ClassLoader in Sun Java 1.6r12.

* Some synchronization fixes should now reliably allow a PDF to be saved while
  its being displayed in another thread.

* Fixes to AnnotationMarkup class to correctly highlight rotated text, and
  to allow multiple lines of text to be marked-up in one annotation.

* Fix for fields in some PDFs overflowing on flatten()

* Big improvements to text extraction when PDF contains different size fonts
  or overlapping rows (such as newspapers or magazines).

* Fix sometimes incorrect letter offsets in extraction, noticable mainly as an
  incorrect position of highlight in the Viewer when selecting text.

* Viewer: Added methods to load a PDF by specifying a PDFParser. This allows
  the PDFParser to be overridden, required for customers wanting to tinker
  with the way text is extracted.

* Viewer: fixes for when using a PDFViewer without the MultiWindows feature.

* Viewer: TextHighlighter will repaint when the match requirements change.

* Viewer: several fixes relating to setting the zoom mode on a Viewport before
  a PDF has been assigned.

* Fix line layout algorithm when PDFStyle.setTrackKerning() was called with a
  non-integer value. This was affecting the "line-spacing" attribute in the
  Report Generator.
  
* Fix PDF/X-3:2003 OutputProfile (was setting version identifier to 2002), and
  added OutputProfile.PDFX3_2003_Acrobat, to cater for (what we think is a)
  slight difference between the specification and Acrobat's implementation.

* Fixed "open stream" exception sometimes occuring when specifying a
  ColorProfile in an OutputProfile.

* Fix bug in Type 1 parser resulting in some not-corrupt fonts being flagged
  as corrupt. 

* Added further heuristics to try and give some useful output for previously
  unextractable text.

* Correctly read PNG images with sRGB chunk.

* Fixes to downsampling of very large or high-resolution images during paint.

* Fixed ColorModel exception rendering PDF containing JPEG images to 1-bit TIFF.

* Fixed isolated problems in: OpenType fonts with unusual long LOCA tables or
  truncated KERN tables; CFF fonts with invalid encodings; illegal characters
  in Names; missing patterns or colorspaces during render; Form default
  appearances with odd whitespace; CFF fonts setting stems in subroutines;
  Checkboxes with missing check type

* Viewer: don't fail when editing an annotation with no creation date

* Viewer: Fixed rectangle position of zoom-to-rectangle actions.

* Viewer: SinglePageDocumentViewer now resizes after the page has been drawn,
  not before.



2.11.2   (released 2009-01-22)
-------------------------------
* Revert changes to obfuscator made in 2.11.1, which were causing unpredictable
  exceptions with IBM JREs (1.5 and 1.6, and possibly 1.4 as well). Customers
  using Websphere who upgraded to 2.11.1 should upgrade as soon as possible.

* Viewer: Removed some trailing references to a PDF that remained after the
  window containing it was closed.

* Viewer: Fix occasional screen corruption when rendering some form fields

* Added PageExtractor.setSpaceTolerance(), for customers who find text
  extraction is splitting or joining words incorrectly and want to tune it.

* Maintain open FileHandle for PDFs read from File, rather than FileInputStream. 
  This prevents (to some degree) that file being deleted while in use, and removes
  repeated opens/closes. Added a "PDF.close()" method to close the File.

* Handle special case of saving back to the same file we're reading from, by
  setting the OutputProfile.Feature.MultipleRevisions feature to required.

* Fixed PageExtractor.getTextInDisplayOrder()

* More fixes to handle corrupt PDFs (trailing junk in CMaps or pages, truncated
  OpenType fonts, invalid chars in names, missing styles in annotations)

* Further fix to bookmarks.

* Fix to HYSMyeonJo korean font

* Viewer: Improved behaviour of text form fields

* Viewer: Fixed text selection and copy, broken in 2.10.4

* Viewer: The Save feature has been bulletproofed when saving to the same file.



2.11.1   (released 2009-01-07)
-------------------------------
* Further reduction in Jar size through new obfuscation techniques.

* Added case-insensitive search to PageExtractor.getMatchingText().

* Fixed PostScript errors on "copy" and "internaldict" operators, used in some
  fonts created by pdfeTeX.

* Fixed Flate streams with Predictor=10 and multi-pages little-endian TIFFs.

* Fixed internal errors in remove() of map returned by Form.getElements().

* Fixed subsetting of fonts used in flattened form fields, broken in 2.10.4.

* Fixes to PDFBookmark.setOpen(), broken some versions ago.

* Clarified steps to implement a SignatureHandler, and fixed "handlers" example.

* Fixed removal of form fields with "." in the name, broken last release.

* Handle some broken PDFs (missing CID Supplement, padded inline DCT images).

* Viewer: Full support for new Java 1.6u10 features, including dragging
  applets to desktop and applet initialization via JNLP.

* Viewer: AppletURLActionHandler is now URLActionHandler as it works everywhere.

* Viewer: Added list of open windows to Window menu (ActiveWindowMenu feature).

* Viewer: Fix redraw on return from full-screen mode.

* Viewer: (OS X only) Add support for system KeyChain, menu placement,
  about menu, workaround for Safari-applet-background issue.

* Viewer: (Windows only) rename "Quit" to more Windows-like "Exit".

* Viewer: Added running total of matching results in search panel.



2.11   (released 2008-12-15)
-------------------------------
* INCOMPATIBLE CHANGE: For RadioButtons and CheckBoxes, the "value" is now
  equal to the name given the field in Acrobat, rather than it's internal
  value (although these are often the same). This allows multiple radio
  buttons with the same name to function correctly, and better reflects what
  Acrobat does. WidgetAnnotation.get/setTextValue now simply call get/setValue.

* INCOMPATIBLE CHANGE (Viewer): Digital Signature signing and verification in 
  the Viewer has been rewritten to use the "SignatureProvider" class, allowing
  use of multiple signature factories, RFC3161 Timestamping servers and so on,
  most of which can be controlled by system properties. The default KeyStore is
  now the Java default, the users ".keystore" file, and the system keystore is
  automatically used for verification.

* INCOMPATIBLE CHANGE (Viewer): The SuperJOptionPane class has been deprecated
  and will be removed shortly. Customers extending the Viewer should use the
  "Util" class to display error dialogs instead.

* Moved the appearances for AnnotationStamp objects to a new "bfopdf-stamp.jar"
  file, as part of continuing efforts to reduce the size of the main Jar. This
  new Jar must be added to the classpath if AnnotationStamp objects are created.

* Added 256-bit AES encryption to StandardEncryptionHandler, new in Acrobat 9.

* Fixed incorrect encoding of some fonts in forms after a read/write

* Added support for regular expression matching in PageExtractor

* Added setBackgroundStyle() and methods to support rich text to AnnotationText
  class.

* Fixed rendering of some CMYK JPEG images

* Parallelized part of the render() method, for faster rendering on multi-core
  machines.

* Improvements to the way elements are managed in a Form, to handle cases where
  people are removing and adding fields with the same name.

* Fixes to RemoteSignatureHandler, and added support for this to the viewer.

* Fixed infinite loop in rare corrupt documents

* More JavaScript fixes to support Adobe's {key:value} method call syntax.

* Fixed HYGoThic-Medium font support, broken a couple of releases back

* Viewer: big improvements to the Free Text annotation widget, and annotations
  can now be resized.

* Viewer: Fixed precision errors when moving annotations and fixed opacity bug,
  for less redrawing.

* Viewer: Improvements to TextHighlighter class to work with regular expressions

* Viewer: Created public constructors for all non-singleton features.

* Viewer: improved color selection dialog



2.10.6 (released 2008-11-10)
-------------------------------
* Fixed signing PDFs rendered with Compressed XRef tables

* Fixed loading Compressed XRef PDFs with stream Length contained in an ObjStm

* Fixed bug in PDFFont.getTextBottom(), added in 2.10.4

* Fixed handling of RadioButtons with "Opts" array - corrected WidgetAnnotation
  and FormRadioButton.getValue() and added WidgetAnnotation.set/isSelected().

* Rewrote JavaScript again, for what we now feel is a broken JSR 223 in Java 6.

* Handle PDFs with invalid odd-length Named Action trees.

* Flattening an XFA Form no longer produces an invalid PDF - the XFA is removed.

* Don't fail in linearization if open action refers to a deleted page

* Viewer: fixed a number of form field JavaScript Event problems.

* Viewer: a thread which was preventing a a process exiting after the viewer was
  closed has been fixed.

* Viewer: FormNNNWidgetFactory constructors are now protected, for subclassers.



2.10.5 (released 2008-10-21)
-------------------------------
* Fixed memory leak which occured when a PDF had part of it's internal structure
  replaced. Leak was on a per-PDF basis so would not expand infinitely over
  time, but while that PDF existed, editing it could take more memory than it
  actually required. All customers are encouraged to upgrade.

* Fixed creation of signature annotations for Acrobat 9.

* Improvements to the "MergeResources" feature added in the previous release.

* Fixed redraw of fields with multiple annotations in the viewer.

* Fixed JavaScript bugs evaluating "event.target", "event.source" and setting
  "event.change" and "event.value" in Keystroke events.

* Fixed Lucene extraction failure on some PDFs with Annotations

* Added support for Template pages via the PDF.getPage(String) method

* Several further enhancements to the JavaScript DOM.



2.10.4 (released 2008-10-07)
-------------------------------
* Large internal rewrite of font handling now correctly renders some edge
  cases that weren't handled before, and improves font substitution for
  CJK fonts.

* Added OutputProfile.Feature.MergeResources, which will attempt to merge
  duplicate resources such as fonts and images when concatenating multiple
  PDF files.

* Added "Intelligent Mail" BarCodes, the next generation of USPS routing code.

* OpenTypeFonts containing CFF outlines now have the correct sizes returned
  from getTextTop/getTextBottom().

* XFA-only PDFs can now have their XFA data updated via Form.setXFADataSets().

* Fixed bug in PDFPatterns with a background color, introduced in 2.10

* Soft-hyphen characters now fit correctly in LayoutBox objects

* Fixed case where counter-signing an existing signed PDF could cause the
  original signature to be invalidated.

* Fixes to JavaScript so "this" correctly refers to the Doc object in events.

* Fixed rare case where PDFPage.drawPolygon() could create an invalid PDF.

* Fixed NullPointerException when cloning a newly-created PDF containing open
  streams.

* Added PropertyChangeEvents to FormElement and PDFAnnotation

* Viewer: Added MultiPageDocumentViewport, and a number of internal
  improvements to the way pages are rendered.

* Viewer: Fixed redraw of calculated form fields

* Viewer: Added "OpenRecent" menu

* Viewer: Fixed export of PKCS#12 files.

* Viewer: Improved icons, improved toolbar layout (Windows only), added
  horizontal mousepad scrolling (OS X only), improved widgets (OS X only).



2.10.3 (released 2008-07-15)
-------------------------------
* Added the ability to write Linearized (also known as "web optimized") PDF's.
  Simply set the "OutputProfile.Feature.Linearized" to required when rendering.

* Rewrote the PageExtractor class completely - now faster, better and working
  with rotated documents.

* Fixed a problem causing increased memory usage when using a PDFReader in a
  single thread. The difference can be significant, so anyone in this situation
  is encouraged to upgrade.

* Viewer: Significant improvements to behaviour and appearance, giving more
  reliable results across the board. All users are encouraged to upgrade

* Viewer: Added text search and selection.

* Viewer: Changes to the SidePanel class so a factory is no longer required.

* Big speed increase rendering JPEG images with ICC ColorSpaces and all images
  with non-ICC CMYK ColorSpaces.

* Fixed Java 1.6 JavaScript (broken in 2.10.2) and JavaScript Date formatting.

* Fixed missing kerning when drawing kerned text into an area of exactly the
  right width, causing the text to extend slightly too far. Also fixed return
  from LayoutBox.getNumberOfLines, which was always one too high.

* Reduced memory footprint when sharing OpenType fonts across multiple PDFs

* Added BarCode.setColor() method

* Fixed some minor rendering issues wth certain CFF and OpenType glyphs

* Setting the System property for a warning to "fatal" will make those
  warnings throw an exception - eg "org.faceless.pdf2.warning.JB2=fatal"



2.10.2 (released 2008-04-30)
-------------------------------
* Automatically subset any possible OpenType fonts when flattening a form.

* Fixed occasional bug when encrypting documents - under some circumstances
  a corrupt PDF could be created.

* Importing some types of FDF resulted in a corrupt PDF - fixed.

* Fixed exception when a FormTextButton Widget has a null value.

* Added ability to set/clear "DoNotSpellCheck" flag on FormText fields.

* Fixed parsing of some BMP images that were broken in 2.10.

* Fixed Exception thrown when incorrectly merging PDF's with form fields - a
  PG1 warning is displayed, as was the case prior to 2.10.

* Removed public finalize methods - these should have been protected.

* Cache inline images, to speed up rendering pages containing Type3 fonts.

* Fixed rendering problems with colours containing alpha values, and finally
  worked around the Java bug causing "blueing" of white colors in calibrated
  RGB colorspaces.

* Added setInkBleed method to BarCode class, to handle print processes that
  distort the size of the bar.

* Fixed turning off Checkbox annotations with XFA

* Fixed appearance of StrikeOut annotations

* Handle buggy PDFs created by Actuate PDF Converter 1.0 and Ad Lib's "EX317".
  
* Improved CJK font substitution in Debian-based Linux.

* Viewer: the Thumbnail panel can be used to reorder the PDF or merge pages
  from other PDFs, directly from the viewer or by dragging PDF or image files
  into the panel.

* Viewer: new features can be added to the viewer automatically by specifying
  the "org.faceless.pdf2.viewer2.ViewerFeature" service in the Jar. See
  http://java.sun.com/j2se/1.4.2/docs/guide/sound/programmer_guide/chapter13.html

* Viewer: added mnemonics to the menu items.

* Viewer: bitmap images can now be imported directly into the PDF viewer, due
  to the new generic Importer/Exporter framework.
  
* Viewer: various smaller improvements:
  * Ability to drag the URL of a PDF onto the viewer to load
  * Improvements to LookAndFeel in GTK+, Metal and Motif.



2.10.1 (released 2008-02-14)
-------------------------------
* This release fixes problems some customers been having with the NIO changes
  in 2.10. Java bug 4724038 has been causing problem with OutOfMemory errors
  in some environments, and customers on Windows were unable to read a PDF then
  write it back to the same file.
  This release no longer uses the problematic MappedByteBuffer class, and
  doesn't hold the stream open when loading a PDF from a FileInputStream (the
  same as for 2.9). The only area where upgrading may require changes is for
  customers reading multi-page TIFF images from a File using a PDFImageSet: the
  FileInputStream should not be closed until after the last call to getImage().

* Removed a reference to the last PDF edited, allowing it to be gc'ed earlier
  and so reducing the working memory footprint of the library.

* Fixed some image parsing bugs with transparent GIF images added in 2.10



2.10 (released 2008-02-06)
-------------------------------
* INCOMPATIBLE CHANGE: BarCode class has been rewritten. You now create all
  Barcodes (including those that were formerly subclasses) by calling one of
  the static factory methods, then drawing the canvas returned by getCanvas().
  Fixed return value from getHeight() and added getMinimumHeight().

* INCOMPATIBLE CHANGE: Customers implementing their own EncryptionHandler or
  SignatureHandler will need to take note of some API changes. For signing,
  see the new getMessageDigest() and sign() methods, and for encryption note
  the new getEncryptionStream() and getDecryptionStream() methods.

* Huge improvements to memory use across the board, mainly when loading objects
  (including PDFs) from a File or FileInputStream. NIO is used and the File
  acts as a backing store, giving a drastic reduction on memory footprint for
  large PDFs. However it means the file the PDF was loaded from is now kept
  open until the PDF object and its children are garbage collected.

* Big speed improvements when reading and writing PDFs. Reading has been
  parallelized to make use of multi-core environments - the number of threads
  can be set explicitly with the "org.faceless.pdf2.Threads" System property.

* Added option to parallelize TIFF rendering in PDFParser.writeAsTIFF().

* Applying a Digital Signature has been improved from a two-pass operation to
  almost a single pass one even when not rendering to a File - reducing memory
  footprint and increasing speed.

* Added PDFStyle.setOverprint() method to turn on/off overprinting.

* Added support for SHA384, SHA512 and RIPEMD160 Signature message digests.

* Added new WidgetAnnotation.setButtonImage(), to position image on the button.

* Fixed print scaling when printing to paper that doesn't match the page size.

* Fixed creation of PDFCanvas from rotated pages.

* Added DragScroll, ZoomSelection and AnnotationTextFactory to the viewer.

* Added French, German, Japanese, Chinese translations to the viewer.

* Added PDFA1b_2005_Acrobat OutputProfile, for Acrobat's version of PDF/A.

* Many smaller fixes, including:
  * Handle CID fonts with zero-length rather than missing CID->GID mappings
  * PDFBookmark loading/saving speed improvements
  * Don't crash on broken ToUnicode streams
  * Don't eat/choke on junk on the operator stack when rendering text
  * AnnotationMarkup creation wasn't creating valid appearances
  * Removed incorrect Aleph-Lam ligature when rendering Hebrew
  * Corrected ToUnicode parsing of "compact" bfrange objects
  * Scrolling/GoTo actions at high zoom in the PDFViewer were mispositioning
  * Fixed input to PDFAction.goToFitRectangle() and output from getRectangle()
  * Fixed added for some old CCITT.G3 TIFF images
  * Applying OutputProfile.AcrobatNCompatible updates the PDF version



2.9 (released 2007-11-21)
-------------------------------
* POSSIBLY INCOMPATIBLE CHANGE: A number of changes have been made to
  FormChoice, mostly under the hood unless you're working on the Map returned
  by getOptions, which has keys/values now in the correct order. Also added
  FormChoice.set/getSelectedIndices(), to set unambiguous values for
  multi-selection lists.

* JavaScript events are now fully implemented, and a basic JavaScript
  environment is in place in the viewer which mimics Acrobat. This means
  form validation scripts in PDF documents will likely run. Rhino 1.6r6
  or Java 1.6 or later is required to take advantage of this.

* Changes to the licensing method to allow License files to gradually replace
  the old-style "keycode" licensing. All current licenses will continue to work.

* Deprecated Event.CLICK, which is now simply a synonym for MOUSEUP

* Localization hooks in place for the viewer, and mostly implemented the
  Spanish translation.

* Added support for parsing BMP images in the PDFImage class

* Rendering bugs fixed for documents with -ve dash phases, where CropBox is
  greater than the MediaBox

* Fixed calls to nested procedures in PostScript parser, which was causing
  problems for some fonts and patterns

* Fixed display of some rotated pages in Locales with "," as a decimal separator

* Improved About dialog and added the "SplashScreen" and "ShowConsole" features



2.8.5 (released 2007-10-17)
-------------------------------
* Documents with Reader Extensions (Usage Rights) will have those rights
  preserved if possible.

* Rendering bitmap images in PDFs has been rewritten to support tiling and
  low-resolution thumbnails. This means documents containing very large images
  should no longer require an equally large amount of memory to render, and
  will render much faster at low resolutions.

* Added new methods to the PDFViewerApplet class to support LiveConnect,
  allowing the viewer applet to be communicate with JavaScript. See the
  PDFViewerApplet API docs for more details.

* Added the PropertyManager class, to allow an alternative to the System
  property method of controlling the PDF library and PDF Viewer - mainly
  useful when using the PDFViewer in an applet or JWS environment.

* Added the ability to create new annotations on a page to the Viewer

* Fixed occasional bug when setting text field to multi-line.

* Fixed MaxiCode class so a ])> prefix doesn't automatically create a SCM.

* Fixed issue where under certain circumstances, an OpenType font used in
  more than one document could cause exceptions to be thrown when rendering.

* Bugfix for PostScript parser to handle some buggy Type1/Type3 fonts.

* Still more tweaks to calibrated colors to remove "blueing" of white on
  some platforms. Now tested and verified on Java 1.4 and above on Windows,
  Linux and OS X.

* JBIG2 images are decoded once only while using the viewer, which should
  make paging through documents containing those images much quicker.

* Worked around Java bug relating to 1-color DeviceN images.

* Improvements to StandardEncryptionHandler.getChange() method for PDFs
  encrypted with 40-bit encryption.
  


2.8.4 (released 2007-08-20)
-------------------------------
* Fixed memory leak occurring when creating new form fields with 2-byte fonts.

* Reusing subset 2-byte OpenType fonts across documents now works correctly

* Added some fixes to PDF/A document creation and validation.

* Fixes for reading byte-aligned Group 4 and some 2D Group 3 CCITT streams.

* Fixed inverted 1-bit images for certain unusually constructed PDFs

* Fix for some XFA forms wth pageArea objects

* Improvements to Swing "Look & Feel" for Viewer on Windows and Linux



2.8.3 (released 2007-08-06)
-------------------------------
* Added the KeyStoreManager class to the viewer, which provides a management
  console for digital keys and certificates.

* Added the ability to submit forms to the viewer. Currently HTTP and basic FDF
  submission are supported.

* Added some support methods for form submission to PDFAction and FDF classes.

* Added the PDFPage.get/setPageOrientation() method, to quickly rotate a page
  by 90, 180 or 270 degrees. Also added features to do this to the viewer.

* Fix rendering problems with some PDFs containing transparency groups.

* Added PublicKeyEncryptionHandler.chooseRecipient() method, to allow
  subclasses to automatically select a matching key.
  
* Improvements to the Toolbar layout in the viewer

* Adjusted the distribution of files between the Jars - many documents should
  now load without the "qrcode" and "cmap" Jars.



2.8.2 (released 2007-07-09)
-------------------------------
* Split the Jar into three parts: "bfopdf.jar", "bfopdf-cmap.jar" and
  "bfopdf-qrcode.jar". This is intended to ease deployment in Applets and Java
  Web Start environments. If upgrading from a previous version all three Jars
  are required to replace the previous "bfopdf.jar"

* We now supply a pack200 compressed Jar "bfopdf.jar.pack.gz" for JWS and Applet
  use, and a sample "bfopdf.jnlp" file for Java Web Start. Updated the
  "Installation" section of the userguide detailing how to best deploy the
  library in these environments.

* Updated PublicKey support to work with the Sun JCE and AES encryption or
  unencrypted metadata. Also fixed a bug resulting in truncated strings when
  reading documents encrypted with AES.

* More fixes when moving objects between PDFs, catching a number of RF1
  warnings and a potential ConcurrentModificationException in render()

* Added option to pass in array of possible EncryptionHandlers to PDFReader,
  for when you don't know in advance how the document has been encrypted.

* Added support for transparency groups when rendering - used when rendering
  translucent annotations.

* Added EncryptionHandler.hasRight() method, to allow EncryptionHandlers to
  properly manage document usage rights.

* Added the "org.faceless.pdf2.DeviceColor" System property, which if set will
  replace calibrated RGB, CMYK and Gray colorspaces with their uncalibrated
  equivalents.  For documents making heavy use of calibrated colorspaces this
  will greatly increase rendering speed, possibly at the expense of accurate
  color reproduction.

* Some fixes to XFA parsing

* Added FullScreenMode viewer feature, and the ability to load documents
  encrypted with Public Key encryption using the PDFViewer, via the new
  viewer2.PublicKeyPromptEncryptionHandler class.

* Text extraction to Lucene now requires Lucene 1.9 or greater



2.8.1 (released 2007-06-19)
-------------------------------
* Form Fields will now be formatted if possible. Basic formatting is supported,
  and some JavaScript will work if Java 1.6 or Mozilla Rhino are available.

* Improvements to PKCS#7 parsing means verifying signatures should now work
  with any JCE provder, including IAIK and the default Sun provider

* Fixed text wrapping algorithm when track kerning was set

* Added TextHighlighter and SignaturePanel viewer features, to mark some text
  as highlighted and provide an Acrobat-style panel summarizing the digital
  signatures in a document.

* Fixed rendering of some types of Masked images.

* Added PageExtractor.getMatchingText(String[]), to find multiple items at once.

* Fixed parsing of some symbolic OpenType fonts

* Fixed namespace bug in XMP processing that was breaking Resins DOM.

* A bug in Windows printing required us to modify the PrintPDF.java example and
  the printing code in DocumentPanel for reliable results with unusual page
  sizes.

* Fixed bug when extracting text from TrueType fonts with the Symbolic flag set.

* Added the ability to selectively decompress/recompress streams compressed
  with CCITT, JBIG2 and JPX by setting the appropriate OutputProfile.Feature
  to denied. This may be useful for customers having problems with certain
  compression algorithms in their workflow.

* Fixed default RenderingHints on Linux, *BSD and possibly other UNIX boxes -
  pages were being rendered without anti-aliasing by default.

* Improvements to Info and FormSignedSignatureWidgetFactory viewer features

* Fixed duplicate byte order mark when creating some non-ASCII bookmarks

* Fixed rendering of linear gradients, brokem in 2.8

* Removed 1.4 specific code - the library will once again run under Java 1.3.



2.8 (released 2007-05-21)
-------------------------------
* MAJOR CHANGE: Replaced the "viewer" package with the vastly improved
  "viewer2". The old viewer package is still available, see "old/README.txt"
  for more information. 

* Added two new PDFReader constructors, the PDF.getRenderProgress and
  PDFParser.getWriteAsTIFFProgress methods, to monitor how long these
  potentially long running tasks will take from another thread.

* Added PagePainter.setPaintAnnotations() and PagePainter.paintAnnotation(), to
  allow annotations to be painted separately from their parent page.

* Added PagePainter.setPageExtractor() method, to run the text extraction while
  rendering rather than having to do the two sequentially.

* StandardEncryptionHandler and PublicKeyEncryptionHandler are no longer final.

* Fixed a number of bugs in the show/hide PDFAction.

* Added PDFAnnotation().getPopup()

* Added Form.getPDF() and PDFPage.getPDF()

* Added "ViewBox" and "PrintBox" options to PDFPage.getBox()

* Fixed handling of yet another variation of CMYK JPEG images

* When merging annotations from an FDF, don't disassociate annotation replies.

* Some further fixes to XFA processing

* Fixed Form.setXFAElement when the data contained non-ASCII characters

* Fixed annotation positioning on rotated pages, broken again in 2.7.9

* Added FormElement.rebuild(), to recreate the form fields annotations if
  necessary before the PDF is rendered.

* Fixed reading of more corrupt PDF variations



2.7.9 (released 2007-04-16)
-------------------------------
* Added support for JBIG2 image encoding, via the external "jbig2enc" tool.
  See http://bfo.com/products/pdf/jbig2

* Corrected values of PDFStyle.get/setFormFieldOrientation() when the field
  is on a rotated page.

* The Form.removeXFA() method wasn't working if the form fields were modified
  first, and was sometimes colliding with a bug in Acrobat 7 if it was called
  at any other point. Fixed.

* Fixed occasional incorrect RD6 warning about stream lengths

* Fixed bug in importFDF for some FDF documents with Popups, and no longer
  create duplicates of annotations.

* Fixed issue when two threads are rendering the same page in PagePainter

* Now recognises the view.area and print.area PDF options when rendering pages

* Fixed rendering problem with some Pashto and Kirghiz glyphs (06CC 06C7 06D0)



2.7.8 (released 2007-03-15)
-------------------------------
* Enhanced the viewer to add the beginnings of mouse interaction with the
  document. Added EventHandler and it's subclass DefaultEventHandler, 
  which handles mouse clicks on hyperlinks throughout the document.

* Improvements to the PageExtractor class - text previously being extracted
  as individual letters or smaller groups are now being reassembled where
  possible into longer phrases

* Added support for dot/dash patterns, via new PDFStyle.setLineDash() method.

* Added support for JBIG2 image decoding, via the external "jbig2dec" tool.
  See http://bfo.com/products/pdf/jbig2

* Added OpenTypeFont.getEmbeddingRestrictions() method, for users that need
  to determine whether a font has embedding restrictions or not.

* When creating goToRemote actions, you can now specify whether they are to
  open in a new window or not. Also fixed page numbers, which were out by 1.

* Added missing methods to PDFBookmark, to get/set the open status.

* Correctly recompress documents using compressed XRef stream when the PDF has
  been read in rather than created from scratch.

* Added OutputProfile.Feature.MaximumCompression, for maximum deflation

* Fixed positioning of rotated annotations on rotated pages. Again.

* Fix position of text returned from PageExtractor when there's a CropBox set.

* Fixed problem when cloning objects then moving them between documents.

* XFA loading now handles hidden fields.

* PDFCanvas is no longer final.

* Better handling of invalid CMaps.



2.7.7 (released 2007-02-05)
-------------------------------
* Reduced the number and size of temporary objects allocated when reading a
  PDF, and reduced the number of intern() Strings to lessen the load on the
  PermGen space.

* Added an option not to intern() dictionary keys. This slows things down but
  may reduce long-term memory requirements for some users. Details are in
  Appendix B of the userguide.

* Now handles inline images with Indexed Colorspaces, and correctly renders
  2 and 4-bit non-indexed images.

* Improvements to XMP handling should result in less warnings.

* Fixed issue with some very old CFF fonts failing to parse.

* Fixed "Font has bad Flags" message from Acrobat for some TrueTypes.

* A change back in 2.6.6 meant when cloning pages in a certain way, fonts
  and images that were used on multiple pages were cloned multiple times,
  resulting in bigger file sizes. Now fixed.

* Added a PDFViewport.runAction() method, and run the Open Action on a PDF if
  one is specified when viewing.
 
* Added PDFParser.setFont() method, to override font substitution rules when
  rendering PDFs.

* A bug in PDFCanvas.pathArc (undiscovered since version 1.0!) meant arcs
  could only be drawn clockwise. Fixed.

* Corrected annotation size/positions when the annotation box doesn't match the
  page rectangle.
  
* Corrected display of translucent annotations in the viewer.

* Some PDF/A related fixes to bring closer into line with Acrobat 8.

* Fixed opening documents with passwords, broken in 2.7

* In the last release we always use the default RenderingHints when rendering
  a TIFF. Unfortunately for some reason on Linux/Sun JDK 1.5, anti-aliasing is
  explicitly set to "off". Changed this back to "default".

* Fixed rendering of L*a*b colors

* Fixed a few more exceptions and rendering errors resulting from unusually
  constructed documents.



2.7.6 (released 2006-12-13)
-------------------------------
* Added workaround for Acrobat bug regarding character widths for new
  StandardFont characters added in 2.7.3

* Improvements to reading PDFs mean a reduction in memory footprint and a
  speed increase of up to around 25% for large documents.

* Added support for verifying signatures created with Acrobat 8.0 and by the
  OpenLimit Signature handler (www.openlimit.com)

* Added the OutputProfile.Feature "PDFVersion17" for Acrobat 8.0 documents, 
  and fixed some of the missing Features that should have been returned from
  PDF.getBasicOutputProfile.

* Added PDF.setOption and PDF.getOption, which replace the (now deprecated)
  setViewerPreference, setLayout and getViewerPreference methods. These new
  methods also allow the setting of the new Acrobat 8.0 print preferences,
  although this is considered experimental until the PDF specification
  is published.

* Fixed bug in PDFCanvas(PDFPage) when the page isn't anchored at (0,0)

* Added AcrobatSignatureHandlerFactory.setContentSize() method, to specify
  how much space to preallocate for a digital signature token.

* Fixed text extraction from PDFs containing symbolic fonts with differences
  array (as created by GhostScript)

* Fixed barcodes so there is no minimum height. This was attempted back in
  2.4.1 but wasn't working for all barcodes.

* More robust parsing of embedded OpenType fonts, to handle some invalid PDFs

* Fixed display of PDFs that were created by the API (rather than read in)
  which contain rewritten fonts.

* Added new OutputProfile Features Cyan/Magenta/Yellow/BlackSeparation.

* Workaround for invalid PDFs created by old versions of Extensis FontSense

* Fixed bug introduced two versions ago where a ClassCastException is possible
  when PDFs containing compressed object streams are re-rendered.



2.7.5 (released 2006-11-09)
-------------------------------
* Fixed "Font has bad Flags" issue with certain fonts introduced in 2.7.4

* Fixed "Not in XRef" error when reading/writing some documents, introduced
  in 2.7.4



2.7.4 (released 2006-10-27)
-------------------------------
* Added support for signing and verifying Certifying or "Author" Signatures,
  via the FormSignature.get/setCertificationType methods.

* Redesign of the PDF reading process shaves about 10% off time taken and
  memory used for large documents.

* Fixed missing signature appearances, which disappeared in release 2.7.2

* Improvements to Gradient fills - results are more accurate and Colorspace
  is preserved (this also applies to Pattern fills)

* Improved handling of documents with missing named actions.

* Unverified Signatures no longer display two "?" symbols in Acrobat 7.

* No longer fails when rendering embedded OpenType fonts with no "post" table.

* Fixed bug when printing a page before the first color has been set



2.7.3 (released 2006-10-12)
-------------------------------
* Font encodings have been completely reworked - a large change. As a result,
  rendering PDFs containing "unusual" characters or encodings is much improved.

* Added some missing glyphs to the StandardFont class, which can now support
  all of ISO-8859-1, ISO-8859-2, ISO-8859-9 and ISO-8859-15.

* Chinese/Japanese/Korean PDFs using non UCS2 or UTF16 encodings are supported.

* Better font substitutions for non-embedded fonts on Windows, OS X and Linux.

* Fixed bug where if the last revision in a PDF was less than 1024 bytes long
  it was being skipped.

* Increased maximum object number to 24 bit, to match new limit in Acrobat 6.

* Correctly render bitmap images with a colormask.

* Fixed bug causing some Type 3 fonts not to render.

* Fixed bug in Type 2 parser causing some glyphs to render incorrectly.

* Fixed occasional bug when underlining text, added in last release.

* Fixed incorrect rotation when page was rotated 180.

* Fixed yet more inline images that were failing to parse

* Now handles negative values for fontsize when rendering.



2.7.2 (released 2006-09-13)
-------------------------------
* Added PDFCanvas(width, height, opacity) constructor to create translucent
  canvases

* Fixed TIFF clipping path problems in european Locales

* Fixed FormSignature.getSignatureDate() returning null, broken in last release

* Fixes to alpha handling when rendering - wasn't working all of the time.

* More improvements to XFA support, including full handling of Barcode fields

* Fixed infinite loop in LayoutBox under very specific circumstances

* Setting Combs in a FormText turns off scrolling, as expected by Acrobat.

* Fixed parsing of some AFM files, which was failing

* Better rendering of calibrated colors - we believe this is finally correct

* Corrected char widths for Type 0 fonts (mainly chinese/japanese/korean)

* Fixed bug where changing color halfway through an underlined paragraph
  was taking effect too early

* Better substitution of missing fonts when rendering

* Large regression test found and fixed the following rendering bugs:
  Fixed infinite loop in RunLength decoding under certain circumstances
  Typo in CalRGB colorspace resulted in blue becoming green
  Correctly display CCITT encoded images when EndOfBlock=true
  writeAsTIFF was failing if CreationDate or ModDate were invalid
  Pages with invalid annotation lists were failing to render
  Fonts with Differences Array and ToUnicode entry were rendering incorrectly
  Color reproduction for DeviceCMYK and DeviceGray colorspaces matches Acrobat
  Fixed troublesome inline images, broken a few releases ago
  Graceful failure when JPEG2000 decoder fails from internal errors
  Fixed bug when nesting clipping areas
  Fixed Java 1.4 dependency when loading documents with a language specified



2.7.1 (released 2006-08-11)
-------------------------------
* Released the source to the rest of the "org.faceless.pdf2.viewer" package,
  and moved the PDFTool.java example into the JAR as the main class.
  "java -jar bfopdf.jar --help" for option.

* Added the annotateComponent() method to PDFViewport which allow updates to
  be made to the viewport after the page has been updated. This can be used for
  anything from adding text highlights or graphics objects to form fields.

* Added the AcrobatSignatureHandler factory, which extends HANDLER_ACROBATSIX
  and allows more options to be set such as changing the hash algorithm and...

* Added support for Digital Signature Timestamps (RFC3161). This is supported
  in Acrobat 7, and by us with the new AcrobatSignatureHandlerFactory class.
  The DSE200SignatureHandler class should no longer be used unless you're
  specifically targeting Acrobat 6.0 or earlier with the DSE plugin.

* Added the RemoteSignatureHandlerFactory (and RemoteSigningServlet) to allow
  a PDF to be signed remotely via a simple web-service.

* Writing CCITT TIFF images has almost doubled in speed in some cases,
  provided a ColorModel from PDFParser.getBlackAndWhiteColorModel is used
  instead of PDFParser.BLACKANDWHITE.

* Fixes to PDF/A-1b OutputProfile to work with Acrobat 7.07 (which has had it's
  PDF/A support updated).
 
* More fixes to the XFA parsing.

* Correctly handles Type 6 cmaps in OpenType fonts.

* Fixed PublicKeyEncryption, broken in last release.

* Fixed the co-ordinates used in the PageExtractor classes so they're relative
  to the MediaBox - previously they were (incorrectly) relative to the CropBox.

* Added OutputProfile.Feature.Article and Feature.PublicKeyEncryption.

* Fixed parsing issues occurring on some PDFs with compressed XRef tables, on
  PDFs with dangling pointers in the page list or with a bad FormChoice object.



2.7 (released 2006-07-18)
-------------------------------
* API DIFFERENCE: There was some "confusion by design" over PDF version numbers
  when verifying signatures. Previous versions treated the original file as
  revision 0, which made it impossible to determine whether a signature covered
  the original release or no releases. The API has now been modified so that
  the original version of a file is revision 1, the first revision is 2 and so
  on.
  
  This should only affect you if you're trying to specifically load an earlier
  revision of a PDF. If you're validating signatures, provided you're only
  testing FormSignature.getNumberOfRevisionsCovered()==PDF.getNumberOfRevisions
  then no changes have to be made. You can now also be sure when the number of
  revisions covered in a FormSignature is 0, then it's invalid.

* Relased the source to most of the PDFViewer package under the "src" folder.
  We hope this will make life easier for those building their own viewers.

* Added PageExtractor.getMatchingText method to help those trying to search a
  document and highlight the search terms.

* Added PageExtractor.Text.getOffset() method, to determine the exact position
  on the page of a section of text, and getPage(), to return which page the
  text was on. Fixed getAngle() method too - results were rotated 180 degrees.

* XFA parsing is much smarter - the Form.setXFADatasets method should work
  for some of the more unusual constructions that are possible.

* Now supports rendering bitmap images with an alpha channel

* Now renders PDF1.6 documents containing OpenType fonts

* FormSignature.verifyCertificates was throwing an exception on certain
  certificate chains, rather than passing back the invalid certificate. Fixed.

* Fixed incorrect application of BBox on nested Form XObjects

* Improvements made to annotations (particularly AnnotationNote) when
  setOpacity is called - structure is now more compatible with Acrobat 7.
  All AnnotationNote types are now anchored to the top-left corner of their
  rectangle, not just "Note" types.
  
* AnnotationLinks with old-style links to named actions are now supported

* AnnotationMarkup had some incorrect flags set resulting in odd behaviour when
  the document was zoomed. Now fixed.

* PDFPattern can have "null" as a background color, for transparent patterns.

* Added the PDFTool example - a swiss-army knife for PDFs



2.6.11 (released 2006-06-13)
-------------------------------
* Fixed speed increase in last release so it's actually faster in all
  circumstances.

* Now uses LZW compression for non-bilevel TIFF images. This is roughly the
  same speed as the previous RLE compression algorithm but produces files
  50% smaller than packbits (the LZW patent has now expired internationally).

* Fixed values returned from PageExtractor.Image.getDPIX/DPIY

* Fixed rare problem parsing unusual Type 1 and Type 3 fonts

* Fixed underlined text fields losing their underlining.

* Fixed rare "PDF IS NULL" error when rendering some PDFs



2.6.10 (released 2006-05-11)
-------------------------------
* Fixed obscure problem when creating canvases from a page containing flattened
  form fields.

* Corrected flags for some StandardCJKFonts, which was causing incorrect font
  substitution in Acrobat.

* Down appearance on buttons wasn't preserved if the button wasn't beveled.

* Slight improvements to memory and speed when rendering PDF to a bitmap.

* Removed some unnecessary work done to each page when reading and writing
  documents, resulting in a PDF that is slightly closer to the original file
  structure. Necessary for a particularly obscure bug with a sample PDF.

* Fixed opening of 128-bit encrypted documents using the owner password

* Fix to XFA field bug introduced in 2.6.9 which sometimes resulted in field
  content disappearing in Acrobat



2.6.9 (released 2006-04-24)
-------------------------------
* Now works with the Bouncy Castle Crypto provider as the preferred provider.

* Fixed ClassCastException when rendering, sometimes occuring in PDFs with
  multiple appearances per button.

* Added option to save TIFF images at 204x196DPI, required for TIFF-F.

* Rendering PDFs as color TIFFs now uses Packbits compression.

* Fixed position of rotated images on buttons.



2.6.8 (released 2006-03-28)
-------------------------------
* Roughly doubled the speed of PDFParser.writeAsTIFF() method.

* Fixed writing of previously read in PDFs with compressed XRef tables.

* Added PDFParser.getBlackAndWhiteColorModel() method, for better control of
  black/white threshold when creating 1-bit TIFF images.



2.6.7 (released 2006-03-21)
-------------------------------
* Added support for PDF/A-1b:2005 as an OutputProfile.

* Fixed bitmap images appearing stretched in some cases.

* Now parses PDFs with exactly 1k of junk at the end of the file.

* Better font substition in viewer.

* Can now display text in Multiple Master fonts.

* Better handling of File actions.

* Fixed position of images extracted from PageParser.

* Correctly prints documents with no initial color set.

* Attempts to fail gracefully when displaying some corrupt TrueTypes.



2.6.6 (released 2006-01-31)
-------------------------------
* Added ability to extract XFA data from a Form, and set a form's values based
  on an XFA dataset object.

* Rendering PDFs containing bitmap images to sRGB is now slightly faster.

* Text extraction from PDFs containing bitmap images is considerably faster.

* Fixed occasional creation of invalid PDFs where fill and line transparency
  were both being used.

* Correctly use ToUnicode map for single-byte fonts when specified.

* Fixed sometime incorrect line width calculation when Track Kerning was used.

* Fixed display of 2 and 4 bit bitmap images.

* Fixed colors being inverted in DeviceN colorspaces

* Added workaround for bug in Sun builds of Java causing rendering of GrayScale
  images to RGB canvases to take much longer than it should.

* Fixed bug in PostScript Function calculator, showing in some GradientFills

* Fixed incorrect PDFPage.UNITS_PERCENT calculations.

* Process some more corrupt PDFs successfully



2.6.5 (released 2005-12-14)
-------------------------------
* Profiled and improved the DiskCache class to reduce memory. Heap use can be
  reduced by up to 75% in some extreme situations (documents consisting
  entirely of bitmap images, for example).

* Worked around "blue tint" when displaying some PDF documents in the viewer,
  caused by ColorSpace issues.

* Tweaked FormChoice internals to match Acrobats behaviour, rather than the
  PDF specification.

* Tweaks to AnnotationNote class to allow setting of popup window location

* Fixed viewer to handle documents containing zero-width lines and other
  path oddities.

* Added display of Type 3 fonts to viewer.

* Fixed permissions in PublicKeyEncryptionHandler, and added get methods to
  retrieve them.

* More improvements to text extraction.

* Added protected methods getStreamValue / putStreamValue to SignatureHandler.

* Added PDFStyle.getTextAlign

* Fixed PDFAction.getRemoteFilename



2.6.4 (released 2005-11-22)
-------------------------------
* Fixed errors when loading some TIFFs and FDF files, added in previous release.

* Added various new methods to PDFAction to support "remote" go-to actions.

* Fixed bugs when creating new documents with translucent colors - these were
  not always working as expected.

* Correctly handle truncated images.

* Various fixes to handle more bad or unusual PDFs, including those with
  truncated images/ASCIIHex streams, missing form objects and so on.

* Fixes to AnnotationNote rectangles

* Handles documents containing TrueType fonts with 1/0 CMaps and no PostScript
  names



2.6.3 (released 2005-11-04)
-------------------------------
* Added setTextValue and getTextValue to WidgetAnnotation, to better handle
  Checkbox and Radio Buttons in XFA forms. Plus some related XFA bugfixes.

* Drastic reductions in size of PostScript generated when printing under some
  circumstances, due to fonts being rendered as fonts rather than shapes where
  possible. Currently only for non-embedded fonts due to bugs in java printing.

* Added RenderingHints to PDFParser.writeAsTIFF and PagePainter classes, to
  control rendering settings. 

* Worked around obscure problem to do with ColorSpace gamuts which could result
  in color changes when converting PDFs containing CMYK images to CMYK TIFF
  (see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6349627).

* Now recognises and uses clip paths in TIFF images, if specified.

* Indexed non-RGB images in PDFs are no longer converted to sRGB but are kept
  in their original colorspace.

* Fixed text extraction after the Collection of Text objects has been modified

* Fixed widths of non-embedded CID fonts.



2.6.2 (released 2005-10-25)
-------------------------------
* Added text and image extraction, via the PageExtractor class. This requires
  the "Extended Edition plus Viewer" license.

* Added integration with Apache Lucene, via the PDFParser.getLuceneDocument()
  method.

* Now parses XMP metadata and keeps it in sync with the original metadata (as
  set by PDF.setInfo). Also updated PDF.setInfo() and getInfo() to be able to
  manipulate XMP data as well as the original.

* Added "UnscaledPrinting" as an option to PDF.setViewerPreferences().

* Can now display 2, 4, and 16 bit images in the viewer (16-bit images are
  downscaled to 8)

* Handle Indexed images with truncated index map.

* Correct fontwidths for Type 3 fonts and unembedded CID fonts in forms

* Some fixes to the OutputProfiles, including PDF/X-1a:2001. 

* Handle some previously corrupt PDFs

* Bug fixes to large dictionary changes made in last release.



2.6.1 (released 2005-10-12)
-------------------------------
* Added preflighting. OutputProfiles have been vastly expanded and can be
  extracted from a PDF with the PDF.getFullOutputProfile() method. They can
  also be applied to existing PDFs to bring them into line with a profile.

* PDF/X support completely redone and verified against the ISO specifications
  and Acrobat. The previous, badly broken PDF/X support has been removed and
  replaced with OutputProfiles for PDF/X-1a:2001, PDF/X-1a:2003, PDF/X-3:2002
  and PDF/X-3:2003. OutputIntents can be specified or extracted from a PDF.

* Added the PDF.getBasicOutputProfile() method, which retrieves a lot of
  "under the hood" information about the PDF.

* Added support for Acrobat 6.x document compression. Setting the OutputProfile
  to OutputProfile.Acrobat6Compatible will cause the document to be fully
  compressed - the resulting document will usually be considerably smaller, but
  no longer be readable in Acrobat 5.x or earlier. Also upgraded the PDFReader
  to parse documents compressed in this way.

* Fixed PKCS#7 problem causing some valid Digital Signatures to appear invalid.

* Fixed obscure problem with text encodings - using a non-standard encoding 
  with incorrect glyph names for the StandardFonts could cause text extraction
  and display to lose the spaces in the text.

* In the viewer, Fixed text display when page is transformed under Java 1.3.

* Fixed NPE in java.awt.geom.Area when trying to print some PDFs containing
  images to a PostScript StreamPrintService.

* Fixed NPE when parsing OpenType fonts with no cmap.

* Reset clip rectangle before painting annotations in PagePainter - some
  weren't appearing.

* PDF1.6 no longer has the limits on Dictionary sizes that applied to earlier
  versions, and our implementation was very inefficient for dictionaries
  containing 1000s of keys. Now fixed, resulting in potentially huge (10x)
  speed increases reading some 1.6 PDFs.

* Fixed issue in LayoutBox.split() where the split point occurred on a blank
  line. Was causing some bad breaks in the Report Generator.

* Fixed issue getting co-ordinates of annotations on rotated pages before
  the page had been normalised.

* Fixed length of text calculation when a backup font it used.

* Printing PDFs created with the trial version now results in smaller print
  jobs.

* Using a predictor on LZW or Flate streams was broken for some parameters.

* Fixed Event.CLOSE for documents - PDF specification was incorrect.



2.6 (released 2005-09-26)
-------------------------------
* API DIFFERENCE: The AnnotationFile class previously handled all the details
  of the embedded file. With the addition of the EmbeddedFile class in this
  release, most of the functionality in AnnotationFile has been stripped out
  and moved to that class.

* Added the PDF.getEmbeddedFile method, to get or set embedded files in the
  document. Also added the EmbeddedFile class to support this functionality.

* Big improvements to DeviceGray, CalGray and DeviceCMYK ColorSpaces - PDFs
  containing those ColorSpaces now render considerably better.

* Unparseable ICC profiles now fall back to their Alternate ColorSpace.

* CMYK DCT (JPEG) images embedded in PDFs can now be displayed, although this
  requires Java 1.4. Earlier versions of Java will continue to fail when
  decoding CMYK images encoded with a DCTDecode Filter.

* Now handles ImageMask images.

* The viewer now displays a gray rectangle for images that cannot be displayed,
  for any reason, to illustrate somethine is there.

* Fixed bug when working with rotated pages containing radio button
  annotations - was resulting in ClassCastException.

* Fixed JavaScript actions - can now create actions using UTF-8 characters
  (reading existing UTF-8 actions was already working, only writing was broken)

* Added (or rather made public) the getTextWidths() method in PDFStyle.

* Improvements to "Dump.java" example, to better handle PDFs with non-ASCII
  content



2.5.2 (released 2005-09-14)
-------------------------------
* Added RGBA and CMYK as available colormodels for PDFParser.writeTIFF(). Also
  added PagePainter.setBackground(), to enable PDFs to be rendered to
  backgrounds other than opaque white.

* Fixed viewer component on UNIX, not working due to API differences with
  Windows!

* Removed some more Java 1.4 dependencies. The PagePainter class can now run
  under Java 1.3 on UNIX and Windows, which means converting PDFs to bitmap
  images (eg TIFF) or drawing to an existing Graphics2D will work under 1.3.
  However, the "org.faceless.pdf2.viewer" package still requires 1.4.

* Fixed some bugs with XFA forms

* Fixed creating digital signatures with no annotations and when flattening
  some forms - broken a couple of versions ago.

* Fixed race condition in StandardCJKFont which could cause occasional errors
  when trying to create the same font from many simultaneous threads.

* TIFFs created from PDFs were technically invalid due to tags being stored in
  the wrong order, although they were accepted by all tested viewers. Fixed.



2.5.1 (released 2005-09-01)
-------------------------------
* Fixed PNG de-interlacing routine - was failing for some image dimensions and
  depths

* Fix attempt to modify unmodifiable map with some Type 1 fonts (since 2.4.3)

* The core of the library runs with Java 1.3 again, and will run if calls to
  System.getProperties() have Access Restrictions. This has resulted in a
  visible change to the API - StandardEncryptionHandler.setAcrobat7Security
  no longer throws a javax.crypto.NoSuchPaddingException.



2.5 (released 2005-08-23)
-------------------------------
* Added PDFParser and PageViewer classes and org.faceless.pdf2.viewer package.
  These classes make up the viewer extension, which allows rendering PDFs to
  bitmaps. This is a significant addition so the version number has been
  bumped to 2.5, despite the fact the rest of the API is compatible with
  earlier versions.

* Added AnnotationFile class, for attaching files as annotations.

* Added "setTextSmallCaps" method to PDFStyle class, to style text with small-
  caps.

* Fixed track-kerning when backup fonts are in use.

* Fixed positioning issue with rotated widgets on rotated pages



2.4.3 (released 2005-07-25)
-------------------------------
* Added PDF417BarCode class, for PDF417 2D bar codes.
 
* Added QRCode class, for QRCode 2D bar codes (including full support for Kanji
  and mixed-modes).

* Added StandardEncryptionHandler.setAcrobat7Level(), to encrypt documents
  using the AES Encryption method added in Acrobat 7.0.

* Setting values in documents containing XFA forms now works. Also enhanced
  Form.getElement() to search on the "friendly name" of a field, to make
  working with XFA forms easier.

* Correctly position rotated annotations on rotated pages

* Fixed infinite loop when document contains recursive bookmarks

* Return PasswordException instead of generic IOException when opening a
  document and supplying an invalid password, to make invalid passwords
  easier to catch.

* Added support for PPM images to PDFImage class

* Fixed bug in v1 compatibility API when calling page.drawPage()

* Much of the Font code has been reworked to allow text extraction and
  rendering - coming soon. Users should notice no changes, but we mention it
  here for completeness



2.4.2 (released 2005-06-09)
-------------------------------
* Better handling of extremely long text - if a single word is longer than the
  available space, it will be wrapped.

* Altering opacity of existing annotations now works for all annotation types.

* Handle special case where seekStart is followed by another seekStart - was
  failing.



2.4.1 (released 2005-05-23)
-------------------------------
* Expanded support for TIFF-JPEG images - more variants (although not all) can
  now be loaded, and those containing an embedded JFIF stream can now be
  embedded directly into the PDF without recompression.

* More flexibility when sizing Bar codes - any width/height/bar-ratio may be
  used, although a BC1 warning will be displayed if the size is outside legal
  limits

* Fixed bug introduced in 2.4 where boxes would sometimes appear around form
  fields

* FormSignature.loadDefaultKeyStore no longer fails when the default JCE
  Provider has been changed.



2.4 (released 2005-04-27)
-------------------------------
* Added support for multiple signatures. Documents that have already been
  signed can now have further signatures added to them without invalidating
  the first signatures. As many as required can be added provided the PDF is
  rendered between them. Although still API compatible with 2.3.7, this is a
  fairly large change so we've marked it as 2.4

* Added several methods to PDFAnnotation relating to reviewing and replying to
  comments - specifically getReviews, getReplies, addReview, and the
  set/getStatus method in AnnotationNote

* Re-saving a previously encrypted document now preserves the Owner password

* Fixed some unusual cases when cloning pages with widget annotations

* Can now read and write forms with Form XObjects as button images

* Always reset graphic state before drawing a canvas, including text operators.
  This fixes some cases where text in canvases was being located incorrectly,
  or pictures were inheriting the transparency of the previously drawn picture.

* Added AnnotationLink.setCorners(), to use the Acrobat 7.0 feature of non-
  rectangular hyperlinks.

* Completely rewrote the Dump.java example, which hopefully will serve as a
  better guide for those wanting to extract information from PDFs.

* Fixed the memory leak in the PDF1.0 wrapper classes. We still don't recommend
  you use them, but if you must this should make it a little more bearable.



2.3.7 (released 2005-04-13)
-------------------------------
* Reversed change in 2.3.5 which should have resulted in smaller XRef tables.
  In practice, although it appeared to meet the specification it wasn't
  accepted by Acrobat and resulted in "Repairing corrupt document" warnings
  on load.

* Fixed concurrency problem occuring when using an OpenTypeFont in more than
  one PDF, which are then rendered simultaneously

* Promoted get/setAuthor, get/setComment to PDFAnnotation class from it's
  subclasses - these apply to all annotations

* Added get/setColor and get/setOpacity to PDFAnnotation

* Added AnnotationText class, for FreeText annotation

* Fixed very obscure bug in LZW decompression for TIFF images, which could
  occasionally result in "streaks" in images with horizontal differencing.



2.3.6 (released 2005-04-01)
-------------------------------
* Added support for interlaced PNG images.

* Added AnnotationMarkup class, for highlight/underline etc. annotations

* More robust parsing of CCITT-2D encoded images (including TIFF) should handle
  slightly corrupt images more gracefully

* Very slight modification to line spacing in multiline FormText elements,
  so fields with many lines occupy the same space as in Acrobat.



2.3.5 (released 2005-03-11)
-------------------------------
* Fixed memory leak to do with ICC profiles, which are sometimes embedded
  in images. Unlikely to affect many users, and at a typical 5k per affected
  PDFImage it's not a big leak, but if you've been seeing leaks then please
  upgrade.

* The Form.flatten() method has been modified to produce smaller PDF files - 
  sometimes considerably smaller.

* Added synchronized block around ICC profile extraction, to work around
  Sun JRE bug 4863795. Performance hit should be negligable we hope, but if
  you notice a difference then vote for the bug at bugs.sun.com.

* Fixed IllegalStateException caused when flushing an empty page then
  immediately trying to write to it.

* No longer delete unrecognised Annotation types

* Fixed issue decoding some LZW streams

* Names containing [ and ] characters now work



2.3.4 (released 2005-02-21)
-------------------------------
* Fixed signature verification where a document was both signed AND encrypted.
  The spec is silent on what to do in this case and each handler does it
  differently, so added the SignatureHandler.isVariableEncrypted method to
  cover all possibilities.

* Added full support for Lab and calibrated Gray and RGB color spaces. 

* Fixed bug introduced in 2.3.3 where documents were encrypted with metadata
  unencrypted but all rights enabled, were not being encrypted.



2.3.3 (released 2005-02-07)
-------------------------------
* Fixed very rare writing of corrupt strings in documents when encrypted.
  This could occasionally result in documents failing with "Dictionary key
  not a Name") when reading them back in with this library.

* Fix "trying to seal with mutable objects" error when loading PDFs error
  once and for all.

* Don't encrypt PDFs if no encryption is required

* Correctly handle form fields with non-ASCII field names


  
2.3.2 (released 2004-12-06)
-------------------------------
* Fixed rare problem when reading documents containing indirect references to
  Name objects

* FormChoice.setValue("") now works if the options in a FormChoice contains the 
  empty string.

* No longer fails immediately if the Length field in a stream is wildly wrong.



2.3.1 (released 2004-11-11)
-------------------------------
* Fixed two Exceptions when reading in images from existing documents, one to
  handle invalid null images created by GhostScript, the other to handle a
  problem with Masked images introduced in 2.2.4.



2.3 (released 2004-10-25)
-------------------------------
* API DIFFERENCE: Removed SignatureHandler.isPDFObjectSignature() method and
  replaced with SignatureHandler.getVariable(). This is unlikely to affect
  many (any?) people, but it is an API change so we've gone to 2.3

* Added support for OpenType fonts containing PostScript glyphs

* Added "DSE200Handler" class for digitally timestamping documents using the
  nCipher DSE200

* Fixed positioning of PDFCanvas objects created from pages with CropBox set

* Fixed getTop/getBottom methods for Courier fonts

* Minor TIFF fixes



2.2.6 (released 2004-10-05)
-------------------------------
* Added support for Unicode 4.0 chars > U+FFFF. Currently these characters
  are only defined in some of the StandardCJKFonts.

* Support added for UTF16 encoding (new in Acrobat 6.0). This is required to
  display glyphs added in Acrobat 6, specifically the HKSCS-2001 and
  JISX0213:2004 character sets. Also upgraded Cmaps to those supplied with
  Acrobat 5 and 6.

* Directly embed some CCITT TIFF images without recompressing them, giving a
  sizable speed increase.

* Added FDF.setIgnoreErrors() method

* Added getChange(), getPrint() and getExtract() to StandardEncryptionHandler

* Should now be able to extract text from forms in Chinese/Japanese/Korean
  that don't use a Unicode encoding

* Fix ClassCastException when setting OpenAction on newly-read in documents

* No longer force keystore provider to Sun when loading Default Keystore

* Fix "trying to seal with mutable objects" error when loading images from
  existing PDFs



2.2.5 (released 2004-08-18)
-------------------------------
* Reduced memory footprint, particularly when reading documents using the
  PDFReader(File) constructors, and when digitally signing documents when a
  Cache is in use. Reading large documents should also be about 15% faster.

* Rewrote DiskCache to write to disk before the stream is closed if necessary,
  which allows large individual streams to be handled.

* Added PublicKeyEncryptionHandler, to read/write documents encrypted with
  public keys.

* Fixed "stream still open" exception when cloning a page that had had fields
  flattened on it.

* FormChoice fields no longer have a "ghost" image.

* Fixed error when reading documents containing a "Caret" annotation.



2.2.4 (released 2004-07-30)
-------------------------------
* Fixed XMP metadata generation

* The FDF class can now parse XFDF files, provided there is a SAX parser
  available for it to use.

* Fixed duplicate annotations when importing open annotations from an FDF

* Added isPDFObjectSignature method to SignatureHandler class, for added
  flexibility when developing signature handlers.

* When creating a Canvas from a Page or cloning a Page, images or fonts used
  on that page are no longer cloned

* Fixed obscure problem when cloning documents with empty indirect dictionaries



2.2.3 (released 2004-07-12)
-------------------------------
* Fixed PDFPage.rotate method to work after a call to setUnits

* FormTexts are no longer clipped if there is no background/border set - the
  same behaviour as Acrobat 6.

* Page sizes may now be specified as a string like "A4", "A3" and so on. In
  addition page sizes can now be specified as decimals, eg "100.5x100.5"

* TIFF parsing refactored, now uses less memory and takes less time.



2.2.2 (released 2004-06-15)
-------------------------------
* Added Caching. Images, Sounds, Pages and Canvases that are closed may now
  optionally be cached to disk to free up RAM. See the Cache interface.

* Repackaged the JAR so that the compatibility classes for version 1 of the
  library are stored in a separate JAR.

* Rewrote the StandardFont class to use less memory and initialize quicker

* Text in Forms is no longer displayed with ligatures

* Annotations are now imported from FDF documents in the PDF.importFDF method

* Added the PDFCanvas.setAcrobat6Layer method, to add watermarks/backgrounds to
  documents.



2.2.1 (released 2004-05-25)
-------------------------------
* A mistake in the testing procedure for 2.2 meant that release is unable to
  write encrypted documents. All users who downloaded 2.2 are encouraged to
  upgrade to 2.2.1 as soon as possible.

* Added TEXTALIGN_JUSTIFY_ALL to justify all lines of the paragraph, including
  the last one.



2.2 (released 2004-05-18)
-------------------------------
* API DIFFERENCE: Added flush() methods to PDFPage and PDFCanvas classes. These
  methods *may* need to be called when a PDFPage or PDFCanvas is being cloned.
  See the API documentation for those methods for more information. If memory
  is a concern it's a good idea to call them anyway.

* API DIFFERENCE: PDFSound.getStream() method returns an InputStream, not a
  byte array as before.

* Major refactoring of the code should help to reduce the memory footprint,
  mainly in the following areas:
   *  Reading stripped TIFF images
   *  Appending to pages from documents loaded from a PDFReader
  The changes in this version are mainly to lay the way for a disk-based cache
  in a future release.

* Added new PDFImage constructor, for creating images from raw bitmap data.
  Useful for extremely large images (we tested with a CMYK 15000x25000 pixel
  image) or for images in unusual formats.

* Added "rawWrite" method to PDFPage and PDFCanvas, which allows advanced
  users to write raw PDF operations to the page.

* Fixed text indent and layout of right-to-left text in Acrobat 6
 
* Fixed close() method on PDFImage objects and added a close() method to PDFSound
  Those running low on memory should remember to close() any of these objects that
  they create.




2.1.2 (released 2004-04-27)
-------------------------------
* Added _ModDate and _CreationDate to PDF.getInfo() output.

* Added PDF.getDocumentID() method

* UNIX users not running X11 should be able to create a PDFImage from a
  BufferedImage

* Fixed CCITT encoding of images where the left pixel of each row is black.




2.1.1 (released 2004-04-08)
-------------------------------
* Fixed HeiSeiKaku-Gothic font

* Added support for TIFF alpha transparency

* For users running Java 1.4, added support for JPEG TIFFs, and also fixed
  color problem when printing CMYK JPEGs created with Adobe Photoshop

* Added support for the JPEG 2000 image format

* Fixed exception when using an embedded 2-byte font in form fields.

* Appending to pages where the page co-ordinate system was changed now works.




2.1 (released 2004-03-12)
-------------------------------
* Added the "MaxiCode" class, to render UPS MaxiCodes (a type of 2-D barcode).
  We had to change the method signature of the drawBarCode() methods to accept
  the new BarCodes, so ANY CODE CREATING AND DRAWING BARCODES WILL NEED TO BE
  RECOMPILED (NOT changed, just recompiled). This is the only reason this
  release is marked as 2.1 rather than 2.0.9

* Tiled TIFF images can now be loaded, and inverted 8-bit images are working
  again (broken in 2.0.1)

* Fixed rare stack overflow condition when drawing arcs very close to 90
  degrees

* Fixed equally rare concurrency error when filling out several forms in
  different threads

* Now reads (even rarer) zero-length hex strings when reading PDFs and FDFs.




2.0.8 (released 2004-02-10)
-------------------------------
* Signature appearances are no longer opaque by default.

* PKCS7SignatureHandler.sign() method is no longer final.

* Handles some cases of form names with a "." that weren't handled before.

* Obscure problem fixed in 2.0.7 caused some documents to inflate in size
  drastically - now fixed.

* Tweak to positioning for right-aligned form fields prevents occasional
  clipping

* Fixed italic/bold variants of StandardCJKFonts

* Added set/getUniqueID() to PDFAnnotation class

* Certain documents were incorrectly returning a null action for their
  bookmarks - now fixed.




2.0.7 (released 2004-01-19)
-------------------------------
* Fixed inabilty to reset the dash pattern in a PDFStyle

* Drawing dashed lines with a fill-color set no longer gives a "trace" line

* Added PDFPage.setBox and PDFPage.getBox methods.

* Handles pre-rotated pages with annotations correctly, and no-longer resets
  the Crop/Bleed/Art/TrimBox when it does.

* Now handles fonts created with the "Private Character Editor" supplied with
  Windows XP

* Fixed extremely obscure problem occurring when signing one particular PDF
  with a non-standard signature appearance.

* Fixed slightly innacurate (<0.1%) definition of MM and CM.




2.0.6 (released 2004-01-09)
-------------------------------
* Fixed unembedded OpenType fonts - now working again

* Added support for PGM and PBM images to PDFImage class

* Added 3 new barcodes - PostNet (for US ZIP codes), the RoyalMail 4-state
  Customer Code (for UK postcodes) and the Deutschen Post Leit and Identcode
  variation of Interleaved 2/5 (for German postal codes)
  
* Certain types of PDF1.1 named action were causing problems - now fixed

* Fixed issue where standard edition licenses failed when annotations are used




2.0.5 (released 2004-01-05)
-------------------------------
* Fixed small memory leak when creating Form() object.




2.0.4 (released 2003-12-05)
-------------------------------
* Fixed bezier curves when the page origin is set to ORIGIN_PAGETOP

* Added workaround for spec-defying behaviour of some FormText elements in
  Acrobat 5.0

* Added language coding for multi-language documents, for basic accessibility
  support. Also added RTL markings for hebrew/arabic.

* Normalize presentation-forms when creating ToUnicode table.

* More FDF tweaks - now handles Checkboxes with values of "Off"

* Fixed problem appending to pages that are uncompressed to start with.




2.0.3 (released 2003-11-25)
-------------------------------
* Added PDFStyle.setTextStretch() method

* Fixed more FDF problems

* Improved reading of linearized PDFs with broken byte offsets

* Fixed some issues with Track Kerning.




2.0.2 (released 2003-11-19)
-------------------------------
* Fixed problem with importing FDFs

* Fixed problem where a "double image" can appear when editing a form field
  in Acrobat that has been created by the PDF library.

* Can now read documents with corrupt named actions




2.0.1 (released 2003-11-11)
-------------------------------
* Worked around yet another IBM JIT compiler bug - this time, the JDK supplied
  with WebSphere 5.1 on Windows was failing when reading some documents.

* Added support for Acrobat 6 encryption with unencrypted metadata. See the
  StandardEncryptionHandler.setAcrobat6Level() method

* Changes to stream compression result in significant memory savings when
  creating large documents from scratch - in the region of 5-15% depending on
  the document.

* Fixed auto-sizing of multi-line text box fields

* Fixed incorrect RD3 warning when loading an FDF file

* Colors for barcodes, form borders and others that were previously black in
  the RGB colorspace are now black in the GrayScale/CMYK colorspace, for
  compatibility with PDF/X. Also added CMYKColorSpace.BLACK and
  CMYKColorSpace.WHITE as constants.

* Fixed occasional ArrayIndexOutOfBoundsException in IdentitySet/IdentityMap,
  caused by some JREs using negative hashCodes.




2.0 (released 2003-11-03)
-------------------------------
* First release of 2.0. For a list of changes over the beta period and compared
  to version 1.0, please see the file "UPGRADING-2.0.html"




1.2.11 (released 2003-06-25)
-------------------------------
* Fixed processing of indexed 2-color java.awt.Image images.

* Fixed bug whereby Signatures in Acrobat 6.0 were not visible.



1.2.10 (released 2003-04-30)
-------------------------------
* LayoutBox now has a new constructor which specifies the Locale of the box as
  a whole. This is only required if the main locale of your LayoutBox has a
  right-to-left language like arabic or hebrew.

* By popular request, added an "addTab" method to the LayoutBox class for
  easy creation of tab stops.

* Changing the value of form fields with multiple annotations changes the value
  for all annotations.  

* Fixed FormRadioButton.setValue() method for new radio buttons

* Form Signature actions such as "Mark as ReadOnly on all fields" now work



1.2.9 (released 2003-04-08)
-------------------------------
* Submitting an entire PDF as a form action now works.

* Add fix for broken colorspace, occurring very rarely under Solaris 2.8

* Fixed mistaken assumption that CropBox/MediaBox is a direct object



1.2.8 (released 2003-03-21)
-------------------------------
* "-32768" error reading extremely large, complex documents has been fixed.

* Now handles TrueType fonts that have their name specified in UCS-16 only

* Correctly reads font widths for all types of Type 1 fonts in form fields

* Added workaround for broken colorspaces on AS/400 JDKs for Spot colors

* Added fix for occasional broken printing with Acrobat 4.0



1.2.7 (released 2003-02-24)
-------------------------------
* Fixed issues with track kerning - the return value from getTextLength
  was incorrect.

* Now recognizes TIFF images with alpha channels that aren't explicitly
  marked as having an alpha channel.



1.2.6 (released 2003-02-12)
-------------------------------
* Fixed PDF.getJavaScript method - wasn't working properly at all.

* Better support for drawing zero-length strings, which were failing under
  some circumstances. Also fixed Exception when calling LayoutBox.flush()
  twice in a row.

* Now handles documents with shared resource dictionary, like those created
  by JetForm 2.3

* No longer converts NULL form text fields to empty form text fields.

* Fixed multi-threading issue during font initialization.



1.2.5 (released 2003-01-24)
-------------------------------
* Added workaround for documents whose streams begin with "stream<0D>" only

* Added fix for PDFDocEncoding - "\r" wasn't listed. This was resulting in
  newlines being stripped from JavaScript and some annotations.

* Fix for TIFF images with ASCII directory entries <4 bytes long



1.2.4 (released 2002-12-23)
-------------------------------
* Fixed checksum calculation for Interleaved 2/5 barcodes

* Added workaround for JIT bug in IBM Java 1.3.0 and 1.3.1 on Windows, as
  supplied with (at least) WebSphere 4.0.2 to 4.0.4. This was causing a
  NullPointerException when reading PDFs

* Fixed PDF.getBookmarks() - will no longer return NULL if the document
  doesn't have any

* Handles buggy CCITT Group 4 TIFF images with premature EOL markers.

* Acrobat 4.0 has a limit of about 4k for JavaScript in a single item. Now
  splits document-wide JavaScript into smaller lumps to work around this

* JavaScript may now contain Unicode characters.

* Handles buggy PDF documents where a named action points to something other
  than a page

* Fix for obscure bug where the last revision of a multi-version PDF was
  ignored if it was less than 1024 bytes long

* Fix rather stupid error which was causing the pdf.getInfo() method to fail
  on any documents which were explicitly marked as trapped/not trapped

* Fixed error in Type 1 fonts which was causing warning messages under JDK1.4



1.2.3 (released 2002-10-31)
-------------------------------
* Fixed handling for rotated form elements, which was broken in version 1.2

* The drawText() method now handles leading newlines and lines consisting
  entirely of spaces in the same way as 1.1.x

* Fixed alpha values of non-sRGB fill colors, broken in 1.2.1.



1.2.2 (released 2002-10-21)
-------------------------------
* Closes the file and frees resources when a PDFReader is created with a 
  java.io.File. This probably would have resulted in memory leaks for
  those calling this constructor

* Fixed the PDFAction.getJavaScript method

* In certain situations the last word of a LayoutBox wasn't getting
  positioned correctly - this is now fixed



1.2.1 (released 2002-10-01)
-------------------------------
* IMPORTANT CHANGE FOR DIGITAL SIGNATURES. Owing to an oversight in earlier
  releases of the library, it was possible for a document modified after a
  digital signature had been applied to show up as valid.  Although the signed
  section of the document was unchanged, it is posible to "append" a later
  revision of the PDF to the file, and this would not show up as invalidating
  the signature. Those using the library to verify digital signatures should
  upgrade, and see the documentation for the "FormSignature" class to see what
  changes are required to their code.

* Tied in with the above change is the new ability to import earlier revisions
  of a PDF, by means of a new PDF constructor and the
  PDFReader.getNumberOfRevisions method.

* The beginText/drawText/endText method of printing text should now function
  almost identically to version 1.1 of the library (the only differences are
  bugs that were fixed)

* Added the ability to import a Forms Data Format (FDF) file to complete a
  form - see the PDF.importFDF method and the new FDF class

* Added the ability to load an FDF-format keystore, of the kind exported by
  Acrobat 5, to verify Adobe self-sign signatures. See the
  FormSignature.loadFDFKeyStore method.

* Increased the range of characters available in the MSung font to include the
  HKSCS 2001 characters added to the Adobe CNS1 revision 3. This seems to be a
  combination of the characters from the ISO10646:2-2001 when they're in the
  BMP, and characters in the U+E000 to U+F848 range when they're not. Note the
  MHei font does not appear to contain these characters in Acrobat 5 - users
  requiring these characters should stick with MSung

* Fixed a bug in the LayoutBox class, which was causing text to be pushed down
  too far. Text is now displayed according to the CSS rules, i.e. any leading
  is split equally in two on either side of the text.

* Fixed handling of PDFStyle.setTextIndent

* Added several new methods to LayoutBox - splitAt() (to split a box in two), 
  getLineNumber(), getLineTop(), getLineBottom() and setText()

* Fixed displayed values in FormChoice

* Form Buttons can now be read-only, and new fields are printable by default.

* Added isMultilineScrollable/setMultinelineScrollable flags to FormText

* Fixed mouseover/mouseout when reading form elements



1.2 (released 2002-09-03)
-------------------------------
* Fixed some problems with creating new forms using TrueType fonts.

* Fixed an encoding problem with Forms. Now forms using the standard fonts
  should work for all languages covered by Adobes "PDFDocEncoding".
  
* Fixed some final layout bugs to do with kerning. Results are now identical
  to 1.1.x versions of the library, except where those results were incorrect.



1.2 BETA2 (released 2002-08-28)
-------------------------------
* Fixed bug in beta 1 - failing to read some forms

* Fixed the TIFF parser to prevent it choking on malformed custom tags.

* Fixed bug with reading CFF fonts from forms that use the Adobe Standard
  Encoding.

* Fixed bug in setAccessLevel which always allowed annotations to be altered

* Added "getGoToCoordinates" method to PDFAction class



1.2 BETA1 (released 2002-08-20)
-------------------------------
API CHANGES
-----------
* Now reads DPI from JPEG images. This may result in some JPEG images being
  resized as previously they were always assumed to be 72dpi (this is the
  chief reason this release is 1.2 rather than 1.1.28).
  We've added the getDPIX() and getDPIY() methods to the PDFImage class, to
  make conversion easier - to reproduce the old behaviour, change any reference
  to "image.getHeight()", to "image.getHeight() * image.getDPIY() / 72"

* the setFillColor() / getFillColor() methods in the PDFStyle class now take a
  java.awt.Paint object, rather than the more limited subclass java.awt.Color.
  This won't require any changes to code unless you're using the getFillColor()
  method, but will require the code to be recompiled to avoid a
  NoSuchMethodError at runtime.

* The ColorPattern class is now an implementation of Paint, rather than a
  subclass of Color. In addition, the contract for the adjustBrightness method
  has changed to adjust and return a copy of the pattern, rather than the
  current pattern.

OTHER CHANGES
-------------
* Completely rewrote the text layout engine around the "LayoutBox" class, and
  backported the current API to fit. This should allow existing programs to
  continue on as before, while those requiring more advanced layout can use
  the new classes.

* Added the concept of a "backup font", where a style can define one, two or
  more fonts which act as a backup to the main font if a glyph isn't found.
  See the PDFStyle.addBackupFont() method.

* Corrected use of Unicode characters in Bookmarks and Annotations - now
  working properly.

* When merging pages from two PDFs into one, now correctly handles pages with
  form fields.

* Added the ability to fill with a java.awt.GradientPaint.

* Form Text and Button fields now work properly when rotated about 90, 180 and
  270 degrees. Form Text now works for centered multiline text.

* Handles buggy documents where the AcroForm array points to the annotations,
  not the widgets

* CCITT TIFF image reading about 40% faster, on average.

* Added BARCODEUPCA, for UPC-A barcodes that don't look like EAN-13

* Now handles Unicode spacing character U+2000 to U+200A in the StandardFont
  class

* PDF reading now skips junk at the start/end of the document, and can read
  buggy documents where actual and recorded stream length don't match. Also
  removed some debug code, which should speed things up a bit.

* TrueType fonts requiring more than 255 glyphs are now embedded properly. Also
  added a warning when using a TrueType font that is missing some (but not all)
  PostScript names, which was causing blank spaces in the document.

* PDFs can now be rendered more than once - this was broken a few releases
  ago.

* Merges resources across multiple form fields, for smaller documents



1.1.27 (released 2002-06-26)
----------------------------
* TrueType names required for unembedded fonts are different to TrueType
  names required for form fonts! Fixed so the appropriate name is chosen.

* Now reads interlaced GIF images, and GIF's with comments too.

* Fixed bug in FormSignature class when "SUN" is not the default provider.

* Correctly handles CMYK JPEG images saved by Photoshop, which were inverted

* Fixed some problems with the arabic ligature routines - U+0651 to U+0655
  weren't being classed as non-spacing.

* Fixed obscure problem when recoding fonts that differ from the Adobe
  Glyphlist, which could sometimes result in the wrong glyph being displayed.



1.1.26 (released 2002-05-16)
----------------------------
* Added fix to previous CompactFont change, was breaking documents with
  unembedded Type1 fonts

* More workarounds for bad forms - reads MK from stream and DA/DR from
  annotation if necessary.

* Workaround for segmented content-streams with no space between operators

* Added zero arg contructors for FormElements

* Fixed some bugs with Form Signatures - default name is now set according
  to API docs



1.1.25 (released 2002-05-12)
----------------------------
* Added workaround for forms that erroneously specify an FT for their
  annotations

* Added Chinese/Japanese/Korean fonts for form elements. We'd appreciate
  feedback on this, as it's difficult to test without a localized copy of
  Acrobat.

* Further, hopefully final fix for for pages with unusual MediaBoxes - now
  works when pasting these onto other pages.

* Preliminary work on Compact Font Format - form elements using this font
  type can now be rewritten, but new CFF fonts cannot (yet) be loaded.



1.1.24 (released 2002-05-08)
----------------------------
* Fixed problem with last change to TrueType fonts - was breaking documents
  using large subsets of those characters (eg. the Unicode.java example)



1.1.23 (released 2002-05-07)
----------------------------
* Fully implemented AcroForms! Text boxes, buttons, javascript etc. - a very
  large addition for users of the Extended Edition. See the userguide, the
  new Form???.java examples, and the Form??? classes in the API documents for
  details.

* New action - FormJavaScript, FormSubmit, FormReset, ShowElement, HideElement
  and FormImportData - plus new helper methods to deal with these.

* New annotation type - rubber stamp.

* New annotation methods - set/getPage, set/getEventAction, set/isVisible,
  set/isPrintable, getLastModified

* New method for fonts - isMonospace(). Ligatures are now disabled for
  Monospace fonts.

* New page method - removeAnnotation

* New examples - FormCreation, FormFill and FormProcess

* Code128 Barcodes may now include newlines (\n), representing the FCN1
  control character. This allows EAN128 codes to be printed

* Pages with CropBox set now have their size returned correctly

* Fixed bug in number formatting which occasionally caused bad PDFs

* Fixed problem where reusing a subset TrueType font gave missing glyphs

* Fixed bug with form fields and fonts containing punctuation characters
  in their names.

* Remove deprecated PDFPage.resetClip() method



1.1.22 (released 2002-04-21)
----------------------------
* Optimized - squeezed another 8-10% speed increase for writing PDFs.

* Hopefully fixed problem with reading PDFImageSets from slow pipes.

* Renamed bouncycastle package to bouncycastle1, to avoid method resolution
  clash with new versions of their package.
 
* Fixed occasional problem with ASCII85Decode filter

* Added some new methods to PDFAnnotation and PDFAction, in anticipation of
  upcoming Form support.

* Now correctly handles all "seascape" pages.



1.1.21 (released 2002-04-12)
----------------------------
* Corrected the size of the LETTER_LANDSCAPE pagesize

* Added setTextIndent method to PDFStyle object, to control the indenting
  of the first line of text in a paragraph.

* Text height is now calculated correctly when the line-spacing is set to
  values less than the height of the font.

* Fixed some problems with Track Kerning - length wasn't being accurately
  calculated.



1.1.20 (released 2002-04-07)
----------------------------
* Fixed bug resulting in illegal PDF stream when importing certain PDF
  documents.

* Certain Type 1 fonts were failing due to blank lines in the Kerning Pair
  data. Now fixed.

* Now handles TIFF images missing SamplesPerPixel and BitsPerComponent tags.



1.1.19 (released 2002-03-22)
----------------------------
* GIF images of any depth can now be read.

* Changed obfuscation method. Should now be able to use the library in fussy
  environments like Jikes and Visual Age for Java.



1.1.18 (released 2002-03-02)
----------------------------
* Fixed some bugs in the ASCII85Decode filter, which was failing on some docs.
  Also added ASCIIHexDecode and RunLengthDecode handling, for completeness.



1.1.17 (released 2002-02-22)
----------------------------
* Now handles transparency in GIF and PNG images. Note this is not full
  alpha transparency - colors can only be fully transparent or fully opaque.

* Compresses 1-bit images using CCITT-G4 compression - up to 40% smaller.

* Fixed an image handling bug introduced in the last release which was breaking
  some TIFF images.

* Fixed unusual problem to do with different page sizes in documents created with
  early version of Distiller.

* Fixed problem when transferring annotations and bookmarks between documents -
  if they referred to a named destination, the name wasn't transferred.

* Fixed problem with editing pages that have been rotated - any alterations to
  the page weren't being rotated to match.

* More robust reading of PDFs in general



1.1.16 (released 2002-02-13)
----------------------------
* More, more and still more CCITT fixes.

* 1-bit PNG images were colliding with a bug in Acrobat Viewer. We now
  decompress and recompress them, which slows things down slightly when
  dealing with these images, but opens the way to recompression with CCITT
  (coming soon).

* Now extracts DPI from PNG image if specified using the pHYs chunk.

* Slight improvement in memory efficiency. First of many we expect.

* Fixed problem reading some older (PDF1.1) PDFs with named destinations.



1.1.15 (released 2002-02-05)
----------------------------
* Added fix for CCITT TIFF images wider than 1792 pixels, some of which were
  failing.

* Added fix for some LZW streams which were failing.



1.1.14 (released 2002-01-27)
----------------------------
* Optimized. Most applications should now run between 30% and 50% faster.

* Reduced memory footprint by StandardFont class - the main memory hog.

* Added two new barcode algorithms - EAN-13 (also covers UPC-A) and CodaBar.

* Added setTrackKerning method to PDFStyle class, to override or force
  kerning for text.

* Updated the userguide to cover the changes since 1.1.12. Digitally
  signed it, because we can.



1.1.13 (released 2002-01-21)
----------------------------
* Added native TIFF image support. Although this doesn't cover every TIFF
  format, it does cover uncompressed, RLE, LZW, CCITT RLE and Group 3/4
  (both 1D and 2D). Not supported are JPEG, ThunderScan and NeXT images.
  Also added the wrapper class PDFImageSet to handle Multi-page images
  efficiently.

* Added Digital Signatures via the "FormSignature" class (available with
  the extended version only). Currently handles Adobes Self-Sign signatures
  and VeriSigns document signer plugin.

* Added the "Sign.java" example to demonstrate these signatures.

* Added new drawBarCode() routine to the PDFPage object, giving even more
  control over the code (allows the height of the code and the thin/thick
  ratio to be specified)

* Fixed bug where setting the clipping path as the first thing on the page
  resulted in an invalid PDF.



1.1.12 (released 2001-12-09)
----------------------------
* Added support for Reading and editing an existing PDF. This is done
  using the PDF(PDFReader) constructor.  Added several new examples
  demonstrating this functionality - Stamp, PageStitch, FormFill and Dump -
  and updated the userguide to reflect this.

* The trial version now has the word "DEMO" stamped on each PDF instead of
  the 30-day timeout.

* Added support for Adobes XMP specification, allowing XML metadata to be
  embedded and extracted from the document. The methods "setMetaData" and
  "getMetaData" have been added to the PDF, PDFPage, PDFImage and PDFSound
  classes. See http://www.adobe.com/products/xmp for more information.

* Added 128 bit encryption, as supported by PDF1.4 (Acrobat 5). This is set
  using the PDF.setEncryptionAlgorithm method.

* Added "drawPage" method to PDFPage class, for merging several pages into
  one.

* Added "getPages" to PDF class, to get the list of all the pages in the
  document.

* For PDFPage class, added "seekStart" and "seekEnd" methods to control where
  to make changes to the page - before or after any current page content.

* Added a corresponding "get" method for many set methods in many classes -
  specifically added:
  * "getInfo", "getViewerPreference", "getNamedActions" and "getOpenAction"
    to PDF class
  * "getType" and "getPage" and "getSound" to PDFAction class
  * "getType", "setTextAnnotationContents", "getTextAnnotationContents",
    "setTextAnnotationLabel", "getTextAnnotationLabel" and "getRectangle" to
    PDFAnnotation class
  * "getOpenAction", "getCloseAction" and "getAnnotations" to PDFPage class
  * "getSample", "getRate" and "getType" to PDFSound class

* Added timezone to creation/modification dates

* Fixed Unicode support for bookmarks, annotations and document information

* Fixed the Named Actions handling in the PDF so it works properly.

* Fixed a minor glitch in the PDFBookmark class which didn't appear to affect
  anything.



1.1.11 (released 2001-11-29)
----------------------------
* Another IBM specific bug - worked around the AS/400 throwing an exception
  when calling java.awt.color.ColorSpace.getInstance(CS_GRAY). Also optimized
  for the 99.99% of cases where the colorspace is sRGB, which may avoid
  problems on other colorspace-impaired platforms - almost certainly including
  AIX. Do all IBM JRE's need a graphics card to work with colorspaces?



1.1.10 (released 2001-11-21)
----------------------------
* Finally isolated and added a workaround for a JIT bug in the IBM JRE. Users
  using IBM Websphere or other IBM versions of Java for Windows who have got an 
  "ArrayIndexOutOfBoundsException" when using non-Latin characters, this fix is
  for you.
  
* Fixed bug where bookmarks that were supposed to open by default, weren't

* Added the "pathClipAndPaint" method to PDFPage



1.1.9 (released 2001-11-13)
---------------------------
* Fixed bug in StandardCJKFont where some characters codes were rendered
  incorrectly.



1.1.8 (released 2001-11-09)
---------------------------
* Deprecated the PDFPage.resetClip method, as it violates the PDF spec. The
  correct way to reset the clipping area is to nest calls to clip between
  save() and restore().



1.1.7 (released 2001-11-07)
---------------------------
* The upside-down arc fix in 1.1.5 broke Rounded rectangles for certain
  canvas orientations (including the default). Fixed this.



1.1.6 (released 2001-10-25)
---------------------------
* According to the PDF specification, nesting calls to path operations while
  a text paragraph is open is illegal (although it does actually work under
  Acrobat 4 and 5, it causes an error in some versions of Acrobat 5).

  Consequently the draw, path and clip methods (e.g. drawRectangle)
  will now throw an IllegalStateException if called between a call to
  beginText and endText.
  
  THIS MAY BREAK EXISTING APPLICATIONS. The workaround is to ensure the only
  method called between beginText and endText is the drawText method.



1.1.5 (released 2001-10-23)
---------------------------
* Many, many color changes. Most important, generated PDF documents are now
  automatically calibrated to use the sRGB colorspace, the same colorspace
  used in Java. Documents may appear slightly different, but they're now
  more correct than they were.

* Added setNamedAction() method to PDF object.

* Added clip...() methods to PDFPage objects, to set the clipping area.

* Added (transparent) support for device-independent color. ICC profiles
  are now extracted from colors or images and embedded in the document where
  appropriate. All of this occurs behind the scenes, but means that an image
  or color which is supposed to be device-independent, will be. Handles
  calibrated RGB, CMYK, Gray, full ICC profile embedding and Spot colors,
  leaving only Lab and DeviceN color spaces unsupported.
  
* Added support for device-dependent CMYK color via the CMYKColorSpace class

* Added support for Spot (separation) colors via the SpotColorSpace class

* Deprecated the drawBarCode method and added a new one allowing more control
  over the size of the barcode.

* Fixed bug where only the last hyperlink on a single line of text returned
  the correct list from endTextLink. Very obscure, unlikely to have affected
  anyone but us.

* Fixed interesting problem where ColorPatterns were only sometimes being
  applied. When comparing a class and a subclass, equals isn't necessarily
  symmetric!

* Fixed problem where arcs came out upside-down if the setCanvas method had
  inverted the page co-ordinates

* Change setLineDash so parameters can be floats (for very short dashes)



1.1.4 (released 2001-10-03)
---------------------------
* Fixed all new inconsistancies (aka bugs) in the state stack - the save()
  and restore() methods - that we introduced in version 1.1.1. This was
  breaking things that rely heavily on these methods, including our Graph
  library.



1.1.3 (released 2001-09-27)
---------------------------
* Nailed the last (yes, we're confident) of the problems caused by codepages
  different to our test environment, in particular several Eastern European
  Windows locales. Write once, run anywhere huh?



1.1.2 (released 2001-09-21)
---------------------------
* Fixed a problem with certain TrueType fonts (usually smaller ones)
  embedding incorrectly, resulting in missing characters when subset.

* The "font may have restrictions on embedding" test for TrueType
  fonts was reversed, so only fonts with no embedding restrictions
  displayed this message.

* Added the setOpenFullScreen method to the PDF class.



1.1.1 (released 2001-09-18)
---------------------------
* Fixed a problem with certain TrueType fonts failing - noticable with
  Arial Italic from Windows 2000.

* Fixed some inconsistancies in the page stack - restore was restoring
  aspects of the style that had never been saved. Also clarified in the
  save() method JavaDocs *exactly* what is saved and what isn't.



1.1 (released 2001-09-14)
-------------------------

API CHANGES
-----------
* Whether the font is rendered as a solid or outline no longer depends on
  the LineColor or FillColor being set to null, but on the new setFontStyle
  method of a PDFStyle.
   REASON FOR CHANGE: This restriction meant the colors often had to be set
  to null, for no reason other than to prevent text being drawn with an
  outline.  Following the rule of "always optimise for the most common case",
  and considering how rarely outlines text is actually used, this didn't
  make sense. Plus it made underlining text very difficult.
   IMPACT: For programs using outlined text, add a call to setFontStyle for
  the outlined texts' PDFStyle.

* The return values from drawText, continueText, endText and discardText are
  no longer an integer representing the number of text lines used, but a
  double representing the number of points needed to render these lines. So
  for example, a call to drawText with a single line of text with a leading
  of 14 would return 14.0, rather than 1.
   REASON FOR CHANGE: Required to handle multiple font sizes per line. Think
  superscript/subscripts.
   IMPACT: Most programs ignore these return values anyway. Only programs
  measuring how many lines a paragraph took to render will need to change.

* The Line spacing variables have been altered. Previously, the default
  spacing was based on the actual height of the font, and defaulted to 1.2.
  This meant for double spacing the spacing had to be set to 2.4, which was
  just plain strange. The spacing is now a function of the inter-baseline
  distance of each individual font, so double spacing requires a value of 2.
   REASON FOR CHANGE: Previous system didn't allow fonts to set their own
  leading.
   IMPACT: Because the line spacing is now font-dependent, programs that
  adjust the line-spacing may need to tweak the values slightly to fit. If
  in doubt, try dividing all values passed to PDFStyle.setLineSpacing by 1.2

NEW FEATURES
-------------
* Increased text layout speed - documents making heavy use of text
  are over 40% faster. Now renders the first 20 chapters of Great
  Expectations in 8 seconds flat on our test machine!

* Documents can be encrypted using a 40-bit cipher algorithm compatible
  with Acrobat 3.x and later, using the PDF.setUserPassword() method and
  friends.

* Embedded TrueType fonts are now subset by default, resulting in potentially
  huge savings in filesize.

* Chinese, Japanese and Korean text is supported (horizontal writing only)
  using the StandardCJKFont class. Correct display depends on having the
  appropriate language pack installed.

* Text layout now uses the full Bi-directional algorithm from the Unicode 3.1
  specification, and the Line Break algorithm from the same, resulting in
  correct text layout in most languages (although line breaking for Thai,
  Khmer, Laotian and Burmese is not implemented). Correctly handles direction
  override characters U+202A to U+202E.

* Recognises Unicode characters U+00A0 (non-breaking space), U+00AD
  (soft hyphen), U+200B to U+2011, U+2028 - U+202E, U+2044 (Fraction slash),
  U+2028 - U+202E and U+FEFF (zero-width non-breaking space), which can be
  used to control line and word-breaking as per the Unicode 3.1 specification.
  In particular, U+00AD characters can be sprinkled throughout text to
  indicate an acceptable word-break, but won't be visible unless a break
  actually occurs.

* Hooks added for word-hyphenation, and a "last-resort" algorithm implemented
  for english (will only come into play when the word is too wide for a whole
  column, in which case you want to look at using soft hyphens anyway).

* Accessing more than 255 distinct characters in a single font is now handled
  internally by the library. Unlike earlier versions, you can now just create
  the font and then use as many characters as you like.

* Added pattern fills using the ColorPattern class. Currently only pre-defined
  patterns can be used.

* Can embed sounds with the PDFSound object.

* Added new Actions - goToURL, playSound, and named. Actions can now be
  linked together in a list to perform more complex actions.

* Added setOpenAction and setCloseAction methods to PDFPage, to allow
  actions to be run when the page is opened or closed.

* Added getPageNumber method to PDFPage, and getNumberOfPages to PDF classes.

* Added Annotations. The PDFAnnotation object allows embedding of popup
  notes, sound, files and hypertext links. The latter can be added
  manually, or via...

* Added beginTextLink and endTextLink methods to PDFPage, for actions
  positioned within a paragraph of text. A piece of text in a paragraph
  can now easily be made a hyperlink to (for example) a webpage, another
  part of the document, they can play a sound or print the document.

* Added the drawEllipseArc and pathEllipseArc methods to PDFPage, for
  drawing arcs, and the drawCircle and drawCircleArc methods to PDFPage for 
  circles.

* Added the drawRoundedRectangle method to PDFPage for drawing rounded
  rectangles or (for the designers out there) "supercircles".

* Added underlining and strikeout for fonts, via the new setTextUnderline and
  setTextStrikout methods in the PDFStyle class.

* Added superscript and subscript capabilities to PDFStyle by calling the
  PDFStyle.superscriptClone() and PDFStyle.subscriptClone() methods.

* Added the getAscender, getDescender, getUnderlinePosition,
  getUnderlineThickness, getStrikeoutPosition and getStrikeoutThickness to
  the PDFFont superclass and it's children.

* Bookmarks can now be coloured and italicised if the PDF viewer supports it
  (currently Acrobat 5.0 only)

* Hebrew and Yiddish combining characters are now used if available.

* PDF.setOpenAction can now take a null value to remove the action.

* Styles can now have some fields (specifically font and color) set to null
  even if they are required, to inherit from a previously applied style.

BUG FIXES
---------
* Fix added for broken TrueType fonts which specify a width for zero-width
  characters (diacritics). This is surprisingly common!

* Fixed a couple of bugs when the continueText method is used to contine text
  to the same page (for example, in a different column). If the continued box
  is not contiguous with the previous textbox, leading blank lines are now
  trimmed automatically.

* Fixed problem with non-embedded TrueType fonts getting an incorrect italic
  angle, ascender and descender value.

* Fixed problem with zero-length image files throwing an exception other
  than IOException.

* Kerning wasn't working on Type1 fonts (it is now).



1.0.4 (released 2001-07-23)
---------------------------
* A new PDFBookmark() constructor was added, to allow creation of bookmarks
  that are open by default.

* Fixed bug in Locales using a "," as a decimal separator causing invalid
  PDFs to be created.

* The internal state of all PDF Objects has been reworked, mainly to fix
  a memory leak, but it has the side effect that objects like fonts and
  images can be created once and then reused in different PDFs without
  side-effects. Should make threaded PDF generation more consistent too.

* New example showing PDF generation from servlets - HelloServletWorld.java

* Fields in a dictionary are now ordered alphabetically. This has no effect
  for viewers, but is great when comparing two PDFs using diff(1).

* Actions are now dictionaries. This means a few more bytes for each
  bookmark in the document, but is necessary for future work on annotations
  (hyperlinks, popup-notes, sounds and movies etc.)



1.0.3 (released 2001-07-10)
---------------------------
* Changed license key algorithm. Old keys are still backwards compatible,
  but all license keys supplied from this date forward will need at least
  this version of the library to run.

* Fixed minor bug where paragraphs ending in a single word are followed by
  a newline.



1.0.2 (released 2001-07-01)
---------------------------
* Fixed bug in PDFPage.discardText() that caused an invalid PDF to be created

* PDFStyle.getLineCap and PDFStyle.getLineJoin now return an "int" instead of
  a "float". This matches the corresponding set methods.

* Optimized the use of styles within the page. This should give slightly
  smaller PDFs than before and (for documents making heavy use of styles),
  result in a large speed increase: one of our tests more than doubled in
  speed.

* Now silently drops null values from dictionaries, resulting in slightly
  smaller files.

* Type 1 fonts weren't being compressed in previous versions - they are now.



1.0.1 (released 2001-06-26)
---------------------------
* Fixed a big problem with binary files under Windows (yes, the good ol'
  CR/LF trap). Windows users should definately upgrade.

* Fixed bug get PDFImage.getHeight() actually returning the width.

* New method - PDFPage.discardText()

* New example - HelloUnicodeWorld.java

* New documentation - CHANGELOG and unicode.txt

* Created new classes TextProcessor and friends for dealing with
  complex text processing (as will surely be demanded by Unicode spec).

* Added support for minimal set of Arabic ligatures from Unicode spec.
  Some of the code for this is based on some example code by Roman Czyborra
  (http://czyborra.com)

* Reverses a line of text if any HEBREW or ARABIC codeblock characters.
  Correctly handles Arabic digits (ie. they're still written L2R).

* More accurate font-metrics for built in fonts - now uses the full
  glyph bounding box to determine size, not just ascender/descender.

* Fixed problem with center or right aligning multiple lines of text (text
  was being centered on the left of the paragraph block, not the center).



1.0 (released 2001-06-09)
-------------------------
* Initial release
