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.28.4 (released 2024-03-08) ------------------------------- * Added the final PDF/UA-2 OutputProfile, and two OutputProfiles for "Well Tagged PDF" * Added the "HtmlDerivation" class, to deriving HTML from a tagged PDF. * The StructureTree Document will now put newlines in extracted text to indicate line breaks, and text content will reflect the "ActualText" property if its set on any content. * Previous release broke TIFF output for regular RGB images - now fixed. * Minor adjustments to PDF/UA-1 and PDF/UA-2 profiles based on interop testing. * Fixes for indexed colorspaces when using a custom OutputProfile.ColorAction to convert colors. * Add AcrobatSignatureHandlerFactory.setSSLSocketFactory to control how SSL connections for OCSP responses, Timestamps, Certificate and other signature- related content are made. * Fixed, for the final time, the ability to force the PDF version number when saving the file by requiring or denying a PDFVersionNN feature on the profile. * Ensure we never write a NameTree with a mix of UCS and non-UCS encoded keys, and that we sort them the same was as Acrobat (ISO32000 errata #214) * Under some rare circumstances, the original OpenType Color fonts (which we turn into Type3 fonts) were embedded in the PDF, despite not being used. This would increase the file-size and could cause some validators to complain. * Bookmark open counts were not being set properly under some workflows * Fixes to kashida justification algorithm * Updated Arlington model to latest release * Viewer: fix longstanding issue where a viewer that has no ThumbnailPanel would not display PDFs opened via the Open menu item. * Viewer: ensure "defaultMode" property can be set to "DragScroll" or "TextTool" to choose the initial cursor selection mode. 2.28.3 (released 2023-12-07) ------------------------------- * "Print Preview" images can now be created with PagePainter. See the blog article for more information on this significant addition to the API * The CMYKColorSpace profile for device-dependent CMYK is now based on FOGRA39. This means a slight colorshift from previous releases when converting CMYK content to RGB (the old profile can still be used, see API docs) * Added the DocumentPart class, for PDF 2.0 "DPart" support * Added output profiles and profile features to support Factur-X 1.0.6 * Added support for Australian Post 4-state barcode * DeviceNColorSpace has new getNames() and getColorConvertOp() methods. The DeviceNColorSpace.Builder has some new methods to make building easier. * Only complain about "Nested BMC/EMC" sequences (invalid in PDF/UA) if both the parent and child are actually reachable from the Structure Tree. * Fixed adding new properties to the StructureTree class-map, and when verifying PDF/UA-2, ensure we check the class-map for properties if necessary. * Added support for TIFF images that use Flate compression with a predictor * Previous version set PDF version to 2.0 whenever PAdES signatures were used, as that's when they were officially defined. This broke various tools that (unwisely) depended on a PDF version 1.x, and PAdES had been in common use for years prior to that anyway. Fixed this so it will work properly with PDF/A. * Fixed renaming spot colors in single-color images with a ColorAction * Fix creating a canvas from a page that had to be repaired due to it using a Tiling pattern - this was causing a "Canvas not closed" exception since 2.24.4 * OCSP responses with no certificates no longer cause an exception * Fixed issue where cloning a PDF while it was being verified in another thread made impossible things happen. * Previous release broke setting a "Layout:BBox" attribute to a raw float array. * Added setRule() method to OutputProfiler SimpleImageAction, for resampling * Ensure we always write "L" key for inline-images * Corrected creation of PDFImage from Image using an IndexColorModel of < 8bpp * Fixed use of Decode array with Images in Lab colorspace (exceedingly rare) * Rendering PDFs with irregular tiling patterns is quite a bit faster * Viewer: Line annotations were being drawn in the wrong direction 2.28.2 (released 2023-05-24) ------------------------------- * Updates to several output profiles (mainly PDF/A-4 and PDF/UA-1) to fix some bugs and align our results with other tools. The PDF/UA-2 profile is now largely complete and matching the final draft of the specification. * Many small bugs fixed and improvements made to the Structure Tree, as a result of the work on PDF/UA-2. * Added "roles" parameter to the Structure Tree, to try and tame the complexity of element role-mapping. See PDF.getStructureTree API docs for details. * Updated Arlington model trunk as of 2023-05-24. * Fix for Type1 fonts that make presumptions about the hstem values returned from the PostScript internaldict subr #3. * Fixes to JPEG error recovery to match other tools. * Fix rendering error when font-size is zero * Fall back to generic fonts when rasterizing PDF if the OS supplied font is missing glyphs. * Viewer: Added SearchPanel.setMerged() to allow the search panel to group all matching text on a page into one item. 2.28.1 (released 2023-03-20) ------------------------------- * Previous release broke applying Signatures with Timestamps. Now fixed. * Previous release broke conversion to PDF/A of PDFs that had been cloned before conversion, where the original PDF was missing XMP metadata. * Previous release introduced a check for timezone-less dates in XMP, but the repair for this was failing on cases where the date was also invalid. * Fixed PDF/A conversion for PDFs containing fonts that share a FontDescriptor. * Cloning a PDF before PDF/A conversion could cause conversion failures for documents containing OPI data, associated files, or a particular variation of damaged action. 2.28 (released 2023-03-10) ------------------------------- * SECURITY: XMP parsing did not disable external entity resolution, so a malicious PDF could requested XML data is downloaded when processed. Details have been emailed to affected customers and are available on request * INCOMPATIBLE CHANGE: the PKCS7SignatureHandler.SigningEngine has two new methods to implement, getOCSPSResponses() and getCRLs(). * Added the SignaturePolicy class to try and manage changes over time to the digital signature validation policy used in the BFO PDF Library. * Added support for GlobalSign's new Qualified Signing Service, and added a setCustomAppearance() method to set custom visuals for them. * FormSignature.verify() can no longer deadlock while running simultaneously to OutputProfiler.apply(). Progress in verify() can now be controlled with thw new FormSignature.cancelVerify() FormSignature.isVerifying() methods. * When digitally signing we sometimes need to guess at the size of the signature, and would do that by signing twice, first with dummy data. This is problematic when the Signing process is expensive or slow (eg a signing service). We now calculate the size the signature would be. * A list of preloaded OCSP responses and CRLs can now be supplied to AcrobatSignatureHandlerFactory/PKCS7SignatureHandler.addValidationInformation to avoid the need to download them from the network when they're required. * Our previous build fixed the version numbers being set in the PDF, but this caused a few other tools that (unwisely) rely on version numbers to break. Now the version number can be forced by setting that feature to required, eg pdf.getBasicOutputProfile().setRequired(OutputProfile.Feature.PDFVersion14) * Rewrote the float formatter we use internally to improve precision of least significant figures when writing numbers to a PDF, while still running 16x faster than DecimalFormat. * LayoutBox.setWordBreaksAllowed() wasn't working as described if the line had already overflowed the width of the box. Now fixed, but for anyone relying on the old behaviour, setting the "org.faceless.pdf2.LayoutBoxBreaksOnOverflow" system property to not-null will revert this change. * Remove some cases where a PDF repair was done before it was needed, potentially invalidating a signature. * Fixed error (introduced two versions ago) where using a SpotColorSpace in a PDFCanvas *before* it's been added to a PDF threw an Exception. * Repurposed the deprecated OutputProfile.Feature.PurgeResources to allow it to remove unreferenced resources from within a page. * Added the OutputProfiler.RemoveSignatures strategy to remove, rather than flatten, signatures when the OutputProfiler.apply method requires it. * Some minor adjustments to the PDF/UA-1 profile to more closely follow the letter of the specification. * Some minor tweaks to the API to make offline signing simpler. * Optimizations to getArlingtonModelIssues() should speed this up by about 25%. Updated model to latest version. * Fixed error introduced in 2.27 where certain types of damaged form fields were recovered with the incorrect name * Fixed a a particular type of repair to damaged Name Trees that was deleting nodes instead of reordering them. * Previous release introduced an exception if a PDF contained an invalid extension; now fixed. * Viewer: if a signature is removed from the PDF, make sure this is reflected in the signature dialog. Also removed some unnecessarily noisy event handling designed to reset a signature state to unknown when the PDF has changed. * Viewer: some fixes to FullScreen mode to keep the UI intact when the PDF in a DocumentPanel is removed or changed. * Viewer: when closing the PDF in single-window mode, we weren't resetting the dirty flag for the next PDF that was loaded. 2.27.2 (released 2022-11-24) ------------------------------- * Digitally signing a PDF will now set the correct version number on the file. For PAdES signatures, this means the version will be PDF 2.0 * Integrated the "Arlington" PDF data model as a validation step - see the new ArlingtonModelIssue interface API docuementation for detail. * Add support for PDF Extensions, specifically ISO32001 (which adds the SHA-3 family of signature hashes) and ISO32002 (which adds Edwards Curves Ed25519 and Ed448, both of which were added in Java 15). * Fix a bug in our DER encoder - Set keys were not ordered. Technically this meant some signatures we've been generating are invalid, although in practice no PDF reader seems to verify this. * Fix an issue with 8-bit Lab ICC colorspaces where the colors were incorrect on conversion to RGB. Discovered in internal testing as these profiles are never seen in the wild. * Fix for "sRGB Appearance profile beta" ICC profile from color.org * Several minor changes to ensure PDFs generated by the API match the Arlington model - essentially verifying all fields in a PDF match the specification. * Fix QR-Code encoding for a particular mix of Kanji and number values which was causing the mode-switch to break and throw exceptions. * Added AnnotationFile.setCustomAppearance(), to support custom visualizations for file annotations. * No longer update or generate ProcSets, which have been obsolete since 2001. Viva progress! * Quieten XML parse failures from SAX parser when parsing bad XMP data. * Viewer: when PDF is modified, reset the validation state of any signatures. 2.27.1 (released 2022-09-23) ------------------------------- * Fixed a bug introduced in the previous release which could cause text to disappear in some workflows - in particular, setting a custom appearance on a signature. * Fixed a particular case where the previous "repair on load" still gave incorrect results. * Updated our Signature Validity checks to match the current version of Acrobat by exhaustively testing what can and can't be changed in a signed PDF. For documents that have been modified after signing, this may result in the validity of the signatures changing in this release (for context, Acrobat's algorithm has changed since the last time we checked this in 2019, and is both undefined and inconsistent). This release is much closer than previous ones. * Block "shadow attacks" on signatures, as illustrated by pdf-insecurity.org * Many, many more adjustments to the loading process to try and match Acrobat's behaviour, and to better handle some deliberately corrupted documents from the Safedocs corpora. Several OutOfMemory and one StackOverflow issues fixed. * Fixed loading of encryption flags when stored as an unsigned int * When creating a PDFImage from a source image with transparency, where possible use a PDF/A-1 friendly "Mask" rather than a "SMask" * Added PDFImage.isIndexed() and PDFImage.getTransparency() methods, and fixed PDFImage.quantize() to work correctly with transparency. * Properly fixed clipping of unfeasibly large patterns when drawn with transforms onto a page, for all cases. * Fix a particular issue where we were not properly merging redefined Separations for PDF/A * Identify a "billion laughs" type-error with page resources and fail early. * Updated bundled "bfopdf-jj2000.jar" to include latest fix from Github - previous build would throw java.lang.Error on some types of corrupt input which we hadn't previously encountered. 2.27 (released 2022-09-06) ------------------------------- * Dropped support for Java 6 - supported versions are now Java 7 to 17. * Redid the process of repairing form fields on load, to try to match Acrobat's unpublished algorithm. For documents that require extensive repair on load, this may result in differences to the repair process affecting which annotations and fields are repaired. * Use thread-safe classes for very high access structures used while profiling. Documents that share fonts over thousands of pages no longer block threads when profiling on multi-core hardware. * [PDF/A] When substituting fonts in a document with OutputProfiler.FontAction, allow one font to be replaced by multiple fonts. This fixes that case where a suitable substitute was found but is missing only one or two glyphs. NOTE: This changes required an API change to the OutputProfiler.FontAction interface, see the API docs for details. * [PDF/A] add OutputProfiler.setJustNoticeableDifference() method, to allow control over the threshold above which two colors are deemed to be different. * [PDF/A] identify images that are damaged or truncated with the "ImageDamaged" feature, and disallow it for PDF/A-1 or later. * [PDF/A] Check for truncated image data when looking for file damage, and repair it if required (this improves PDF/A compatibility with Acrobat). * [PDF/A] Check for damage or truncatation to glyphs, and treat them as missing. * [PDFA] Separations "All" and "None" are not exempt from the requirements against redefinition of Separations in PDF/X-4 and PDF/A-4, even though ISO32K does not require this. New RedefinedSeparationAll feature will identify and repair these. [https://github.com/pdf-association/pdf-issues/issues/168] * [PDFA] Made timezones on metadata dates a requirement for PDF/A-1, based on PDFA TWG discussions. It's not a requirement for PDF/A-2 and later. * [PDFA] While PDFA TWG determines whether invalid "colr" box in JPX images is significant when there is a ColorSpace on the stream, add a feature to identify and repair it if required (JPXNotBaselineColr) [https://github.com/pdf-association/pdf-issues/issues/167] * [PDFA] Correctly convert JPX images containing alpha channels to non-JPX compression for PDFA1 * [PDFA] Finally clarified distinction on CIDSet requirements between PDFA1 and PDFA2+3, and handle both as required - this slightly relaxes the requirements for PDFA1. Fixed a bug to with double-encoding names in the related CharSet structure, which could result in some valid PDFA1 files identified as invalid. * [PDFA] special handling to remove insane multi-MB data URLs added as URL actions by PrinceXML. * [PDFA] find invalid ICC profiles used as transparency-group ColorSpaces * [PDFA] Annotation C and IC colors are handled correctly in terms of their PDF/A requirements A [https://github.com/pdf-association/pdf-issues/issues/34] * Fixed StackOverflowError when parsing PostScript containing a string that had been marked as not-readable: the the Exception includes the value, which is not readable so we thrown an Exception, and so on. * Several dozen small fixes due to further bulletproofing against Apache Tika after converting all 33000+ files to PDF/A. * Fixed redaction issue when resources with same name in XObjects could result in incorrect (although still redacted) content being written to the page. * Work around odd bug in Java XML parser where trailing processing-instructions will (very rarely and depending on the parse state) throw a SAX failure. * Fix failure to verify second-signature in files with PDF Articles. * Fixed a bug where trying to justify text comprising a simple space character would fail. * Fixed threading issue relating to traversing EmbeddedFiles * Improved support for (interim) PDF/UA-2 spec. * Viewer: fixed occasional Exception from race condition in Thumbnail teardown. * Viewer: added workaround for odd issue relating to use of temporary files when saving to (some) Windows Network files. 2.26.5 (released 2022-07-04) ------------------------------- * The Jars are now signed with SHA256 rather than SHA1 * Allow signatures that have just been signed to be queried via the various "get" methods methods. * Add a check for the "zero-value EC signature" issue fixed in https://nvd.nist.gov/vuln/detail/CVE-2022-21449 - although we recommend upgrading the JVM to fix this, this patch ensures that even older JVMs will never validate this type of signature if its found in a PDF. * Improvements to the preflight process for large embedded fonts, eg those used for Chinese, to stop the widths array growing too large for PDF/A. * Improvements to the workaround we have to do when 2-byte font are used in Form fields, which will reduce memory footprint for large forms. * Fixed subtle issue converting tiling-patterns with "general" transforms applied to them that could cause them to render to bitmap incorrectly * Fixed an issue when merging Structure trees from two documents; iteration over a HashMap was causing random errors in the generated tree. * We were incorrectly identifying some content as being part of a nested marked-content sequence, which is invalid in PDF/UA. * PDFCanvas.beginTag() will now accept a "ref" attribute which is a space separated list of ids (or uuids) of other nodes, to be converted to the PDF2 "Ref" property on the element. Also cleanup name atts (eg Table:Scope) which had values set with incorrect leading slashes. * Consistently choose the correct rendering intent from ICC ColorSpaces when converting to PNG * Minor tweaks to OutputProfile in anticipation of PDF/UA-2 * Fail (rather then loop forever) when attempting to load an invalid collection index from a WOFF font * Don't fail when creating an AnnotationShape that has no area. * Set the appropriate feature when private-use range text is added to the PDF. * Minor bulletproofing to let us to work with some more types of damaged files 2.26.4 (released 2022-03-17) ------------------------------- * The "Resource Merge" step which can be used to potentially reduce the size of files assembled from multiple smaller documents was sometimes writing out fonts with a ToUnicode that was incomplete, or failing to identify duplicate glyphs because the originals came from fonts with a different "longloc" flag. Both now fixed. * Some very specific workflows could lead to a synchronization lock when reading PDFBookmarks - reworked these classes to make it impossible. * Fixed exception rendering a PDF when the XMP object has been explicitly disabled from the output. * Added PDFImage.setStrictDPI() to mimic the image DPI extraction rules from HTML5 * Don't fail when preflighting a PDF containing form fields with no font set. * Re-rendering a signed PDF that was missing a trailing newline is fixed. 2.26.3 (released 2022-02-16) ------------------------------- * Added PDFPage.createGraphics() and PDFCanvas.createGraphics(), to return a java.awt.Graphics2D object that can be used to write to the page or canvas. See PDFCanvas.createGraphics for details on this. * Fixed regression in 2.26 relating to image scaling; when on a workflow that runs two passes over the page (namely, printing), a transform applied to bitmap images was applied twice - only noticable with anamorphic scaling. Symptoms often included a blank or damaged page when printing. * Added XMP.setValidating() method to allow unknown XMP properties to be set without failing (known properties must still be of the correct type). This makes things a bit more useful for PDF/A-4, which no longer uses extension schemeas. * Fixed silly problem with PDF/A-1 validation - we were ignoring trailing noise in any Info Dictionary dates, causing us to pass some invalid files as valid. * Fixed a very specific issue when PDF/A conversion when no substitute fonts are available for a Type1 font inside a Type3 font. * The StandardEncryptionHandler was failing to decrypt files if bit 31 was not set as required in the specification. * Fixed a complaint about "this page is not in the PDF" when merging files that contains bookmarks and a structure tree. * OutputProfiler: added a "getStrategy() method; added new "PartialPages" strategy to render what we can from fatally damaged pages; ensure we only throw ProfileComplianceException when conversion fails; allow rasterized pages to be quantized to 8-bit via setCompressionOptions(). * XMP.getData() will include the namespace for unknown fields. Added an XMP.addAll() method to merge XMP objects. Added an XMP.repair() for when the repair to an XMP needs to be run manually, is it might be for an image XMP. * Fixed obscure threading issue when rendering OpenTypeFonts that are shared across PDFs (which we don't recommend). * More fixes for another batch of difficult documents to ensure we handle various types of corruption as nicely as possible. * Extraction of XMP metadata from PNG and JP2 images had never worked - fixed. * Improvements to the code matching XFA form fields to the Acroform fields. * Fixed exception when cloning a PDF then accessing the clones bookmarks. * Some fixes to ensure that brand new PDF files are created in a way that is generally compliant with PDF/A (fixes to Type3 fonts, canvas cloning, DeviceNColorSpace) * Made various changes internally to allow projects using the API to be compiled to native code using the GraalVM project. Mostly this was removing any use of Serialization, which was used internally in some places to store state. * Viewer: fixed the code for generating self-signed certificates added in the previous release to replace the calls to the internal sun classes. 2.26.2 (released 2021-11-11) ------------------------------- * Tested and verified with Java 17, dropped support for Java 5, and removed all support for Applets from viewer package. Note that JavaScript is NOT currently supported under Java 17; this is planned for a future release. * Reduced the memory required to load TrueType and (in particular) OpenType fonts, and delayed the instantiation of some of the data we need until the font is used. These changes makes it cheaper to load fonts that may not be used. * Added support for UTF-8 ECI mode to QR-Code, which means any UTF-8 character can be encoded. Reader support for this feature is common but not universal; we will only use it if no other encoding option for that character applies. * Adjusted the font selection algorithm in Preflight to favour smaller fonts. * When preflighting, certain types of damage no longer results in the page being rasterized. * When preflighting, reduce memory footprint for fonts that use 16-bit identity lookups for their ToUnicode structures (a regression in 2.26). * The method OutputProfile.getICCColorSpaces(), added in 2.26, was promptly broken in the following release and always returned an empty list. Fixed. * Fixed exception when justifying a LayoutBox line with only a single character. * When merging multiple structured documents, some tree structures could result in first level of the tree being sorted incorrectly. Now fixed. * Fixed bug introduced in 2.26 that prevented us creating a PDFCanvas from a PDFPage that had disabled optional content. * Added support for WOFF2 collections. * Fixed some bugs relating to OpenType color fonts * Minor fixes to some XMP namespaces. * Worked around an AWT bug on Linux relating to rasterizing PDFs; non-embedded fonts are rendered with a java.awt.Font, and a bug introduced in 11.0.4 (we suspect related to the Harfbuzz upgrade; it's still present in 17.0.1) causes diacritics on the text to be mis-positioned. (ref https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8277333) * Viewer: got rid of legacy "AppleSupport" class, replaced with general "DesktopSupport" for integration with the java.awt.desktop package. Theoretically this could apply on platforms other than macOS. * Viewer: the KeyStoreSignatureProvider.X509SignatureState class has a method, getCertificate(), which was confusingly named. Deprecated, and added getSigningCertificate() and getUnverifiableCertificate() to remove ambiguity. 2.26.1 (released 2021-09-30) ------------------------------- * Fixes for NameTree/NumberTree structures with > 8191 elements; we were not splitting these into smaller sections correctly * Vastly improved error logging, in particular during PDFReader stage - warnings are consistent and generally don't include stacktraces where they won't help. * Signatures: added support for RSA-PSS, Gost1360/1361, ECDSA signatures in IEEE P1363 format; added several workarounds for non-standard PKCS#7 variations if supported by Acrobat; fixes for unexpected variations of OCSP responses. * When preflighting and we have to rasterize, and the resulting image has no color pixels, convert to grayscale. * Add OutputProfiler.setRasterizingActionExecutorService, to allow the rasterizing stage of PDF/A conversion to be run in parallel. * Ensure OutputProfiler.apply() can be interrupted with OutputProfiler.cancel(), and ensure that we return at least the semblance of something useful from OutputProfiler.getProgress() while apply is running. * Fixed handling of XMP values that consist only of space characters, and of lists of invalid values which would cause nulls to get into the datastructure. * Fixed issue where Template pages containing form fields were losing their fields. Fixed issue where multiple copies of a Widget in a Field's list was not being repaired properly. * Added support for PDFs using non-standard UTF16LE encoding in Text Strings (eg Bookmark labels, Optional Content layer names, annotation text etc). This encoding is not in spec but is supported in Acrobat, and not uncommon. * Fixed concurrency issue relating to the retrieval of names from CFF fonts, which could cause features relating to incomplete CharSets to incorrectly be set when profiling a PDF. Seemed to be quite rare in practice. * Added rare but required standard CMap "V" and less-rare but non-standard UTF8 CMaps to the set included with the PDF API. * When choosing an ICC profile for use as a target profile, exclude profiles that are missing the B2A tables: we can't convert colors TO that type of profile * We were supposed to be updating the xmpMM:InstanceId and "secondary" trailer document ID to a new random number on each save, but we broke this two releases ago. Now fixed. * Many corrections to PDF/A-4 profile, in particular regarding color, actions and the many ways a PDF version number can be invalid. Many new features added. Many more very specific tweaks for various edge cases where our PDFA3 results disagreed with veraPDF and Acrobat. * Finished bulletproofing against Apache Tika and GovDocs - 50,000+ files. Many weird edgecases fixed (timezones of UTC+73 hours, pages over 600km on each side, Type3 fonts with negative glyph widths), and quite a few less weird ones too. All files load and parse where possible, or fail with an explanation otherwise. * Correct identification of "font missing unicode values" for PDF/UA and PDF/A-na profiles. * Fixes in a few workflows (text extraction, preflight) where fontsize=0 * Corrected rendering when rasterizing a page that contains a tiling pattern that overlaps itself. Result is a bit slower, but appears correct. * Where a PDF had thousands of fonts sharing one font file, we created thousands of parsed fonts, which did not end well. Now we create one. * Tweaks to the XMP output. Fixed type definition of Iptc4xmpCore:ContactInfo, and reflect that exif:MarkerNote was dropped in 2005 edition of spec * Updated the bfopdf-jj2000.jar to qualify an earlier fix which was breaking the loading of JPX streams under some conditions. 2.26 (released 2021-07-30) ------------------------------- * The OutputProfiler class has been extensively rewritten to allow conversion from any PDF to PDF/A. As part of this change some incompatible changes were required to parts of the API: -- the OutputProfiler.ColorAction interface had some methods added (implementers can just return null) and the ProcessColorAction implementation had a method removed (setAllowUncalibrated). -- the OutputIntent class has been added, and some of the methods working with OutputIntents in the OutputProfile class deprecated (although they still function). See http://bfo.com/blog/tags/preflight for details on this significant change * Changed the EmbeddedFile.getSize() method to return a long rather than an int. * Considerable performance improvements in a few areas; some operations, eg PDF/A profiling and certificate signature validations, should be quite a bit faster. * A lot of "bulletproofing" has been applied to ensure difficult files can be processed, identify loops and over-allocations early, and where we have to, throw sensible exceptions. * New methods on EmbeddedFile to manage folders as well as files; to manage modify/creation dates as Calendars (to preserve timezone information); to manage user-specified data; and to help track PDFs embedded in PDFs. Relates to the next item, and to the new "EmbeddedFile" display in the viewer. * Added the Portfolio class and the PDF.getPortfolio() method, to manage PDF portfolios (also known as PDFs that are mostly a tree of file attachments). * The PDF.getXMP method now always returns a non-null value, as XMP objects now have isValid() and isEmpty() methods, so can be used to represent invalid XMP. PDFCanvas, PDFSound, PDFPage, PDFAnnotation, ICCColorSpace classes now have a getXMP() method to augment the legacy get/setMetaData methods. * XMP metadata and EmbeddedFiles can be associated with elements in the Structure Tree. New methods in the OutputProfile allow retrieval of XMP (getXMPs()) and EmbeddedFiles (getAssociatedFiles()) from anywhere in the document * OutputProfiling was previously checking the XMP metadata on the PDF for compliance; we are now correctly checking all XMP metadata in the file. * Made some slight corrections to the PDF/A-1, A-2 and A-3 profiles, in particular to ensure we disallow undefined fields in XMP complex types; we believed this was allowed, but have since confirmed it is not. * When creating LTV signatures, we were caching OCSP responses with no explicit expiry time for this for 24 hours. Changed to 5 minutes, to match Acrobat. * Removed an unneeded synchronization lock when verifying signatures, to allow this to be done in parallel with most other operations, eg PDF/A validation * When signing, check the KeyUsage of the key and reject it if it's going to be rejected by Acrobat. This can be overridden by setting the org.faceless.pdf2.IgnoreKeyUsage property * We were accidentally dropping the timezone from the date when we create a DSS signature validation; now fixed. * We were not correctly recognising signed digital signatures that have no annotation (the presence of an annotation is an unofficial requirement) * Fix potential infinite loop when rendering a PDF with the ResourceMerge feature set, and rendering was running in a single thread. * Fixes for OpenType CID fonts where CID!=GID and OpenType GSUB substitutions are used; we were using the wrong lookup. * Viewer: the SidePanelFactory.isSidePanelRequired() method has changed signature to take a DocumentPanel rather than a PDF. The original PDF can be retrieved by caling DocumentPanel.getPDF(); * Viewer: moved most of the constants out into a PropertyFile that is compatible with the FlatLAF property file syntax. This should allow easier customization, including new icon packs, different margins/paddings on buttons etc. See Util.installUIDefaults() method for detail. * Viewer: general refresh to some of the UIs, specifically the Signature and Thumbnail side panels. * Viewer: Added an EmbeddedFile side panel, and support hyperlinks linking to embedded files. * Viewer: Added support for WebSwing, to display the Swing application as a web application. Added RemoteControl, OpenSystem and PrintSystem features to support this. * Added ConvertToPDFA example * Removed pack200 version of Jar. 2.25.1 (released 2021-03-30) ------------------------------- * Fixed rookie error when comparing timezones that may cause newly created PDF/A or PDF/X documents to fail when the local timezone switches to summer time. This one was introduced in 2.24.1, released in December. * Correctly generate PDF/A documents with more than 8191 pages. * We weren't properly handling rendering for some old Type 1 fonts where the ".notdef" glyph wasn't CID 0. Also added recovery for some even older Type 1s with noise at the end of some of the streams. * Better recovery from noise at the end of a page/content stream. * Optimizations for Sampled Functions with large numbers of input parameters. While rare, these were extremely slow so had an outsized impact on average performance. * Optimizations for common cases when recoloring images during preflight. * Fixed bug where OutputProfiler.FontAction may not correctly substitute a font, introduced in 2.24.3 * Corrected verification of LTV Signature DSS dictionaries when PDF is encrypted. * Include OCSP/CRL certificates for the Time Stamp in the DSS dictionary for LTV validation informaton. * Don't stack overflow exception when asked to display a form field with 128KB of binary data. Please don't make form fields like this. * Fix NPE when linearizing existing PDFs that have a missing (rather than empty) page content stream - this was a regression introduced in the previous release. * Viewer: fixed some issues with the Page Number field when switching between two different documents. * Viewer: some bulletproofing to handle cases where pages are removed from a PDF and those pages contain form fields. * Viewer: bulletproofing for pages containing form fields when switching to full-screen 2.25 (released 2021-02-26) ------------------------------- * The PKCS7SignatureHander.SigningEngine interface has a new setPassword() method, required for some types of PKCS#11. This is only an issue if you're implementing this interface, which most won't. But it is a breaking change, and the reason we jumped to 2.25 * Significant reductions in memory footprint for the entire API, thanks to some fairly nasty low level optimizations of some basic types. To quantify this, profiling shows the amount of memory required to load a 1000 page document with many annotations has dropped by about 20%. * Huge reduction in memory footprint when creating linearized documents, over 90% for some very large testcases. The tradeoff is a minimal increase in runtime, which we've been unable to notice in practice - although this can be disabled by setting the "org.faceless.pdf2.LinearizedSinglePass" property to not-null. * Fixes to the linearization structure for "old-style" documents where the first page opened is not page 1. Wider fixes to the same structures for "compressed xref" documents. * The sRGB profile we have been embedding in PDFs for many years is not quite accurate. Replaced with the compact, public-domain profile from https://github.com/saucecontrol/Compact-ICC-Profiles. This may result in a very slight shift in colors for any PDF generated by the API. We were also using the modified D50 constant from the ICC specification, not the correct CIE constant. Fix has resulted in a barely perceptible shift in brightness when rendering some PDF documents to bitmap images. * Officially added PDF/A-4 profiles to OutputProfile class, and tweaked a few features as a result. * Fail during render() when creating a PDF/A-1,2 or 3 PDF that has object pointers greater than the maximum integer value in those specs (approx 2GB) * Quite a few fixes to XMP * Added Value.clone(XMP) method, to deep-copy a value to allow it to be copied from one XMP to another. * Added Property.isDefinedIn() method, to show in which version of the XMP standard a property is defined, and Property.isValid() method. * Escape only control character during serialization, not all non-ASCII chars. * Ensure that all XMP values contain only characters allowed in XML1.1 * Ensure TimeZone-free dates don't suddenly aquire one when they're migrated. * Fixed creation of PDF/A extension schema Type when type is a closed choice * Correctly identify empty-dates and lang-free Lang-Alts as type mismatches. * Correctly reset OutputProfile features when properties are removed. * Identify and repair a particular type of damage to rdf:li. * Fixed "clear()" method which wasn't clearing everything. * Fix for an unusual combination of encryption settings relating to the long-deprecated 40-bit RC4 algorithm. * Fix to sin/cos functions in our optimized PostScript Function parser. * Added PDFDrawable.setDefaultColorSpace, to allow Device Gray/RGB/CMYK to be anchored to a calibrated space on a per-page basis. * Some very large patterns accidentally fell off the optimized path when rendering, which slowed down rendering considerably. Now fixed. * Cloning a PDF after its Structure Tree had been extracted for any reason, didn't always correctly sever the two documents. Now fixed. * Minor fixes to OptionalContent layers with exclusions (i.e. "radio-button" groups). * Fix for PKCS#11 signatures where the native PKCS#11 library enforces the "relogin before signing" requirement, which we hadn't implemented properly. * Fixed bug in WOFF2 parser causing us to miscalculate the glyph box, which sometimes resulted in glyphs being positioned incorrectly on the page. * Fixed obscure bug in Type2 (CFF) outline parser that was only visible if the text was being stroked, not filled. Regenerate CFF BBox if the value loaded from the font is invalid, as Acrobat requires it. * Extended the number and type of repairs we're able to perform on a StructureTree to bring a document into PDF/UA compliance. Fixes for some edge cases relating to the PDF2.0 "Artifact" element. * Fixed generation of MeshGradients in Lab colorspaces. * Viewer: added "ignoreDocumentPageMode" option, to ignore the document "page mode" option when opening a PDF. 2.24.4 (released 2020-12-11) ------------------------------- * New XMP class to make working with XMP metadata much easier. The XMP metadata we generate now includes DocumentID and InstanceID. Added support for RelaxNG schema use with XMP, as used by PDF/A-4. * Lots of small fixes to bring our PDF/UA-1 validation into agreement with the veraPDF corpus. Now completely aligned with their results (except for a few tests with confirmed or under-discussion errors in them). * FormSignature has getByteRangeCovered(), to make creation of signatures from an asynchronous signing service (like SwissCom's new service) a bit easier. * AcrobatSignatureHandlerFactory has a new "setTimeStampServers" method, to allow more than one TSA server to be used, for failover. * New get/putUserData() methods on PDF, PDFPage, PDFAnnotation and EmbeddedFile, to allow storage of your custom properties within a PDF. * When a beginTag/endTag sequence is issued and there's no content between them, include an empty content item so that the tags are anchored to that page and will be moved with them. * When migrating pages between documents that have tags, we also move any tags that refer to content on the migrated pages. Now, also move empty sibling tags at the same time. * Added magic "phoneme" and "phonetic-alphabet" attributes for tags, to store PDF 2.0 pronunciation hints. Added new "lexicons" DOM config option to StructureTree, to store a PLS-format pronunciation dictionary. * Fixed specific issue relating to a particular interleave of beginTag/endTag, text and canvas that was causing an NPE. And a similar issue where a particular nesting of tags inside an Artifact would cause an exception. * Applying an OutputProfile with a CMYK intent to a PDF with DeviceRGB content where the combination was disallowed, didn't always fail (and vice versa). Now fixed. We also report on this in OutputProfile.isCompatibleWith() * Fixed translation of shading/tiling patterns when creating a PDFCanvas from a PDFPage, if the page had a non-zero origin MediaBox or page orientation. * Changing the alpha value between text runs didn't flush the text; now fixed. * Slight improvement to the position of text in annotations where not enough space is available. * Added ITF-14 Barcode Symbology * Fixed a bug in the ICCv4.3 "lutAtoBType" table handler, which was causing some of the GWG tests to fail to render. * Fixed some poor synchronization in getNamedActions. * The position of underlines was out by the width of a line; fixed. * Fixed scaling of bitmaps in OpenType CBDT fonts * Fixed ToUnicode creation for Type3 fonts. * Viewer: ensure we call "documentEnabled" on all actions in features, not just those created by the standard ViewerFeature.setAction() method. 2.24.3 (released 2020-07-10) ------------------------------- * Added support for Khmer and Myanmar Unicode blocks, the last two scripts requiring special handling for layout. * Optimizations for OpenType-CFF parsing - on large fonts like Noto Serif CJK, speed is almost doubled. * Make sure we can handle characters defined in versions of Unicode ahead of the version supported by the JVM. Updated internal model to Unicode 13.0 * When rendering non-embedded CJK text to a bitmap on Linux, look for the Noto fonts on the OS as an option. Also, don't believe the AWT when it tells us that a glyph is defined in a Font (because, often, it's wrong). This should fix the occasional blank space where some dingbat characters should be. * Added support for preflighting and generating PDF/X-4 documents. * Added support for setting and getting ISO19593 processing steps to Optional Content layers. * Some compatibility issues had got into the code that prevented it from running under Java 5. Now fixed. * XMP metadata can be set and retrieved from fonts (it's extracted automatically from WOFF/WOFF2 fonts if present), elements in the StructureNode (if the bfo:metadata property is true, call element.getUserData("metadata") to retrieve), Optional Content layers and ICCColorSpace objects. * When manipulating OutputProfiles, don't lose the Output Intent. * Added support for extracting Color Separations from the OutputProfile * The Reader returned from the various "getMetaData" methods will always return the metadata as a String from toString(), so you can just do pdf.getMetadata().toString() to extract it in one line. * Fixed JavaScript support for Java 11/14. We are still using the deprecated Nashorn engine, as that continues to work under Java 14. * Some tweaks to PDF/UA validation to align with the expectations set by the latest version of the reference suite. * Some fixes for text extraction from fonts embedded with 0/1 cmaps. When extracting text with no semantic meaning, assign the private-use area characters based on the CID, not based on the order we encounter them, which was non-deterministic as this is multi-threaded. * Some fixes to links-to-structure-destinations, added in last release, and added support for creating links to embedded files. * Throw "ProfileComplianceException" (a subclass) rather than plain old IllegalStateException when trying to do something that is disallowed by an OutputProfile. This allows us to add more context to the exception. * Allow a "forced" PDF version number to be set when writing the PDF. While this shouldn't be required, ever, there are some workflows that require a specific version number, so this change caters for them. * Viewer: when importing a non-PDF file (eg a TIFF) into the viewer, we now disable the Save button, but initialize the filename to the matching PDF for SaveAs (the Save feature can be re-enabed for new files, see the API docs). * Viewer: the SaveAs feature has the option of only allowing the PDF format, and a new "Export" feature can be added to the viewer to save in non-PDF formats. 2.24.2 (released 2020-06-01) ------------------------------- * ToUnicode maps for OpenType fonts have been improved, and should now reflect any OpenType glyph substitutions. * The PDF Library now ships with some free OpenType fonts that are identical to the StandardFonts in every metric. These will be substituted by the OutputProfile.AutoEmbeddingFontAction, resulting in visually identical PDF but without the unembedded fonts. * Fixed the use of OpenType-CFF fonts in forms. * Added a new feature "OverprintOff", which can be set to denied to modify the PDF so it can be safely drawn as a canvas without knocking out any ink behind it. * Fixed OutputProfiler.ColorAction rebuilding of Type 1 shading patterns. * Added a new feature "DoubleCompression", which will remove a second compression from image streams that have been compressed twice. This could trigger a bug in Acrobat causing the images to turn bright pink ("My Little Pony" documents). * Some fixes to the StructureTree to make the structure it generates work a bit better with the NVDA screen reader. * Moved around some low-level features used in the OutputProfile to ensure we have one for every combnation of alt-text on link, annot and form StructElems. * It's now possible to create a "Tree" of OptionalContent layers, rather than just a list, with the new OptionalContentLayer.getOptionalContentLayers() method. * Added the ability to embed video and 3D models to AnnotationRichMedia. * PDFAnnotations can now be part of an OptionalContent layer * PDFAnnotations can now have Locales and Associated Files (both new in PDF2) * Cloning a PDF that uses embedded fonts within form-fields, and then filling the fields and saving the PDF with "merge resources" could result in the fonts being saved incorrectly. * Updated eiDAS trusted keystore to latest certificates * "Optimization" added in 2.23.2 to reduce memory footprint of Noto fonts traded away too much speed for memory; Reverted most of it. * Fixed off-by-one error that could rarely result in the API creating a ToUnicode map that garbled some letters on text extraction. Font specific. * Added support for GoTo actions to Structure Elements, part of PDF2 and likely required for PDF/UA-2 * Fix bug where sharing a PDFCanvas across two different PDFs could muddle some aspects of the the OutputProfiles, causing the later PDFs to not be PDF/UA. * Fix position of distinct but adjacent runs of text where the text was stretched. * Fixed clipping of mask on shading patterns. * Fixes for CFF fonts that don't terminate their real-numbers properly. * Fixed truncation during removal of 1-bit predictor stream on 8-bit streams. * Some fixes specific to math text layout. * Fix for longstanding issue with a particular type of "WAV" format in PDFSound. * Viewer: added PropertyChangeEvents to all ViewerFeatures (currently only the "enabled" change event is fired, to notify when a feature is enabled/disabled. * Viewer: change icon when dragging document into the viewer to the "copy" icon, not the "move" icon. 2.24.1 (released 2020-03-20) ------------------------------- * Verified as working against Java 14 * Several fixes in the "Structure Tree" classes to more accurately represent the way namespaces are used in PDF 2.0. Added the ability to set namespaces in the "role-map" - see PDF.getStructureTree for detail. * Added ability to get/set properties in the StructureTree "class-map", again see PDF.getStructureTree for detail. * Improved repair of StructureTree when pages contain hyperlinks to pages that have been removed before saving. * Changed the way text is extracted from the PDF from an adhoc mix of rules, to match *exactly* the "AGL" specification recently published by Adobe. Some older documents where the text is not encoded correctly may regress, others will have their text extraction improved. * Fixes bugs and reduced size of ToUnicode maps extending beyond the BMP. * Optimizations for reading PDFs with millions of pages. * Fixed an issue where PDFs with multiple revisions could be written in such a way as to trigger error messages in Acrobat. * Added parsing of Math tables from OpenType fonts, and some support methods for this in PDFGlyphVector to kern super/subscripts correctly. * Added support for OpenType Color fonts using the Microsoft "COLR" table. See the OpenTypeFont.Palette interface for details. * Fixes for WOFF2 fonts, fixes for non-latin encodings used in font-names, fixed font bounds calculations when reading fonts from a URL, fix font bounds where the font specifies USE_TYPO_METRICS. * Fixed errors applying kerning to text from OpenType fonts where the text is made of multiple scripts, eg hiragana and kanji * Correctly handle gradients where stop colors are in a mix of ColorSpaces. * The validity state of the middle signatures in a document with three or more digital signatures was sometimes incorrect. Now correctly consider changes applied in all revisions after the signature. * Correctly orientate digital signatures on pages with the "Rotate" flag set. * Parse and generate the PDF 2 "Path" entry for shape annotations, to represent a shape with curves without having to flatten it to straight line segments. * Viewer: we weren't correctly recognising PDF 2.0 documents! * Viewer: AbstractRegionSelector.setRegionShape to allow selecting different types of region, e.g. a fixed size box, a point, a single line and so on. SelectArea (which extends this class) also gets methods to optionally prevent the shape being moved, resized or extended beyond the page. * Viewer: source code cleanup to remove some "lint" warnings that can be turned on in javac. 2.24 (released 2019-12-04) ------------------------------- * INCOMPATIBLE CHANGE: Support for the PDF "structure tree" required by PDF/An-a and PDF/UA has been completely reworked in this release, primarily to improve PDF/UA support and add support for XML namespaces, new in PDF 2.0. As a result some of the PDF/UA specific features in the OutputProfile class have been removed and replaced with others that are more accurate and better reflect a world with both PDF 1.x and 2.x. In the event that your code refers to individual features by name, rather than simply as part of the large PDF/UA profile, you'll need to make code changes. Contact support@bfo.com for guidance on this. * INCOMPATIBLE CHANGE: some compatibility names for attributes have been dropped from the map that can be supplied to the "beginTag" method in PDFPage, PDFCanvas and LayoutBox (for example, "ID" is no longer a synonym for "id", and "Scope" not longer a synonym for "Table:Scope"). Consult the PDFCanvas.beginTag API docs for details. * Added the PDF.getStructureTree() method as a simpler synonym for the same method on PDFParser. The returned Document is now live, and can be manipulated to modify the PDF's logical structure. This means that merging two documents that each have a logical structure is easier; where we don't get the structure right automatically, it's possible to modify the tree with the regular Java XML packages. * Completely redid the PDF/UA profile. Finer grained reporting of invalid structures has been added, giving the ability to selectively disable those tests deemed a bit too "strong". Creation and validation of PDF/UA documents should be a lot more correct. * Fixed an issue introduced in 2.23.2 which would rarely result in text disappearing or errors in Acrobat. We'd partially fixed it a while back but never identified the root cause, an undocumented requirement in Acrobat. Now finally fixed for good. * Fix an issue loading linearization tables as created by Oracle, resulting in our API complaining the linearization was damaged. * Audited and removed many changes that were happening unnecessarily, to reduce the number of object marked as changed when saving a PDF that previously had a digital signature. * Optimizations to OpenTypeFont layout should result in 10% faster text layout when making heavy use of GSUB/GPOS tables. * Added ability to load OpenTypeFont that consist only of a CMap and CFF table, as generated by Adobe Illustrator 12.0 2.23.7 (released 2019-09-27) ------------------------------- * Improve our best guess as to exactly what Acrobat is doing when validating PAdES signatures. * Fixes to signing and verifying PAdES LTV signatures. We will now download missing CA certificates rather than just complaining they're missing. * Fixed regression introduced in 2.23.4 which could result in text not being displayed properly if the canvas was flushed at a particular stage in the workflow. * Include a list of "trusted root certificates" with the API, accessible from FormSignature.loadTrustedKeyStore(). This currently includes the root certificates required to validate signatures signed under the EU eiDAS regulations. This is why the Jar is 2MB larger than the last release. * Add a new "FN1" warning which is displayed when a font is being shared across multiple threads in a dangerous manner. * Fixed final issues reading WOFF2 format fonts - now passing all WPT tests. * Fixes relating to correctly identifying the end of an inline-image where the image has been intentionally truncated, rather than truncated due to damage. * Fixes for a number of XFA issues. * Fixed obscure deadlock when loading linearized PDFs from a web-server. * Fixed ICC profiles that use the same Matrix as sRGB but a different gamma curve; these were mistakenly being identified as sRGB, resulting in slightly incorrect colors when rendering to a bitmap. * Fix for PDFCanvas.drawPolygon where the polygon only has two points. * Fixed some issues to do with logical structure creation in PDF, which manifested by some of the text in Acrobat not highlighting correctly, or not being available to edit when "Edit PDF" is selected. * Fix an issue parsing Type1 fonts where the PostScript actually defines multiple fonts, as seen in a document created by Cairo engine. * Viewer: Fixed Save button becoming disabled if a Save fails under particular circumstances. * Viewer: Fixed "gray box" sometimes occurring when a thumbnail panel is moved around in the viewer (regression introduced 2.22) * Viewer: Fixed visual issues painting annotations at relatively high zoom levels, a regression introduced in 2.23.4 * Viewer: Fixed some exceptions resulting from races during closing. * Viewer: don't close the parent frame when closing the PDFViewer unless we created it. * Viewer: fix issue which prevented the KeyStoreManager from working with custom KeyStore types (regression introduced 2.23.5) * Viewer: ensure callback to listener passed to PDFViewer.loadPDF() is called after all other callbacks. * Viewer: fix issue where deleting a page via the thumbnails panel could result in an incorrect selection. 2.23.6 (released 2019-08-30) ------------------------------- * Added the Ideographic Variation Selector list to the characters supported by the Japanese StandardCJK fonts. Variation Selectors will also be silently skipped where not available. * Fixed regression introduced in 2.23.2 relating to the way text was marked up within a Structure Tree, which resulted in gaps when text was selected in in Acrobat. * Fixed some issues with Kashida justification for arabic. * Fix for a particular type of gradient containing a hard color transition. * Fix for very rare, PDF-only variation on CCITT.G4 that interleaves image data with normally invalid EOL markers (as made by Xerox Workcenter 7120). * It's now possible to synthesize the various Unicode space characters and the Unicode U+2011 and U+2010 (hyphen and nbhyphen) from a regular space and regular hyphen/minus by setting an appropriate font-feature value. * Fix for 2D sampled shading functions. * Fix for issue reading inline images where the data has been deliberately truncated early. * Fixed an issue where Shading patterns could be damaged when preflighting a document. * Better text extraction for common Adobe InDesign method of embedding fonts. * Ensure superscript/subscript versions of the style have the same underline and strikeout positions as the originals. * Fix deadlock when loading using the "linearized" loader. * Fix for XFA when datasets contains attributes with namespaces, fix for some XFA binding issues, and performance enhancements for XFA datasets loading. 2.23.5 (released 2019-07-31) ------------------------------- * Added FormSignature.addAnnotation() method that takes a PDFCanvas for the appearance stream, as an alternative to setting it on the factory * Added OptionalContentLayer class, PDFCanvas.setOptionalContentDescriptor() and PDF.getOptionalContentLayers() methods to allow creating and editing optional content layers in the PDF. * Fixed bug in BarCode which could result in 1D barcodes (Code128 etc) being assigned the wrong height if the the "setWidth" method is called to resize them. * Work around some bugs in Acrobat when form fields use a variety of fonts. Improvements to the way buttons with images are written out. * Fixed LayoutBox.getText() value if the text in question has been split onto multiple lines after opentype substitution. * Fixed text cursor if last character in the string was a non-spacing mark that was positioned vertically with the GPOS table (rare, but more common than it sounds). * Fixed position of hyperlinks created from an abstract Shape. * Reworked locking to avoid deadlock in font rendering (reported by a customer running 150 threads for several hours, so not a concern for most). * Fixed crash when rendering zero-sized annotations in the viewer. * Recognise the "cc" prefix when embedding creative-commons license information in the XMP metadata. * Viewer: fixes for signing with PKCS#11 SmartCards 2.23.4 (released 2019-06-26) ------------------------------- * Fixed regression where PDFs saved with a combination of encryption and compressed XRefs were causing errors in Acrobat (introduced in 2.23.2). * Fixed regression from previous release where creating a new PDFCanvas from a PDFPage would incorrectly set a Transparency Group, which causes problems for PDF/A. * Predictors on LZW/Flate streams were implemented poorly. Now about 10x faster. * Optimizations of the way text is written, in particular if the Document Structure is being created, to reduce filesize. * Workaround invalid AES encryption of zero-length strings, as created by some products. * Fixed overzealous remapping of glyphs to the private-use area when extracting text. * Fixed errors when rendering Annotations with absurdly large dimensions. * Added experimental Kashida justification for arabic. * Fixed small-caps synthesis when used with OpenType fonts. * Added support for OpenType CBDT table to load color bitmap glyphs, as sometimes used for Emoji. * Fixed a failure which could occurred when loading resources (eg fonts or images) direct from a URL. * Updated internal Unicode model to 12.0. * Viewer: improvements to the way the "dirty" flag is monitored, to prevent the viewer from being closed without prompting the user. Also fixed the "Quit" feature to trigger a window close event, rather than just calling System.exit. 2.23.3 (released 2019-05-30) ------------------------------- * Fixed two regressions in previous release relating to the way documents with compressed XRef tables are structured. One which could break some PDF processors, one which could hang when writing compressed, linearized PDFs * Changed the way radial, linear and mesh gradients with an alpha component are created to (mostly) work around a bug in macOS Preview.app, and added support for linear interpolation. * Legacy code cleanup relating to rendering shapes and styles in PDFPage/PDFCanvas, for more efficient output when writing. * Added WOFF2 support to OpenTypeFont class; more robust parsing of OpenTypeFonts with truncated tables * Fixed setInfo("Marked", true). * Fixed invalid rollover states on checkboxes which could cause them to seem a bit odd when the mouse rolled over them in Acrobat. * Improvements to the way non-rectangular outlines for hyperlinks are stored. * Add "alt" text to structure output * Fixes to letter-spacing and kerning for right-to-left languages; fixed transform applied for fake-italic. * Forcing recompression with OutputProfile.setRequired(RegularCompression) is now guaranteed to never make the PDF bigger. * Fixes for a particular PDF with a strange form of JPX compression * Added PDFCanvas.setMask, to allow PDFCanvas to be created with a soft mask * Added PDFCanvas.setBox/getBox and PDFPattern.setTransform. * Fixed metadata profiling for non-core metadata. * Viewer: don't fail when dragging iconised windows about. * Viewer: Undo/Redo keyboard shortcuts will work even if Menus are disabled * Viewer: added ThumbnailCopyAction 2.23.2 (released 2019-03-08) ------------------------------- * It is now possible for the PDF API to write linearized PDFs with "Compressed XRef tables" * Fixed LayoutBox bug, introduced in 2.22.2, that could cause text with -ve track kerning to wrap unnecessarily. * Some fixes to the way structured tags are inserted into the PDF * Fixed color shift converting DeviceCMYK to GrayScale profiles during Preflight * Creating a PDFCanvas from a PDFPage where only some layers were visible will now discard the hidden layers. * Mitigate a theoretical attack on PDF digital signatures as described at https://www.pdf-insecurity.org/signature/signature.html * Deprecated some recently added OpenTypeFont constructors and replaced with new ones that are better designed for use with OpenType collections. * Added PDFFont.getDefinedCodepoints() method * Fixed redaction of PDFs containing Separation ColorSpaces with spaces in the ColorSpace name * Reduced memory footprint for large OpenTypeFonts (eg the Noto fonts) * When preflighting, unused Separation ColorSpaces are now removed completely from the PDF. Separation Colors that are converted to process color are completely replaced rather than just remapped, although the old behaviour of remapping the inks is available (see OutputProfiler.setRemapNamedInks) * Fixes for when the soft mask used while rendering derives from an image that is itself translucent, as created by iOS renderer. * Fixes for better error logging for some types of broken JPEG2000 images. * Bulletproofing XMP metadata extraction to handle buggy xpacket headers. * Corrected inheritance of Resource map during redaction * Updated the Chinese CMaps to include HKSCS-2016 and Japanese to include U+32FF * Added "implied" option to PDFFont, to allow the actual text to be inserted into the Structure. Useful for languages making heavy use of OpenType fonts. * Added option to extract OpenType baseline information where available, and the PostScript font name. * Fix for 12-bit sampled functions * Fixes to handle various misformed PDFs 2.23.1 (released 2018-12-14) ------------------------------- * OpenType/CFF fonts that are not CID encoded will now be rebuilt as CID fonts on-the-fly as required. This finally removes the "OT8" warning, the workaround we put in to avoid bugs in the OS X Preview.app viewer, which was itself causing problems with some fonts when printing from Acrobat. * Fixed an issue where some OpenType fonts (specifically Noto Sans Arabic) would sometimes be missing a glyph when subset. * Deprecated OutputProfile.Feature.PurgeResources, as this step is now always run when the PDF is rendered. * Added DeviceNColorSpace.Builder, to allow creation of custom N-color ColorSpaces. * Added MeshGradient, to allow creation of "Coons Patch" gradients alongside the existing radial and linear gradients. * Fixed issue where the CIDtoGID map wasn't being applied to CFF fonts. * Fixed typo in Code128 preventing the backslash working. * Added BarCode.setText, to use custom text or a custom font on BarCodes. * Added PDFGlyphVector.setGlyphTransform, to manipulate an individual glyph * Fixed mismatch between a gradient fill and the alpha channel of that gradient fill, which occured if the gradient had a translate on its AffineTransform * Fixed incorrectly encoded transparent PNGs that would display as opaque. * Fixed rendering shading in a PDF when the shading contains an ExtGState * Special handling for "All" Separation in SpotColorSpace, for printing registration marks. * Slight improvements in render quality for particular type of Gouraud triangle shading. * Underline and Strikeout positions loaded from OpenType fonts were wrong by half the width of the line. Now fixed. Although this is a negligible change, anyone converting PDFs to bitmap and comparing pixels to look for changes may notice. * Fixed rasterizing PDF to a Graphics2D when the Graphics2D had a translating AffineTransform, and the PDF itself contains Transparency Groups. * Added PDFGlyphVector.getOutline() method. * Fixed bug in ICC ColorSpace handling relating to GrayScale spaces defined against the Lab PCS. * Respect the winding rule when drawing a Shape to PDFCanvas, and added the "Miter Limit" property to PDFStyle. * IOExceptions due to damaged input encountered during Redaction are now warnings by default, as they are for rasterizing. Fixed a couple of errors occurring in redaction for certain types of Document. * Viewer: honour "UseNone" viewer preferences when opening a PDF, to hide the side panel. * Viewer: fixed Exception during PDFViewer.close which was introduced in the previous release. * Viewer: don't fail when saving to a new file (bug introduced a few releases ago). 2.23 (released 2018-10-08) ------------------------------- * Verified against Java 11, and dropped support for Java 4. * Repackaged: the supplementary Jars "bfopdf-cmap.jar", "bfopdf-qrcode.jar" and "bfopdf-stamp.jar" are all combined into the main Jar, and "bfopdf-old.jar" is no longer being distributed (it contained wrappers for the original 1.0 API). * Removed the "RemoteSignatureHandlerFactory" class, which hasn't worked for many years, and removed methods that have been deprecated for over ten years from PDF, PDFSound and Event (Credit to Benoit Côté-Jodoin from GoSecure for pointing out issues with the RemoteSignatureHandlerFactory class). * Wrote our own ICCColorSpace class to replace the java.awt.color package, which is unstable in a multi-threaded environment. As well as benchmarking slightly faster than the native code original, it brings support for v4 ICC Profiles to Java 7 and earlier. * Many optimizations to try and target the improvements to the JIT compilers since Java 8, and to reduce the memory footprint for incidental allocation where possible. Average workflow appears about 5% faster. * Added some methods to PDFGlyphVector to make it a bit more flexible. * Fixed an issue where BitMask images containing a color tint were not having that tint applied correctly under Java 8. * Fixed the line spacing calculation when the "correctleading" feature is set to match that used by most OpenType libraries. * Fixed issue converting duotone N-color images to RGB when rendering, and enabled conversion from ICC RGB profiles to sRGB. * Fixed NullPointerException sometimes seen when converting the Color of bitmap images with an OutputProfiler.ColorAction. * Fixed UPC-A barcode output to allow a non-zero prefix. * Fixed GS1 Databar text output where the text had a leading zero. * Workarounds for bugs in OpenType features in some older fonts. * Viewer: Added PDFViewer.isClosing() to allow long-running features to shut down gracefully. * Viewer: Fire a "selection" PropertyChangeEvent from TextTool when the selected text is changed, to make it easier for classes extending the viewer to respond to text selection. * Viewer: KeyboardFocusManager appears to hold references to Keyboard shortcuts even after Menu items have been removed. We have added several last-ditch attempts to work around this to PDFViewer, and also decoupled the actions from the Swing Components to allow the Viewer to be garbage collected on close. 2.22.2 (released 2018-07-31) ------------------------------- * We're now distributing a JPEG-2000 decoder with the PDF library, supplied in "bfopdf-jj2000.jar". Sources are at https://github.com/faceless2/jpeg2000. This version fixes some bugs in the standard release, reduces the memory footprint and removes some dependencies. We recommend adding it to the classpath and removing any other "jj2000" Jar you may have already. * Rewrite of the Indic language shaper which was previously working properly for Hindi, but not much else. Verified test results in Assamese, Bengali, Punjabi(Gurmukhi), Gujarati, Kannada, Malayalam, Marathi, Oriya, Sinhala, Tamil and Telugu. * Many associated fixes to OpenType font positioning, which may improve results for other languages too (in particular most Urdu fonts are now working). * Improved heuristics for fonts that have non-spacing marks with advance. * Added OutputProfiler.ImageAction, to allow more control over downsampling or recompression of images. * Fix for documents with Encryption Dictionaries containing indirect references. * Some minor ColorSpace math fixes * Refactored to remove some synchronization * Fixes for OSGi statements in Manifest * When applying a new signature to a PDF/A file, we now check the addition is PDF/A compliant on creation. * Add cached for OCSP responses, which should speed up validation of multiple signatures. * Viewer: Remove lingering reference preventing the final instance of the viewer from being garbage collected * Viewer: BackgroundSignatureVerifier class verifies in background, not on EDT! 2.22.1 (released 2018-04-27) ------------------------------- * Reduced memory pressure when working with documents containing a StructureTree in many simultaneous threads. * By popular request, added UPCA Barcodes as a distinct variation of EAN13, but with slightly different text formatting. * Fixes for WOFF font format parsing * Fixed data being truncated after a U+FEFF character in the text when using the non-OpenType layout engine, introduced in previous release. * Fixed issue that could result in two XMP packet headers in the metadata, introduced a few releases ago. * Added PDFStyle.setLineBreakBehaviour to control the line breaking, and updated line breaking rules to support latest release of UAX#14 as well as the variations defined in css-text-3 * Improvements to OutputProfiler.AutoEmbeddingFontAction should result in a better choice of font. * Improvements to OutputProfiler.ProcessColorAction to skip conversion of device gray, RGB or CMYK. * Improvements to the way the OutputProfiler repairs PDFs containing form fields when trying to bring them into line with PDF/A * Write out a full CharSet when creating an OpenTypeFont - we need all glyphs listed for PDF/A-2 and PDF/A-3, not just the used ones. * Rendering a page or annotation with severe structure problems would previously throw an exception. We now render as much as we can and report a PP2 warning. * Fixes to allow the use of LinearGradient and RadialGradients containing alpha values as fill or line paints in the PDFStyle class, and add support for AffineTransforms on those classes. * Correctly apply ligatures when arabic is displayed left-to-right or non-arabic is displayed right-to-left (useless, unless you are trying to pass testcases) and more fixes to position of marks in arabic. * Fix ClassCastException when changing the ColorSpace of an indexed image, introduced in previous release. * Speed improvements to the preflighting code when converting an image from one colorspace to another. Also corrected the value of "type" being passed in to OutputProfile.ColorAction. Note: these changes first appeared in 2.22, but were missed from the changelog. This release fixes some small bugs added in that release. * Added PDFImage.getResolution and PDFImage.getOrientation methods. * Viewer: fixed memory leak that could occur when verifying digital signatures in a PDFViewer containing a single DocumentPanel, then closing and repeating. * Viewer: fixed NPE from DocumentPanel that sometimes occurred on closing. 2.22 (released 2018-03-12) ------------------------------- * The text layout model has been rewritten to accomodate fixes to the OpenType layout engine and the bidirectional model. Due to floating point rounding difference this will mean fractional sub-pixel differences to justified text. * INCOMPATIBLE CHANGE: We now have the ability to set an OpenType feature to an integer, not just on or off. This is rarely required except for "swash" letters, but it required a minor change to the API: PDFFont.getFeature and PDFStyle.getFontFeature now return an int instead of a boolean. * INCOMPATIBLE CHANGE: Removed long-deprecated "requote" and "ligaturize" from the PDFFont class, as these are incompatible with the new text model. These were deprecated and the functionality rolled into PDFFont.setFeature in release 2.11.21 (released Feb 2012). * Added new GlobalSignDSS class, to apply digital signatures using the new GlobalSign digital signature service. * Added a new PKCS7SignatureHandler.SigningEngine class to allow the "outsourcing" of some of the core tasks of PKCS#7 digital signatures to a custom class (such as the GlobalSignDSS class). * A number of fixes made to the code for adding long-term validation information to a signature (specifically for the Indian ID card certificate hierarchy, but generally applicable). * Updated OpenType font handling to version 1.8.2 of the OpenType specification (excluding the new Font Variations). Fixed a number of bugs relating to the way glyphs are shaped and positioned using the OpenType engine, particularly in the Indic languages and where multiple combining characters are used. * Fixed some of the more complex cases in the Bidirectional algorithm for Arabic and Hebrew, to do with nested runs. The Locale of the LayoutBox is now a critical part of the algorithm, so be sure to set it to the primary language of the paragraph. * Updated internal Unicode model to 10.0. * Added support for Unicode "Variation Selectors" where available in the font. These are primarily used for Chinese/Japanese fonts to resolve some of the issues with Han unification. * Added quite a lot of functionality to the PDFGlyphVector class, to make it useful for high-performance text layout not using a LayoutBox. * Added "italic" and "smallcaps" font-features, to allow synthesized italic and small-caps to be created directly on a PDFGlyphVector. * Fixed more slowdowns relating to editing documents containing an existing Structure Tree. * Added PDFPage.setUserUnit method, required to create very large pages in PDF. * Fixed rare bug in JBIG2 decoder. * LinearGradientPaint and RadialGradientPaint can be used as Paints in the PDFStyle class. * Add additional space at end of line when it has been split, for PDF/UA text extraction. * Added ability to create a PDFCanvas with a particular blendmode, via a new constructor. * Removed some unnecessary work that was being done when adding text content to the PDF; this could result in speed improvements if there is a lot of text being added. * Speed improvements when rendering very large, very complex gradient shading (specifically Coons Patch shading, types 6 and 7). Some pathalogical test cases were so slow the appeared to have hung, speed is now back to normal. * Viewer: removed some lingering references to the previous PDF that could occur when a single DocumentPanel is reused for multiple PDFs, rather than a new DocumentPanel being opened each time (as would happen when MultiWindow was turned off). 2.21 (released 2017-12-14) ------------------------------- * Added a new PDFDrawable interface which is implemented by both PDFCanvas and PDFPage. This necessitated some very minor changes to some method signatures in the PDFPage class: although no changes are required to client code, anything calling the pathBezier, pathLine, pathArc or transform methods on PDFPage will need to be recompiled. * OpenTypeFont, PDFImageSet and PDFImage can now be loaded from a File or URL, using the same "lazy load" approach available for loading PDFs. This is mainly of use when working with very large fonts or multi-page TIFF images. * Drastically reduced the amount of memory required to work with OpenTypeFonts and StandardCJKFonts, particularly when cloning them for simultaneous use in multiple threads. * PDFReader, PDFImageSet and OpenTypeFont all have new methods allowing their objects to be loaded from an existing URLConnection. See BFO blog article for details on why this might be useful. * Logging can now use Log4j version 2 if available * Added Type3Font class, for custom font creation. * Worked around a particular type of bug in some LZW compressed TIFF images * Tweaked the way the Executor created for use internally to the PDF Library manages threads, resulting in less idle threads hanging around after use. * Catch situation arising from modifying a signed PDF where the objects needing to be modified were direct. This resulted in a PDF where a new signature appearance on an existing page wasn't visible in Acrobat. * Removed warnings about PDF streams being the wrong length in a few situations where the spec allowed it. * Removed warnings about PDF/A XMP conditions that are not considered invalid in the latest PDF/A technical note. * Add method to create translucent Lab colors. * Load special Apple kerning table from special Apple OpenType fonts * Don't return kerning values from PDFStyle.getTextWidths() if font has kerning disabled. * Don't trim 0xA0 from end of line (regression in 2.18.7) * Final batch of PDF417 bugfixes * Added a few missing getters to match existing setters in PDFStyle * Viewer: several fixes to viewer when working with linearized documents, in particular when loading is cancelled before completion. * Viewer: removed hard-coded font sizes from a few points in the code, and added Util.setFontScale method as a means of scaling fonts in the viewer for HiDPI screens (far from ideal, but the best option we have in Swing). * Viewer: fixed regression from previous release where the Outline pane might not complete loading. 2.20.3 (released 2017-10-19) ------------------------------- * No longer render optional content layers that are initially off * Added isRTL/setRTL methods to FormText/FormChoice/FormButton, to set undocumented but useful flag used by Acrobat * More resilient parsing of CCITT encoded images that have deliberate errors but specify the DamagedRowsBeforeError flag. * Rather than throwing an exception, make a best effort to handle variants of digital signatures that specify their own Filter but use a standard SubFilter * More fixes to PDF417 thrown up by fuzzing. * Fixed storage of non-user attributes in the StructureTree * Fixed loading of interlaced 1/2/4 bit PNG images, almost never seen in the wild. * Added PDFImage(PDFImage) method to clone an image, for rare cases where an image is used in multiple threads and modified after load (which is not a typical practice) * Viewer: KeyStoreManager is working with PKCS#11 under Java 9. 2.20.2 (released 2017-09-22) ------------------------------- * Significant speed improvements to PDF.rebuildStructureTree. * Decode array on ImageMasks was not working properly. * Implemented "Alpha" masks, and improvements to the way SMask on GStates was applied, leading to better blending of transparent colors. * Kill stuck thread that could occur if an error was encountered while loading a PDF from a URL. * Fixes to PDFParser.getDitheringColorModel and PDFParser.getBlackAndWhiteColorModel. * Fixes to the algorithm to choose the best font for replacement in OutputProfiler.getAutoEmbeddingFontAction, and also attempt to recover if the the replacement font doesn't have all the required glyphs. * Attmpting to apply a new OutputProfile such as PDF/A to a new PDF that has already been edited will now (correctly) insist that the existing profile be determined first - this closes a small loophole that could allow the creation of a file that claims to be PDF/A but isn't (for example). * Fixed issue with a seldom-seen variant of TrueType outline that could cause small distortions in some glyph shapes. * Added new PDF417 Barcode method to cater for absurd incompatible change in specification five years after it was initially released. * Fixed typo in PDF417 barcodes that could sometimes cause codes with a colon character to be encoded incorrectly. * Viewer: removed some references that would delay garbage collection of a linearized PDF that had its load from a URL interrupted until the entire PDF was loaded. * Viewer: don't allow save to a read-only file - previously this was allowed so long as the filename wasn't prompted for. * Viewer: added the option to disable the class prompting for HTTP authentication details, due to reports it was breaking SPNEGO (Active Directory) authentication when run as a JNLP application. * Viewer: added workaround for Java bug 8042020, the everpresent horizontal scrollbar under the Nimbus L&F. 2.20.1 (released 2017-06-20) ------------------------------- * Added OutputProfiles to validate and create PDF/A-2u, PDF/A-3u and ZUGFeRD documents. * This release brings our API largely into agreement with the industry-wide "verapdf" test corpus for PDF/A validation - the exceptions are all the subject of open queries. This has meant a large number of subtle changes to the PDF/A profiles. * Added a large number of new OutputProfile.Features to XMP to validate types, and deprecated a few others (to cater for the previous item) * Added OutputProfile.getClaimedTargetProfiles, to make validating a document against all of its standards easier. * Minor improvements to page extraction when text is overlapping * A few minor tweaks to ensure we can create and parse documents from the upcoming PDF 2.0 standard. * Added FormSignature.setRequiredDigestAlgorithm(), to set the list of allowable digest algorithms that can be used to sign a blank signature. * Workaround to handle curious interpretation of PKCS#1 in DynaPDF signatures. * Added bfo:key, bfo:pos and bfo:pdf attributes to the beginTag method, to allow StructureTree nodes to spread over a more than one location in the PDF * Cleaned up error reporting when trying to load a damaged font: damage is only reported once per font in the logs * Fixed long-standing, very subtle bug in PDFs we generate: we were setting the whitepoint of any sRGB colors used to D50, in fact it should be D65. The corresponding Matrix ensured the results were visually identical, but D65 is more correct. * Fixed an issue where we painted way more pixels than we needed to when a SoftMask was used with a massive bounding box. Documents exhibiting this will now render faster. * More tolerant parsing of off-spec Radio Buttons in incoming PDFs * When partially redacting an image that was compressed with DCT (JPEG) compression, ensure the redacted image is compressed the same way. Although this means two lossy compression cycles for the image, the alternative is a potentially massive increase in file size. * Viewer: a few changes to make it easier to recompile the classes into a non-standard package. 2.20 (released 2017-04-10) ------------------------------- * Changed default encryption algorithm to SHA256. If you want to continue using SHA1 for signatures, you will now need to specify this explicitly. * Added full support for creation and verification of PDF/A-1a, PDF/A-2a, PDF/A-3a and PDF/UA compliant doucments. This includes new OutputProfiles, and a large number of new OutputProfile.Feature entities. * Fixed creation of new structure elements, broken in 2.19.1. * Fixed a bug in OCSP verification of signatures that would cause some verifications to fail. * Fixed very obscure issue where extracting a full Output Profile on a PDF containing PDF file attachments on N pages, where N >= the number of worker threads the PDF has (defaults to number of cores) could cause a deadlock. * Fixed a few obscure problems after running our PDF API against 15,000 documents from the "govdocs" corpora. * When rasterizing a PDF to a bitmap, confirm that fonts that claim to have a specific glyph do have it. * Fixed OutputProfiler.ColorAction not running on a newly created PDF. * Bulletproofing for various types of corruption in embedded OpenTypeFonts. * Reverted warning added in 2.19.1 referring to "invalid date"; specification changed without comment, so we must presume both formats are valid. * When rendering a PDF with missing glyphs in the font would previously give a blank space, now we attempt to locate a glyph that is theoretically visually identical, and print a warning. * Added various new OutputProfile.Features to identify the algorithms used in any digital signatures applied to the document. * Viewer: tested successfully against Java 9 EA builds. * Viewer: when running from JNLP, allow the "jnlp." prefix to be used on any of the properties, to alllow them to be easily set in the JNLP file. 2.19.1 (released 2017-03-10) ------------------------------- * Fixed a bug introduced in the previous release where cloning a page by calling PDFPage(page) would cause an exception if the page was from a PDF containing structured content * Use "soft clipping" when rendering the PDF to a bitmap, to work around limitations in the AWT. This should result in considerably better ressults when converting certain types of PDF to a bitmap (in particular those documents that use a clip path and fill to draw text). * Setting the "TaggedPDF" feature to denied before applying the profile will remove teh Structure Tree, root and branch, from the PDF. Previously we were only removing the root. * Repairing a PDF that contains multiple copies of the same field is now done the same way as Acrobat. * Don't fail when a font Widths array has > 256 entries. 2.19 (released 2017-03-01) ------------------------------- * Many improvements relating to PDFs containing "Structured Content". Since 2.18.7, moving pages between documents when the PDFs involved contain Structured Content was occasionally taking more time and memory, as we were attempting to preserve the Structured Content during the page move. These methods are now back to full speed, and if the Structured Content is to be preserved then the new PDF.rebuildStructureTree() method should be called. * Improvements to the way we create new Structured Content (via the beginTag/ endTag methods), making it possible to create PDF/UA compliant documents. Added OutputProfile.Feature.InfoMeetsPDFUA1 to reflect this, and revised the "StructuredPDF.java" example to show how to do it. * Added a new PDFParser.getStructureTree method, to retrieve the document structure as a W3C DOM * Removed the spurious PD8 warnings related to StructureTree damage, added in a previous release. * Fixed broken reconstruction of some XRef tables (particular those created by Oracle Docuprinter) * The above changes required a minor change to PageExtractor - adjoining text is no longer concatenated into a single item if the text is in a different node in the structure tree. * Added GS1 Databar (aka RSS-14) Barcode symbology * Improved extraction of enormous XMP metadata from minutes to milliseconds. * More tolerant parsing of incorrectly formatted dates in Info dictionary * Don't fail when digital signature "V" object contains garbage * Don't incorrectly merge fonts with same name in OutputProfile.getFontInfo * Fixed rendering of Type 3 fonts with negative font sizes * Fixed for some special cases where moving a page from PDF A to B would not correctly update the page list in document A. * Fixed JavaScript methods that worked with colors for the Java 8 JS Parser * Fix for documents created with Flate compression, but where the Flate stream was not closed. Previously we were losing the last few bytes due to buffering, we are now extracting all the bytes we can before displaying a warning. * Fix for one-off case where font-merging in "ResourceMerge" was incorrect * PageExtractor.Text.getVisualBounds works correctly for zero-length text. * Improvements to merge of ICC and Seperation Color Spaces in "ResourceMerge" * Fix when trying to render or extract from page containing a new, unclosed PDFCanvas * Fixed TIFF predictors when BPC != 8 * Viewer: workaround unimplemented code in Java 8/OS X when displaying highlight annotations. * Viewer: fixed missing synchronized sometimes causing exceptions when PagePanel is being disposed. 2.18.8 (released 2016-10-17) ------------------------------- * Fixed a bug introduced the previous release, which could result in a NullPointerException when moving pages between PDF documents constructed in a certain way. * Fixed a bug where PDFParser.writeAsTIFF(PDFParser.BLACKANDWHITE) could result in a TIFF that used LZW rather than CCITT compression 2.18.7 (released 2016-10-11) ------------------------------- * Moving a page from one PDF to another will now migrate structured tags with it. * Some non Java-1.5 compatible code got into the codebase - removed, now running under Java 1.5 again. * Added option to force use of AWT font renderer for difficult fonts. * Fixed justification of text that makes use of non-breaking space characters * Fix for pages where MediaBox coordinates were stored in the wrong order * Fixed caching for colorspaces referenced by Indexed ColorSpaces - this could cause a catastrophic slowdown when rendering under some very specific circumstances. * Viewer: searching for text would return a selection one character too long * Viewer: ensure icons are consistant size, was causing visual artifacts in some look-and-feels. 2.18.6 (released 2016-08-04) ------------------------------- * Workaround for AWT mangling of CMYK colors to RGB, which was causing errors when working with a CMYK shading pattern * Using the OutputProfiler to recolor an image could result in the file size increasing, as we used lossless Flate compression. Now, if the original was JPEG compressed then the recolored version will be too. * Fix for Identity ToUnicode maps * Acrobat places undocumented requirements on how TrueType fonts used in forms are stored. We have accomodated this with a nasty hack since 2.17.1, but this has inadvertantly broken the (correct) handling of these field when the PDF is loaded back into our API for further processing. This release adds code to "un-hack" the original hack for display. * Viewer: fixed some issues with the toolbar layouts, introduced in the previous version 2.18.5 (released 2016-06-29) ------------------------------- * Fix for absurdly large tiling patterns that were causing an integer overflow * Fix for ThreadLocal leak in viewer which could result in a memory leak if many PDFViewer instances were created * Better rebuilding of PDFs that contain damaged cross-reference tables, we now can usually recreate the version history. * Viewer: fixed the way menu separators are added to make it easier for the menus to be customized with new features * Viewer: improvements to text extraction for arabic and hebrew text. 2.18.4 (released 2016-05-06) ------------------------------- * Viewer: we broke text selection in the previous release: now fixed * Viewer: don't display error dialog when a PDF save is cancelled * Viewer: fixed page navigation buttons so they work (again) from Applets. 2.18.3 (released 2016-04-22) ------------------------------- * Added support for OpenType collections, via a new OpenTypeFont constructor. * Added option to partially redact a PDF by removing any combination of text, bitmap images or vector graphics in an area. See Redactor.setRedactionMode * Added OSGi headers to the manifest files * Fix for PDF/A-2 relating to the "Charset" restrictions - this could cause some valid PDF/A-2 and PDF/A-3 PDFs to be marked as invalid. * Some fixes to the way structured PDF tags were created, to make the generated PDFs more compaible with screen reading software. * Fixed resource merging of two PDFs where two fonts were apparently identical but one of the glyphs was zero-width. This could result in an incorrect merge and a corrupted output PDF. * Fixed rare situation where digially re-signing a PDF could invalidate the original signature (in Acrobat), due to a shared resource between the two signature fields. Also ensure that only the first signature can be marked as certifying, as required by the spec. * Fixed error in optimized PostScript parser used for PostScript function evaluation. * Fixed text coordinates in PageExtractor.Text when extracting vertical text. * Radial shading is now calculated using a (very complicated) function instead of a bitmap lookup, which is faster and uses less memory. * AcrobatSignatureHandlerFactory allows a Provider to be set, which will be used for all its operations. See also PKCS7SignatureHandler.getProvider() * Fix for rare exception when parsing progressive JPEG images containing a very large ICC profile. * Fixed conversion of PDF containing JPEG2000 images to PDF/A * Fixes to the rules for "curly-quotes" substitution for various languages, and in particular for a trailing apostrophe in English ("St. James' Park"), which was broken a few releases ago. * Viewer: Ctrl-Tab will now cycle between open documents. * Viewer: fixed failure to correcly save a TIFF image over an existing file. * Viewer: fixed duplicate keyboard shortcut between "Zoom to fit width" and opening recent files. * Viewer: added scrollbar (where appropriate) when editing multi-line text fields. * Viewer: it's possible to add custom fonts to the AnnotationTextFactory feature. See the initialization parameters for that class * Viewer: clearing the list of search results will also clear the selection of any of those results in the PDF. * Viewer: fixed deadlock that would occur when the customer signs a and saves a PDF using a KeyStore that opens a Swing dialog. * Viewer: we can now tile hundreds of open PDFs without it looking silly. 2.18.2 (released 2016-01-13) ------------------------------- * Added full support for PAdES part 4 (LTV) signatures. This involved fixes to the signing process, new PKC7SignatureHandler.ValidationInformation and TimeStampHandlerFactory classes, and methods to add and retrieve this information from the PKCS7SignatureHandlerFactory. See the API docs for those classes for details and examples of use. * AnnotationLink and AnnotationMarkup can now have irregular shapes - the corners can be specified with a generic java.awt.Shape. * Fixes to text extraction from a PDF containing a Type 3 font that itself contains text * Fixed off-by-one when converting 100% gray to RGB: was #FEFFFE, now #FFFFFF * Workaround bug in OS X PDF-to-PostScript conversion which resulted in text in certain types of CID Compact font being missed. * Fixed position of text added to the PDF when using horizontal scaling and track kerning. * Fixed visual size of AnnotationNote markers (i.e. paperclips) in the PDF. * Fix StackOverflow when loading a particular PDF * Viewer: fixed use of custom JavaScript on features * Viewer: fixed rare thread coordination issue for long-running tasks 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 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 PageExtractor.getTextUnordered -> Collection (and the same for PageExtractor.getTextInDisplayOrder) and in the viewer * PDFViewer(Collection) -> PDFViewer(Collection) * PDFViewer.getFeature now returns feature of specified class, so you can do PDFImporter importer = viewer.getFeature(PDFImporter.class) * TextTool.select(Collection) -> TextTool.select(Collection) * TextSelection.RangeList and KeyStoreAliasList have generic-correct supertype * BackgroundSignatureVerifier methods take Collection * 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 # vim: syntax=none textwidth=80