diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/pdfx/pdfx.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/pdfx/pdfx.dtx | 521 |
1 files changed, 521 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/pdfx/pdfx.dtx b/Master/texmf-dist/source/latex/pdfx/pdfx.dtx new file mode 100644 index 00000000000..e3285522299 --- /dev/null +++ b/Master/texmf-dist/source/latex/pdfx/pdfx.dtx @@ -0,0 +1,521 @@ +% \iffalse meta-comment +% +% File: pdfx.dtx +% +% Copyright (c) 2008, CV Radhakrishnan <cvr@river-valley.org>, +% Han The Thanh <thanh@river-valley.org> +% +% This file may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.2 of this +% license or (at your option) any later version. The latest version +% of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.2 or later is part of all distributions of LaTeX +% version 1999/12/01 or later. +% +% \fi +% +% \CheckSum{374} +% \iffalse +% +%<*driver> +\documentclass[a4paper]{ltxdoc} +\usepackage{rvdtx} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{pdfx.dtx} + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \GetFileInfo{pdfx.dtx} +% +% \DoNotIndex{\newcommand,\newenvironment} +% +% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let} +% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi} +% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup} +% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand} +% \DoNotIndex{\space,\@empty,\special,\@nil,\advance\@nnil} +% \DoNotIndex{\\,\@gobble,\@@,\@fornoop,\@fortmp,\@ifundefined} +% \DoNotIndex{\@tempcnta,\@tempcntb,\{,\},\alph,\bgroup,\egroup} +% \DoNotIndex{\do,\end,\HN,\ifcase,\ifnum,\IfFileExists,\ifvmode} +% \DoNotIndex{\ignorespaces,\immediate,\input,\item,\jobname} +% \DoNotIndex{\leavevmode,\loop,\repeat,\makeatletter,\makeatother} +% \DoNotIndex{\meaning,\newcounter,\next,\or,\par,\renewcommand} +% \DoNotIndex{\renewcommand,\renewenvironment,\stepcounter} +% \DoNotIndex{\Tg,\thepage,\unskip,\write,\advance,\{,\}} +% +% \changes{v1.00}{2008/12/01}{Initial commit to the CVS.} +% +% \title{Generation of PDF/X-1a and PDF/A-1b compliant PDF's +% with PDF\TeX{} --- \texttt{pdfx.sty}} +% \date{2008/12/01} +% \version{1.1} +% \keywords{\pdf, \pdfx, \pdfa, pdf\TeX, \LaTeX} +% \author{C.\,V.\,Radhakrishnan {\upshape\small and} \thanh} +% \contact{\texttt{[cvr,thanh]@river-valley.org}} +% +% \maketitle +% +% \StopEventually{} +% +% \section{Introduction} +% +% \textsc{pdf/x} and \textsc{pdf/a} are umbrella terms used to denote +% several \textsc{iso} standards that define different subsets of the +% \pdf standard. The objective of \textsc{pdf/x} is to facilitate +% graphics exchange between document creator and printer and +% therefore, has all requirements related to printing. For instance, +% in \pdfx, all fonts need to be embedded and all images need to be +% \textsc{cmyk} or spot colors. \textsc{pdf/x-2} and \textsc{pdf/x-3} +% accept calibrated \textsc{rgb} and \textsc{cielab} colors along with +% all other specifications of \pdfx. +% +% \textsc{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 achieve this is that the \textsc{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. \textsc{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 \textsc{pdf/a}. +% +% This package currently supports generation of \pdfx and \pdfa +% compliant documents using \pdftex. More and more standards will be +% included in future. +% +% \section{Usage} +% +% The file, namely |pdfx.dtx| is a composite document of +% program code and documentation in \LaTeX{} format in the +% tradition of \emph{literate programming}. You +% can extract the program code alone by stripping off the +% documentation part by running \LaTeX{} or \TeX{} over the installer +% namely, |pdfx.ins| which is also provided with this file. To +% get the documentation which you are reading now, you need to run +% (\pdf)\LaTeX{} over the file, |pdfx.dtx|. +% +% \subsection{Data file for XMP metadata} +% +% As you are aware, standards compliant \pdf documents need +% \textsc{xmp} metadata to be included. In order to create +% \textsc{xmp} in the prescribed \xml format, a simple data file +% holding the meta information of the document needs to be created +% either through a program or by hand. For our purposes, we name it as +% |\jobname.xmpdata|, a simple example of which will look like the +% following: +% \begin{verbatim} +% \Keywords{pdfTeX</rdf:li><rdf:li>PDF/X-1a</rdf:li><rdf:li>PDF/A-b} +% \Title{Sample LaTeX input file} +% \Author{LaTeX project team} +% \Org{TeX Users Group} +% \end{verbatim} +% You may note that the keywords are separated by \xml elements +% |</rdf:li><rdf:li>| instead of comma character. This is the correct +% format required by the \xmp metadata which is in \xml format. +% Similarly, several other kinds of data can be captured using the +% following commands: +% \begin{enumerate} +% \item |\Subject| +% \item |\Creator| +% \item |\Producer| +% \item |\Volume| +% \item |\Issue| +% \item |\CoverDisplayDate| +% \item |\CoverDate| +% \item |\Copyright| +% \item |\Doi| +% \item |\Lastpage| +% \item |\Firstpage| +% \item |\Journaltitle| +% \item |\Journalnumber| +% \item |\CreatorTool| +% \item |\AuthoritativeDomain| +% \end{enumerate} +% The above commands are self-explanatory. Users can resort to +% alternate ways to create |xmp| file for inclusion in \pdf. However, +% minimal |\jobname.xmpdata| shall be created with |\Title| and +% |\Author| commands along with their corresponding values for |pdfx| +% package to work correctly. You may check +% \href{http://www.adobe.com/devnet/xmp/}{Adobe \textsc{xmp} +% Development Center} for more exhaustive information about +% Extensible Metadata Platform (\textsc{xmp}). An \textsc{xmp} +% Toolkit \textsc{sdk} which supports \textsc{gnu}/Linux, Macintosh +% and Windows operating systems is also provided under \textsc{bsd} +% licence. +% +% |pdfx| makes use of |xmpincl| package to include |xmp| data into the +% \pdf. A good look at the documentation of |xmpincl| package will +% greatly help the users to understand the process of |xmp| data +% inclusion. +% +% \subsection{Limitations and dependencies} +% +% |pdfx.sty| works only with \pdftex. It further depends on the following +% packages: +% \begin{enumerate} +% \item |xmpincl| for insertion of metadata into \pdf. +% \item |hyperref| for hyperlinking, bookmarks, etc. +% \item |glyphtounicode.tex| maps glyph names to corresponding Unicode. +% \item |glyphtounicode-cmr.tex| does the same for |cmr| fonts. +% \end{enumerate} +% Necessary color profile files may be obtained from International +% Color Consortium. Please take a look at +% \url{http://www.color.org/iccprofile.xalter}. +% +% \subsection{Files included} +% +% Following files are included in the archive: +% +% \begin{enumerate} +% \item |pdfx.dtx| --- composite package and documentation. +% \item |pdfx.ins| --- installer batch file. +% \item |pdfx-1a.xmp| --- specimen |xmp| template for \pdfx. +% \item |pdfa-1b.xmp| --- specimen |xmp| template for \pdfa. +% \item |small2e.xmpdata| --- specimen data file to provide values +% relating to the document to generate metadata. +% \end{enumerate} +% A directory named |pdfx| may be created under |$TEXMF/tex/latex| and +% all |*.sty| and |*.xmp| may be moved to the same. \TeX's file +% database may need to be updated by suitable command depending on +% your distribution and operating system. +% +% \subsection{Options} +% +% The package can be loaded with the command: +% \begin{decl} +% \defmacro{usepackage}|[<option>]{pdfx}| +% \end{decl} +% where the options are: +% \begin{description} +% \item[|x-1a|] generates \pdfx compliant \pdf. +% \item[|a-1b|] generates \pdfa compliant \pdf. +% \end{description} +% +% \subsection{Useful production notes} +% +% We have included some useful notes about production problems which +% we have encountered while generating \pdfa compliant documents and +% the fixes recommended at: +% \url{http://support.river-valley.com/wiki/index.php?title=Generating_PDF/A_compliant_PDFs_from_pdftex}. +% +% \subsection{Miscellaneous information} +% +% The package is released under \LaTeX{} Project Public Licence. Bug +% reports, suggestions, feature requests, etc., may be sent to the +% authors at \href{mailto:cvr@river-valley.org}{\ttfamily +% cvr@river-valley.org} and/or +% \href{mailto:thanh@river-valley.org}{\ttfamily +% thanh@river-valley.org}. +% +% \section{Implementation} +% \subsection{Various auxiliary macros} +% +% Two booleans are defined to switch between two options, |a-1b| and +% |x-1a|. \pdfx further demands \pdf version 1.3 and properly placed +% mediabox, bleedbox and trimbox (innermost) in that order. The +% MediaBox defines the size of the entire document, either the +% ArtBox or the TrimBox, defines the extent of the printable +% area. If the file is to be printed with bleed, a BleedBox, which +% must be larger than the TrimBox/ArtBox, but smaller than the +% MediaBox, must be defined. +% +% \begin{macrocode} +%<*package> +% +% $Id: pdfx.dtx,v 1.1 2008/12/01 10:28:01 cvr Exp cvr $ +% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pdfx} + [2008/12/01 v1.1 PDF/X and PDF/A support (CVR/HTH)] + +\newif\ifpdfxonea \pdfxoneafalse +\newif\ifpdfaoneb \pdfaonebfalse + +\DeclareOption{a-1b}{\global\pdfaonebtrue} +\DeclareOption{x-1a}{\global\pdfxoneatrue} +\ProcessOptions + +\ifpdfxonea + \pdfminorversion=3 + \pdfpageattr{/MediaBox[0 0 595 793] + /BleedBox[0 0 595 793] + /TrimBox[25 20 570 773]} +\else + \pdfminorversion=4 +\fi +% \end{macrocode} +% +% Several macros were defined to capture data for the \xmp metadata to +% be inserted into the PDF during generation. +% \begin{macrocode} +\def\hash{\expandafter\@gobble\string\#} +\def\amp{\expandafter\@gobble\string\&} +\def\xmpAmp{\amp\hash x0026;} +\def\TextCopyright{\amp\hash x00A9;} +\def\Title#1{\gdef\xmpTitle{#1}} + \let\xmpTitle\@empty +\def\Author#1{\gdef\xmpAuthor{#1}} + \let\xmpAuthor\@empty +\def\Keywords#1{\gdef\xmpKeywords{#1}} + \let\xmpKeywords\@empty + \let\xmpSubject\xmpKeywords +\def\Creator#1{\gdef\xmpCreator{#1}} + \def\xmpCreator{\@pdfcreator} +\def\Producer#1{\gdef\xmpProducer{#1}} + \def\xmpProducer{pdfTeX} +\def\Volume#1{\gdef\xmpVolume{#1}} + \let\xmpVolume\@empty +\def\Issue#1{\gdef\xmpIssue{#1}} + \let\xmpIssue\@empty +\def\CoverDisplayDate#1{\gdef\xmpCoverDisplayDate{#1}} + \let\xmpCoverDisplayDate\@empty +\def\CoverDate#1{\gdef\xmpCoverDate{#1}} + \let\xmpCoverDate\@empty +\def\Copyright#1{\gdef\xmpCopyright{#1}} + \let\xmpCopyright\@empty +\def\Doi#1{\gdef\xmpDoi{#1}} + \let\xmpDoi\@empty +\def\Lastpage#1{\gdef\xmpLastpage{#1}} + \let\xmpLastpage\@empty +\def\Firstpage#1{\gdef\xmpFirstpage{#1}} + \let\xmpFirstpage\@empty +\def\Journaltitle#1{\gdef\xmpJournaltitle{#1}} + \let\xmpJournaltitle\@empty +\def\Journalnumber#1{\gdef\xmpJournalnumber{#1}} + \let\xmpJournalnumber\@empty +\def\Org#1{\gdef\xmpOrg{#1}} + \let\xmpOrg\@empty +\def\CreatorTool#1{\gdef\xmpCreatorTool{#1}} + \def\xmpCreatorTool{\xmpProducer} +\def\AuthoritativeDomain#1{\gdef\xmpAuthoritativeDomain{#1}} + \let\xmpAuthoritativeDomain\@empty +% \end{macrocode} +% +% \subsection{Document and instance ID's} +% +% Document \textsc{id} and instance \textsc{id} are created from +% values obtained from |\jobname.pdf| and |\pdfcreationdate| by making +% \DescribeMacro{\findUUID} +% \DescribeMacro{\uuid} +% use of |\pdfmdfivesum| primitive of \pdftex. +% \begin{macrocode} +\def\findUUID#1{\edef\tmpstring{\pdfmdfivesum{#1}} + \expandafter\eightofnine\tmpstring\end} +\def\eightofnine#1#2#3#4#5#6#7#8#9\end{% + \xdef\eightchars{#1#2#3#4#5#6#7#8} + \fouroffive#9\end} +\def\fouroffive#1#2#3#4#5\end{\xdef\ffourchars{#1#2#3#4} + \sfouroffive#5\end} +\def\sfouroffive#1#2#3#4#5\end{\xdef\sfourchars{#1#2#3#4} + \tfouroffive#5\end} +\def\tfouroffive#1#2#3#4#5\end{\xdef\tfourchars{#1#2#3#4} + \xdef\laststring{#5}} + +\def\uuid{\eightchars-% + \ffourchars-% + \sfourchars-% + \tfourchars-% + \laststring} + +\findUUID{\jobname.pdf} +\edef\xmpdocid{\uuid} +\findUUID{\pdfcreationdate} +\edef\xmpinstid{\uuid} +% \end{macrocode} +% +% |\jobname.xmpdata| is read if available and the package, |xmpincl| +% is also loaded which will take care of inserting metadata into the +% \pdf document. +% +% \begin{macrocode} +\InputIfFileExists{\jobname.xmpdata}{}{} +\RequirePackage{xmpincl} +% \end{macrocode} +% +% \DescribeMacro{\convDate} +% \DescribeMacro{\convertDate} +% The date format needed by metadata is different from the value +% provided by the |\pdfcreationdate|. |\convertDate| macro generates +% the required date format from |\pdfcreationdate|. +% +% \begin{macrocode} +\def\convertDate{\getYear} +{\catcode`\D=12 + \gdef\getYear D:#1#2#3#4{\edef\xYear{#1#2#3#4}\getMonth} +} +\def\getMonth#1#2{\edef\xMonth{#1#2}\getDay} +\def\getDay#1#2{\edef\xDay{#1#2}\getHour} +\def\getHour#1#2{\edef\xHour{#1#2}\getMin} +\def\getMin#1#2{\edef\xMin{#1#2}\getSec} +\def\getSec#1#2{\edef\xSec{#1#2}\getTZh} +\def\getTZh +#1#2{\edef\xTZh{#1#2}\getTZm} +\def\getTZm '#1#2'{% + \edef\xTZm{#1#2}% + \edef\convDate{\xYear-\xMonth-\xDay + T\xHour:\xMin:\xSec+\xTZh:\xTZm}} +\expandafter\convertDate\pdfcreationdate +% \end{macrocode} +% +% \subsection{Color profiles} +% \DescribeMacro{/OutputIntents} For better color management, \pdfx +% and \pdfa need an ICC profile included in the document. An ICC +% profile is a set of data that characterizes a color input or output +% device, or a color space, according to standards promulgated by the +% International Color Consortium (ICC). Profiles describe the color +% attributes of a particular device or viewing requirement by defining +% a mapping between the device source or target color space and a +% profile connection space. For \pdfx, we have included the ICC +% profile namely, |FOGRA39L.icc| which is for \textsc{cmyk} data and +% for \pdfa, we have used |sRGBIEC1966-2.1.icm| for \textsc{rgb} +% data. You can change the value of the |file| attribute in the code +% below to use different color profile files. +% +% \begin{macrocode} +\ifpdfxonea + \def\@pctchar{\expandafter\@gobble\string\%} + \def\@bchar{\expandafter\@gobble\string\\} + \immediate\pdfobj stream attr{/N 4} file{FOGRA39L.icc} + \edef\OBJ@CVR{\the\pdflastobj} + \pdfcatalog{/OutputIntents [ << + /Type/OutputIntent + /S/GTS_PDFX + /OutputCondition (FOGRA39) + /OutputConditionIdentifier (FOGRA39 \@bchar(ISO Coated v2 + 300\@pctchar\space \@bchar(ECI\@bchar)\@bchar)) + /DestOutputProfile \OBJ@CVR\space 0 R + /RegistryName(http://www.color.org) + >> ]} +\else + \immediate\pdfobj stream attr{/N 4} file{sRGBIEC1966-2.1.icm} + \edef\OBJ@RVT{\the\pdflastobj} + \pdfcatalog{% + /OutputIntents [ << + /Type /OutputIntent + /S/GTS_PDFA1 + /DestOutputProfile \OBJ@RVT\space 0 R + /OutputConditionIdentifier (sRGB IEC61966-2.1) + /Info(sRGB IEC61966-2.1) + >> ]} +\fi +% \end{macrocode} +% +% One of the |xmp| files is selectively loaded based on the option +% chosen. +% +% \begin{macrocode} +\begingroup +\let\&=\xmpAmp +\ifpdfxonea + \includexmp{pdfx-1a} +\else + \includexmp{pdfa-1b} +\fi +\endgroup +% \end{macrocode} +% +% |glyphtounicode.tex| and |glyphtounicode-cmr.tex| are read. +% These files contain mapping from glyph names to corresponding unicode for +% embedded fonts, which are required by \pdfa. |glyphtounicode.tex| covers +% AGL (Adobe Glyph List), names from |texglyphlist.txt| (part of +% lcdf-typetools) and |zapfdingbats.txt|, plus a few exceptions. +% |glyphtounicode-cmr.tex| covers glyphs that are used in CM fonts but not +% listed in |glyphtounicode.txt|; the mappings come from file |goadb998.nam| +% (part of \TeX{} Gyre fonts). + + +% +% \begin{macrocode} +\input glyphtounicode.tex +\input glyphtounicode-cmr.tex +\pdfgentounicode=1 +% \end{macrocode} +% +% Active content is not allowed in a \pdfx file. This means that +% standard \pdf features like forms, signatures, comments and embedded +% sounds and movies are not allowed in \pdfx. So |hyperref| is loaded +% in |draft| mode and |info| dictionary is defined with |\pdfinfo| +% command. +% +% \begin{macrocode} +\ifpdfxonea + \RequirePackage[draft,pdftex,pdfpagemode=UseNone,bookmarks=false]{hyperref} + \pdfinfo{ + /Title(\xmpTitle)% + /Author(\xmpAuthor)% + /Creator(\xmpProducer)% + /CreationDate(\convDate)% + /ModDate(\convDate)% + /Producer(\xmpProducer)% + /Trapped /False + /GTS_PDFXVersion (PDF/X-1:2001)% + /GTS_PDFXConformance (PDF/X-1a:2001)% + } +\else +% \end{macrocode} +% +% For \pdfa, load |hyperref| package with |pdfa| option, so that it +% will take care of the link annotations correctly. We have slightly +% modified the |\pdfinfo| by including |/GTS_PDFA1Version| +% |(PDA/A-1b:2005)|. Take a look at the modified |\PDF@FinishDoc| +% macro of |hyprref|. +% +% \begin{macrocode} + \RequirePackage[pdftex,pdfa]{hyperref} + \def\PDF@FinishDoc{% + \Hy@UseMaketitleInfos + \pdfinfo{% + /Creator(\xmpProducer)% + \ifx\@pdfcreationdate\@empty + \else + /CreationDate(\@pdfcreationdate)% + \fi + \ifx\@pdfmoddate\@empty + \else + /ModDate(\@pdfmoddate)% + \fi + /Producer(\xmpProducer)% + /Trapped /False + /GTS_PDFA1Version (PDF/A-1b:2005)% + }% + \Hy@DisableOption{pdfauthor}% + \Hy@DisableOption{pdftitle}% + \Hy@DisableOption{pdfsubject}% + \Hy@DisableOption{pdfcreator}% + \Hy@DisableOption{pdfcreationdate}% + \Hy@DisableOption{pdfmoddate}% + \Hy@DisableOption{pdfproducer}% + \Hy@DisableOption{pdfkeywords}} +\fi +% +%</package> +% \end{macrocode} +% \Finale +% \PrintIndex +% \PrintChanges +% \endinput |