<?xml version="1.0" standalone="no"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- $Id$ -->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "document-v20.dtd">
<document>
  <header>
    <title>PDF/A (ISO 19005)</title>
    <version>$Revision$</version>
    <authors>
      <person name="Jeremias Märki" email="jeremias@apache.org"/>
    </authors>
  </header>
  <body>
    <section id="overview">
      <title>Overview</title>
      <p>
        PDF/A is a standard which turns PDF into an "electronic document file 
        format for long-term preservation". PDF/A-1 is the first part of the 
        standard and is documented in 
        <a href="http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38920&amp;ICS1=37&amp;ICS2=100&amp;ICS3=99">ISO 19005-1:2005(E)</a>. 
        Work on PDF/A-2 is in progress at 
        <a href="http://www.aiim.org/standards.asp?ID=25013">AIIM</a>.
      </p>
      <p>
        Design documentation on PDF/A can be found on FOP's Wiki on the
        <a href="http://wiki.apache.org/xmlgraphics-fop/PDFA1ConformanceNotes">PDFA1ConformanceNotes</a> page.
      </p>
    </section>
    <section id="status">
      <title>Implementation Status</title>
      <p>
        <strong>PDF/A-1b</strong> is implemented to the degree that FOP supports 
        the creation of the elements described in ISO 19005-1. 
      </p>
      <p>
        Tests have been performed against jHove and Adobe Acrobat 7.0.7 (Preflight function).
        FOP does not validate completely against Apago's PDF Appraiser. Reasons unknown due to
        lack of a full license to get a detailed error protocol.
      </p>
      <p>
        <strong>PDF/A-1a</strong> is not implemented, yet. This is mostly because of the requirement
        for tagged PDF which is not available in FOP, yet.
      </p>
    </section>
    <section id="command-line">
      <title>Usage (command line)</title>
      <p>
        To activate PDF/A-1b from the command-line, specify "-pdfprofile PDF/A-1b" 
        as a parameter. If there is a violation of one of the validation rules for 
        PDF/A, an error message is presented and the processing stops.
      </p>
    </section>
    <section id="embedded">
      <title>Usage (embedded)</title>
      <p>
        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:
      </p>
      <source><![CDATA[
userAgent.getRendererOptions().put("pdf-a-mode", "PDF/A-1b");
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent);
[..]]]></source>
      <p>
        If one of the validation rules of PDF/A is violated, an PDFConformanceException
        (descendant of RuntimeException) is thrown.
      </p>
    </section>
    <section id="rules">
      <title>PDF/A in Action</title>
      <p>
        There are a number of things that must be looked after if you activate a PDF/A
        profile. If you receive a PDFConformanceException, have a look at the following
        list (not necessarily comprehensive):
      </p>
      <ul>
        <li>
          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.
        </li>
        <li>
          Don't use PDF encryption. PDF/A doesn't allow it.
        </li>
        <li>
          Don't use CMYK images without an ICC color profile. PDF/A doesn't allow mixing
          color spaces and FOP currently only properly supports the sRGB color space. Please
          note that FOP embeds a standard sRGB ICC profile (sRGB IEC61966-2.1) as the 
          primary output intent for the PDF if no other output intent has been specified
          in the configuration.
        </li>
        <li>
          Don't use non-RGB colors in SVG images. Same issue as with CMYK images.
        </li>
        <li>
          Don't use EPS graphics with fo:external-graphic. Embedding EPS graphics in PDF
          is deprecated since PDF 1.4 and prohibited by PDF/A.
        </li>
        <li>
          PDF is forced to version 1.4 if PDF/A-1 is activated.
        </li>
        <li>
          No filter must be specified explicitely for metadata objects. Metadata must be
          embedded in clear text so non-PDF-aware applications can extract the XMP metadata.
        </li>
      </ul>
    </section>
    <section id="profile-compatibility">
      <title>PDF profile compatibility</title>
      <p>
        The PDF profiles "PDF/X-3:2003" and "PDF/A-1b" are compatible and can both be 
        activated at the same time.
      </p>
    </section>
    <section id="interoperability">
      <title>Interoperability</title>
      <p>
        There has been some confusion about the namespace for the PDF/A indicator in the XMP
        metadata. At least three variants have been seen in the wild:
      </p>
      <table>
        <tr>
          <td>http://www.aiim.org/pdfa/ns/id.html</td>
          <td><strong>obsolete</strong>, from an early draft of ISO-19005-1, used by Adobe Acrobat 7.x</td>
        </tr>
        <tr>
          <td>http://www.aiim.org/pdfa/ns/id</td>
          <td><strong>obsolete</strong>, found in the original ISO 19005-1:2005 document</td>
        </tr>
        <tr>
          <td>http://www.aiim.org/pdfa/ns/id/</td>
          <td><strong>correct</strong>, found in the technical corrigendum 1 of ISO 19005-1:2005</td>
        </tr>
      </table>
      <p>
        If you get an error validating a PDF/A file in Adobe Acrobat 7.x it doesn't mean that
        FOP did something wrong. It's Acrobat that is at fault. This is fixed in Adobe Acrobat 8.x
        which uses the correct namespace as described in the technical corrigendum 1.
      </p>
    </section>
  </body>
</document>
