From 463c2ec14523be0366ac7388095b0e1dacbc8d3f Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 5 Feb 2016 23:40:13 +0000 Subject: pdfx (5feb16) git-svn-id: svn://tug.org/texlive/trunk@39594 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/pdfx/pdfx.dtx | 1226 +++++++++++++++++++------- 1 file changed, 915 insertions(+), 311 deletions(-) (limited to 'Master/texmf-dist/source/latex/pdfx/pdfx.dtx') diff --git a/Master/texmf-dist/source/latex/pdfx/pdfx.dtx b/Master/texmf-dist/source/latex/pdfx/pdfx.dtx index debb49866a1..186e2f8abb7 100644 --- a/Master/texmf-dist/source/latex/pdfx/pdfx.dtx +++ b/Master/texmf-dist/source/latex/pdfx/pdfx.dtx @@ -2,7 +2,7 @@ % % File: pdfx.dtx % -% Copyright (c) 2015, CV Radhakrishnan , +% Copyright (c) 2016, CV Radhakrishnan , % Han The Thanh , % Ross Moore , % Peter Selinger @@ -19,12 +19,16 @@ % % \fi % -% \CheckSum{1844} +% \CheckSum{2209} % \iffalse % %<*driver> \documentclass[a4paper]{ltxdoc} +\providecommand{\pdfxopt}{a-2u} \usepackage{rvdtx} +\usepackage[\pdfxopt]{pdfx} +\usepackage[T1]{fontenc} +\hypersetup{citecolor=blue} \EnableCrossrefs \CodelineIndex \RecordChanges @@ -89,13 +93,19 @@ % \changes{v1.3}{2008/12/01}{Fix copyright in xmp files.} % \changes{v1.5.4}{2015/02/28}{Fixed timezone bug; Unicode support; more % PDF variants; added color profiles.} +% \changes{v1.5.5}{2015/03/23}{Support for PDF/X-4p and PDF/X-5pg +% with external color profiles.} +% \changes{v1.5.6}{2016/02/05}{Suppressed `dummy-space' font warning; +% removed spurious '?' in XMP packets; improved handling of Color Profiles; +% ensure Hy@pdfatrue when building PDF/A, for link flags; +% properly enables xcolor conversion of color models.} % -% \title{Generation of PDF/X and PDF/A compliant PDF's -% with PDF\TeX{} --- \texttt{pdfx.sty}} -% \date{2015/02/28} -% \version{1.5.4} +% \title{Generation of PDF/X- and PDF/A-compliant PDFs +% with pdf\TeX{} --- \texttt{pdfx.sty}} +% \date{2016/02/05} +% \version{1.5.6} % \keywords{PDF, PDF/A, PDF/X, pdf\TeX, \LaTeX} -% \author{C.\,V.\,Radhakrishnan, \thanh, Ross~Moore {\upshape\small +% \author{C.\,V.\,Radhakrishnan, \Thanh, Ross~Moore {\upshape\small % and} Peter Selinger} % \contact{\texttt{[cvr,thanh]@river-valley.org}, % \texttt{ross.moore@mq.edu.au}, \texttt{selinger@mathstat.dal.ca}} @@ -104,36 +114,88 @@ % % \StopEventually{} % -% \section{Introduction} +% \section[Introduction]{Introduction} +% +% This package\footnote{A slightly earlier version of this documentation +% was published as \cite{pdfx}.} +% currently supports generation of PDF/X- and +% PDF/A-compliant documents using \pdftex, in some of their variants. +% Support for additional standards, such as PDF/E, PDF/VT +% is also available; see the complete list in Section~\ref{ssec-options} below. +% By `supports', we mean that the package provides correct and sufficient +% means to declare that a document conforms with a stated PDF variant +% (PDF/X, PDF/A, PDF/E, PDF/VT, etc.) along with the version +% and/or level of conformance. +% This package also allows appropriate metadata and color profile +% to be specified, according to the requirements of the PDF variant. +% +% Metadata elements, most of which must ultimately be written as XML +% using the UTF-8 encoding, is provided via a file named |\jobname.xmpdata|, +% for the running \LaTeX\ job. Without such a file, providing some required +% information as well as a large range of optional data, a fully validating +% PDF file cannot be achieved. The PDF can be created, having the correct +% visual appearance on all pages, but it will not pass validation checks. +% Section~\ref{ssec-metadata} describes how this file should be constructed. +% +% \medskip +% What this package \emph{does not} do is to check for all the details +% of document structure and type of content that may be required +% (or restricted) within a PDF variant. For example, PDF/VT \cite{PDFVT} requires +% well-structure parts, using Form XObject sections tagged as `/DPart'. +% Similarly PDF/A-1a (and 2a and 3a) \cite{PDFA,PDFA2,PDFA3} require +% a fully `Tagged PDF', including a detailed structure tagging which +% envelops the complete contents of the document. +% This is beyond the current version of \pdftex, as commonly shipped. +% So while this package provides enough to meet the declaration, +% metadata and font-handling aspects for these PDF/A variants, +% it is not sufficient to produce fully conforming PDFs. +% However, with extra \pdftex-based software that \emph{is} capable +% of producing `Tagged PDF', this package can be used as part of +% the overall workflow to produce fully conforming documents. +% It is also reported to have been successfully used with Lua\TeX. +% +% +% \subsection{PDF standards}\label{ssec-standards} % % PDF/X and PDF/A are umbrella terms used to denote several ISO -% standards that define different subsets of the PDF standard. The -% objective of PDF/X is to facilitate graphics exchange between +% standards \cite{PDFX,PDFX3,PDFX1a,PDFX4,PDFX5,PDFA,PDFA2,PDFA3} +% that define different subsets of the PDF standard \cite{PDF17,ISO32000}. +% The objective of PDF/X is to facilitate graphics exchange between % document creator and printer and therefore, has all requirements % related to printing. For instance, in PDF/X, all fonts need to be % embedded and all images need to be CMYK or spot colors. PDF/X-2 and % PDF/X-3 accept calibrated RGB and CIELAB colors along with all other % specifications of PDF/X. +% Since 2005 other variants of PDF/X have emerged, as extra effects +% (such as layering and transparency) have been supported within the PDF +% standard itself. The full range of versions and conformance supported +% in this package is discussed below in Section~\ref{ssec-options}. % % PDF/A defines a profile for archiving PDF documents, which ensures -% the documents can be reproduced the exact same way in years to -% come. A key element to achieving this is that PDF/A documents shall -% be 100\% self contained. All the information needed to display the -% document in the same manner every time is embedded in the file. A -% PDF/A document is not permitted to be reliant on information from +% the documents can be reproduced in the exact same way in years to +% come. A key element to achieving this is that PDF/A documents +% are 100\% self-contained. All the information needed to display the +% document in the same manner every time is embedded in the file. +% A PDF/A document is not permitted to be reliant on information from % external sources. Other restrictions include avoidance of -% audio/video content, JavaScript and encryption. Mandatory inclusion -% of fonts, color profile and standards based metadata are absolutely -% essential for PDF/A. +% audio/video content, JavaScript and encryption. +% Mandatory inclusion of fonts, color profile and standards-based metadata +% are absolutely essential for PDF/A. +% Later versions allow for use of image compression and file attachments. % -% This package currently supports generation of PDF/X and PDF/A -% compliant documents using \pdftex. Support for additional standards -% is also included; see the complete list in -% Section~\ref{ssec-options} below. +% PDF/E is an ISO standard \cite{PDFE} intended for documents used in engineering workflows. +% PDF/VT \cite{PDFVT} allows for high-volume customised form printing, such as utility bills. +% PDF/UA (`Universal Accessibility') is emerging as a standard \cite{PDF-UA,PDFUA1} supporting +% Assistive Technologies, incorporating web-accessibility guidelines (WCAG) +% for electronic documents. +% In future, PDF/H may emerge for health records and medical-related +% documents. Other applications can be envisaged. +% Declarations and Metadata are supported for the first two of these. +% The others are the subject of further work; revised versions of this +% package can be expected in later years. % -% \section{Usage} % -% \subsection{Options}\label{ssec-options} +% \section[Usage]{Usage} % % The package can be loaded with the command: % \begin{decl} @@ -141,22 +203,24 @@ % \end{decl} % where the options are as follows. % +% \subsection{Options}\label{ssec-options} +% % \subsubsection{PDF/A options} % -% PDF/A is an ISO standard intended for long-term archiving of +% PDF/A is an ISO standard~\cite{PDFA,PDFA2,PDFA3} intended for long-term archiving of % electronic documents. It therefore emphasizes self-containedness and -% reproducibility, as well as machine readable metadata. The PDF/A -% standard has three conformance levels ``a'', ``b'', and ``u''. Level -% ``a'' is the strictest, but is not yet fully implemented by the -% |pdfx| package. Conformance level ``u'' has the same requirements as -% level ``b'', but with the additional requirement that all text in +% reproducibility, as well as machine-readable metadata. The PDF/A +% standard has three conformance levels `a', `b', and `u'. Level +% `a' is the strictest, but is not yet fully implemented by the +% |pdfx| package. Conformance level `u' has the same requirements as +% level `b', but with the additional requirement that all text in % the document must have a Unicode mapping. However, the |pdfx| -% package produces such Unicode mappings even in level ``b'' files. +% package produces such Unicode mappings even in level `b' files. % The standard also has three different versions 1, 2, and 3, which -% were standardized in 2005, 2011, and 2012, respectively. Earlier +% were standardized in 2005, 2011 and 2012, respectively. Earlier % versions contain a subset of the features of later versions, so for % maximum portability, it is preferable to use a lower-numbered -% version. There is no conformance level ``u'' in version 1 of the +% version. There is no conformance level `u' in version 1 of the % standard. For many typical uses of PDF/A, it is sufficient to use % PDF/A-1b. % @@ -170,6 +234,11 @@ % \item |a-3b|: generate PDF/A-3b. % \item |a-3u|: generate PDF/A-3u. % \end{itemize} +% By `Experimental, not fully implemented' here we mean primarily that +% the document structure, as required for `Tagged PDF', is not handled +% by this package. Using other \pdftex-based software that \emph{is} +% capable of producing such complete tagging, conforming documents +% can indeed be produced. % % \subsubsection{PDF/E options} % @@ -196,6 +265,14 @@ % \item |vt-2|: generate PDF/VT-2. Experimental, not fully implemented. % \item |vt-2s|: generate PDF/VT-2s. Experimental, not fully implemented. % \end{itemize} +% By `Experimental, not fully implemented' here we mean primarily that +% the structuring of a document into `/DPart' sections, as Form XObjects, +% is not handled by this package. +% This \emph{is} possible with current \pdftex\ software, +% but not yet in a way that lends itself easily to full automation, due to +% requirements of knowing the internal object number of certain internal +% PDF constructs. All the other aspects: PDFInfo declaration, Metadata +% and Color Profile, of the PDF/VT variants are correctly handled. % % \subsubsection{PDF/X options} % @@ -203,15 +280,16 @@ % emphasizes printing-related requirements, such as embedded fonts and % color profiles. The PDF/X standard has a large number of variants % and conformance levels. The basic variants are known as X-1, X-1a, -% X-3, X-4, and X-5. (Note that there is no X-2 standard, because it -% was either never published or withdrawn). The PDF/X-1a standard -% exists in revisions of 2001 and 2003, the PDF/X-3 standard exists in -% revisions of 2002 and 2003, and the PDF/X-4 and PDF/X-5 standards -% exist in revisions of 2008 and 2010. Moreover, some of these -% standards have a ``p'' version, which permits the use of an -% externally supplied color profile (instead of an embedded one), -% and/or a ``g'' version, which permits the use of external graphical -% content. Moreover, PDF/X-5 has an ``n'' version, which extends +% X-3, X-4, and X-5. (Note that a revised version of the X-2 standard +% was published in 2003, but withdrawn as an ISO standard in 2011, +% basically due to lack of interest in using it). +% The PDF/X-1a standard exists in revisions of 2001 and 2003, +% the PDF/X-3 standard exists in revisions of 2002 and 2003, +% and the PDF/X-4 and PDF/X-5 standards exist in revisions of 2008 and 2010. +% Moreover, some of these standards have a `p' version, which permits the +% use of an externally supplied color profile (instead of an embedded one), +% and/or a `g' version, which permits the use of external graphical +% content. Moreover, PDF/X-5 has an `n' version, which extends % PDF/X-4p by permitting additional color spaces other than Grayscale, % RGB, and CMYK. For many typical uses of PDF/X, it is sufficient to % use PDF/X-1a. @@ -226,15 +304,13 @@ % also available to specify PDF/X-4:2008 or PDF/X-4:2010 explicitly. % \item |x-4p|: generate PDF/X-4p. Options |x-4p08| and |x-4p10| are % also available to specify PDF/X-4p:2008 or PDF/X-4p:2010 explicitly. -% Experimental, not fully implemented. % \item |x-5g|: generate PDF/X-5g. Options |x-5g08| and |x-5g10| are % also available to specify PDF/X-5g:2008 or PDF/X-5g:2010 explicitly. % \item |x-5n|: generate PDF/X-5n. Options |x-5n08| and |x-5n10| are -% also available to specify PDF/X-5n:2008 or PDF/X-5n:2010 -% explicitly. Experimental, not fully implemented. +% also available to specify PDF/X-5n:2008 or PDF/X-5n:2010 explicitly. +% Experimental, not fully implemented. % \item |x-5pg|: generate PDF/X-5pg. Options |x-5pg08| and |x-5pg10| are % also available to specify PDF/X-5pg:2008 or PDF/X-5pg:2010 explicitly. -% Experimental, not fully implemented. % \end{itemize} % % \subsubsection{Other options} @@ -242,9 +318,14 @@ % These options are experimental and should not normally be used. % % \begin{itemize} -% \item |noBOM|: do not generate the optional byte order marker in the -% embedded XMP metadata. Try this option in case there is an -% unexplained error involving the |xmpincl| package. +% \item |useBOM|: generate an explicit UTF-8 byte-order marker in the +% embedded XMP metadata, and make the XMP packet writable. Neither +% of these features are required by the PDF/A standard, but there +% exist some PDF/A validators (reportedly |validatepdfa.com|) that +% seem to require them. Note: the implementation of this feature is +% experimental and may break with future updates to the |xmpincl| +% package. +% \item |noBOM|: do not generate the optional byte-order marker. (default) % \item |pdf13|: use PDF 1.3, overriding the version specified by the % applicable standard. This may produce a non-standard-conforming PDF file. % \item |pdf14|: use PDF 1.4, overriding the version specified by the @@ -257,9 +338,9 @@ % applicable standard. This may produce a non-standard-conforming PDF file. % \end{itemize} % -% \subsection{Data file for metadata} +% \subsection{Data file for metadata}\label{ssec-metadata} % -% As mentioned above, standards compliant PDF documents need metadata +% As mentioned above, standards-compliant PDF documents require metadata % to be included. The |pdfx| package expects the metadata to be % supplied in a special data file called |\jobname.xmpdata|. Here, % |\jobname| is usually the basename of the document's main |.tex| @@ -275,9 +356,20 @@ % \Keywords{cookies\sep muffins\sep cakes} % \Publisher{Baking International} % \end{verbatim} -% You may note that multiple authors and keywords have been separated +% You should note that multiple authors and keywords have been separated % by |\sep|. The |\sep| macro is only permitted in within the % |\Author|, |\Keywords|, and |\Publisher| fields. +% +% After processing, the local directory contains a file named such as +% |pdfa.xmpi| or |pdfx.xmpi| according to the PDF variant required. +% This file is the complete XMP Metadata packet. It can be checked for +% validity, using an online validator, such as at +% \href{http://www.pdflib.com/knowledge-base/xmp-metadata/free-xmp-validator/}{www.pdflib.com}. +% +% \textbf{Warning}: The |\jobname.xmpdata| file may be included in the +% main document source, within a |{filecontents}| environment, +% but \emph{only} when it contains \emph{no} non-ascii UTF-8 byte sequences. +% See Section~\ref{ssec-symbols} below for more information. % % \subsection{List of supported metadata fields} % @@ -302,20 +394,20 @@ % \item |\Copyright|: a copyright statement. % \item |\CopyrightURL|: location of a web page describing the owner % and/or rights statement for this document. -% \item |\Copyrighted|: ``True'' if the document is copyrighted, and -% ``False'' if it isn't. This is automatically set to ``True'' if either -% |\Copyright| or |\CopyrightURL| is specified, but can be -% overridden. For example, if the copyright statement is ``Public -% Domain'', this should be set to ``False''. +% \item |\Copyrighted|: `True' if the document is copyrighted, +% and `False' if it isn't. This is automatically set to `True' +% if either |\Copyright| or |\CopyrightURL| is specified, but can +% be overridden. For example, if the copyright statement is +% `Public Domain', this should be set to `False'. % \end{itemize} % % \subsubsection{Publication information:} % % \begin{itemize} % \item |\PublicationType|: The type of publication. If defined, must -% be one of book, catalog, feed, journal, magazine, manual, -% newsletter, pamphlet. This is automatically set to ``journal'' if -% |\Journaltitle| is specified, but can be overridden. +% be one of `book', `catalog', `feed', `journal', `magazine', `manual', +% `newsletter', `pamphlet'. This is automatically set to `journal' +% if |\Journaltitle| is specified, but can be overridden. % \item |\Journaltitle|: The title of the journal in which the % document was published. % \item |\Journalnumber|: The ISSN for the publication in which the @@ -327,18 +419,29 @@ % \item |\Lastpage|: Last page number of the published version of the % document. % \item |\Doi| : Digital Object Identifier (DOI) for the document, -% without the leading ``doi:''. +% without the leading `doi:'. % \item |\CoverDisplayDate|: Date on the cover of the journal issue, % as a human-readable text string. % \item |\CoverDate|: Date on the cover of the journal issue, in a -% format suitable for storing in a database field with a ``date'' data -% type. +% format suitable for storing in a database field with a `date' +% data type; e.g. YYYY-MM, or YYYY-MM-DD. % \end{itemize} % -% \subsection{Symbols permitted in metadata} +% \subsubsection{Backward Compatibility} +% The following macros are also recognised, for backward compatibility +% with earlier versions of the package. +% \begin{itemize} +% \item |\Creator|: synonymous with |\CreatorTool| which is usually handled +% automatically anyway, but can be over-ridden. +% \item |\Org|: synonymous with |\Publisher|. +% \item |\WebStatement|: synonymous with |\CopyrightURL|. +% \end{itemize} +% +% \subsection{Symbols permitted in metadata}\label{ssec-symbols} % % Within the metadata, all printable ASCII characters except -% |\|, |{|, |}|, and |%| represent themselves. Also, all printable +% |\|, |{|, |}| and |%| +% represent themselves. Also, all printable % Unicode characters from the basic multilingual plane (i.e., up to % code point U+FFFF) can be used directly with the UTF-8 encoding. % (Please note: encodings other than UTF-8 are not currently supported @@ -352,28 +455,97 @@ % \item |\%|: a literal |%| % \item |\{|: a literal |{| % \item |\}|: a literal |}| -% \item |\backslash|: a literal backslash ``|\|'' -% \item |\copyright|: the \copyright\ copyright symbol +% \item |\backslash|: a literal backslash |\| +% \item |\copyright|: the copyright symbol \textcopyright % \end{itemize} % The macro |\sep| is only permitted within |\Author|, |\Keywords|, -% and |\Publisher|. It is used to separate multiple authors, -% keywords, etc. +% and |\Publisher|. It's intention is to separate multiple authors, +% keywords, etc. However for validation purposes, multiple authors +% and keywords must not really be separated. The package takes care +% of this, even when |\sep| is used. +% +% \medskip +% Other \TeX\ macros actually can be used, provided the author is very +% careful and not ask for too-complicated \TeX\ or \LaTeX\ expansions +% into internal commands or non-character primitives; basically just accents, +% macros for Latin-based special characters, and simple textual replacements, +% perhaps with a simple parameter. A special macro |\pdfxEnableCommands{...}| +% is provided to help resolve difficulties that may arise. +% +% Here is an example of the use of |\pdfxEnableCommands|, which occurs +% with the name of one of our authors {(H\`an Th\'{\^e} Thanh)} +% due to the doubly-accented letter \'{\^e}. +% It is usual to define a macro such as: |\def\thanh{H\`an Th\'{\^e} Thanh}|. +% +% In previous versions of the |pdfx| package, use of such a macro +% within the |.xmpdata| file, in the |Copyright| information say, +% could result in the accent macros expanding into internal primitives, such as +% \begin{verbatim} +% H\unhbox \voidb@x \bgroup \let \unhbox \voidb@x \setbox \@tempboxa ... +% \end{verbatim} +% \removelastskip\noindent +% going on for many lines. This clearly has no place within the XMP Metadata. +% To get around this, one could try using simplified macro definitions +% \begin{verbatim} +% \pdfxEnableCommands{ +% \def\`#1{#1^^cc^80}\def\'#1{#1^^cc^81}\def\^#1{#1^^cc^82}} +% \end{verbatim} +% \removelastskip\noindent +% where the |^^cc^80|, |^^cc^81|, |^^cc^82| cause \TeX\ to generate the correct +% UTF-8 bytes for `combining accent' characters. +% +% This works fine for metadata fields that appear just in the XMP packet. +% However, it is not sufficient for the PDF |/Author| key, which must exactly match +% with the |dc:creator| Metadata element. What is needed instead is +% \begin{verbatim} +% \pdfxEnableCommands{ +% \def\thanh{H^^c3^^a0n Th\eee Thanh}\def\eee{^^c3^^aa^^cc^^81 }} +% \end{verbatim} +% \removelastskip\noindent +% or the above with `\`a' typed directly as UTF-8 instead of |^^c3^^a0| +% and `\^e' in UTF-8 for |^^c3^^aa|. +% The reason for this is due to the |\pdfstringdef| command, which constructs +% the accented latin letters as single combined characters \`a and \^e, +% without resorting to combining accents, wherever possible. +% If the Metadata does not have the same, irrespective of Unicode normalisation, +% then validation fails. +% +% With this latest version (1.5.6) of the |pdfx| package, such difficulties +% have been overcome, at least for characters used in Western European, +% Latin-based languages. The input encoding used when reading the |.xmpdata| +% file now includes interpretations of \TeX's usual accent commands to +% produce the required UTF-8 byte sequences. +% Work is ongoing to extend this input encoding to include macro definitions +% for more special characters (e.g., extended Latin, Cyrillic, Greek, etc.). +% A significant portion of the Unicode Basic Plane characters can be covered +% this way. Modules could even be provided for CJK character sets and +% mathematical symbols, etc. However, this can become memory intensive, +% so significant testing will be required before this becomes a standard +% part of the |pdfx| package. +% +% \textbf{Warning}: This encoding of macros, using ascii characters only, +% allows for the convenience of including the |\jobname.xmpdata| file +% in the main \LaTeX\ source preamble, within a |{filecontents}| environment. +% This \emph{only} works when it contains \emph{no} non-ascii UTF-8 byte +% sequences. The |{filecontents}| environment is best placed immediately +% \emph{before} the |\usepackage[...]{pdfx}| command. +% % % \subsection{Color profiles} % % Most standards compliant PDF documents require a \emph{color -% profile} to be embedded in the file. In a nutshell, such a profile +% profile} to be embedded within the file. In a nutshell, such a profile % determines precisely how the colors used in the document will be % rendered when printed to a physical medium. This can be used to % ensure that the document will look exactly the same, even when it is -% printed on different printers, paper types, etc. The inclusion of a -% color profile is necessary to make the document completely -% self-contained. +% printed on different printers, with different paper types, etc. +% The inclusion of a color profile is necessary to make the document +% completely self-contained. % % Since most \LaTeX\ users are not graphics professionals and are not % particularly picky about colors, the |pdfx| package includes default -% profiles that will be included when nothing else is -% specified. Therefore, the average user doesn't have to do anything +% profiles that will be included when nothing else is specified. +% Therefore, the average user doesn't have to do anything % special about color. % % For users who have a specific color profile they wish to use, it is @@ -408,7 +580,72 @@ % Some color profile files may be obtained from the International % Color Consortium. Please take a look at % \url{http://www.color.org/iccprofile.xalter}. +% +% Alternatively, color profiles are shipped with many Adobe software +% applications; these are then available for use also with non-Adobe +% software. Now the |pdfx| package includes coding to streamline +% inclusion of these profiles in PDF documents, or to specify +% them as `external' profiles, with PDF/X-4p and PDF/X-5pg variants. +% Two files |AdobeColorProfiles.tex| and |AdobeExternalProfiles.tex| +% are distributed with the |pdfx| package. The latter is for use +% with PDF/X-4p and PDF/X-5pg, which do not require color profiles to +% be embedded, while the former can be used with other PDF/X variants. +% Both define commands to use Color Profiles as follows. +% \begin{center} +% \begin{tabular}{ll} +% \texttt{\string\FOGRAXXXIX} & Coated FOGRA39 (ISO 12647-2:2004)\\ +% \texttt{\string\SWOPCGATSI} & U.S. Web Coated (SWOP) v2\\ +% \texttt{\string\JapanColorMMICoated} & Japan Color 2001 Coated\\ +% \texttt{\string\JapanColorMMIUncoated} & Japan Color 2001 Uncoated\\ +% \texttt{\string\JapanColorMMIINewspaper} & Japan Color 2002 Newspaper\\ +% \texttt{\string\JapanWebCoatedAd} & Japan Web Coated (Ad)\\ +% \texttt{\string\CoatedGRACoL} & Coated GRACoL 2006 (ISO 12647-2:2004)\\ +% \texttt{\string\SNAPCGATSII} & CGATS TR 002\\ +% \texttt{\string\SWOPCGATSIII} & CGATS TR 003\\ +% \texttt{\string\SWOPCGATSV} & CGATS TR 005\\ +% \texttt{\string\ISOWebCoated} & Web Coated FOGRA28 (ISO 12647-2:2004)\\ +% \texttt{\string\ISOCoatedECI} & ISO Coated v2 (ECI)\\ +% \texttt{\string\CoatedFOGRA} & Coated FOGRA27 (ISO 12647-2:2004)\\ +% \texttt{\string\WebCoatedFOGRA} & Web Coated FOGRA28 (ISO 12647-2:2004)\\ +% \texttt{\string\UncoatedFOGRA} & Uncoated FOGRA29 (ISO 12647-2:2004)\\ +% \texttt{\string\IFRAXXVI} & ISOnewspaper26v4 ISO/DIS 12647-3:2004\\ +% \texttt{\string\IFRAXXX} & ISOnewspaper30v4 ISO/DIS 12647-3:2004\\ +% \end{tabular} +% \end{center} +% As of the time of writing, only the first six of these result in PDFs +% which can validate with external profiles (i.e., for PDF/X-4p and PDF/X-5pg) +% using current versions of Adobe Acrobat Pro software. It is unclear +% whether the others (incl.\,\verb|\IFRAXXVI| and \verb|\IFRAXXX|) fail due +% to incorrect data or problems in the validation software. +% All but those last two can be used for valid embedded profiles, +% providing the corresponding files can be found. The following macro +% is used to set the (absolute or relative) path, on the local operating system, +% to the location of color profile files. +% \begin{decl} +% \defmacro{pdfxSetRGBcolorProfileDir}\marg{path to RGB color profiles}\\ +% \defmacro{pdfxSetCMYKcolorProfileDir}\marg{path to CMYK profiles} +% \end{decl} +% On a Macintosh, one can use \texttt{\string\AdobeMacOSdir} which expands to +% the path \texttt{/Library/Application Support/\allowbreak +% Adobe/\allowbreak Color\allowbreak /Profiles/\allowbreak Recommended/}. +% Under Windows the corresponding macro is \texttt{\string\WindowsColordir} +% which expands: +% \texttt{C:\string\Windows\allowbreak\string\System32\allowbreak +% \string\Spool\allowbreak\string\Drivers\allowbreak\string\Color\string/}. +% Use these within the \verb|.xmpdata| file as, e.g., +% |\pdfxSetCMYKcolorProfileDir{\AdobeMacOSdir}|. +% Authors should change the paths to suit their own circumstances, either +% \emph{before} loading |pdfx.sty| or within the \verb|.xmpdata| file. +% +% PDF/A and PDF/E usually need an RGB profile, while PDF/X and PDF/VT +% require a CMYK profile. It is possible to use a CMYK profile with PDF/A +% or PDF/E by specifying |\setRGBcolorprofile{}{}{}{}| in the \verb|.xmpdata| file. +% Beware however, that with PDF/A any coloured hyperlink annotations can +% cause a validation problem, as these are interpreted as RGB colours +% even when 4 components are given. This may be a bug in validators, +% as PDF specifies that the number of components should match the color space. % +% % \subsection{Notes on the internal representation of metadata} % % Within the PDF file, metadata is deposited in two places: some data @@ -421,18 +658,18 @@ % systems is also provided under modified BSD licence. % % Some of the metadata, such as the author, title, and keywords, are -% stored {\bf both} in the XMP packet and in the |/Info| -% dictionary. For the resulting file to be standard compliant, the two +% stored \emph{both} in the XMP packet and in the |/Info| +% dictionary. For the resulting file to be standards-compliant, the two % copies of the data must be identical. All of this is taken care of % automatically by the |pdfx| package. % % In principle, users can resort to alternate ways to create an XMP % file for inclusion in PDF. In this case, users should create a file % |pdfa.xmp| or |pdfx.xmp| (etc., depending on the PDF flavor) -% containing the pre-defined data. However, this is an error prone +% containing the pre-defined data. However, this is an error-prone % process and is not recommended for most users. If there is a % particular field of metadata that you need and that is not currently -% supported, please contact the authors. +% supported, please contact the package authors. % % |pdfx| makes use of the |xmpincl| package to include |xmp| data into % the PDF. The documentation of |xmpincl| package may help interested @@ -451,26 +688,34 @@ % % % -% \section{Installing} +% \section[Installing]{Installing} +% The |pdfx.dtx| package is available on CTAN as usual, via +% \url{http://ctan.org/pkg/pdfx}. It is also included in +% \TeX\ distributions such as Mac\TeX, \TeX\ Live and MiK\TeX. +% Thus most users will not need to handle installation at all. % +% For those wishing to do a manual installation, here are some notes. % The file |pdfx.dtx| is a composite document of program code and -% documentation in \LaTeX{} format in the tradition of \emph{literate -% programming}. To get the documentation that you are reading now, -% run (\textsc{pdf})\LaTeX{} on the file |pdfx.dtx|. Or better, use -% the included |Makefile|, which will also regenerate the index. +% documentation in \LaTeX{} format, in the tradition of \emph{literate +% programming}. After having installed the package, +% to get the documentation that you are reading now, +% run (\textsc{pdf})\LaTeX{} on the file |pdfx.dtx|. +% The resulting PDF should be valid as PDF/A-2u. +% % Or better, use +% % the included |Makefile|, which will also regenerate the index. % -% To install the package, first extract the program code, i.e., the +% To install the package, first extract the program code; i.e., the % file |pdfx.sty|, by running \LaTeX{} or \TeX{} on the file % |pdfx.ins|. Create a directory named |pdfx| under |$TEXMF/tex/latex| % and copy the files |pdfx.sty|, |8bit.def|, |glyphtounicode-cmr.tex|, -% as well as the |*.icc| and |*.xmp| files, to it. Then update \TeX's +% as well as the |*.icc| and |*.xmp| files, into it. Then update \TeX's % file database using the appropriate command for your distribution and % operating system (such as |texhash| or |mktexlsr|, or similar). % % \subsection{Limitations and dependencies} % -% |pdfx.sty| works only with \pdftex. It further depends on the following -% packages: +% |pdfx.sty| works with \pdftex\ and also Lua\TeX. +% It further depends on the following other packages: % \begin{enumerate} % \item |xmpincl| for insertion of metadata into PDF. % \item |hyperref| for hyperlinking, bookmarks, etc. @@ -479,7 +724,8 @@ % % \subsection{Files included} % -% The following files are included in the archive: +% The following files are included in the package. +% Some can be created from |pdfx.dtx|, using the |Makefile|. % % \subsubsection{Package files} % @@ -490,19 +736,22 @@ % \item |pdfvt.xmp| --- specimen |xmp| template for PDF/VT. % \item |pdfx.xmp| --- specimen |xmp| template for PDF/X. % \item |8bit.def| --- custom input encoding. +% \item |l8uenc.def| --- input encoding macro declarations. % \item |glyphtounicode-cmr.tex| --- maps glyph names to corresponding % Unicode for Computer Modern and other \TeX-specific fonts. -% \item |coated_FOGRA39L_argl.icc| --- a freely distributable CMYK -% color profile. -% \item |sRGB_IEC61966-2-1_black_scaled.icc| --- a freely -% distributable RGB color profile. -% \item |ICC_LICENSE.txt| --- the license for the color profiles. +% \item |coated_FOGRA39L_argl.icc| --- CMYK color profile +% (freely distributable). +% \item |sRGB_IEC61966-2-1_black_scaled.icc| --- RGB color profile +% freely distributable. +% \item |ICC_LICENSE.txt| --- license for the color profiles. +% \item |AdobeColorProfiles.tex| --- macros for inclusion of Adobe-supplied color profiles. +% \item |AdobeExternalProfiles.tex| --- macros for use of external color profiles. % \end{itemize} % % \subsubsection{Documentation} % % \begin{itemize} -% \item |README| --- Readme file. +% \item |README| --- usual top-level information. % \item |manifest.txt| --- file list. % \item |sample.tex|, |sample.xmpdata| --- a sample file with sample % metadata. @@ -515,6 +764,7 @@ % \begin{itemize} % \item |src/pdfx.dtx| --- composite package and documentation. % \item |src/pdfx.ins| --- installer batch file. +% \item |src/pdfx.xmpdata| --- metadata for the documentation. % \item |src/rvdtx.sty| --- used by |pdfx.dtx|. % \item |src/Makefile| --- a Makefile for building the documentation. % \end{itemize} @@ -532,21 +782,140 @@ % and/or % \href{mailto:selinger@mathstat.dal.ca}{\ttfamily selinger@mathstat.dal.ca}. % -% \section{Implementation} +% \section[Bibliography]{Bibliography} +% \begin{thebibliography}{999} +% +% \bibitem{PDF17}Adobe Systems Inc.; +% {PDF} Reference 1.7, November 2006. +% Also available as \cite{ISO32000}.\\ +% \url{http://www.adobe.com/devnet/pdf/pdf_reference.html}. +% +% \bibitem{DC} +% Dublin Core Metadata Element Set, Version 1.1, October 2010 +% \url{http://dublincore.org/documents/dces/} +% +% \bibitem{PDFA}ISO\,19005-1:2005; +% Document Management --- Electronic document file format for long term preservation +% --- Part 1: Use of PDF\,1.4\,(PDF/A-1); +% Technical Committee ISO/TC\,171/SC\,2 (Sept. 2005). +% Revisions via Corrigenda: ISO\,19005-1:2005/Cor\,1:2007 (March 2007); +% ISO\,19005-1:2005/Cor\,2:2011 (Dec. 2011). \\ +% \url{http://www.iso.org/iso/catalogue_detail?csnumber=38920}. +% +% \bibitem{PDFA2}ISO\,19005-2:2011; +% Document Management --- Electronic document file format for long term preservation +% --- Part 2: Use of ISO\,32000-1\,(PDF/A-2); +% Technical Committee ISO/TC\,171/SC\,2 (June 2011). +% \url{http://www.iso.org/iso/catalogue_detail?csnumber=50655}. +% +% \bibitem{PDFA3}ISO\,19005-3:2012; +% 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); +% Technical Committee ISO/TC\,171/SC\,2 (October 2012).\\ +% \url{http://www.iso.org/iso/catalogue_detail?csnumber=57229}. +% +% \bibitem{ISO32000}ISO\,32000-1:2008; +% Document management\,---\,Portable document format\,(PDF\,1.7); +% Technical Committee ISO/TC\,171/SC\,2 (July 2008). +% Also available as \cite{PDF17}.\\ +% \url{http://www.iso.org/iso/catalogue_detail?csnumber=51502}. +% +% \bibitem{PDF20}ISO\,32000-2-20140220; +% Document management --- Portable document format --- Part~2: PDF\,2.0; +% Technical Committee ISO/TC\,171/SC\,2, in draft form (Feb. 2014). +% +% \bibitem{PDFE}ISO\,24517-1:2008; +% Document Management --- Engineering document format using PDF --- Part 1: +% Use of PDF 1.6 (PDF/E-1); +% Technical Committee ISO/TC\,171/SC\,2 (May 2008).\\ +% \url{http://www.iso.org/iso/catalogue_detail?csnumber=42274}. +% +% \bibitem{PDFUA1}ISO\,14289-1:2012; +% Document management applications --- Electronic document file format enhancement for accessibility +% --- Part 1: Use of ISO\,32000-1\,(PDF/UA-1); +% Technical Committee ISO/TC\,171/SC\,2 (July 2012). +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=54564}.\\ +% Revised as ISO\,14289-1:2014 (December 2014): +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64599}. +% +% \bibitem{PDF-UA} +% PDF/UA Technical Implementation Guide: Understanding ISO\,14289-1 (PDF/UA-1). \penalty-200 +% AIIM Global Community of Information Professionals. +% \href{http://www.aiim.org/Research-and-Publications/standards/committees/PDFUA/Technical-Implementation-Guide}% +% {{\tt http://www.aiim.org/Re\penalty-200 search-and-Publications/standards/committees/PDFUA/Technical-Implementation\penalty-200 -Guide}}. +% +% +% \bibitem{PDFVT}ISO\,16612-2:2010; +% Graphic technology\,---\,Variable data exchange\,---\,Part 2: +% Using PDF/X-4 \penalty-5000 and PDF/X-5 (PDF/VT-1 and PDF/VT-2). +% Technical Committee ISO/TC\,130 (December 2005). +% \href{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=38013}{{\tt http://www.iso.org/iso/home/store/catalogue\_tc/catalogue\_detail.htm?\penalty-200csnumber=38013}}. +% +% +% \bibitem{PDFX}ISO\,15930-1:2001; +% Graphic technology --- Prepress digital data exchange --- Use of PDF --- Part 1: +% Complete exchange using CMYK data (PDF/X-1 and PDF/X-1a). +% Technical Committee ISO/TC\,130 (December 2001). +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=29061}. +% +% \bibitem{PDFX3}ISO\,15930-3:2002; +% Graphic technology --- Prepress digital data exchange --- Use of PDF --- Part 3: +% Complete exchange suitable for colour-managed workflows (PDF/X-3). +% Technical Committee ISO/TC\,130 (September 2002). +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=34941}. +% +% \bibitem{PDFX1a}ISO\,15930-4:2003; +% Graphic technology --- Prepress digital data exchange --- Use of PDF --- Part 4: +% Complete exchange of CMYK and spot colour printing data using PDF 1.4 (PDF/X-1a). +% Technical Committee ISO/TC\,130 (December 2003). +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=39938}. +% +% \bibitem{PDFX3a}ISO\,15930-6:2003; +% Graphic technology --- Prepress digital data exchange --- Use of PDF --- Part 6: +% Complete exchange of printing data suitable for colour-managed workflows using PDF 1.4 (PDF/X-3). +% Technical Committee ISO/TC\,130 (December 2003). +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=39940}. +% +% \bibitem{PDFX4}ISO\,15930-7:2010; +% Graphic technology --- Prepress digital data exchange --- Use of PDF --- Part 7: +% Complete exchange of printing data (PDF/X-4) and partial exchange of printing data with external profile reference (PDF/X-4p) using PDF 1.6. +% Technical Committee ISO/TC\,130 (July 2010). +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=55843}. +% +% \bibitem{PDFX5}ISO\,15930-8:2010; +% Graphic technology --- Prepress digital data exchange --- Use of PDF --- Part 8: +% Partial exchange of printing data using PDF 1.6 (PDF/X-5). +% Technical Committee ISO/TC\,130 (July 2010). +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=55844}. +% Revision via Corrigendum: ISO\,15930-8:2010/Cor\,1:2011 (August 2011); +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=60210}. +% +% \bibitem{XMP}ISO\,16684-1:2012; +% Graphic technology --- Extensible metadata platform (XMP) specification --- Part 1: +% Data model, serialization and core properties. +% Technical Committee ISO/TC\,130 (February 2012). +% \url{http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=57421}. +% +% \bibitem{pdfx}C.\,V.\,Radhakrishnan, \Thanh, Ross Moore, Peter Selinger; +% Generation of PDF/X- and PDF/A-compliant PDFs with pdf\TeX{} --- \texttt{pdfx.sty}. +% TUGboat Vol.\,36, No.\,2; TUG 2015 Conference Proceedings. \TeX\ Users Group, 2015; pp.\,136--142. +% \end{thebibliography} +% \end{document} +% \section[Implementation]{Implementation} % % \iffalse %<*package> % \fi % \begin{macrocode} - \@ifpackageloaded{pdfxmult}{% - \PackageError{pdfx}% +\@ifpackageloaded{pdfxmult}{% + \PackageError{pdfx}% {^^JThis package may not be used in conjunction with the \space pdfxmult \space package}% {Type \space x \space to exit; or just \space \space to continue without this package.}% - \expandafter\let\csname opt@pdfx.sty\endcsname\@empty\endinput - }{}% + \expandafter\let\csname opt@pdfx.sty\endcsname\@empty\endinput +}{}% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{pdfx} - [2015/02/17 v1.5.3 PDF/X and PDF/A support (CVR/HTH/RRM/PS)] + [2016/02/04 v1.5.6 PDF/X and PDF/A support (CVR/HTH/RRM/PS)] \newif\ifpdfx@noBOM \pdfx@noBOMfalse % use a BOM in the XMP packet \newif\ifpdfx@x \pdfx@xfalse % PDF/X mode @@ -608,10 +977,10 @@ \DeclareOption{vt-1}{\global\pdfx@xtrue\global\pdfx@vttrue \def\xmp@Part{4}\def\xmp@vtPart{1}\def\xmp@Conformance{}\def\xmp@vtConformance{}% \def\xmp@ReleaseDate{2010}\global\pdfminorversion=6 } -\DeclareOption{vt-2}{\global\pdfx@xtrue\global\pdfx@vttrue - \def\xmp@Part{4}\def\xmp@vtPart{2}\def\xmp@Conformance{}\def\xmp@vtConformance{}% +\DeclareOption{vt-2}{\global\pdfx@xtrue\global\pdfx@vttrue\global\no@iccprofiletrue + \def\xmp@Part{5}\def\xmp@vtPart{2}\def\xmp@Conformance{pg}\def\xmp@vtConformance{}% \def\xmp@ReleaseDate{2010}\global\pdfminorversion=6 } -\DeclareOption{vt-2s}{\global\pdfx@xtrue\global\pdfx@vttrue +\DeclareOption{vt-2s}{\global\pdfx@xtrue\global\pdfx@vttrue\global\no@iccprofiletrue \def\xmp@Part{5}\def\xmp@vtPart{2}\def\xmp@Conformance{pg}\def\xmp@vtConformance{s}% \def\xmp@ReleaseDate{2010}\global\pdfminorversion=6 } @@ -624,23 +993,35 @@ %% inhibits writing the XMP byte-order marker \DeclareOption{noBOM}{\pdfx@noBOMtrue} +\DeclareOption{useBOM}{\pdfx@noBOMfalse} \pdfminorversion=4 % assumed for PDF/A ; options may change this for PDF/X \expandafter\ifx\csname pdfresetpageorigin\endcsname\relax\else \pdfresetpageorigin=0 \fi + +\ExecuteOptions{noBOM,a-1b} \ProcessOptions +\RequirePackage{ifluatex} +\ifluatex + \RequirePackage{pdftexcmds}% + \let\pdfx@mdfivesum\pdf@mdfivesum +\else + \let\pdfx@mdfivesum\pdfmdfivesum +\fi + \def\pdfx@encodingfile{l8uenc.def} + {\endlinechar=-1 \everyeof{\noexpand}% \xdef\pdfx@bannerstring{\expandafter\scantokens\expandafter{\pdftexbanner}} }% -\def\pdfx@testbannerstr{This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/dev) kpathsea version 6.2.0dev}% +\def\pdfx@testbannerstr{% + This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/dev) kpathsea version 6.2.0dev}% \ifx\pdfx@bannerstring\pdfx@testbannerstr \typeout{This version of pdfTeX cannot write out upper-range character bytes, 128-255.}% \typeout{Any UTF-8 Unicode characters in the Metadata will not be written correctly.}% \typeout{Please update to a more stable version of pdfTeX.^^J}% - \pdfx@noBOMtrue \fi \ifpdfx@x @@ -658,11 +1039,18 @@ /TrimBox[25 20 570 773]} \fi \ifnum\pdfminorversion >3 \relax - \pdfmapline{+dummy-space ^^J }} -\def\pdfx@xmpmarkup{% - \pdfx@actives% - \edef\@amp{\expandafter\@gobble\string\&}% - \edef\@hash{\expandafter\@gobble\string\#}% - \edef\ {\expandafter\@gobble\string\ }% - \edef\%{\expandafter\@gobble\string\%}% - \edef\{{\expandafter\@gobble\string\{}% - \edef\}{\expandafter\@gobble\string\}}% - \edef\backslash{\expandafter\@gobble\string\\}% - \def\@unicode##1{\@amp\@hash x##1;}% - \def\pdfx@amp{\@unicode{0026}}% - \def\pdfx@lt{\@unicode{003c}}% - \def\pdfx@gt{\@unicode{003e}}% - \def\copyright{\@unicode{00A9}}% +\def\pdfx@xmpmarkup{ + \pdfx@actives + \edef\@amp{\expandafter\@gobble\string\&} + \edef\@hash{\expandafter\@gobble\string\#} + \edef\ {\expandafter\@gobble\string\ } + \edef\%{\expandafter\@gobble\string\%} + \edef\{{\expandafter\@gobble\string\{} + \edef\}{\expandafter\@gobble\string\}} + \edef\backslash{\expandafter\@gobble\string\\} + \def\@unicode##1{\@amp\@hash x##1;} + \def\pdfx@amp{\@unicode{0026}} + \def\pdfx@lt{\@unicode{003c}} + \def\pdfx@gt{\@unicode{003e}} + \def\copyright{\@unicode{00A9}} \let\&\pdfx@amp % for backward compatibility \let\TextCopyright\copyright % for backward compatibility - \let\sep\pdfx@sep% + \let\sep\pdfx@sep + \the\pdfxsafeforxmp@toks } +%% In case macros are used in XMP Metadata, need a way to map these +%% to simple text, rather than specific font characters, or whatever: +\newtoks\pdfxsafeforxmp@toks +\def\pdfxEnableCommands#1{% user command + \expandafter\global\expandafter\pdfxsafeforxmp@toks + \expandafter{\the\pdfxsafeforxmp@toks#1}} + %%---------------------------------------------------------------------- %% Markup bindings to be used during PDF string generation. -\def\pdfx@pdfmarkup{% - \pdfx@actives% - \edef\%{\expandafter\@gobble\string\%}% - \edef\{{\expandafter\@gobble\string\{}% - \edef\}{\expandafter\@gobble\string\}}% - \edef\pdfx@backslash{\expandafter\@gobble\string\\}% - \def\backslash{\pdfx@backslash000\pdfx@backslash134}% - \edef\pdfx@amp{\expandafter\@gobble\string\&}% - \edef\pdfx@lt{\expandafter\@gobble\string\<}% - \edef\pdfx@gt{\expandafter\@gobble\string\>}% +\def\pdfx@pdfmarkup{ + \pdfx@actives + \edef\%{\expandafter\@gobble\string\%} + \edef\{{\expandafter\@gobble\string\{} + \edef\}{\expandafter\@gobble\string\}} + \edef\pdfx@backslash{\expandafter\@gobble\string\\} + \def\backslash{\pdfx@backslash000\pdfx@backslash134} + \edef\pdfx@amp{\expandafter\@gobble\string\&} + \edef\pdfx@lt{\expandafter\@gobble\string\<} + \edef\pdfx@gt{\expandafter\@gobble\string\>} \let\TextCopyright\copyright % for backward compatibility - \def\sep{, }% - % Note: '\ ', \&, \copyright are already predefined by hyperref. + \def\sep{, } +%% Note: '\ ', \&, \copyright are already predefined by hyperref. + \the\pdfxsafeforxmp@toks } %%---------------------------------------------------------------------- -\def\pdfx@findUUID#1{\edef\pdfx@tmpstring{\pdfmdfivesum{#1}} +%% Defaults + +\ifluatex + \def\xmp@Producer{LuaTeX} +\else + \def\xmp@Producer{pdfTeX} +\fi +\edef\xmp@CreatorTool{\@pdfcreator} + +\global\let\xmp@Title\@empty +\global\let\xmp@Author\@empty +\global\let\xmp@Keywords\@empty +\global\let\xmp@Subject\@empty +\global\let\xmp@Volume\@empty +\global\let\xmp@Issue\@empty +\global\let\xmp@CoverDisplayDate\@empty +\global\let\xmp@CoverDate\@empty +\global\let\xmp@Copyright\@empty +\global\let\xmp@CopyrightURL\@empty +\gdef\xmp@WebStatement{\xmp@CopyrightURL} +\global\let\xmp@Doi\@empty +\global\let\xmp@Lastpage\@empty +\global\let\xmp@Firstpage\@empty +\global\let\xmp@PublicationType\@empty +\global\let\xmp@Journaltitle\@empty +\global\let\xmp@Journalnumber\@empty +\global\let\xmp@Publisher\@empty +\gdef\xmp@Org{\xmp@Publisher} +\global\let\xmp@AuthoritativeDomain\@empty + +%%---------------------------------------------------------------------- +\def\pdfx@findUUID#1{\edef\pdfx@tmpstring{\pdfx@mdfivesum{#1}} \expandafter\pdfx@eightofnine\pdfx@tmpstring\end} \def\pdfx@eightofnine#1#2#3#4#5#6#7#8#9\end{% \xdef\pdfx@eightchars{#1#2#3#4#5#6#7#8} @@ -883,74 +1285,110 @@ %% ----- Color Profiles ------- %% Define how to specify the profile, so the default %% can be over-ridden in the .xmpdata file. - -%% The user-level macros are only brought into scope during the reading -%% of xmpdata. -%% -%% Usage: -%% \setRGBcolorprofile{}{}{}{} -%% \setCMYKcolorprofile{}{}{}{} -%% \setGRAYcolorprofile{}{}{}{} %% -%% Within the arguments of each macro, the characters '<', '>', '&', -%% '^', '_', '#', '$', and '~' can be used as themselves, but -%% '%' must be escaped as '\%'. +%% --- user-command --- RGB profile needed with PDF/A-?? files +%% \setRGBcolorprofile{}{}{}{} +\def\setRGBcolorprofile{% + \begingroup + \catcode`\_ 11\relax\catcode`\& 11\relax\catcode`\~ 11\relax\catcode`\% 11\relax + \edef\({\string\(}\edef\){\string\)}% + \pdfx@setrgbprofile} +%% +%% --- user-command --- CMYK profile needed with PDF/X-?? files +%% \setCMYKcolorprofile{}{}{}{} +\def\setCMYKcolorprofile{% + \begingroup + \catcode`\_ 11\relax\catcode`\& 11\relax\catcode`\~ 11\relax\catcode`\% 11\relax + \edef\({\string\(}\edef\){\string\)}% + \pdfx@setcmykprofile} +%% +%% --- user-command --- DeviceGray profile needed with PDF/E-1 files +%% \setGRAYcolorprofile{}{}{}{} +\def\setGRAYcolorprofile{% + \begingroup + \catcode`\_ 11\relax\catcode`\& 11\relax\catcode`\~ 11\relax\catcode`\% 11\relax + \edef\({\string\(}\edef\){\string\)}% + \pdfx@setgrayprofile} +%% +%% --- user-command --- External profile needed with PDF/X-4p and PDF/X-5pg files +%% \setEXTERNALprofile{}{}{}{}% +%% {}{}{}{}{} +\def\setEXTERNALprofile{% + \begingroup + \catcode`\_ 11\relax\catcode`\& 11\relax\catcode`\~ 11\relax\catcode`\% 11\relax + \edef\({\string\(}\edef\){\string\)}% + \pdfx@externalprofile} +%% %% -%% Note: -%% * RGB profile is used with PDF/A and PDF/E files. -%% * CMYK profile is used with PDF/X and PDF/VT files. -%% * GRAY profile is currently unused. -\def\pdfx@profilecatcodes{% - \catcode`\<=12\catcode`\>=12\catcode`\&=12\catcode`\^=12 - \catcode`\_=12\catcode`\#=12\catcode`\$=12\catcode`\~=12 - \edef\%{\expandafter\@gobble\string\%}% +\def\pdfx@setRGBcolorprofiledir#1{% + \gdef\pdfx@RGBcolorprofiledir{#1}% } -\def\pdfx@setRGBcolorprofile{% - \begingroup - \pdfx@profilecatcodes - \pdfx@dosetRGBcolorprofile} -\def\pdfx@dosetRGBcolorprofile#1#2#3#4{% - \xdef\pdfx@rgb@profile{#1}% valid file name - \xdef\pdfx@rgb@identifier{#2}% - \xdef\pdfx@rgb@info{#3}% - \pdfstringdef\pdfx@rgb@registry{#4}% valid URL - \endgroup}% closes-off \pdfx@setRGBcolorprofile +\def\pdfx@setCMYKcolorprofiledir#1{% + \gdef\pdfx@CMYKcolorprofiledir{#1}% +} +\pdfx@setRGBcolorprofiledir{} +\pdfx@setCMYKcolorprofiledir{} + +%% This does indeed work! Use it in .xmpdata files +\providecommand{\AdobeMacOSdir}{/Library/Application Support/Adobe/Color/Profiles/Recommended/} +\edef\pdfx@tmp{C:\string\Windows\string\System32\string\Spool\string\Drivers\string\Color\string/} +\expandafter\providecommand\expandafter{\expandafter\WindowsColordir\expandafter}\expandafter{\pdfx@tmp} +%%\pdfx@setcolorprofiledir{\AdobeMacOSdir} + +%% overide that value using the following commands: +\let\pdfxSetCMYKcolorProfileDir\pdfx@setCMYKcolorprofiledir +\let\pdfxSetRGBcolorProfileDir\pdfx@setRGBcolorprofiledir +\let\pdfxSetColorProfileDir\pdfxSetCMYKcolorProfileDir % for back-compatibility %% -\def\pdfx@setCMYKcolorprofile{% - \begingroup - \pdfx@profilecatcodes - \pdfx@dosetCMYKcolorprofile} -\def\pdfx@dosetCMYKcolorprofile#1#2#3#4{% - \xdef\pdfx@cmyk@profile{#1}% valid file name - \pdfstringdef\pdfx@cmyk@intent{#2}% color intent - \pdfstringdef\pdfx@cmyk@identifier{#3}% text string identifier - \pdfstringdef\pdfx@cmyk@registry{#4}% valid URL - \endgroup}% closes-off \pdfx@setCMYKcolorprofile +\def\pdfx@setrgbprofile#1#2#3#4{% + \xdef\pdfx@rgb@profile{\pdfx@RGBcolorprofiledir#1}% valid file name + \gdef\pdfx@rgb@identifier{#2}% + \gdef\pdfx@rgb@info{#3}% + \pdfstringdef\pdfx@rgb@registry{#4}% valid URL + \endgroup}% closes-off \setRGBcolorprofile %% -\def\pdfx@setGRAYcolorprofile{% - \begingroup - \pdfx@profilecatcodes - \pdfx@dosetGRAYcolorprofile} -\def\pdfx@dosetGRAYcolorprofile#1#2#3#4{% - \xdef\pdfx@gray@profile{#1}% valid file name - \xdef\pdfx@gray@intent{#2}% - \xdef\pdfx@gray@identifier{#3}% +\def\pdfx@setcmykprofile#1#2#3#4{% + \xdef\pdfx@cmyk@profile{\pdfx@CMYKcolorprofiledir#1}% valid file name +%% \expandafter\gdef\expandafter\pdfx@cmyk@profile\expandafter{\pdfx@colorprofiledir#1}% valid file name + \gdef\pdfx@cmyk@intent{#2}% +%% \pdfstringdef\pdfx@cmyk@intent{#2}% color intent + \gdef\pdfx@cmyk@identifier{#3}% +%% \pdfstringdef\pdfx@cmyk@identifier{#3}% text string identifier + \gdef\pdfx@cmyk@registry{#4}% +%% \pdfstringdef\pdfx@cmyk@registry{#4}% valid URL + \endgroup}% closes-off \setCMYKcolorprofile +%% +\def\pdfx@setgrayprofile#1#2#3#4{% + \gdef\pdfx@gray@profile{#1}% valid file name + \gdef\pdfx@gray@intent{#2}% + \gdef\pdfx@gray@identifier{#3}% \pdfstringdef\pdfx@gray@registry{#4}% valid URL - \endgroup}% closes-off \pdfx@setGRAYcolorprofile -%%---------------------------------------------------------------------- + \endgroup}% closes-off \setGRAYcolorprofile +%% +\def\pdfx@externalprofile#1#2#3#4#5#6#7#8#9{% + \gdef\pdfx@extprofile{#1}% PDF string for /ProfileName + \gdef\pdfx@cmyk@intent{#2}% PDF string for /OutputCondition + \gdef\pdfx@cmyk@identifier{#3}% PDF string for /OutputConditionIdentifier + \gdef\pdfx@cmyk@registry{#4}% {http://www.color.org}% + \gdef\pdfx@profileCS{#5}% 4 bytes for /ProfileCS + \gdef\pdfx@iccversion{#6}% Hex string for /ICCVersion < ... > + \gdef\pdfx@colorURL{#7}% URL + \gdef\pdfx@cmyk@info{#8}% for /Info + \gdef\pdfx@profile@checksum{#9}% Hex string for /CheckSum < ... > + \endgroup}% closes-off \setEXTERNALprofile +%% %% default color profiles -\pdfx@setRGBcolorprofile{sRGB_IEC61966-2-1_black_scaled.icc} - {sRGB_IEC61966-2-1_black_scaled} - {sRGB IEC61966 v2.1 with black scaling} - {http://www.color.org} -\pdfx@setCMYKcolorprofile{coated_FOGRA39L_argl.icc} - {Coated FOGRA39} - {FOGRA39 (ISO Coated v2 300\% (ECI))} - {http://www.argyllcms.com/} -\pdfx@setGRAYcolorprofile{Gray_linear.icc} - {} - {Custom} - {http://www.freedesktop.org/wiki/OpenIcc} +{\catcode`\_ 12 \catcode`\& 12 \catcode`\~ 12 + \gdef\pdfx@xprofile@cmykdefault{coated_FOGRA39L_argl.icc} + \gdef\pdfx@aprofile@rgbdefault{sRGB_IEC61966-2-1_black_scaled.icc} + \gdef\pdfx@eprofile@graydefault{Gray_linear.icc} + \gdef\pdfx@pprofile@externaldefault{FOGRA39} +}% end of \catcode +\xdef\pdfx@rgb@profile{\pdfx@aprofile@rgbdefault} +\xdef\pdfx@cmyk@profile{\pdfx@xprofile@cmykdefault} +\xdef\pdfx@gray@profile{\pdfx@eprofile@graydefault} +\xdef\pdfx@external@profile{\pdfx@pprofile@externaldefault} + %%---------------------------------------------------------------------- %% License for the file sRGB_IEC61966-2-1_black_scaled.icc : %% @@ -969,15 +1407,41 @@ %% %% Terms of use %% -%% To anyone who acknowledges that the file "sRGB_IEC61966-2-1_black_scaled.icc" -%% is provided "AS IS" WITH NO EXPRESS OR IMPLIED WARRANTY, permission -%% to use, copy and distribute these file for any purpose is hereby -%% granted without fee, provided that the file is not changed including -%% the ICC copyright notice tag, and that the name of ICC shall not be -%% used in advertising or publicity pertaining to distribution of the -%% software without specific, written prior permission. ICC makes no -%% representations about the suitability of this software for any -%% purpose. +%% To anyone who acknowledges that the file "sRGB_IEC61966-2-1_black_scaled.icc" is provided "AS IS" WITH NO EXPRESS +%% OR IMPLIED WARRANTY, permission to use, copy and distribute these file for any purpose is hereby granted without fee, +%% provided that the file is not changed including the ICC copyright notice tag, and that the name of ICC shall not be used +%% in advertising or publicity pertaining to distribution of the software without specific, written prior permission. +%% ICC makes no representations about the suitability of this software for any purpose. +%% +%%---------------------------------------------------------------------- +{\catcode`\| 14 \catcode`\% 12 \catcode`\_ 12 + \edef\@bchar{\expandafter\@gobble\string\\}| + \edef\({\string\(}\edef\){\string\)}| + \begingroup | \endgroup occurs within the macro expansion +\expandafter\pdfx@setrgbprofile\expandafter{sRGB_IEC61966-2-1_black_scaled.icc}| + {sRGB_IEC61966-2-1_black_scaled}| + {sRGB IEC61966 v2.1 with black scaling}| + {http://www.color.org}| + \begingroup | \endgroup occurs within the macro expansion +\pdfx@setcmykprofile{coated_FOGRA39L_argl.icc}|{FOGRA39L.icc}| coated_FOGRA39L_argl.icc + {Coated FOGRA39}| + {FOGRA39 \string\(ISO Coated v2 300%\space \string\(ECI\string\)\string\)}| + {http://www.argyllcms.com/}|{http://www.color.org}| + \begingroup | \endgroup occurs within the macro expansion +\pdfx@setgrayprofile{Gray_linear.icc}| + {}| + {Custom}| + {http://www.freedesktop.org/wiki/OpenIcc}| +\ifno@iccprofile + \begingroup | \endgroup occurs within the macro expansion + \pdfx@externalprofile{Coated FOGRA39 \(ISO 12647-2:2004\)}| + {Offset commercial and specialty printing according to ISO 12647-2:2004 | + / Amd 1, paper type 1 or 2 \(gloss or matte coated offset, 115 g/m2\), | + screen frequency 60/cm.}| + {FOGRA39}{http://www.color.org}{CMYK}{02100000}{http://www.adobe.com}| + {Coated FOGRA39 \(ISO 12647-2:2004\)}{74FF62F330BF0DBE4495B5720542D511}| +\fi +}% end of \catcode %% %%---------------------------------------------------------------------- %% License for the file coated_FOGRA39L_argl.icc : @@ -1006,46 +1470,97 @@ %% distribution. %%---------------------------------------------------------------------- +\newif\ifexternalICCprofiles + \begingroup - \inputencoding{8bit}% +%% override unneeded color-profile specifier + \ifpdfx@x + \ifno@iccprofile % PDF/X-4p and PDF/X-5pg PDF/VT-2 + \begingroup + \def\pdfx@extprofiles@store{AdobeExternalProfiles.tex}% + \InputIfFileExists{\pdfx@extprofiles@store}% + {\global\externalICCprofilestrue \catcode `\# 12\relax}% + {\typeout{** pdfx: No file \pdfx@extprofiles@store\space found for PDF/X-4p or PDF/X-5pg}}% + \endgroup + \else + \begingroup + \def\pdfx@profiles@store{AdobeColorProfiles.tex}% + \InputIfFileExists{\pdfx@profiles@store}% + {\global\externalICCprofilesfalse \catcode `\# 12\relax}% + {\typeout{** pdfx: No file \pdfx@profiles@store\space found for PDF/X variants}}% + \endgroup + \def\setRGBcolorprofile#1#2#3#4{}% + \fi + \else +%% load it, in case the macros are used in .xmpdata + \InputIfFileExists{AdobeColorProfiles.tex}{}{}% + \ifpdfx@e + \else + \def\setCMYKcolorprofile#1#2#3#4{}% + \def\setGRAYcolorprofile#1#2#3#4{}% + \fi\fi +%% + \ifluatex\else + \inputencoding{8bit}% + \fi \makeatletter \pdfx@localcommands +%% \InputIfFileExists{\jobname.xmpdata}% - {\typeout{**pdfx: Metadata file \jobname.xmpdata read successfully.}}% - {\typeout{**pdfx: No file \jobname.xmpdata . Metadata will be incomplete!}} + {\typeout{** pdfx: Metadata file \jobname.xmpdata read successfully.}}% + {\typeout{** pdfx: No file \jobname.xmpdata . Metadata will be incomplete!}} \endgroup + %% ---------------------------------------------------------------------- +\newif\ifpdfx@cmyk \begingroup \ifpdfx@x % PDF/X needs a CMYK color profile for printing - \def\0{\string\0} + \global\pdfx@cmyktrue + \edef\@pctchar{\expandafter\@gobble\string\%} + \edef\@bchar{\expandafter\@gobble\string\\} + \edef\0{\string\0} + \edef\({\string\(} + \edef\){\string\)} \catcode`\_ 12 \ifno@iccprofile % PDF/X-4p and PDF/X-5pg - \immediate\pdfobj {<>} + \immediate\pdfobj {<>} \edef\OBJ@URLs{\the\pdflastobj}% - \xdef\pdfx@cmyk@intent{Coated_Fogra39L_VIGC_300}% - \xdef\pdfx@cmyk@identifier{Coated_Fogra39L_VIGC_300.icc}% +%% \xdef\pdfx@cmyk@intent{Offset commercial and specialty printing according to ISO 12647-2:2004 / Amd 1, % +%% paper type 1 or 2 \(gloss or matte coated offset, 115 g/m2\), screen frequency 60/cm.0}% +%% \xdef\pdfx@cmyk@info{Coated FOGRA39 \(ISO 12647-2:2004\)}% +%% \xdef\pdfx@cmyk@name{Coated FOGRA39 \(ISO 12647-2:2004\)}% +%% \xdef\pdfx@cmyk@identifier{FOGRA39}% \immediate\pdfobj {<<% - /CheckSum <5449c505618a9b6c38634b4708ae9e37>^^J% d5f0714cd9d6092b6ac93b625f5d8a0c>% - /ICCVersion (\004\002\000\000)% 4.2.0.0 - /ProfileCS (CMYK)^^J% - /ProfileName (\pdfx@cmyk@identifier)^^J% + /CheckSum <\pdfx@profile@checksum>^^J% + /ICCVersion <\pdfx@iccversion>% + /ProfileCS (\pdfx@profileCS)^^J% + /ProfileName (\pdfx@extprofile)^^J% /URLs [\OBJ@URLs\space 0 R ] >>} % \edef\OBJ@ICC{\the\pdflastobj}% +%% \IfFileExists{\pdfx@rgb@profile}{% +%% \immediate\pdfobj stream attr{/N 3^^J /Alternate /DeviceRGB} file{\pdfx@rgb@profile}% +%% \edef\OBJ@RGB{\the\pdflastobj}% +%% }{% +%% \errmessage{No color profile found to use for RGB screen colors.}% +%% }% \pdfcatalog{% /OutputIntents [ << /Type/OutputIntent /S/GTS_PDFX /OutputCondition (\pdfx@cmyk@intent)% /OutputConditionIdentifier (\pdfx@cmyk@identifier)% + /Info(\pdfx@cmyk@intent)% /RegistryName(\pdfx@cmyk@registry) - % extra dictionary required for PDF/X-4p and PDF/X-5pg +%% extra dictionary required for PDF/X-4p and PDF/X-5pg /DestOutputProfileRef \OBJ@ICC\space 0 R >> ]}% +%% \else % PDF/X-1 , PDF/X-1a , PDF/X-3 , PDF/X-4 , PDF/X-5g - \IfFileExists{\pdfx@cmyk@profile}{% +%% + \IfFileExists{"\pdfx@cmyk@profile"}{% % embedded CMYK color profile - \immediate\pdfobj stream attr{/N 4} file{\pdfx@cmyk@profile}% + \immediate\pdfobj stream attr{/N 4} file{"\pdfx@cmyk@profile"}% \edef\OBJ@CMYK{\the\pdflastobj}% \pdfcatalog{% /OutputIntents [ << @@ -1053,22 +1568,47 @@ /S/GTS_PDFX /OutputCondition (\pdfx@cmyk@intent)% /OutputConditionIdentifier (\pdfx@cmyk@identifier)% + /Info(\pdfx@cmyk@intent)% /RegistryName(\pdfx@cmyk@registry) /DestOutputProfile \OBJ@CMYK\space 0 R >> ]}% }{% - \errmessage{No color profile found to use for CMYK printing colors.}% + \errmessage{No color profile \pdfx@cmyk@profile\ found to use for CMYK printing colors.}% }% \fi % end of \ifno@iccprofile -\else -%% PDF/A needs an RGB color profile for on-screen rendering - \IfFileExists{\pdfx@rgb@profile}{% - \immediate\pdfobj stream attr{/N 3^^J/Alternate/DeviceRGB} file{\pdfx@rgb@profile}% - \edef\OBJ@RGB{\the\pdflastobj}% +\else +%% PDF/A and PDF/E can specify a CMYK profile + \expandafter\ifx\expandafter\relax\pdfx@rgb@profile\relax + \global\pdfx@cmyktrue + \IfFileExists{"\pdfx@cmyk@profile"}{% + % embedded CMYK color profile + \immediate\pdfobj stream attr{/N 4} file{"\pdfx@cmyk@profile"}% + \edef\OBJ@CMYK{\the\pdflastobj}% + \pdfcatalog{% + /ViewerPreferences <> + /OutputIntents [ << + /Type /OutputIntent + \ifpdfx@e + /S/ISO_PDFE1 + \else + /S/GTS_PDFA1 + \fi + /OutputCondition (\pdfx@cmyk@intent)% use this or /Info ? + /OutputConditionIdentifier (\pdfx@cmyk@identifier)% + /DestOutputProfile \OBJ@CMYK\space 0 R + /Info(\pdfx@cmyk@intent)% + /RegistryName(\pdfx@cmyk@registry) + >> ]}% }{% - \errmessage{No color profile found to use for RGB screen colors.}% - }% - \pdfcatalog{% + \errmessage{No color profile \pdfx@cmyk@profile\ found to use for CMYK screen colors.}% + }% + \else +%% PDF/A and PDF/E usually need an RGB color profile for on-screen rendering + \global\pdfx@cmykfalse + \IfFileExists{"\pdfx@rgb@profile"}{% + \immediate\pdfobj stream attr{/N 3^^J/Alternate/DeviceRGB} file{"\pdfx@rgb@profile"}% + \edef\OBJ@RGB{\the\pdflastobj}% + \pdfcatalog{% /ViewerPreferences <> /OutputIntents [ << /Type /OutputIntent @@ -1077,12 +1617,16 @@ \else /S/GTS_PDFA1 \fi - /OutputConditionIdentifier (\pdfx@rgb@identifier)% + /OutputConditionIdentifier (\pdfx@rgb@identifier)% /DestOutputProfile \OBJ@RGB\space 0 R /Info(\pdfx@rgb@info) /RegistryName(\pdfx@rgb@registry) >> ]}% + }{% + \errmessage{No color profile found to use for RGB screen colors.}% + }% + \fi % end of \ifx \fi % end of \ifpdfx@x \endgroup @@ -1098,9 +1642,16 @@ \begingroup \pdfx@xmpmarkup \def\sep{, }% - \inputencoding{8bit}\makeatletter + \ifluatex\else + \inputencoding{8bit}% + \fi + \makeatletter + \IfFileExists{\pdfx@encodingfile}{% + \def\cf@encoding{U}\fontencoding{U}% + }{}% \xdef\xmp@@Keywords{\xmp@Keywords} \xdef\xmp@@Author{\xmp@Author} + \xdef\xmp@@Copyright{\xmp@Copyright} \endgroup %% ---------------------------------------------------------------------- @@ -1140,16 +1691,18 @@ %% ---------------------------------------------------------------------- %% \pdfx@topdfstring\toka\tokb: Convert the string in \tokb to a format %% appropriate for PDF /Info strings, i.e., PDFDoc encoding or UTF-16 -%% encoding, and store the result in \toka. As a special case, if \tokb +%% encoding, and store the result in \toka As a special case, if \tokb %% is \@empty, set \toka to \@empty. \def\pdfx@topdfstring#1#2{% \ifx#2\@empty - \global\let#1\@empty + \global\let#1\empty \else \begingroup - \inputencoding{utf8}% - \hypersetup{pdfencoding=unicode}% + \ifluatex\else + \inputencoding{utf8}% + \fi + \hypersetup{pdfencoding=auto}% \pdfstringdef#1{#2}% \endgroup \fi @@ -1172,7 +1725,8 @@ \pdfgentounicode=1 \ifpdfx@x - {\pdfinfo{% order of these dictionary keys should not matter + {\def\sep{,}% + \pdfinfo{% order of these dictionary keys should not matter \ifx\pdfx@Author\@empty\else /Author(\pdfx@Author)\fi /CreationDate(D:\pdfx@convDate)% /Creator(\pdfx@CreatorTool)% @@ -1194,10 +1748,11 @@ \ifx\pdfx@Title\@empty\else /Title(\pdfx@Title)\fi /Trapped/False% }% end of PDF/X info - }% + }% end of scope for \sep \else \ifpdfx@e - {\pdfinfo{% order of these dictionary keys should not matter + {\def\sep{,}% + \pdfinfo{% order of these dictionary keys should not matter \ifx\pdfx@Author\@empty\else /Author(\pdfx@Author)\fi /CreationDate(D:\pdfx@convDate)% /Creator(\pdfx@CreatorTool)% @@ -1209,16 +1764,17 @@ \ifx\pdfx@Title\@empty\else /Title(\pdfx@Title)\fi /Trapped/False% }% end of PDF/E info - }% + }% end of scope for \sep \else \def\pdfx@confA{a}% \def\pdfx@confB{b}% \def\pdfx@confU{u}% - \edef\xmp@conformance{\csname pdfx@conf\xmp@Conformance\endcsname}% + \expandafter\def\expandafter\xmp@conf\expandafter{\csname pdfx@conf\xmp@Conformance\endcsname}% \AtBeginDocument{% \def\PDF@FinishDoc{% \Hy@UseMaketitleInfos - \pdfinfo{% + {\def\sep{, }% + \pdfinfo{% \ifx\pdfx@Title\@empty\else /Title(\pdfx@Title)\fi \ifx\pdfx@Author\@empty\else /Author(\pdfx@Author)\fi \ifx\pdfx@Subject\@empty\else /Subject(\pdfx@Subject)\fi @@ -1236,8 +1792,9 @@ \fi /Producer(\pdfx@Producer)% /Trapped/False - /GTS_PDFA1Version (PDF/A-\xmp@Part\xmp@conformance:\xmp@ReleaseDate)% + /GTS_PDFA1Version (PDF/A-\xmp@Part\xmp@conf:\xmp@ReleaseDate)% }% end of PDF/A info + }% end of scope for \sep }% end of \PDF@FinishDoc }% end of \AtBeginDocument \fi\fi @@ -1257,12 +1814,12 @@ \else \def\xmp@template{pdfa}% \fi\fi - % patch commands from xmpincl.sty ... +%% patch commands from xmpincl.sty … \def\pdfx@xmpinclStart{% supply byte-order marker - % + % }% \def\pdfx@xmpinclStartAlt{% no byte-order marker - % + % }% \def\pdfx@xmpinclEnd{% allow XMP packet to be writable % @@ -1273,19 +1830,64 @@ \let\mcs@xmpinclStart\pdfx@xmpinclStartAlt \fi \let\mcs@xmpinclEnd\pdfx@xmpinclEnd -%% ... preventing their redefinition +%% … preventing their redefinition \def\newcommand#1#2{}% - % +%% +%% \def\pdfx@endeval{% +%% \noexpand \TE@setvaltrue \noexpand \else +%% \noexpand \TE@setvalfalse \noexpand \fi +%% \noexpand \TE@negatefalse \noexpand \fi}% +%% \let\TE@endeval\pdfx@endeval + \ifluatex\else + \inputencoding{8bit}% + \fi + \makeatletter +%% \let\&=\xmpAmp \pdfx@xmpmarkup - \catcode `\_ 12 + \def\cf@encoding{U}\fontencoding{U}% + \providecommand{\ifnot@empty}[2]{\ifx#1\@empty\relax\else#2\fi}% +%% \catcode `\_ 12 \obeyspaces% beware of 128 space characters in the next line -- for padding end of XMP packet - \def\padding@line{ }% - \def\ifnot@empty#1#2{\ifx#1\@empty\else#2\fi} - \inputencoding{8bit}\makeatletter + \gdef\paddingline{ }% \typeout{Using XMP template file: \xmp@template.xmp}% \includexmp{\xmp@template} \endgroup +%% +%% controls the color model and conversions with xcolor package +%% +\ifpdfx@cmyk + \PassOptionsToPackage{xcolor}{cmyk,hyperref} + \def\pdfx@handlexcolor{\selectcolormodel{cmyk}\convertcolorsUtrue\convertcolorsDtrue} +%%\hypersetup{allbordercolors=black,allcolors=black}% else link borders use RGB + \ifpdfx@x\else + \AtBeginDocument{% + \def\@linkcolor{0 1 1 0}% + \def\@anchorcolor{0 0 0 1}% + \def\@citecolor{1 0 1 0}% + \def\@filecolor{.5 0 0 .5}% + \def\@urlcolor{0 1 0 0}% + \def\@menucolor{0 1 1 0}% + \def\@runcolor{.5 0 0 .5}% + \def\@linkbordercolor{0 1 1 0}% + \def\@citebordercolor{1 0 1 0}% + \def\@filebordercolor{.5 0 0 .5}% + \def\@urlbordercolor{1 0 0 0}% + \def\@menubordercolor{0 1 1 0}% + \def\@runbordercolor{.7 0 0 .3}% + \def\Fld@bcolor{0 0 0 0}% + \def\Fld@bordercolor{0 1 1 0}% + } + \fi +\else + \PassOptionsToPackage{xcolor}{rgb,hyperref} + \def\pdfx@handlexcolor{\selectcolormodel{rgb}\convertcolorsUtrue\convertcolorsDtrue} +\fi +\@ifpackageloaded{xcolor}{\pdfx@handlexcolor}{% + \AtBeginDocument{\@ifpackageloaded{xcolor}{\pdfx@handlexcolor}{}} +} + + %% disable hyperref options, to prevent changes that will cause an incompatibility \Hy@DisableOption{pdfauthor}% \Hy@DisableOption{pdftitle}% @@ -1295,12 +1897,14 @@ \Hy@DisableOption{pdfmoddate}% \Hy@DisableOption{pdfproducer}% \Hy@DisableOption{pdfkeywords}% +%% once set correctly, don't let this change + \Hy@DisableOption{pdfa}\let\Hy@pdfafalse\relax\let\Hy@pdfatrue\relax \endinput % \end{macrocode} % \iffalse % % \fi % \Finale -% \PrintIndex +% \newpage\PrintIndex % \PrintChanges % \endinput -- cgit v1.2.3