From 3c18186d7c1bc4aa0a3f5727b5dbe5a251687d9c Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Tue, 12 Jun 2018 08:07:19 +0900 Subject: add qrcstamps --- .../source/latex/qrcstamps/doc/qrcstamps-man.tex | 335 +++++++++++++++++++++ texmf-dist/source/latex/qrcstamps/qrcstamps.dtx | 276 +++++++++++++++++ texmf-dist/source/latex/qrcstamps/qrcstamps.ins | 59 ++++ .../source/latex/qrcstamps/stamps/qrc-stamps.pdf | 272 +++++++++++++++++ 4 files changed, 942 insertions(+) create mode 100644 texmf-dist/source/latex/qrcstamps/doc/qrcstamps-man.tex create mode 100644 texmf-dist/source/latex/qrcstamps/qrcstamps.dtx create mode 100644 texmf-dist/source/latex/qrcstamps/qrcstamps.ins create mode 100644 texmf-dist/source/latex/qrcstamps/stamps/qrc-stamps.pdf (limited to 'texmf-dist/source') diff --git a/texmf-dist/source/latex/qrcstamps/doc/qrcstamps-man.tex b/texmf-dist/source/latex/qrcstamps/doc/qrcstamps-man.tex new file mode 100644 index 00000000..cfeb6e1f --- /dev/null +++ b/texmf-dist/source/latex/qrcstamps/doc/qrcstamps-man.tex @@ -0,0 +1,335 @@ +% All About PDF Stamps In Acrobat® & Paperless Workflows +% NM - the annotation name, unique on page (this is the annot.name property +% Name - name of the icon (this is the annot.AP property in JS) +% a=this.getAnnots(0) +% p=a[0].getProps() +% for (var o in p) console.println(o+": "+p[o]) +% +\documentclass{article} +\usepackage[fleqn]{amsmath} +\usepackage[ + web={centertitlepage,designv,forcolorpaper,tight*,latextoc,pro}, + eforms,aebxmp +]{aeb_pro} +\usepackage{graphicx,array,fancyvrb} +\usepackage{aeb_mlink} +\usepackage[scandoc]{qrcstamps} +%\usepackage{myriadpro} +%\usepackage{calibri} +\usepackage[altbullet]{lucidbry} + +\previewOff + +\def\hardspace{{\fontfamily{cmtt}\selectfont\symbol{32}}} + +\usepackage{acroman} +\usepackage[active]{srcltx} + +\urlstyle{tt} +\renewcommand\LayoutTextField[2]{#2} + +\let\uif\textsf + +%\normalmarginpar +\setlength{\marginparsep}{1bp} +\setlength{\marginparwidth}{1in} + + +%\def\tutpath{doc/tutorial} +%\def\tutpathi{tutorial} +%\def\expath{../examples} + +\def\STRUT{\rule{0pt}{14pt}} + + +\DeclareDocInfo +{ + university={\AcroTeX.Net}, + title={Creating QR Codes\texorpdfstring{\\[1em]}{:} + The \textsf{qrcstamps} package}, + author={D. P. Story}, + email={dpstory@acrotex.net}, + subject=Documentation for the qrcstamps + and the make-qrc packages, + talksite={\url{www.acrotex.net}}, + version={1.0, 2018/06/02}, + Keywords={LaTeX, form field, QR Code, Stamps, AcroTeX}, + copyrightStatus=True, + copyrightNotice={Copyright (C) \the\year, D. P. Story}, + copyrightInfoURL={http://www.acrotex.net} +} + +\universityLayout{fontsize=Large} +\titleLayout{fontsize=LARGE} +\authorLayout{fontsize=Large} +\tocLayout{fontsize=Large,color=aeb} + +\sectionLayout{indent=-62.5pt,fontsize=large,color=aeb} +\subsectionLayout{indent=-31.25pt,color=aeb} +\subsubsectionLayout{indent=0pt,color=aeb} +\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}} + +\chngDocObjectTo{\newDO}{doc} +\begin{docassembly} +var titleOfManual="The qrcstamps Package"; +var manualfilename="Manual_BG_Print_qrc.pdf"; +var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown +var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate; +var doc; +var buildIt=false; +if ( buildIt ) { + console.println("Creating new " + manualfilename + " file."); + doc = \appopenDoc({cPath: _pathToBlank, bHidden: true}); + var _path=this.path; + var pos=_path.lastIndexOf("/"); + _path=_path.substring(0,pos)+"/"+manualfilename; + \docSaveAs\newDO({ cPath: _path }); + doc.closeDoc(); + doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true}); + f=doc.getField("ManualTitle"); + f.value=titleOfManual; + doc.flattenPages(); + \docSaveAs\newDO({ cPath: manualfilename }); + doc.closeDoc(); +} else { +// console.println("Using the current "+manualfilename+" file."); +} +var _path=this.path; +var pos=_path.lastIndexOf("/"); +_path=_path.substring(0,pos)+"/"+manualfilename; +\addWatermarkFromFile({ + bOnTop:false, + bOnPrint:false, + cDIPath:_path +}); +//\executeSave(); +\end{docassembly} + + +\begin{document} + +\maketitle + +\selectColors{linkColor=black} +\tableofcontents +\selectColors{linkColor=webgreen} + +%\previewtrue + +\section{Introduction} + +The difficulty with the barcode field of PDF forms is that it cannot be +created properly except through the user-interface of the \app{Acrobat} +application. An alternative method is therefore necessary. + +The idea of using dynamic stamp annotations to represent barcodes comes from +Thom Parker through personal communication, through +\href{https://acrobatusers.com/tutorials/print/dynamic_stamp_secrets}{his +article} on \href{https://acrobatusers.com/}{AcrobatUser.com}, and from +his book +\textsl{\mlhref{https://www.pdfscripting.com/public/All-About-PDF-Stamps-in-Acrobat-and-Paperless-Workflows-The-Book.cfm} +{All About PDF Stamps In Acrobat${}^{\circledR}$ \& Paperless +Workflows}}, which is highly recommended if you have interest in dynamic +stamps. + +%\marginpar{\hfill\raisebox{.25in}{\qrCode[widthTo=0.75in]{http://www.acrotex.net}}}%, scan the barcode + + +The \pkg{qrcstamps} package is used to insert QR Code Symbology onto a +dynamic stamp annotation, \`a la Parker, into a PDF file from a {\LaTeX} +source. The main command for doing this is +\cs{qrCode}\qrCode[margin,margprior=\hfill,widthTo=0.75in]{http://www.acrotex.net}. +The command creates a dynamic stamp annotation (a PDF construct) using the +\pkg{annot\_pro} package whose appearance is the QR Code symbol. The QR Code +can be scanned over a monitor or from a printed page using a scanning app +found on most smartphones. +As a demonstration of the \cs{qrCode} command, we place a QR Code in the +margin to obtain the url \url{http://www.acrotex.net}. + +%Step up!\qrCode[margin,margintext={\hfill\makebox[0.75in][c]{Hi There!}},margprior=\hfill,widthTo=0.75in]{http://www.acrotex.net} + +\section{Requirements and Installation} + +\paragraph*{Required packages.} It is assumed the document author already has installed {\AEB} (acrotex) and +the \pkg{annot\_pro}. If not, these should be in place first. + +\paragraph*{Document creation.} This package requires a workflow of \textsf{dvips $+$ Adobe Distiller $+$ +Adobe Acrobat} or \textsf{dvips $+$ ps2pdf $+$ Adobe Acrobat} to produce a +document in which the QR symbols are inserted as designed. Note that though +\app{ps2pdf} can be used to produce the PDF, it is necessary to first open the document +using \app{Acrobat}, then save it. This is because post-PDF-creation JavaScript executes the +first time the document is opened in \app{Acrobat}. + +\paragraph*{Viewing the document.} Once the document is built and saved, the document can be distributed to +others who can view it in any conforming PDF viewer. + +\paragraph*{Installing the QR stamps.} After the distribution is installed, locate \texttt{qrc-stamps.pdf} +at the end of the path +\texttt{qrcstamps\string\stamps\string\qrc-stamps.pdf} and copy it to the +\app{Acrobat} user's \texttt{Stamps} folder. That folder may be found by executing +\[ + \text{\texttt{app.getPath("user","stamps");}}\quad\pushButton[\CA{getPath}\A{\JS{console.show();\r + console.println('app.getPath("user","stamps");');}}]{gp}{}{11bp} +\] +in the console window. Press the button above, place your mouse cursor at the +end of the line in the console window, and press \textsf{Ctrl+Enter} (\textsf{Cmd+Enter} for Mac +OS). The executing code should return the path to the \texttt{Stamps} folder. This is where +the stamp file \texttt{qrc-stamps.pdf} is copied. + +\section{The \textsf{qrcstamps} package} + +This package has two options and one command. + +\subsection{Package options} + +There are two options for this package. +%, the first two of which are used most frequently, while the third is rather technical. +\begin{description} + \item[\opt{scandoc}] The correct coding of the QR symbol does not occur + until the page that contains the symbol is visited. When the + \opt{scandoc} option is taken, \app{Acrobat} will automatically + visit each page when the document is first opened following PDF + creating with \app{Acrobat Distiller} or \app{ps2pdf}. + \item[\opt{!scandoc}] The document may be built many times before you + are satisfied as to its content. The \opt{!scandoc} option is a + convenience option for turning off the scanning process. The + default is not to scan. However, when the document is ready for + publishing, build the document with the \opt{scandoc} option in + effect; \emph{this is important!} +% \item[\opt{basename=\ameta{base-name}}] The \opt{basename} key +% sets the appearance base name of the barcode annotation. The +% QR Code annotation name is +% \texttt{\ameta{base-name}\_\ameta{size}}. The default value of +% \opt{basename} is \texttt{basename=AeBQRC}. This option need never +% be specified unless a package developer creates his own custom +% barcode fields and stamps. To reference these new stamps, the +% \texttt{basename} would have to be specified, unique that +% collection of stamps. +\end{description} + +\subsection{The \texorpdfstring{\protect\cs{qrCode}}{\textbackslash{qrCode}} command} + +The one and only command of this package is \cs{qrCode}. +\bVerb\takeMeasure{\string\qrCode[\ameta{options}]\darg{\ameta{content}}}% +\begin{dCmd}[commandchars=!()]{\bxSize} +\qrCode[!ameta(options)]{!ameta(content)} +\end{dCmd} +\eVerb The required \ameta{content} argument is the content of the stamp, a +URL, a email address, text, and so on. The \cs{qrCode} command uses the +\cs{annotpro} command to create the stamp. Any of the options for the stamp +annotation may be used (except for \texttt{type=stamp}, which is already +supplied for you); refer to the documentation of \pkg{aeb\_pro} for details. +In addition to the \ameta{options}, these are a few special options, these are +\opt{size}, \opt{allowresize}, \opt{basename}, and \opt{contents}. +\begin{description} + \item[\texttt{size=small|medium|large}] The stamps come in three sizes. + We describe each of these in turn. + \begin{itemize} + \item \texttt{size=small}: The QR symbol is allowed to + contain at most 75 + characters\marginpar{\raggedleft\small75 chars + max\hspace*{6pt}}. The default size of the barcode is + \texttt{1in}\marginpar{\raggedleft\small1\,in + (dimen)\hspace*{6pt}}, though this can be changed using + the key \texttt{widthTo}; for example, + \texttt{widthTo=0.75in} sets the symbol to + \texttt{0.75in} square. When making the symbol smaller + than its default, you should test the symbol to see if + your scanner (perhaps on your smartphone) can read the + smaller symbology. + \item \texttt{size=medium}: The QR symbol is allowed to + contain at most 250 + characters\marginpar{\raggedleft\small250 chars max\hspace*{6pt}}. + The default size of the barcode is + \texttt{1.5in}\marginpar{\raggedleft\small1.5\,in + (dimen)\hspace*{6pt}}, though this can be changed using + the key \texttt{widthTo}, as illustrated above. + \item \texttt{size=large}: The QR symbol is allowed to + contain at most 500 + characters\marginpar{\raggedleft\small500 chars max\hspace*{6pt}}. + The default size of the barcode is + \texttt{2in}\marginpar{\raggedleft\small2\,in + (dimen)\hspace*{6pt}}, though this can be changed using + the key \texttt{widthTo}, as illustrated above. + \end{itemize} + When your \ameta{content} exceeds the size, the console window opens + informing you of such a matter. For example, your content has 300 + characters yet you are inserting it into + \cs{qrCode[size=medium]\darg{\ameta{content}}}. In such a situation, you'll be + informed at the time you build the document of the error. + + When you change the dimension of a barcode stamp to one that is \emph{smaller} + than the default dimension, be sure to test the smaller QR symbol to be + sure it can still be read by a QR Code scanner, on the screen and on + paper. + + When \texttt{size} is not specified, it is assumed that \texttt{size=small,widthTo=1in}. + + \item[\texttt{allowresize=true|false}] When \texttt{allowresize=true} + (or just \texttt{allowresize}), after the document has been build, + the document consumer is allowed to resize the barcode or to move + it around on the page. The default is \texttt{allowresize=false}, + the user cannot move or resize the stamp. + +%\item[\texttt{basename=\ameta{base-name}}] By passing a value of +% \ameta{base-name} for the \texttt{basename} key, you can locally set +% the appearance base name of the stamp, different the default base name +% (possibly set through the \texttt{basename} option. This option is used +% only when you have developed multiple collections of barcode stamps +% with a different base name. (Recall, the name of a barcode stamp (at +% least in so far as this package is concerned) has the form +% \texttt{\ameta{base-name}\_\ameta{size}}. + +%\previewtrue + +\item[\texttt{contents=\ameta{text}}] For barcodes, I prefer my stamps to have no popup message +attached to it; however, I include the \texttt{contents} key to pass a text message. For example, +\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\normalsize] +\qrCode[contents={This is my home website, go there, + everyone does!\n\n + D. P. Story}]{http://www.acrotex.net} +\end{Verbatim} +Notice the use of \cs{n} to force a new line. The result are shown in the margin.% +\qrCode[margin,margprior=\hfill\raisebox{2.5\baselineskip},widthTo=0.75in,contents={This is my home website, go there, everyone does.\n\n +D. P. Story}]{http://www.acrotex.net} +\end{description} + +\subsection{Examples of QR Code symbols} %\previewtrue + +We present several examples of various sizes and content. Other examples are +found in the sample file \texttt{qrc-demo1.tex}. +\bVerb\def\sz{1in}\takeMeasure{\string\qrCode\darg{http://www.acrotex.net}}% +\noindent\begin{minipage}[t]{\sz+2bp}\kern0pt +\qrCode{http://www.acrotex.net} +\end{minipage}\hfill\begin{minipage}[t]{\linewidth-\sz-6pt-2bp}\kern0pt +\textbf{A URL to a web page} +\begin{Verbatim}[commandchars=!()] +\qrCode{http://www.acrotex.net} +\end{Verbatim} +No \texttt{size} key is given, so this is a small, a maximum of 75 characters, its dimension +is 1in. +\end{minipage}\eVerb +\bVerb\def\sz{1in}\takeMeasure{\string\qrCode\darg{mailto:dpstory@acrotex.net}}% +\noindent\begin{minipage}[t]{\sz+2bp}\kern0pt\centering +\qrCode[size=small,widthTo=0.75in]{mailto:dpstory@acrotex.net} +\end{minipage}\hfill\begin{minipage}[t]{\linewidth-\sz-6pt-2bp}\kern0pt +\textbf{An email address} +\begin{Verbatim}[commandchars=!(),fontsize=\small] +\qrCode[size=small,widthTo=.75in]{mailto:dpstory@acrotex.net} +\end{Verbatim} +\medskip +The \texttt{size} key is explicitly set to \texttt{small} (optional), a +maximum of 75 characters, its dimension is 0.75in. +\end{minipage}\eVerb\smallskip + +In addition to \texttt{qrc-demo1.tex}, there are two `advanced' files \texttt{qrc-demo2.tex} and +\texttt{qrc-demo3.tex}, which I'm sure you'll enjoy. + + +\section{My retirement} + + +\newtopic +Now, I simply must get back to it. \dps + +\end{document} diff --git a/texmf-dist/source/latex/qrcstamps/qrcstamps.dtx b/texmf-dist/source/latex/qrcstamps/qrcstamps.dtx new file mode 100644 index 00000000..fea0309f --- /dev/null +++ b/texmf-dist/source/latex/qrcstamps/qrcstamps.dtx @@ -0,0 +1,276 @@ +%\iffalse +% makeindex -s gglo.ist -o qrcstamps.gls qrcstamps.glo +% makeindex -s gind.ist -o qrcstamps.ind qrcstamps.idx +%<*copyright> +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% qrcstamps.sty package, %% +%% Copyright (C) 2017 %% +%% dpstory@uakron.edu %% +%% %% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1.2 of the %% +%% License, or (at your option) any later version. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%\NeedsTeXFormat{LaTeX2e}[1997/12/01] +%\ProvidesPackage{qrcstamps} +% [2018/06/02 v1.0 qrcstamps: Create QR codes using stamps] +%<*driver> +\documentclass{ltxdoc} +\usepackage{xcolor} +\usepackage[colorlinks,hyperindex=false]{hyperref} +%\usepackage{qrcstamps} +%\pdfstringdefDisableCommands{\let\\\textbackslash} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\gdef\brpr#1{\texttt{\char123\relax#1\char125\relax}} +\let\darg\brpr +\let\env\texttt +\let\opt\texttt +\let\app\textsf +\let\pkg\textsf +\def\visispace{\symbol{32}} +\def\ameta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}} +\def\meta#1{\textsl{\texttt{#1}}} +\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}} +%\def\cs#1{\texttt{\bslash#1}} +\DeclareRobustCommand{\tmspace}[3]{% + \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} +\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} +\let\thinspace\, +\renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} +\let\negthinspace\! +\renewcommand{\:}{\tmspace+\medmuskip{.2222em}} +\let\medspace\: +\newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} +\renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} +\let\thickspace\; +\newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} +\makeatletter +\renewcommand{\paragraph} + {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt} + {\normalfont\normalsize\bfseries}} +\renewenvironment{quote}[1][] + {\def\@rgi{#1}\ifx\@rgi\@empty + \let\rghtm\@empty\else\def\rghtm{\rightmargin\leftmargin}\fi + \list{}{\rghtm} %{\rightmargin\leftmargin}% + \item\relax} + {\endlist} +\makeatother +\InputIfFileExists{aebdocfmt.def}{\PackageInfo{qrcstamps}{Inputting aebdocfmt.def}} + {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax + \PackageInfo{qrcstamps}{aebdocfmt.def cannot be found}} +\begin{document} +\def\CMD#1{\textbackslash#1} + \GetFileInfo{qrcstamps.sty} + \title{\textsf{qrcstamps}: Create QR codes using stamps} + \author{D. P. Story\\ + Email: \texttt{dpstory@acrotex.net}} + \date{processed \today} + \maketitle + \tableofcontents + \let\Email\texttt + \DocInput{qrcstamps.dtx} +\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute + \texttt{makeindex -s gind.ist -o qrcstamps.ind qrcstamps.idx}\\on the command line and recompile + \texttt{qrcstamps.dtx}.} +\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute + \texttt{makeindex -s gglo.ist -o qrcstamps.gls qrcstamps.glo}\\on the command line and recompile + \texttt{qrcstamps.dtx}.} +\end{document} +% +% \fi +% \MakeShortVerb{|} +% +% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}} +% {\PackageInfo{web}{cannot find aebdonotindex.def}} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% \section{Description} +% This package attempts to create barcodes, at least the ones supported by Acrobat: PDF417, +% QR Code, Data Matrix. Acrobat has a barcode field that can be created in the standard way using +% \pkg{eforms}, but it does not work because the barcode renderer is never called to create the image +% for the barcode. Bummer. +% +% The approach we take was suggested to me by Thom Parker, through personal communication, through +% \href{https://acrobatusers.com/tutorials/print/dynamic_stamp_secrets}{his article} on \href{https://acrobatusers.com/}{AcrobatUser.com} +% and his book on \href{https://www.pdfscripting.com/public/All-About-PDF-Stamps-in-Acrobat-and-Paperless-Workflows-The-Book.cfm}{PDF Stamps}. +% The idea is to create \emph{dynamic stamps} whose appearances are barcodes, such as a QR symbol. +% +% In this version, we concentrate of the QR Code symbology. Whereas PDF417 and Data Matrix symbology may +% be created in the same way, there seems no need for either of these two. A QR Code symbology can be +% read by the scanners available on most mobile phones today. In that context, the symbology often contains +% an URL that can be scanned by a persons mobile, after which time, he (or she) may visit that web site without +% having to physically type in the URL address. +% \begin{macrocode} +\RequirePackage{xkeyval} +% \end{macrocode} +% \section{Documentation and Code} +% The \IndexOpt{scandoc}\opt{scandoc} option calls some doc assembly JavaScript to scan the document +% for barcode stamps, this may not be necessary, depending on the version of Acrobat you have. +% \begin{macrocode} +\DeclareOptionX{scandoc}{\let\grc@InputScanDoc\qr@scanDoc} +% \end{macrocode} +% During document development, you don't what to scan the newly created PDF after you build it to, +% perhaps, edit the text. In this case, use the \IndexOpt{!scandoc}\opt{!scandoc} option. You want to scan the document when you build the document for the last time +% before publishing it. Be sure to save the document using the SaveAs menu item. This saves the +% stamp appearances (symbology in this case) as part of the document. +% \begin{macrocode} +\DeclareOptionX{!scandoc}{\let\grc@InputScanDoc\relax} +% \end{macrocode} +% The default is not to scan the document. Remember, the final document must be scanned; that is, +% it must be build with the \opt{scandoc} option in effect. +% \begin{macrocode} +\let\grc@InputScanDoc\relax +\def\qr@scanDoc{\InputIfFileExists{scandoc-grc.def}{\PackageInfo{qrcstamps} + {Inputting the scandoc-grc.def file}} + {\PackageWarning{qrcstamps}{Cannot find the file scandoc-grc.def}}} +% \end{macrocode} +% \leavevmode\IndexOpt{basename}\hspace{-\marginparsep}\texttt{=\ameta{name}} sets the base name of the barcode annotation. +% The form of the name is \texttt{\ameta{basename}\_\ameta{size}}. The default value +% of \opt{basename} is \texttt{basename=AeBQRC}. This option need never be specified unless +% a package developer creates his own custom barcode fields and stamps. To reference these new +% stamps, the \texttt{basename} would have to be specified, unique that collection of stamps. +% \begin{macrocode} +\DeclareOptionX{basename}{\def\QRBase{#1}} +\def\QRBase{AeBQRC} +% \end{macrocode} +% \begin{macrocode} +\DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{insdljs}} +% \end{macrocode} +% \begin{macrocode} +\ProcessOptionsX +% \end{macrocode} +% The package used here is \pkg{annot\_pro}, version dated 2017/06/06. I made a minor +% modification of \pkg{annot\_pro} to accommodate \cs{qrcstamps}. +% \begin{macrocode} +\RequirePackage{annot_pro}[2017/06/06] +\ifx\grc@InputScanDoc\relax\else\let\execjs=y\fi +% \end{macrocode} +% \subsection{The \texorpdfstring{\protect\cs{qrCode}}{\textbackslash{qrCode}} command} +% We develop the stamp annotation for a QR barcode. +% The command \cs{qrCode}, defined below, uses \cs{annotpro} from \pkg{annot\_pro}, and +% as such, its optional argument takes the same options as \cs{annotpro}. However, +% we add two new options, available only within the options list of \cs{qrCode}. +% modification of \pkg{annot\_pro} to accommodate \cs{qrcstamps}.\medskip +% +% \noindent The \IndexKey{size}\texttt{size} key takes one of three values +% \texttt{small}, \texttt{medium}, and \texttt{large}. +% \begin{itemize} +% \item \texttt{size=small} produces a stamp that holds at most 75 characters +% \item \texttt{size=medium} produces a stamp that holds at most 250 characters +% \item \texttt{size=small} produces a stamp that holds at most 500 characters +% \end{itemize} +% The choice of \texttt{size} should be the best fit for the data you provide \cs{qrCode}. +% \begin{macrocode} +\define@choicekey+{annotprostampQR}{size}[\val\nr]{% +small,medium,large}[small]{\ifcase\nr\relax + \def\apstamp@@size{Small}\def\qrc@def@W{1in}\or + \def\apstamp@@size{Med}\def\qrc@def@W{1.5in}\or + \def\apstamp@@size{Large}\def\qrc@def@W{2in}\else + \def\apstamp@@size{Small}\def\qrc@def@W{1in}\fi}% +{\PackageWarning{qrcstamps}{Invalid choice of `size=#1'\MessageBreak + Permissible values are small, medium, large}} +\def\apstamp@@size{Small} +% \end{macrocode} +% \leavevmode\IndexKey{allowresize}\hspace{-\marginparsep}\texttt{=\ameta{\upshape{true\string|false}}} +% The \texttt{allowresize} allows you to resize and move the stamp. +% By default, the stamp (qr code symbology) cannot be resized or moved. +% \begin{macrocode} +\define@boolkey{annotprostampQR}{allowresize}[true]{} +% \end{macrocode} +% \leavevmode\IndexKey{basename}\hspace{-\marginparsep}\texttt{=\ameta{name}} +% The \texttt{basename} key allows you to give a \ameta{name} to the stamp you want to use +% \emph{locally}. It's unlikely you are using more than one barcode stamp collection, so this option +% is normally not used, but just in case, it is here. Specifying a value for the key \texttt{basename} +% overrides the choice for the option \texttt{basename}. +% \begin{macrocode} +\define@key{annotprostampQR}{basename}[\QRBase]{\edef\QRBase{#1}} +% \end{macrocode} +% \leavevmode\IndexKey{contents}\hspace{-\marginparsep}\texttt{=\ameta{text}} +% It's unlikely you'll want to include a text message as part of your stamp, but just in +% case, we previde the \texttt{contents} key. +% \begin{macrocode} +\define@key{annotprostampQR}{contents}[]{\long\def\qrc@contents{#1}} +\let\qrc@contents\@empty +% \end{macrocode} +% \begin{macro}{\qrCode}\hspace{-\marginparsep}\,\texttt{[\ameta{options}]\darg{\ameta{content}}} +% The \cs{qrCode} command is the one that produces the QR Code stamp symbol, not as a barcode field, +% but as an annotation stamp. For printed material, the stamps are flattened and appear as you expect +% them. The \ameta{options} may be any option for a stamp annotation as produced by \cs{annotpro} +% plus the options \texttt{size} and \texttt{allowresize}. The required argument \ameta{content} +% is the text you want the qr barcode symbology to represent. Usually its an URL. +% \begin{macrocode} +\newcommand\qrCode[2][]{\begingroup\def\n{\string\n}% + \def\apstamp@@size{Small}\def\qrc@def@W{1in}% + \setkeys*{annotprostampQR}{#1}% + \annotpro*[widthTo=\qrc@def@W,#1,type=stamp, + \ifKV@annotprostampQR@allowresize\else readonly\fi, + title=QRC,subject={#2},% + name=\#\QRBase_\apstamp@@size]{\qrc@contents}\endgroup} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +% +%<*scandoc> +% \end{macrocode} +% \subsection{Document assembly} +% The document assembly code is executed when the \texttt{scandoc} option is used. It is executed +% then the document is first opened. +% \begin{macrocode} +\begin{execJS}{scan4qrc} +var aBCStamps=new Array(); +if (typeof scancomplete=="undefined") { + var scancomplete=false,annots,isStamp,isHashtag; + this.syncAnnotScan(); + for (var p=0; p0) + var qrcTO=app.setInterval("QRCscrollPage()", 5); +\end{execJS} +% +%<*package> +% \end{macrocode} +% Input the \texttt{scandoc-grc.def} code, if the option \texttt{scandoc} is in effect. +% \begin{macrocode} +\grc@InputScanDoc +% +% \end{macrocode} +\endinput diff --git a/texmf-dist/source/latex/qrcstamps/qrcstamps.ins b/texmf-dist/source/latex/qrcstamps/qrcstamps.ins new file mode 100644 index 00000000..98f90b82 --- /dev/null +++ b/texmf-dist/source/latex/qrcstamps/qrcstamps.ins @@ -0,0 +1,59 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 2017-2018 D. P. Story +%% ------------------------------------------- +%% +%% It may be distributed 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. +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\filedate{2018/06/02} +\def\batchfile{qrcstamps.ins} + +\input docstrip +\ifx\generate\undefined + \Msg{**********************************************} + \Msg{*} + \Msg{* This installation requires docstrip} + \Msg{* version 2.4 or later.} + \Msg{*} + \Msg{* An older version of docstrip has been input} + \Msg{*} + \Msg{**********************************************} + \errhelp{Move or rename old docstrip.tex and get a newer one.} + \errmessage{Old docstrip in input path} + \batchmode + \csname @@end\endcsname\end +\fi + +\keepsilent +\askforoverwritefalse +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\preamble +\endpreamble + +\generate +{% + \file{qrcstamps.sty}{\from{qrcstamps.dtx}{copyright,package}} + \file{scandoc-grc.def}{\from{qrcstamps.dtx}{copyright,scandoc}} +} + +\Msg{***************************************************************} +\Msg{*} +\Msg{* \space To finish the installation you have to copy the files } +\Msg{*} +\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX} +\Msg{*} +\Msg{***************************************************************} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\endinput diff --git a/texmf-dist/source/latex/qrcstamps/stamps/qrc-stamps.pdf b/texmf-dist/source/latex/qrcstamps/stamps/qrc-stamps.pdf new file mode 100644 index 00000000..fe608651 --- /dev/null +++ b/texmf-dist/source/latex/qrcstamps/stamps/qrc-stamps.pdf @@ -0,0 +1,272 @@ +%PDF-1.6 % +11 0 obj <>/AcroForm 24 0 R/Metadata 8 0 R/Names 13 0 R/OpenAction 12 0 R/PageLabels 5 0 R/PageLayout/SinglePage/PageMode/UseNone/Pages 7 0 R/Type/Catalog/ViewerPreferences<<>>>> endobj 24 0 obj <>/Font<>>>/Fields[25 0 R 26 0 R 27 0 R]>> endobj 8 0 obj <>stream + + + + + Acrobat Distiller 18.0 (Windows) + + The AcroTeX eDucation Bundle + 2018-06-02T07:08:33-05:00 + 2018-06-02T07:08:26Z + 2018-06-02T07:08:33-05:00 + application/pdf + + + AeB QR Codes + + + + + D. P. Story + + + uuid:88d32fc1-0fb3-4a92-af6d-0c1d41b96d23 + uuid:4b1145e8-79f0-4ab5-9a21-d596d355590f + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 13 0 obj <> endobj 12 0 obj <> endobj 5 0 obj <> endobj 7 0 obj <> endobj 14 0 obj < 8 \) ? aebTrustedFunctions\( this, aebImportAnFDF, "calscript.fdf"\) : this.importAnFDF\("calscript.fdf"\);\r\nif\(typeof _docassembly == "undefined"\)\r\n \( app.viewerVersion > 8 \) ?\ aebTrustedFunctions\( this, aebImportAnFDF, "docassembly.fdf"\) : this.importAnFDF\("docassembly.fdf"\);\r\n)/S/JavaScript>>>>/Contents 17 0 R/CropBox[0 0 336 268]/MediaBox[0 0 612 792]/Parent 7 0 R/Resources 15 0 R/Rotate 0/Type/Page>> endobj 33 0 obj <>/Rotate 0/Type/Page>> endobj 34 0 obj <>/Rotate 0/Type/Page>> endobj 35 0 obj <>/Rotate 0/Type/Page>> endobj 40 0 obj [25 0 R] endobj 41 0 obj <>stream + +endstream endobj 25 0 obj <>/AP<>/DA(/Helv 12 Tf 0 g)/DataPrep 0/F 4/FT/Tx/Ff 4198405/MK<>/P 35 0 R/PMD 44 0 R/Rect[0.0 0.185837 143.814 144.0]/Subtype/Widget/T(AeBQRC_Large)/Type/Annot/V(http://www.acrotex.net/ABCDEFG/ABCDEFGHI/JKLMNOPQR/abcdefghi/jklmnopqr/123456789/ABCDEFGHI/JKLMNOPQR/http://www.acrotex.net/ABCDEFG/ABCDEFGHI/JKLMNOPQR/abcdefghi/jklmnopqr/123456789/ABCDEFGHI/JKLMNOPQR/http://www.acrotex.net/ABCDEFG/ABCDEFGHI/JKLMNOPQR/ab\ cdefghi/jklmnopqr/123456789/ABCDEFGHI/JKLMNOPQR/http://www.acrotex.net/ABCDEFG/ABCDEFGHI/JKLMNOPQR/abcdefghi/jklmnopqr/123456789/ABCDEFGHI/JKLMNOPQR/http://www.acrotex.net/ABCDEFG/ABCDEFGHI/JKLMNOPQR/abcdefghi/jklmnopqr/123456789/ABCDEFGHI/JKLMN)>> endobj 44 0 obj <> endobj 43 0 obj <>>>/Subtype/Form/Type/XObject>>stream +q +143.76 0 0 143.76 0 0 cm +/PmdIm30 Do +Q + +endstream endobj 45 0 obj <>stream +H1L Ero%uwuuuuuuuuuuu.m~ ?avW,'b7QP;Nqp DkD]o/zʠVr(8RBzHI7%*b`fX0 %!C%cFEy- q\hv6ʵqPxa8x҅x jQQɸ}o֨2Y>h;[E}?82E+r[dMU)uy{4xmڥ'g"b^QG:%$C ,|jTI ܧ(w/Iި:(0p({ڌ+l OrNFӠU Mŝ@.@JRR}6e][0ʒRB6h:>J{#`4*_~4('aIh: :[~ tFU@AWSI9^4^l'[4̧U +4-iiNFB}}B`PO+h5JBB1O?hP&֨2(ȸ!pNM'ΰar 5j}!0ˋg8W}Rl9]R*> + b) ])E"m?utԓ9}VL]%(3Cc]5p'P=Tƴ  ?M<9VqF\''V#kbCQG1`5F+}&eW5xQPLs@B'}*ѢD;6(LoAb`<(!̥kȌQuPc}TvA#xQP>7uL47窉I^2jfғ3My&;3nQF94FMvK_C&PʠV a %aXF9=w|TGDQePtU1%$d9ը>`*Jp*)R*%$g[zUAt%[cx%Q~jT%G1rt5[ '[`MUB)"\iP_2n`O5]kmT!ZFf)5Z=dulpl5І$*k褱0#NQGGT8&t%3 {LU +%NN\ cޢbpЄd U +ƃ[7 oJs9ɕ`L7}N~Q$QRwU.L F 2dZI!6*N&PM <31h,/lhʠ30]VP\:r4 + +Sd8rp<0E8mD~(F?ڨ:(4Pä$&{. -DG]{ biF+5'ģ3hmT 71rI] 뒶sxQeP. E[TE~ob,_vjԡQT< gzA>YOT|ΫF&YK-i%IcJ|Fd$LVek('*WT +7=kl IߺjT-j) 9d24yRBbuBKU5t!vux˘= JB<}L2[$07ʱqR#(IJDQ9dPQE삙^1O&$AѨ5**R 0 +endstream endobj 42 0 obj <> endobj 38 0 obj [26 0 R] endobj 39 0 obj <>stream + +endstream endobj 26 0 obj <>/AP<>/DA(/Helv 12 Tf 0 g)/DataPrep 0/F 4/FT/Tx/Ff 4198405/MK<>/P 34 0 R/PMD 48 0 R/Rect[0.0 0.139847 110.037 109.498]/Subtype/Widget/T(AeBQRC_Med)/Type/Annot/V(http://www.acrotex.net/abcdefghijklmnopqrstuvwxyz/http://www.acrotex.net/abcdefghijklmnopqrstuvwxyz/http://www.acrotex.net/abcdefghijklmnopqrstuvwxyz/http://www.acrotex.net/abcdefghijklmnopqrstuvwxyz/http://www.acrotex.net/abcdefghijklmnopqrstuvwxyz/)>> endobj 48 0 obj <> endobj 47 0 obj <>>>/Subtype/Form/Type/XObject>>stream +q +109.92 0 0 109.44 0 0 cm +/PmdIm11 Do +Q + +endstream endobj 49 0 obj <>stream +H=X " d ,KRX!e[I\H=D%4Wwŋ/<w޽4YOq{ss_-xLjw=4b'%Cmq<1 +/CxzjhrףͱFy٥Iws֕ͩ eːO]'yM֓X3,!m؅+K4$NfxM0ߞ~&ra֜A)LDvd1I)+mLF[OMphDYD1epR&l U҂67^BOF䙼HݍMMJz 'd9h԰qf'=SsMPi6wMFOG3Nqhf..qd&L(ze>ሧ}4YF7%%%ԜIVO3MةH]UӤ zReMd1gZմxROD&"mQÊr FN`=[EL@$=Qs8,baj2JsS# =6Ohұ\ԑ }$bAϺ{k' ~M ޿d! d-G3 |& I_4g O 'M?dMۨl]vVbMV@A.`n6y&H kf6 `AAQuTAqv}z_u$Ԩt Hw /=a`0,'Y15t?M')V֎eSQdy9+}MYSc":4oq4YOšuṣHu^MBhl*ĵ'@֝h|KAKޗqb +=> endobj 36 0 obj [27 0 R] endobj 37 0 obj <>stream + +endstream endobj 27 0 obj <>/AP<>/DA(/Helv 12 Tf 0 g)/DataPrep 0/F 4/FT/Tx/Ff 4198405/MK<>/P 33 0 R/PMD 52 0 R/Rect[-1.25307 -0.43692 73.16 72.5301]/Subtype/Widget/T(AeBQRC_Small)/Type/Annot/V(http://www.acrotex.net/ABCDEFG/ABCDEFGHI/JKLMNOPQR/abcdefghi/jklmnopqr/1234)>> endobj 52 0 obj <> endobj 51 0 obj <>>>/Subtype/Form/Type/XObject>>stream +q +74.4 0 0 72.96 0 0 cm +/PmdIm12 Do +Q + +endstream endobj 53 0 obj <>stream +HW@[!%JKs).a_Ҟ0|?gtfeիWߨ{2<\G^z%}@JƯq ~A0J +F:C:o gjJKRV[>hVf X޶}`<i\᦯f?K\elq¨Q˧UbH6HFMV1cXbǛl ?ֲ&|6#rJ]C7hL#֦Ju(2e^wWk"}rgtNY>xJۍ0ʤw1V,3:*X:HKyb +:6IY]UY.01;^}601Z5`1h{tI5(0?؆ЍkHR+!(BSⳉč|3q7#KŕAR݈q$kacl:} ST?HRK#L" +Ÿe+FիW?Y_ p6 +endstream endobj 50 0 obj <> endobj 17 0 obj <>stream +hd0 E|T]KB0@! ]ZPXedFC?E֠/ "20LdBے@[J%(ܽCd30KҜHrݏ۫"])Oμ2UU@A;^ۋ[ TV:_utnhW,^ 1 +endstream endobj 15 0 obj <>/Font<>/ProcSet[/PDF/Text]>> endobj 16 0 obj <> endobj 19 0 obj <> endobj 21 0 obj <> endobj 22 0 obj <>stream +hTQn0-/Ja(E(P ck_.JwfhڧL77&)3$={ ݾn8fX@Hẹ>4Ɍp8%DtkqFA u H4Ͻ}g?[kqBכAՀF?8wQ㴩#Y&ӏppE1&'<<*Dsa"eLM !C ߌ뾕.QM|M\dlvя +endstream endobj 20 0 obj <>stream +hތVyPwf`ftgFxA<+ H&A0nF{3 3 D4* )%QQj6nHRQRܳa%\-TQ|+[.~eWƉp/{vu=lhUҟN`-8޳i[CyUviʦ=fL|nh4LnvD==Ɠ-9IlaVce+}fIeqYvx?HEKq^36rk`EH3FWAsN툄sn0F,Qwd%{ݽDwթn6F|olTnd:\z]- , 8 j; T0^WƋõo>YLU95pE)dÂhQp犎zKjI@AO"Sx%^=}k|>&Aw zs:\Ҷo_h o;/1 EDc:5a"ח?t+SX)//M](PSus]qX;u;k +"K#yI-ضB3E{%{C"sTBkE%VW]#Q]>3`!Ox +@>)9 smW#WLKQhFU!#֌rFk4XjdcψQUXT(=~8T"M Q{AB Ȼl*cPI&w MMtb6R`8C +endstream endobj 18 0 obj <> endobj 6 0 obj <> endobj 1 0 obj <> endobj 31 0 obj <> endobj 32 0 obj <> endobj 54 0 obj < 0\) && \(this.getField\("AeBQRC_Large"\) != null\)\)\r\n this.getField\("AeBQRC_Large"\).value = "";\r\n)/S/JavaScript>> endobj 55 0 obj < 0\) && \(this.getField\("AeBQRC_Med"\) != null\)\)\r\n this.getField\("AeBQRC_Med"\).value = "";\r\n)/S/JavaScript>> endobj 56 0 obj < 0\) && \(this.getField\("AeBQRC_Small"\) != null\)\)\r\n this.getField\("AeBQRC_Small"\).value = "";\r\n)/S/JavaScript>> endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <> endobj 65 0 obj <>stream +HW{kH?0ރ EI +`UWr +nHp\+r;oF??tC@ySGnS*șB's4Ch\䉓:{'>{zHkN< =ou:#D?nOvX0xBQZ~7>yӌd&>O7V#µS0~;r~!kKmDD ؗ+ϕ&D*ljjm/EǻN2"eDsuq*u_I,{.L"cmW>6:nx&ʜ[$ G-74C}z)\;둜ߒޮ[#DV+џ;U} k-9C/P +#2A~}%{n`%&FϬ燯%5xqv3 7&V7wzSmaMj5֟ȟ-vTZb@$BT@*"U1V6SJs,_@~7m"DrX&vFko=[$zlW[J*X8鈵c(O;vv +̊Pg)`L&~hS ]_ڌe~7NAàJӪvw6 .CMmYQ6?$fWSaBvQnavMt_\if:$p6Ue\:dѭfث9f(jkuPuéч^݃yH4ԛxP.v!@;{@P<.%G+QnD5Z7]tLE9ot@Y"eu i 29=m[/չMW<\]? ' +endstream endobj 64 0 obj <>stream +Hē]K0^P/&Mցູ/ f]iRw-kqP<$DQW6EaƮiĘM=XO4ڱ=jEѹ$,Ag?3ҒYbu0z1AZOygă6\e(+Vw~ڷ*#2>{=q|8w"e5"N0 7rL?pX*sŪ\n>stream +HRJ@YB".XDP( +M ɐGXA@rc=gã2]D{q 7Hzs' | dN>8R +Ȇᘅ=A"eM*Y_S 8EF~mbҤ@㺓kpUN6PqxuWנ>J-Wڲ..>},eQlR- Up bX4ȳ-3Z"i>gugqm8 ta KhU4Bq\H @D=؟NH{);rE/ l\[ +endstream endobj 62 0 obj <>stream +HSn0 ;9%@r(&EtGChG,zo?vۡ[^|>mjX!K>ۯ+l`;q+xy 8/a՗ϟR5wW*=/.vs`D_5Ńa k*S8g=* +!j}0Ф!wKɷwo<Pz8Mh= ~>RokQӬV MP +41DOy!hEZyƓ JYu ʁq!CEΉ}(Q'e*k'  {(= : #zLdXYbv&mz{jJk%yh)U]AhdE J #8b)&,J/k2o靐 XRD)HoMH9sgL8tZ-wNlNoL4*Mj +endstream endobj 2 0 obj <> endobj 3 0 obj <> endobj 4 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 28 0 obj <> endobj 9 0 obj <> endobj xref +0 66 +0000000010 65535 f +0000016641 00000 n +0000020502 00000 n +0000020587 00000 n +0000020635 00000 n +0000004051 00000 n +0000016617 00000 n +0000004085 00000 n +0000000379 00000 n +0000022042 00000 n +0000000023 00000 f +0000000016 00000 n +0000004011 00000 n +0000003947 00000 n +0000004158 00000 n +0000012740 00000 n +0000012824 00000 n +0000012507 00000 n +0000016491 00000 n +0000013399 00000 n +0000014154 00000 n +0000013526 00000 n +0000013795 00000 n +0000000000 00000 f +0000000209 00000 n +0000005222 00000 n +0000008642 00000 n +0000011091 00000 n +0000020850 00000 n +0000020683 00000 n +0000020773 00000 n +0000016673 00000 n +0000016994 00000 n +0000004684 00000 n +0000004836 00000 n +0000004992 00000 n +0000011017 00000 n +0000011042 00000 n +0000008568 00000 n +0000008593 00000 n +0000005148 00000 n +0000005173 00000 n +0000008512 00000 n +0000006084 00000 n +0000005943 00000 n +0000006327 00000 n +0000010963 00000 n +0000009252 00000 n +0000009111 00000 n +0000009495 00000 n +0000012451 00000 n +0000011531 00000 n +0000011390 00000 n +0000011768 00000 n +0000017198 00000 n +0000017400 00000 n +0000017598 00000 n +0000017800 00000 n +0000017844 00000 n +0000017888 00000 n +0000017932 00000 n +0000017976 00000 n +0000019972 00000 n +0000019582 00000 n +0000019137 00000 n +0000018039 00000 n +trailer +<<9F970F332E06B944B12048D663BCE89C>]>> +startxref +22261 +%%EOF +8 0 obj <>stream + + + + + Acrobat Distiller 18.0 (Windows) + + The AcroTeX eDucation Bundle + 2018-06-02T07:09:04-05:00 + 2018-06-02T07:08:26Z + 2018-06-02T07:09:04-05:00 + application/pdf + + + AeB QR Codes + + + + + D. P. Story + + + uuid:88d32fc1-0fb3-4a92-af6d-0c1d41b96d23 + uuid:5755f609-029e-481f-b331-c9d3c67cc91f + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 9 0 obj <> endobj 14 0 obj <>/Contents 17 0 R/CropBox[0 0 336 268]/MediaBox[0 0 612 792]/Parent 7 0 R/Resources 15 0 R/Rotate 0/Type/Page>> endobj 24 0 obj <>/Font<>>>/Fields[25 0 R 26 0 R 27 0 R]>> endobj 31 0 obj <> endobj xref +0 1 +0000000000 65535 f +8 2 +0000023737 00000 n +0000027305 00000 n +14 1 +0000027524 00000 n +24 1 +0000027660 00000 n +31 1 +0000027830 00000 n +trailer +<<52324B63524C34499E766BFF70669F0F>]/Prev 22261>> +startxref +28125 +%%EOF -- cgit v1.2.3