<?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 based on PDF-A-1b and adds accessibility features
        (such as Tagged PDF). This format is available within the limitation described on
        the <a href="accessibility.html">Accessibility page</a>.
      </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>
      <p>
        PDF/A-1a is enabled by specifying "-pdfprofile PDF/A-1a".
      </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>
      <p>
        For PDF/A-1a, just use the string "PDF/A-1a" instead of "PDF/A-1b".
      </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>
      <note>
        There are additional requirements if you want to enabled PDF/A-1a (Tagged PDF). This is
        particularly the specification of the natural language and alternative descriptions for
        images. Please refer to the <a href="accessibility.html">Accessibility page</a> for details.
      </note> 
    </section>
    <section id="profile-compatibility">
      <title>PDF profile compatibility</title>
      <p>
        The PDF profiles "PDF/X-3:2003" and "PDF/A-1b" (or "PDF/A-1a") 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>
