Skip to content

apache/xmlgraphics-fop-pdf-images

$Id: README 1433 2011-07-01 15:12:30Z jeremias $

==============================================================================
  PDF IMAGE SUPPORT FOR APACHE FOP  -  README
==============================================================================

Contents of this file:
 - What's in here?
 - Requirements
 - Legal Information
 - Where to get help?
 - How do I enable PDF image support in FOP?
 - Notes on PDF image support for output formats other than PDF
 - Known Issues
 - Contributors
 - Release Notes

==============================================================================


What's in here?
---------------

This package contains classes which add support using PDF images in
fo:external-graphic elements when you generate PDF files. This means you can
write something like:

<fo:external-graphic src="my-doc.pdf"/>

Implementation notes:

* This package uses the Apache PDFBox PDF library for parsing the PDF
  files as FOP's PDF library is a write-only library.

* PDF image support is done differently for PDF output than for the 
  other output formats. For PDF output, the plug-in tries to transfer 
  the various PDF objects 1:1 to the target PDF. For the other output 
  formats, Apache PDFBox is used to render the PDF to a Graphics2D 
  object (Java2D). PDFBox still has some problems with rendering certain 
  PDFs. 
  Rather, consider helping out in the PDFBox project to improve the 
  code. This plug-in only plays the adapter between FOP and PDFBox. It 
  is not responsible for correct rendering of the PDF.

* Individual pages inside a multi-page PDF can be accessed by using a URI
  fragment in the following form: <uri>#page=<nr>
  Example: http://localhost/mydoc.pdf#page=7
  Note: this only works on URIs, not plain file names in which case you'll
  get an error. Plain file names are illegal in XSL-FO anyway, strictly
  speaking.
  
* If you enable PDF/A or PDF/X functionality, the resulting PDF may not be
  a compliant file since the code isn't sophisticated enough to ensure that
  the rules of PDF/A and PDF/X are respected when the PDF file is embedded.
  So if you enable PDF/A and/or PDF/X, you should refrain from using this
  package.

* If the PDF you want to embed has annotations, be prepared that they may
  not be transferred correctly.

* Apache FOP currently generates PDF 1.4. If you include a PDF with a
  higher PDF version, the results may be unpredictable.

* This package does not work with FOP 0.93, 0.94 or any earlier version.
  You will need a later release or the code from FOP Trunk.

* Some PDF may not be processed correctly with FOP 0.95 due to bugs in
  its PDF library. You may need to upgrade Apache FOP in this case.

* Using PDF files is NOT supported inside SVG, only in XSL-FO.


    
Requirements
----------------

This plug-in has the following requirements:
- Apache PDFBox 3.0 or later
- Apache XML Graphics Commons 2.10 or later (for the image converter)
- Apache XML FOP 2.10 or later (for the FOP functionality)
- Java 1.8 or later

Note: for some problems related to the PDF plug-in, Apache FOP 2.10 or later
is required. A number of bugs had to be fixed in FOP's PDF library.


Legal Information
---------------------

This package is published under the Apache License version 2.0. For the license
text, please see the following files:
- LICENSE
- NOTICE

Legal information on third-party libraries used by this plug-in can be
found in the "lib/README.txt" file.

    
Where to get help?
---------------------    

See: http://xmlgraphics.apache.org/fop/gethelp.html


How do I enable PDF image support in FOP?
-----------------------------------------

Just add the fop-pdf-images.jar and lib/pdfbox-*.jar (including the other
minimal dependencies for PDFBox) to the classpath on the same classpath
level as you put fop.jar.

You can then use URIs referring to PDF files inside fo:external-graphic and
fox:external-document elements.


Notes on PDF image support for output formats other than PDF
------------------------------------------------------------

Please note that this plug-in was written mostly for PDF production. For
other FOP output formats, the PDF is converted to a vector or bitmap image
using Apache PDFBox which is not yet a full-fledged PDF viewer. There may
be limitations concerning the quality. If you run into a problem displaying
PDF for any output format other than PDF, you will need to ask the PDFBox
community for help. Or you can help the Apache PDFBox project to improve
their PDF interpreter.

The Apache PDFBox website: http://pdfbox.apache.org/


Known Issues
---------------

- If Acrobat fails to open the generated PDF, it maybe be due to a bug in FOP
  that was fixed in revision 833375. 

- When importing multiple pages from the same PDF, the same PDF objects from
  the original may be imported anew for each page. There is currently no
  easy way to avoid this.

Contributors
---------------

- Jeremias Maerki (original author)
- Krister Wicksell
- Vincent Hennebert
- Simon Steiner
- Luis Bernardo
- Athanasios-Dimitrios Giannimaras
- Dave Roxburgh

Versions prior to 2.1 (i.e. prior to the move to the Apache XML Graphics
project) can be downloaded from here:
http://www.jeremias-maerki.ch/development/fop/index.html


==============================================================================
  RELEASE NOTES
==============================================================================

Version 2.10
=========================

Changes:
FOP-3149: Don't merge fonts when ascent is different
FOP-3155: Use format 12 for unicode cmap
FOP-3158: Switch to spotbugs
FOP-3183: Disable pattern modification using xobjforms
FOP-3200: Correct end of start code for merging ttf cmap

Version 2.9
=========================

Changes:
FOP-3107: Update to PDFBox 2.0.27
FOP-3108: Gradient component not displayed correctly after scaling
FOP-3112: Rotate annotations
FOP-3123: Modified stream should be used in the cache key
FOP-3124: Subrs data missing from font merging
FOP-3136: Softmask dictionary preserved
FOP-3138: NPE when no fields
FOP-3140: Merge form fields

Version 2.8
=========================

Changes:
FOP-3051: Upgrade to Commons IO 2.11
FOP-3073: Preserve bytes when cloning string
FOP-3089: Switch cmap format to support iPhone
FOP-3102: Move composite glyphs to the end

Version 2.7
=========================

Changes:
FOP-3034: Update PDFBox to 2.0.24
FOP-3032: Allow to embed native PDF in AFP
FOP-3020: Add space to standard position for font merge
FOP-3009: Avoid merging fonts with different number of cmap formats
FOP-3001: Deduplicate streams in arrays

Version 2.6
=========================

Changes:
FOP-2951: Add uniquename to xobj form
FOP-2965: Keep streams with DCT compression
FOP-2971: Update unique name inside patterns
FOP-2974: Handle space in COSName
FOP-2979: Update PDFBox to 2.0.19

Version 2.5
=========================

Changes:
FOP-2904: Handle object for boundingbox
FOP-2922: Syntax error after writing content stream
FOP-2933: PDF to PDF checkbox missing

Version 2.4
=========================

Changes:
FOP-2802: Java 10 PDF/SVG to Image box not shown
FOP-2812: Update PDFBox to 2.0.11
FOP-2836: Update PDFBox to 2.0.13
FOP-2840: Image mask in PDF not rendered to PS
FOP-2841: PDF to PDF with merge-fonts checkbox misaligned
FOP-2856: Support compile on Java 12
FOP-2873: Update to PDFBox 2.0.16
FOP-2879: Add caching to avoid parsing content stream
FOP-2882: Allow PDFFormXObject to improve performance

Version 2.3
=========================

Changes:
FOP-2251: PDF to Postscript not showing transparency
FOP-2715: Optimise PDFWriter writing out floats
FOP-2719: PDF to PS NPE when encode param not set
FOP-2720: PDF to PCL exception on clipping
FOP-2723: PDF to PDF deduplicate more types of streams
FOP-2739: Upgrade to PDFBox 2.0.7
FOP-2739: Avoid rastering PDF with Smask to image
FOP-2746: PDF to PDF NPE during structuretree merge
FOP-2750: Use streams for OTF subsetting
FOP-2753: PDF to PS allow fop fonts as fallback
FOP-2754: Error when merging True Type font with CFF PDF font

Version 2.2
=========================

Changes:
- Move to PDFBox 2
- Deduplicate PDF streams
- PDF to PS deduplication of images
- Remove xobj type=form
- Merge fonts (off by default)
- Support PDF shading to PS
- Merging of Tagged (Accessible) PDF
- Bugfix for handling of strings (the check method for US-ASCII had a bug)

Version 2.0 (2010-10-28)
=========================

Changes:
- Moved from PDFBox (org.pdfbox) to Apache PDFBox (org.apache.pdfbox). Note
  that Apache PDFBox is currently in incubation at the ASF. More info at:
  http://incubator.apache.org/pdfbox/
- Added support for "null" objects in PDF.
- Added support for FOP's new intermediate format (and the new output
  implementations).
- Fixed transfer of untouched streams.
- Added an ImageConverter that extends Apache XML Graphics Commons' image
  loader framework with a converter from PDFBox to Java2D. This enables PDF
  display for all of FOP's output formats. See the restrictions mentioned above.
- Fix re-encoding problem for binary strings (for example lookup tables for
  /Indexed color spaces).
- Taken advantage of https://issues.apache.org/jira/browse/PDFBOX-507 to
  avoid warning messages in COSDocument's finalizer method.
- Fixed NullPointerException if a page has no content stream (empty page).
- Added limited support for AcroForms (PDF forms).
- Using CropBox instead of MediaBox, if available, to define the portion of the
  PDF to display.
- Added support for the /Rotation entry in the Page dictionary.
- Handled the case where the Resources dict of a page is missing and therefore
  inherited.
- Fixed a problem with Crop/MediaBox dictionaries not starting at coordinate 0,0.
- Added on-load hook to decrypt a PDF, for example.
- Added support for merging AcroForms (Thanks to Vincent Hennebert)
- Updated Apache PDFBox to version 0.8.0 to 1.3.1. The plug-in now requires at
  least J2SE 1.5!


Version 1.3 (2008-11-28)
=========================

Changes:
- Fixed a NullPointerException when the MediaBox is inherited.
- An invalid page number is now properly handled.


Version 1.2 (2008-04-04)
=========================

Changes:
- Fixed handling of rotated pages (Thanks to Krister Wicksell)
- Fixed "PDFObject already has an object number" error occurring with certain
PDFs.

Version 1.1a (2008-01-22)
=========================

Changes:
- Disabled the in-memory caching of PDF files due to an intermittent bug that
appeared due to reuse of a PDDocument. This needs to be fixed in PDFBox.
- Change in PDFBox: Don't warn about that COSDocument isn't closed. Instead,
the object is closed automatically when it's collected.

Version 1.1 (2008-01-14)
=========================

Changes:
- Adjustments to changes in FOP Trunk after the introduction of a new image
loading package (in Apache XML Graphics Commons).
- Support for addressing every single page in a PDF, not just the first.

Note: This version will only work with FOP Trunk (revision 611768 or later) or
with FOP 0.95 when it is released.

Version 1.0 (2007-08-06)
=========================

This is the initial release. Feedback is welcome as this is very new code.

Note: Version 1.0 contains a modified version of PDFBox! I'll send a patch
with the change to the PDFBox project so hopefully the next version of PDFBox
will not need such a modification.

Note: Version 1.0 contains a development version of Apache FOP from the
following branch:
https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_PDF_in_PDF/
As soon as the code is stabilized this will be merged into the Trunk.