# Apache™ FOP: PDF/X (ISO 15930)

$Revision: 1298724 $

# Overview

Support for PDF/X is available beginning with Apache™ FOP version 0.93. This feature is new and may not be 100% complete, yet. Feedback is welcome.

PDF/X is a standard which faciliates prepress digital data exchange using PDF. Currently, only PDF/X-3:2003 is implemented out of the many different flavours of PDF/X profiles. PDF/X-3:2003 is documented in ISO 15930-6:2003(E). More info on PDF/X can be found on the PDF/X info site.

# Implementation Status

PDF/X-3:2003 is implemented to the degree that FOP supports the creation of the elements described in ISO 15930-6.

An important restriction of the current implementation is that all normal RGB colors specified in XSL-FO and SVG are left unchanged in the sRGB color space (XSL-FO and SVG both use sRGB as their default color space). There's no conversion to a CMYK color space. Although sRGB is a calibrated color space, its color space has a different size than a CMYK color space which makes the conversion a lossy conversion and can lead to unwanted results. Although the use of the calibrated sRGB has been promoted for years, print shops usually prefer to convert an sRGB PDF to CMYK prior to production. Until there's full CMYK support in FOP you will have to work closely with your print service provider to make sure you get the intended result.

Tests have been performed against Adobe Acrobat 7.0.7 (Preflight function). Note that there are bugs in Adobe Acrobat which cause false alarms if both PDF/A-1b and PDF/X-3:2003 are activated at the same time.

# Usage (command line)

To activate PDF/X-3:2003 from the command-line, specify "-pdfprofile PDF/X-3:2003" as a parameter. If there is a violation of one of the validation rules for PDF/X, an error message is presented and the processing stops.

# Usage (embedded)

When FOP is embedded in another Java application you can set a special option on the renderer options in the user agent to activate the PDF/A-1b profile. Here's an example:

    FOUserAgent userAgent = fopFactory.newFOUserAgent();
    userAgent.getRendererOptions().put("pdf-x-mode", "PDF/X-3:2003");
    Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent);
    [..]

If one of the validation rules of PDF/X is violated, an PDFConformanceException (descendant of RuntimeException) is thrown.

# PDF/X in Action

There are a number of things that must be looked after if you activate a PDF/X profile. If you receive a PDFConformanceException, have a look at the following list (not necessarily comprehensive):

- Make sure all (!) fonts are embedded. If you use base 14 fonts (like Helvetica) you need to obtain a license for them and embed them like any other font.
- Don't use PDF encryption. PDF/X doesn't allow it.
- Don't use CMYK images without an ICC color profile. PDF/X doesn't allow mixing color spaces and FOP currently only properly supports the sRGB color space. However, you will need to specify an output device profile (usually a CMYK profile) in the configuration. sRGB won't work here since it's a display device profile, not an output device profile.
- Don't use non-RGB colors in SVG images. Same issue as with CMYK images.
- Don't use EPS graphics with fo:external-graphic. Embedding EPS graphics in PDF is deprecated since PDF 1.4 and prohibited by PDF/X-3:2003.
- PDF is forced to version 1.4 if PDF/X-3:2003 is activated.

# PDF profile compatibility

The PDF profiles "PDF/X-3:2003" and "PDF/A-1b" are compatible and can both be activated at the same time.