<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc='yes' ?>     <!-- add table of contents -->
<?rfc editing='no' ?>  <!-- paragraph numbering -->
<?rfc symrefs='yes' ?> <!-- use references like [ABC] instead of [1] -->
<?rfc sortrefs='no'?>  <!-- sort the references alphabetically -->
<?rfc linkmailto='no'?>
<?rfc compact='yes'?>
<?rfc comments='yes'?> <!-- print crefs -->
<?rfc inline='yes'?>
<?rfc-ext parse-xml-in-artwork='yes' ?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<rfc docName="draft-hardy-pdf-mime-05" category="info" obsoletes='3778'>
  <front>
    <title abbrev="application/pdf">The application/pdf Media
    Type</title>
    <author initials="M." surname="Hardy" fullname="Matthew Hardy">
      <organization>Adobe Systems Incorporated</organization>
      <address>
	<postal>
	  <street>345 Park Ave</street>
	  <city>San Jose</city>
	  <region>CA</region>
	  <code>95110</code>
	  <country>USA</country>
	</postal>
	<email>mahardy@adobe.com</email>
      </address>
    </author>
    <author initials="L." surname="Masinter" fullname="Larry Masinter">
      <organization>Adobe Systems Incorporated</organization>
      <address>
	<postal>
	  <street>345 Park Ave</street>
	  <city>San Jose</city>
	  <region>CA</region>
	  <code>95110</code>
	  <country>USA</country>
	</postal>
	<email>masinter@adobe.com</email>
	<uri>http://larry.masinter.net</uri>
      </address>
    </author>
    <author initials="D." surname="Markovic" fullname="Dejan Markovic">
      <organization>Adobe Systems Incorporated</organization>
      <address>
        <postal>
          <street>345 Park Ave</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95110</code>
          <country>USA</country>
        </postal>
        <email>dmarkovi@adobe.com</email>
      </address>
    </author>
    <author initials="D." surname="Johnson" fullname="Duff Johnson">
      <organization>PDF Association</organization>
      <address>
	<postal>
	  <street>Neue Kantstrasse 14</street>
	  <city>Berlin</city>
	  <code>14057</code>
	  <country>Germany</country>
	</postal>
	<email>duff.johnson@pdfa.org</email>
      </address>
    </author>
    <author initials="M." surname="Bailey" fullname="Martin Bailey">
      <organization>Global Graphics</organization>
      <address>
	<postal>
	  <street>2030 Cambourne Business Park</street>
	  <city>Cambridge</city>
	  <code>CB23 6DW</code>
	  <country>UK</country>
	</postal>
	<email>martin.bailey@globalgraphics.com</email>
	<uri>http://www.globalgraphics.com</uri>
      </address>
    </author>
    <date/>
    <keyword>Requests for Comment</keyword>
    <abstract>
      <t>
	The Portable Document Format (PDF) is an ISO standard (ISO
	32000-1:2008) defining a final-form document representation
	language in use for document exchange, including on the
	Internet, since 1993. This document provides an overview of
	the PDF format and updates the media type registration of
	<spanx style="verb">application/pdf</spanx>. It obsoletes
	RFC 3778.
      </t>
    </abstract>
  </front>
  <middle>
    <section title='Introduction'>
      <t>
	This document is intended to provide updated information
	on the registration of the MIME Media Type
	<spanx style="verb">application/pdf</spanx> for documents defined in the PDF <xref
	target='ISOPDF'/>, "Portable Document Format", syntax. It obsoletes <xref
    target='RFC3778'/>.
      </t>
      <t>
	PDF was originally envisioned as a way to reliably communicate
	and view printed information electronically across a
	wide variety of machine configurations, operating
	systems, and communication networks.
      </t>

      <t>
	PDF is used to represent "final form" formatted documents.
	PDF pages may include
	text, images, graphics and multimedia content such as
	video and audio.  PDF is also capable of containing
	auxiliary structures including annotations,
	bookmarks, file attachments, hyperlinks, logical
	structure and metadata.  These features are useful for
	navigation, building collections of related documents and for
	reviewing and commenting on documents.  A rich JavaScript
	model has been defined for interacting with PDF documents.
      </t>

      <t>
	PDF used the imaging model of the
	PostScript <xref target="PS"/> page description language
	to render complex text, images, and graphics in a device
	and resolution-independent manner. 
      </t>

      <t>
	PDF supports encryption and digital signatures.  The
	encryption capability is combined with access control
	information to facilitate management of the
	functionality available to the recipient.  PDF supports
	the inclusion of document and object-level metadata through
	the eXtensible Metadata Platform<xref target='XMP'/>.
      </t>
    </section>
    <section title='History'>
      <t>
	PDF is used widely in the Internet community.  The first
	version of PDF, 1.0, was published in 1993 by Adobe Systems
	Incorporated.  Since then PDF has grown to be a widely-used
	format for capturing and exchanging formatted documents
	electronically across the Web, via e-mail and virtually every
	other document exchange mechanism.  In 2008, PDF 1.7 was
	published as an ISO standard <xref target='ISOPDF'/>, ISO
	32000-1:2008.  It was adopted using ISO Fast-Track process and
	is technically identical to Adobe Portable Document Format
	version 1.7 <xref target='AdobePDF'/> referenced
	by <xref target='RFC3778'/>. 
      </t>
      <t>
	The ISO TC-171 committee is presently working on a
	refresh of PDF, known as ISO 32000-2, with a version
	of PDF 2.0, expected to be published in 2017.
      </t>
      <t>
	In addition to ISO 32000-1:2008 and 32000-2, 
	several subset standards have been defined to
	address specific use cases and standardized by
	the ISO.  These standards include PDF
	for Archival (PDF/A) <xref target="ISOPDFA"/>,
	PDF for Engineering (PDF/E) <xref target="ISOPDFE"/>,
	PDF for Universal Accessibility (PDF/UA) <xref target="ISOPDFUA"/>,
	PDF for Variable Data and Transactional Printing (PDF/VT) <xref target="ISOPDFVT"/>, 
	and PDF for Prepress Digital Data Exchange (PDF/X) <xref target="ISOPDFX"/>.
	The subset
	standards are fully compliant PDF files capable of being
	displayed in a general PDF viewer.
      </t>
    </section>
    <section title='Fragment Identifiers' anchor='fragments'>
      <t>
	Fragment identifiers appear at the end of a URI, and provide a way to
	reference an anchor to subordinate content within the target
	of the URI, or additional parameters to the process of opening
	the identified content. The syntax and semantics of fragment
	identifiers is referenced in the media type definition.
      </t>
      <t>
	The specification of fragment
	identifiers for PDF appeared originally in <xref target='RFC3778'/>, but
	now will be included in ISO 32000-2 <xref target="ISOPDF2"/>.
	This section is a summary of that material.  Any
	disagreements between that document and this should be
	resolved in favor of the ISO 32000-2 definition, once that has been
	approved.
      </t>
      <t>
	A fragment identifier for PDF has one or more parameters,
	separated by the ampersand (&amp;) or pound (#)
	character. Each parameter consists of the parameter name, "="
	(equal), and the parameter value; lists of values are
	comma-separated, and parameter value strings may be
	URI-encoded (<xref target='RFC3986'/>).
	Parameters are processed left to right.  
      </t>
      <t>
        Coordinate values (such as &lt;left&gt;, &lt;right&gt;,
        &lt;width&gt;) are expressed in the default user space
        coordinate system of the document: 1/72 of an inch
        measured down and to the right from the upper-left corner
	of the (current) page. (<xref target="ISOPDF2" /> 8.3.2.3 "User Space")
      </t>
      <t>
	The following parameters identify subordinate content
	of a PDF file, but also may be used to set the document view
	to make the (start of) the identified content visible:
	
      <list style="hanging">
        <t hangText="page=&lt;pageNum&gt;"> <vspace />
        Identifies a specified (physical) page; the first page in the document
        has a pageNum value of 1.
        </t>

        <t hangText="nameddest=&lt;name&gt;"> <vspace />
        Identifies a named destination (<xref target="ISOPDF2"/> 12.3.2.4 "Named destinations").
        </t>

        <t hangText="structelem=&lt;structID&gt;"> <vspace />
	structID is a byte string with URI encoding;
	identifies the structure element with ID key
	within a StructElem dictionary of the document.
        </t>

        <t hangText="comment=&lt;commentID&gt;"> <vspace />
        The commentID is the value of an annotation name, which is
            defined by the NM key in the corresponding annotation dictionary
	    (of the selected page. (<xref target="ISOPDF2"/>
            12.5.2 "Annotation dictionaries")
        </t>
	
        <t hangText="ef=&lt;name&gt;"> <vspace />
	Identifies the embedded file where the parameter
	string &lt;name&gt; matches a file
        specification dictionary in the EmbeddedFiles name tree.

	If the "ef" parameter is not at the end of the fragment
	identifier, then the rest of the fragment identifier (after
	the ampersand or hash delimiter) is applied to the embedded
	file according to its own media type. This allows
	identification of content within the embedded file
	(which itself might be a PDF file).
	</t>
	<t>NOTE: When opening a PDF file that is not from a
	trusted source, processor may choose to prompt the user or
	even prevent opening of the file.
        </t>
      </list>
      </t>
      <t>These parameters also operate on the view of
      the PDF document when it is opened. 
      <list style="hanging">
	<t hangText="zoom=&lt;scale&gt;,&lt;left&gt;,&lt;top&gt;"><vspace /> 
	&lt;scale&gt; is the percentage to which the document should
	be zoomed, where a value of 100 correspond to a zoom of 100%.
	&lt;left&gt; and &lt;top&gt; are optional, but both must be
	specified if either is included.
        </t>

        <t hangText="view=&lt;keyword&gt;,&lt;position&gt;"> <vspace />
        The arguments correspond to those found in <xref target="ISOPDF2"/> 12.3.2.2
        "Explicit destinations". 
        keyword is one of the keywords defined in
        <xref target="ISOPDF2"/> "Table 149: Destination syntax"
        with appropriate position values.
        </t>
        <t hangText="viewrect=&lt;left&gt;,&lt;top&gt;,&lt;width&gt;,&lt;height&gt;"> <vspace />
            Set the view rectangle.
        </t>
        <t hangText="highlight=&lt;left&gt;,&lt;right&gt;,&lt;top&gt;,&lt;bottom&gt;"> <vspace />
            Highlight the specified rectangle.
        </t>
        <t hangText="search=&lt;wordList&gt;"> <vspace />
            Open the document and search for one or more words, selecting
            the first matching word in the document. wordList
            is a string enclosed in
            quotation marks where individual words are separated by
	    the space character (or %20).
        </t>
        <t hangText="fdf=&lt;URI&gt;"> <vspace />
	  Imports data into PDF form fields. The URI is either a relative or absolute URI
          to an FDF or XFDF file. 
          The fdf parameter should be specified as the last parameter to a given URI.
        </t>
    </list>
    </t>
    </section>
    
    <section title='Subset Standards'>
      <t>
        Several subsets of PDF have been published as distinct ISO standards:
        <list style="symbols">
          <t>
            PDF/X, initially released in 2001 as PDF/X-1a <xref
            target='ISOPDFX'/>, specifies how to use PDF for graphics
            exchange, with the aim to fascilitate correct and
            predictable printing by print service providers. The
            standard has gone through multiple revisions over the
            years and has several published parts, the most recently
            released being part 8, specifying different levels of
            conformance: PDF/X-1a:2001, PDF/X-3:2002, PDF/X-1a:2003,
            PDF/X-3:2003, PDF/X-4, PDF/X-4p, PDF/X-5g,
            PDF/X-5pg and PDF/X-5n.
          </t>
          <t>
            PDF/A, initially released in 2005, specifies how to use
            PDF for long-term preservation (archiving) of electronic
            documents. It prohibits PDF features which are not well
            suited to long term archiving of documents, including
	    JavaScript or executable file launches. Its
            requirements for PDF/A viewers include color management
            guidelines and support for embedded fonts. There are three
            parts of this standard and a total of eight conformance levels:
            PDF/A-1a, PDF/A-1b, PDF/A-2a,
            PDF/A-2b, PDF/A-2u, PDF/A-3a, PDF/A-3b and PDF/A-3u.
          </t>
          <t>
            PDF/E, initially released in 2008 as PDF/E-1 <xref
            target='ISOPDFE'/>, specifies how to use PDF in
            engineering workflows, such as manufacturing, construction
            and geospatial analysis. Future revisions of PDF/E are
            supposed to include support for 3D PDF workflows.
          </t>
          <t>
            PDF/VT, initially released in 2010, specifies how to use
            PDF in variable and transactional printing. It is based on
            PDF/X, and adds adidtional restrictions on PDF content
            elements and supporting metadata. It specifies three
            conformance levels: PDF/VT-1, PDF/VT-2 and PDF/VT-2s <xref
            target='ISOPDFVT'/>.
          </t>
          <t>
            PDF/UA, initially released in 2012 as PDF/UA-1 <xref
            target='ISOPDFUA'/>, specifies how to create accessible
            electonic documents. It requires use of ISO 32000's Tagged
            PDF feature, and adds many requirements regarding semantic
            correctness in applying logical structures to content in
            PDF documents.
          </t>
        </list>
      </t>
      <t>
        All of these subset standards use <spanx
        style="verb">application/pdf</spanx> media type.  The subset
        standards are generally not exclusive, so it is possible to
        construct a PDF file which conforms to, for example, both
        PDF/A-2b and PDF/X-4 subset standards.
      </t>
      <t>
        PDF documents claiming conformance to one or more of the
        subset standards use XMP metadata to identify levels of
        conformance. PDF processors should examine document metadata
        streams for such subset standards identifiers and, if
        apropriate, label documents as such when presenting them to
        the user.
      </t>
    </section>
    
    <section anchor='compat' title='PDF Versions'>
      <t>
        PDF format has gone through several revisions, primarily for
        the addition of features.  PDF features have generally been
        added in a way that older viewers "fail gracefully", because
        they can just ignore features they do not recognize. Even
        so, the older the PDF version produced, the more legacy
        viewers will support that version, but the fewer features will
        be enabled. See <xref target="ISOPDF"/> Annex I, "PDF Versions
	and Compatibility".

      </t>
    </section>

    <section anchor='impl' title='PDF Implementations'>
      <t>
        PDF files are experienced through a reader or viewer of PDF files.
        For most of the common platforms in use (iOS, OS X, Windows, Android, ChromeOS, Kindle)
        and for most browsers (Edge, Safari, Chrome,	Firefox), PDF viewing is built-in. In addition,
        there are	many PDF viewers available for download and install. The PDF specification
        was published and freely available since the format was introduced in 1993, so hundreds
        of companies and organizations make tools for PDF creation, viewing, and manipulation.
      </t>
    </section>
    <section anchor='security' title='Security Considerations'>
      <t>
	PDF is certainly a complex media type as per Section 4.6 of
	<xref target='RFC6838'/>, which sets requirements for security
	analysis of media type registrations. <xref target='RFC3778'/>
	(which this document obsoletes) contained a detailed analysis
	of some of the security issues for PDF implementations known
	at the time. While the analysis isn't necessarily wrong, the threat
	analysis is much too limited, and the mitigations somewhat out
	of date. There is now extensive literature on security
	threats involving PDF implementations and how to avoid them,
	consistent with broad implementation over decades.  We are not
	registering a new media type but rather making a primarily
	administrative update.  With those caveats:
      </t>
      <t>
        The PDF file format allows several constructs which may
        compromise security if handled inadequately by PDF
        processors. For example:

        <list style="symbols">
          <t>
            PDF may contain scripts to customize the displaying
            and processing of PDF files. These scripts are
            expressed in a version of JavaScript and are intended
            for execution by the PDF processor.
          </t>
          <t>
            PDF file may refer to other PDF files for portions of
            content.  PDF processors are expected to find these
            external files and load them in order to display the
            document.
          </t>
	  
          <t>
            PDF may act as a container for various files embedded in
            it (for example, as attached files). PDF processors may
            offer functionality to open and display such files or
            store them on the system, such as with the "ef" open
	    action. THe PDF specification places no
            restrictions on types of files which may be embedded, so
            PDF processors should be extremely careful to prevent
            unwanted execution of attached executables or
            decompression of attached archives which may store
            dangerous files in the host file system.
          </t>
          <t>
            PDF files may contain links to content on the
            internet. PDF processors may offer functionality to show
            such content upon following the link.
          </t>
      <t>
	The fragment identifier syntax (<xref target='fragments'/>)
	contains directives for opening ("ef") or inluding
	("fdf") additional material.
      </t>

        </list>
        PDF interpreters executing any scripts or programs related to
        these constructs must be extremely careful to insure that
        untrusted software is executed in a protected environment.
      </t>
      <t>
        In addition, the PDF processor itself, as well as its plugins,
        scripts etc. may be a source of insecurity, by either obvious
        or subtle means.
      </t>
    </section>
    
    <section title='IANA Considerations'>
      <t>
	This document updates the registration
	of <spanx style="verb">application/pdf</spanx>, a media type
	registration as defined in <xref target='RFC6838'/>:
      </t>
      <t>
	Type name: application
      </t>
      <t>
	Subtype name: pdf
      </t>
      <t>
	Required parameters: none
      </t>
      <t>
	Optional parameter: none
      </t>
      <t>
	Encoding considerations: binary
      </t>
      <t>
	Security considerations: See <xref target='security'/>
	of this document.
      </t>
      <t>
	Interoperability considerations: See <xref
	target='compat'/> of this document.
      </t>
      <t>
	Published specification: ISO 32000-1:2008 (PDF 1.7)
	<xref target='ISOPDF'/>. ISO 32000-2 (PDF 2.0) <xref target='ISOPDF2'/> is currently under development.
      </t>
      <t>
	Applications which use this media type: See <xref
	target='impl'/> of this document.
      </t>
      <t>
	Fragment identifier considerations: See <xref
	target='fragments'/> of this document.
      </t>
      <t>
	Additional information:
      </t>
      <t>
	Deprecated alias names for this type: none
      </t>
      <t>
	Magic number(s): All PDF files start with the characters
	'%PDF-' followed by the PDF version number, e.g., "%PDF-1.7".
	These characters are in US-ASCII encoding.
      </t>
      <t>
	File extension(s): .pdf
      </t>
      <t>
	Macintosh file type code(s): "PDF "
      </t>
      <t>
	Person &amp; email address to contact for further information:
	Duff Johnson &lt;duff@duff-johnson.com&gt;, Peter Wyatt
	&lt;Peter.wyatt@cisra.canon.com.au&gt;, ISO 32000 Project Leaders
      </t>
      <t>
	Intended usage: COMMON
      </t>
      <t>
	Restrictions on usage: none
      </t>
      <t>Author: Authors of this document</t>
      <t>
        Change controller: ISO; in particular, ISO 32000 is by
	ISO/TC 171/SC 02/WG 08, "PDF specification".  Duff Johnson
        &lt;duff@duff-johnson.com&gt; and Peter Wyatt
        &lt;Peter.wyatt@cisra.canon.com.au are current ISO 32000
        Project Leaders.
      </t>
      
    </section>
  </middle>
  <back>
    <references title="Normative References">
      
      <!-- ?rfc include='reference.ISO.32000-1.2008' ? -->
      <reference anchor="ISOPDF">
	<front>
	  <title>Document management -- Portable document format -- Part 1: PDF 1.7</title>
	  <author>
	    <organization>ISO</organization>
	  </author>
	  <date month="" year="2008"/>
	</front>
	<seriesInfo name="ISO" value="32000-1:2008"/>
	<annotation>Also available free from Adobe.</annotation>
      </reference>

      <!-- ?rfc include='reference.ISO.32000-2' ? -->
      <reference anchor="ISOPDF2">
	<front>
	  <title>Document management -- Portable document format -- Part 2: PDF 2.0</title>
	  <author>
	    <organization>ISO</organization>
	  </author>
	  <date month="" year=""/>
	</front>
	<seriesInfo name="ISO" value="32000-2"/>
	<annotation>Currently under development - publication expected in 2017. This becomes a Normative Reference on approval.</annotation>
      </reference>
      
    </references>

    <references title="Informative References">
      <reference anchor="ISOPDFX">
          <front>
              <title>Graphic technology -- Prepress digital data exchange using PDF --
                  Part 8: Partial exchange of printing data using PDF 1.6 (PDF/X-5)
              </title>
              <author>
                  <organization>ISO</organization>
              </author>
              <date month="" year="2008"/>
          </front>
          <seriesInfo name="ISO" value="15930-8:2008"/>
      </reference>
      <reference anchor="ISOPDFA">
          <front>
              <title>Document management -- Electronic document file format for long-term preservation
                  -- Part 3: Use of ISO 32000-1 with support for embedded files (PDF/A-3)
              </title>
              <author>
                  <organization>ISO</organization>
              </author>
              <date month="" year="2012"/>
          </front>
          <seriesInfo name="ISO" value="19005-3:2012"/>
      </reference>
      <reference anchor="ISOPDFE">
          <front>
              <title>Document management -- Engineering document format using PDF -- Part 1:
                  Use of PDF 1.6 (PDF/E-1)
              </title>
              <author>
                  <organization>ISO</organization>
              </author>
              <date month="" year="2008"/>
          </front>
          <seriesInfo name="ISO" value="24517-1:2008"/>
      </reference>
      <reference anchor="ISOPDFVT">
          <front>
              <title>Graphic technology -- Variable data exchange -- Part 2:
                  Using PDF/X-4 and PDF/X-5 (PDF/VT-1 and PDF/VT-2)
              </title>
              <author>
                  <organization>ISO</organization>
              </author>
              <date month="" year="2010"/>
          </front>
          <seriesInfo name="ISO" value="16612-2:2010"/>
      </reference>
      <reference anchor="ISOPDFUA">
          <front>
              <title>Document management applications -- Electronic document file format enhancement
                    for accessibility -- Part 1: Use of ISO 32000-1 (PDF/UA-1)
              </title>
              <author>
                  <organization>ISO</organization>
              </author>
              <date month="" year="2014"/>
          </front>
          <seriesInfo name="ISO" value="14289-1:2014"/>
      </reference>
      
      <!-- rfc include='reference.ISO.16684-1.2012' XMP -->
      <reference anchor="XMP">
	<front>
	  <title>Extensible metadata platform (XMP) specification -- Part 1: Data model, serialization and core properties</title>
	  <author>
	    <organization>ISO</organization>
	  </author>
	  <date month="" year="2012"/>
	</front>
	<seriesInfo name="ISO" value="16684-1"/>
	<annotation>Not available for free, but there are a
	number of descriptive resources, e.g., 
	<eref target="http://en.wikipedia.org/wiki/Extensible_Metadata_Platform"/>
	</annotation>	
      </reference>

      <!-- rfc include='reference.Adobe.postscript'
	   PostScript -->
      <reference anchor="PS">
	      <front>
	          <title>PostScript Language Reference, third edition</title>
	          <author>
	              <organization>Adobe Systems Incorporated</organization>
	          </author>
	          <date month="" year="1999"/>
	      </front>
      </reference>
      
      <reference anchor="AdobePDF">
          <front>
              <title>PDF Reference, sixth edition</title>
              <author>
                  <organization>Adobe Systems Incorporated</organization>
              </author>
              <date month="" year="2006"/>
          </front>
      </reference>

      <?rfc include='reference.RFC.6838' ?>
      <?rfc include='reference.RFC.3986' ?>
      <?rfc include='reference.RFC.3778' ?>
    </references>
    <section title='Changes since RFC 3778'>
      <t>
	This specification replaces RFC 3778, which previously
	defined the <spanx style="verb">application/pdf</spanx>
	Media Type. Differences include:
	<list style="symbols">
	  <t>
	    To reflect the transition from a proprietary specification
	    by Adobe to an open ISO Standard, the Change Controller
	    has changed from Adobe to ISO, and references updated.
	  </t>
	  <t>
	    The overview of PDF capabilitiies, the history of PDF, and
	    the descriptions of PDF subsets were updated to reflect
	    more recent relevant history.
	  </t>
	  <t>
	    The section on Fragment identifiers was updated to closely
	    reflect the material which has been added to ISO-32000-2.
	  </t>
	  <t>
	    The status of popular PDF implementations was
	    updated.
	  </t>
	  <t>
	    The Security Considerations were updated to match the
	    current understanding of PDF vulnerabilities.
	  </t>
	  <t>
	    The registration template was updated to match RFC 6838.
	  </t>
	</list>
      </t>
      </section>
  </back>
</rfc>
