diff options
author | Karl Berry <karl@freefriends.org> | 2006-10-18 20:45:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-10-18 20:45:25 +0000 |
commit | ee55a90f4497f62a8b7cf4375ebc8b677d33a882 (patch) | |
tree | 692d8a148d4f37ceccac6a6af31d91aa33ebdf22 /Master/texmf-dist/doc/generic/pst-barcode | |
parent | 13a2c5a918f470bb66ade4498a7bde360c331bf0 (diff) |
pst-barcode needs MAKEpst
git-svn-id: svn://tug.org/texlive/trunk@2347 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/generic/pst-barcode')
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-barcode/Changes | 58 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-barcode/README | 10 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-barcode/barcode.pdf | bin | 0 -> 228289 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/pst-barcode/barcode.tex | 1037 |
4 files changed, 1105 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-barcode/Changes b/Master/texmf-dist/doc/generic/pst-barcode/Changes new file mode 100644 index 00000000000..17ab2457dbf --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-barcode/Changes @@ -0,0 +1,58 @@ +----- pst-barcode.tex +0.04 2006-07-23 - adding support for the ISBN-13 code + - printing the code from the current point and + no more from the origin +0.03 2005-07-26 - Changes to the documentation and the syntax + of psbarcode (hv) +0.02 2005-07-26 - first version (hv) + + +----- pst-barcode.sty +0.01 2005-07-26 first version (hv) + + +----- pst-barcode.pro +2006-03-04 - An encoder for the Reduced Space Symbology RSS Expanded was added. + - The incorrect definition of the USPS FIM-B symbol was fixed. + - An encoder for the Reduced Space Symbology RSS Limited was added. + The efficiency of RSS-14 was improved. + - An encoder for the new OneCode symbology used by the US + Postal Service was added. + - The FIM symbols now render according to their specification. + - The Postnet, Royal Mail, AusPost and KIX encoders were amended + so that the metrics of their default symbols confirms + strongly to their respective specifications. + - The encoders now pass an array containing the widths of the + bar space succession to the renderer allowing for sub-point + horizontal precision. + - The default border positions for EAN and UPC symbols were + amended to properly enclose the human readable text. + - The colour support code was fixed to prevent overwriting of + the current colour when values are left unspecified. + - The logic to guard whitespace in EAN symbols was migrated + from the encoders to the renderer. + - The whitespace guard symbols are now drawn directly making them + independant of any font. + - The inter-guard bar height of EANs and UPCs was amended. + - The renderer was amended to support the passing of encoder + specific arguments. + - The options barcolor, textcolor, bordercolor, showbackground + and backgroundcolor were added to the renderer. + - A flaw in the derivation of the top border height was fixed. + - add support for the new ISBN-13 + - printing the code from the current point + - The performance of the renderer was improved by avoiding + unnecessary calls of setfont + - The auspost encoder was extended to support the customer + information field. +2005-10-24 - A new encoder for the bar codes used by the + Australian Postal Service was added. +2005-10-17 - adding a checksum for code 2of5 encoder +2005-10-14 - some more changes to the possible charcters +2005-09-26 - A new encoder was added to support the generation + of miscellaneous symbols. + - Support for generation of FIM symbols used on + US Postal service reply mail was added. +2005-09-15 added Kix -- Dutch mail +2005-09-17 choose the right syntax for saving the length +2005-09-08 some more tweaks to the code diff --git a/Master/texmf-dist/doc/generic/pst-barcode/README b/Master/texmf-dist/doc/generic/pst-barcode/README new file mode 100644 index 00000000000..8e3d83f73ad --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-barcode/README @@ -0,0 +1,10 @@ +This version of pst-barcode uses the xkeyval package, the extended +version of keyval. + +Save the files pst-barcode.sty|.tex|.pro in a directory, which is part of your +local TeX tree. pst-barcode.pro should be saved in ../texmf/dvips/pstricks/ +Then do not forget to run texhash to update this tree. +pst-barcode needs pstricks, which should be part of your +local TeX installation, otherwise get it from a CTAN server, f.ex. +http://www.dante.de/CTAN/graphics/pstricks/ + diff --git a/Master/texmf-dist/doc/generic/pst-barcode/barcode.pdf b/Master/texmf-dist/doc/generic/pst-barcode/barcode.pdf Binary files differnew file mode 100644 index 00000000000..8f85434f353 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-barcode/barcode.pdf diff --git a/Master/texmf-dist/doc/generic/pst-barcode/barcode.tex b/Master/texmf-dist/doc/generic/pst-barcode/barcode.tex new file mode 100644 index 00000000000..fe8f3541c39 --- /dev/null +++ b/Master/texmf-dist/doc/generic/pst-barcode/barcode.tex @@ -0,0 +1,1037 @@ +\documentclass{article} +\usepackage{pstricks,tabularx,paralist} +\usepackage{showexpl} +\lstset{wide,preset=\raggedright} +\usepackage{pst-barcode} +\let\PSTfileversion\fileversion +\usepackage[ps2pdf,colorlinks,linktocpage]{hyperref} +\usepackage{breakurl} +\def\CMD#1{\texttt{\textbackslash #1}} + +\title{Package \texttt{pst-barcode}\\ +\footnotesize v. \PSTfileversion} +\author{Terry Burton\thanks{\protect\url{tez@terryburton.co.uk}} + \and Herbert Vo\ss\thanks{\protect\url{hvoss@tug.org}}} +\date{\today} +\begin{document} +\maketitle + + +\begin{center} +\begin{tabular}{@{}>{\ttfamily}lll@{}} +\textrm{\emph{file name}} & \emph{meaning} & \emph{version}\\\hline +pst-barcode.sty & \LaTeX\ style file -- wrapper & 2006-07-23\\ +pst-barcode.tex & \TeX\ file -- PS interface & 2006-07-23\\ +pst-barcode.pro & PostScript file & 2006-07-23\\ +barcode.tex & documentation source & 2006-07-23\\ +barcode.pdf & documentation PDF & 2006-07-23\\ +\end{tabular} +\end{center} + + + +\clearpage +\tableofcontents + + +\clearpage +\section{Introduction} +To install the package put the three files in a place, where \TeX{} will search +for the files: + +\bigskip\noindent +\begin{tabular}{@{}ll@{}} +\emph{name} & \emph{target dir} \\\hline +\verb+pst-barcode.tex+ & \verb+$LOCALTEXMF/tex/generic/pstricks/+\\ +\verb+pst-barcode.sty+ & \verb+$LOCALTEXMF/tex/latex/pstricks/+\\ +\verb+pst-barcode.pro+ & \verb+$LOCALTEXMF/dvips/pstricks/+ \\ +\verb+barcode.tex+ & \verb+$LOCALTEXMF/doc/pstricks/+\\ +\verb+barcode.pdf+ & \verb+$LOCALTEXMF/doc/pstricks/+ %$ +\end{tabular} + +\bigskip +There is only one macro \verb+\psbarcode+ with the usual PSTricks syntax +\begin{verbatim} +\psbarcode[<TeX options>]{<PS options>}{<bar type>} +\end{verbatim} + +Important is the fact, that the barcode is printed in a box of zero dimension. +If you want to save some space in your text, use the \verb+pspicture+ environment +or the \verb+\makebox+ macro. + + + +\section{The options} +\subsection{The \TeX\ options} + +\begin{tabular}{@{}lll@{}} +\emph{name} & \emph{default} & \emph{remarks}\\\hline +\verb+transx+ & 0 & horizontal shift\\ +\verb+transy+ & 0 & vertical shift\\ +\verb+scalex+ & 1 & horizontal scaling\\ +\verb+scaley+ & 1 & vertical scaling\\ +\verb+rotate+ & 0 & rotating angle in degrees +\end{tabular} + +\subsection{The PostScript options} + +\begin{tabularx}{\textwidth}{@{}llX@{}} +\emph{name} & \emph{default} & \emph{remarks}\\\hline +\verb+height+ & 1 & dimension is inch\\ +\verb+textsize+ & 10 & dimension is pt\\ +\verb+textpos+ & -2 & dimension is pt; it is the shift for additional code text\\ +\verb+inkspread+ & 0.15 & dimension is pt\\ +\verb+showborder+ & - & - \\ +\verb+borderwidth+ & 0.5 & dimension in pt \\ +\verb+borderleft+ & 10 & dimension in pt\\ +\verb+borderright+ & 10 & dimension in pt\\ +\verb+bordertop+ & 1 & dimension in pt\\ +\verb+borderbottom+ & 1 & dimension in pt\\ +\verb+borderwidth+ & 0.5 & dimension in pt\\ +\verb+width+ & - & dimension in inch\\ +% +\verb+font+ & /Helvetica & must be a PostScript font\\ +\verb+includetext+ & - & enable human readable text \\ +\verb+includecheck+ & - & enable check digit \\ +\verb+includecheckintext+ & - & check digit visible in text +\end{tabularx} + +\subsection{Examples for the TeX options} + +\begin{LTXexample}[pos=t,preset=\centering] +\begin{pspicture}(3.5,1.2in) +\psbarcode{12345678}{includetext}{ean8} +\end{pspicture} +\begin{pspicture}(-2,-1.5)(0.5,0.2in) +\psbarcode[rotate=180,linecolor=red]{12345678}{includetext guardwhitespace height=0.6}{ean8} +\end{pspicture} +\begin{pspicture}(3.5,1.2in) +\psbarcode[scalex=1.5,scaley=0.5,transy=20]{12345678}{includetext inkspread=0.5}{ean8} +\end{pspicture} +\end{LTXexample} + +\newpage +\subsection{Examples for the PostScript options} + +\begin{LTXexample}[pos=t,preset=\centering] +\begin{pspicture}(3.5,1.2in) +\psbarcode{12345678}{includetext guardwhitespace height=0.6}{ean8} +\end{pspicture} +\begin{pspicture}(3.5,1.2in) +\psbarcode{12345678}{textsize=15 includetext guardwhitespace height=0.6}{ean8} +\end{pspicture} +\begin{pspicture}(3.5,1.2in) +\psbarcode{12345678}{includetext inkspread=0.5}{ean8} +\end{pspicture} +\begin{pspicture}(3.5,1.2in) +\psbarcode{12345678}{includetext textpos=0}{ean8} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[pos=t,preset=\centering] +\begin{pspicture}(3.5,1.2in) +\psbarcode{12345678}{includetext guardwhitespace}{ean8} +\end{pspicture} +\begin{pspicture}(3.5,1.2in) +\psbarcode{12345678}{textsize=15 includetext guardwhitespace width=2}{ean8} +\end{pspicture} +\end{LTXexample} + + +\section{Usage} +By default the barcode has a width and a height of zero. Using the \CMD{parbox} +macro or the \verb+pspicture+ environment can reserve the needed space for +the barcode. The \CMD{fbox} in the following examples is used +only for demonstration. + + +\begin{LTXexample}[width=.5\linewidth] +foo +\fbox{% + \parbox[b][1in]{1.5in}{\psbarcode{241078}{includetext width=1.5 height=1}{code39}}} +bar +\end{LTXexample} + +\bigskip +\begin{LTXexample}[width=.5\linewidth] +foo +\fbox{% +\begin{pspicture}(0,-8pt)(1.5in,1in) + \psbarcode{241078}{includetext width=1.5 height=1}{code39} +\end{pspicture}} +bar +\end{LTXexample} + + +\section{Possible barcodes} + +The following section shows the symbologies that are supported by +the encoders, including the available features for each. This list +may not be up-to-date. If it does not contain any of the formats or +features that you require then check the project source code or +try the support mailing list. + +\subsection{EAN-13} + +\begin{description} +\item[Characters] \verb+0123456789+ +\item[Data] 12 or 13 digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\\hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\item[Notes] If just 12 digits are entered then the check digit is calculated automatically +\end{description} + +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(3,1.2in) +\psbarcode[scalex=0.8,scaley=0.8]{9781860742712}{includetext guardwhitespace}{ean13} +\end{pspicture} +\end{LTXexample} + +\subsection{EAN-8} + +\begin{description} +\item[Characters] \verb+0123456789+ +\item[Data] 8 digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ + \hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\end{description} + +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(-2,-1.2)(0,0.2in) +\psbarcode[rotate=180,linecolor=red]{12345678}{includetext guardwhitespace height=0.6}{ean8} +\end{pspicture} +\end{LTXexample} + + +\subsection{UPC-A} + +\begin{description} +\item[Characters] \verb+0123456789+ +\item[Data] 11 or 12 digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ + \hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\item[Notes] If just 11 digits are entered then the check digit is + calculated automatically +\end{description} + +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(3,1.2in) +\psbarcode[transx=15pt,transy=10pt]{78858101497}{includetext}{upca} +\qdisk(0,0){3pt}\rput[lb](5pt,-10pt){Origin} +\end{pspicture} +\end{LTXexample} + +\subsection{UPC-E} + +\begin{description} +\item[Characters] \verb+0123456789+ +\item[Data] 7 or 8 digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ + \hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\item[Notes] If just 7 digits are entered then the check digit is calculated automatically +\end{description} + +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(1.5,1.2in) +\psbarcode{0123456}{includetext}{upce} +\end{pspicture} +\end{LTXexample} + +\subsection{EAN-5} + +\begin{description} +\item[Characters] \verb+0123456789+ +\item[Data] 5 digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\end{description} + +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(2,1in) +\psbarcode{90200}{includetext guardwhitespace}{ean5} +\end{pspicture} +\end{LTXexample} + +\subsection{EAN-2} + +\begin{description} +\item[Characters] \verb+0123456789+ +\item[Data] 2 digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\\hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\end{description} + +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(1,1in) +\psbarcode{38}{includetext guardwhitespace}{ean2} +\end{pspicture} +\end{LTXexample} + +\newpage +\subsection{ISBN} +An ISBN symbol is really an EAN-13 with a particular prefix, 978 for the older ISBN-10 format, and others for the new ISBN-13 format. + +\begin{description} +\item[Characters] \verb+-0123456789+ +\item[Data] 9 or 10 digits for ISBN-10 seperated appropriately with dashes +\item[Data] 12 or 13 digits for ISBN-13 seperated appropriately with dashes +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\item[Notes] If just 9 (ISBN-10) or 12 (ISBN-13) digits are entered then the human readable, + ISBN check digit is calculated automatically +\end{description} + +\smallskip +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(3,1in) +\psbarcode{3-86541-114}{includetext guardwhitespace}{isbn} +\end{pspicture} +\end{LTXexample} + +\bigskip\enlargethispage{2ex} +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(3,1in) +\psbarcode{978-3-86541-114}{includetext guardwhitespace}{isbn} +\end{pspicture} +\end{LTXexample} + + +\subsection{Code-39} + +\begin{description} +\item[Characters] \verb+0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*+ %$ +\item[Data] Variable number of characters, digits and any of the symbols \texttt{-.\@ *\$/+\%}. +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includecheck} & Enable check digit\\ + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make check digit visible in text\\ + \end{tabular} +\end{description} + + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(5,1in) +\psbarcode{CODE-39}{includecheck includetext}{code39} +\end{pspicture} +\end{LTXexample} + +\subsection{Code-128 and UCC/EAN-128} + +\begin{description} +\item[Characters] \verb|!"#$%&'\(\)*+,-./0...9:;<=>?@A...Z[\\]^_`a...z|\verb+{|}~+ %$ +\item[Data] Variable number of ASCII characters and special +funtion symbols, starting with the approriate start character +for the initial character set. UCC/EAN-128s must have a manditory +\texttt{FNC 1} symbol immediately following the start character. +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make check digit visible in text\\ + \end{tabular} +\item[Notes] Any non-printable character can be entered via its escaped + ordinal value, for example \texttt{\^{}070} for \texttt{ACK} + and \texttt{\^{}102} for \texttt{FNC 1}. Since a caret symbol + serves as an escape character it must be escaped as \texttt{\^{}062} + if used in the data. The check character is always added automatically. +\end{description} + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(5,1in) +\psbarcode{^104^102Count^0991234^101!}{includetext}{code128} +\end{pspicture} +\end{LTXexample} + +\subsection{Rationalized Codabar} + +\begin{description} +\item[Characters] \verb!0123456789-$:/.+ABCD! %$ +\item[Data] Variable number of digits and any of the symbols \texttt{-\$:/.+ABCD}. +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includecheck} & Enable check digit\\ + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make check digit visible in text\\ + \end{tabular} +\end{description} + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(4,1in) +\psbarcode{0123456789}{includetext}{rationalizedCodabar} +\end{pspicture} +\end{LTXexample} + + +\newpage +\subsection{Interleaved 2 of 5 and ITF-14} + +\begin{description} +\item[Characters] \verb!0123456789! +\item[Data] Variable number of digits. An ITF-14 is 14 characters and + does not have a check digit. +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includecheck} & Enable check digit\\ + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make check digit visible in text\\ + \end{tabular} +\item[Notes] The data may be automatically prefixed with 0 to make the + data, including optional check digit, of even length. +\end{description} + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(5,0.7in) +\psbarcode{05012345678900}{includecheck height=0.7}{interleaved2of5} +\end{pspicture} +\end{LTXexample} + +\subsection{Code 2 of 5} + +\begin{description} +\item[Characters] \verb!0123456789! +\item[Data] Variable number of digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\end{description} + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(5,1.2in) +\psbarcode{0123456789}{includetext textpos=75 textfont=Helvetica textsize=16}{code2of5} +\end{pspicture} +\end{LTXexample} + + +\subsection{Postnet} + +\begin{description} +\item[Characters] \verb!0123456789! +\item[Data] Variable number digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make the check digit visible in the text + \end{tabular} +\item[Notes] Check digit is always added automatically +\end{description} + +\begin{LTXexample}[width=.6\linewidth] +\begin{pspicture}(7,0.3in) +\psbarcode{01234567}{includetext textpos=-10 textfont=Arial textsize=10}{postnet} +\end{pspicture} +\end{LTXexample} + + +\subsection{Royal Mail} + +\begin{description} +\item[Characters] \verb!ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS! +\item[Data] Variable number digits and capital letters +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make the check digit visible in the text + \end{tabular} +\item[Notes] Check digit is always added automatically +\end{description} + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(5,0.5in) +\psbarcode{LE28HS9Z}{includetext}{royalmail} +\end{pspicture} +\end{LTXexample} + +\subsection{Kix (Customer index) -- Dutch Mail} + +\begin{description} +\item[Characters] \verb!ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS! +\item[Data] Variable number digits and capital letters +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ +% \texttt{includecheckintext} & Make the check digit visible in the text + \end{tabular} +\item[Notes] Check digit is always added automatically +\end{description} + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(5,0.3in) +\psbarcode{1203AA12}{includetext}{kix} +\end{pspicture} +\end{LTXexample} + + +\subsection{Australian postal service} + +\begin{description} +\item[Characters] \verb!ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRSabc...xyz! +\item[Data] Variable number digits and letters +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make the check digit visible in the text + \end{tabular} +%\item[Notes] Check digit is always added automatically +\end{description} + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(5,0.3in) +\psbarcode{1139549554}{includetext}{auspost} +\end{pspicture} +\end{LTXexample} + +\subsection{onecode} +United States Postal Service, replaces POSTNET and PLANET symbols. +Each barcode can be 20, 25, 29, or 31 digits long, depending on the type of ZIP code present. Each digit has four possible states, so one digit represents numbers 0-3. +\begin{description} +\item[Characters] \verb!0123456789! +\item[Data] Variable number digits +\iffalse +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\ \hline + \texttt{includetext} & Enable human readable text\\ + \end{tabular} +\fi +\end{description} + +\begin{LTXexample}[pos=t,preset=\centering] +\begin{pspicture}(5,0.3in) +\psbarcode{0123456709498765432101234567891}{includetext}{onecode} +\end{pspicture} +\end{LTXexample} + +\subsection{Symbol} +The purpose of the symbol encoder is to store the definitions of miscellaneous barcode +symbols such as the FIM symbols used by the US Postal Service on their reply mail. + + +\begin{LTXexample}[width=.4\linewidth] +\begin{pspicture}(1cm,1.5cm) +\psbarcode{fima}{}{symbol} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=.4\linewidth] +\begin{pspicture}(1cm,1.5cm) +\psbarcode{fimb}{}{symbol} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=.4\linewidth] +\begin{pspicture}(1cm,1.5cm) +\psbarcode{fimc}{}{symbol} +\end{pspicture} +\end{LTXexample} + +\begin{LTXexample}[width=.4\linewidth] +\begin{pspicture}(1cm,1.5cm) +\psbarcode{fimd}{}{symbol} +\end{pspicture} +\end{LTXexample} + + +\subsection{MSI} + +\begin{description} +\item[Characters] \verb!0123456789! +\item[Data] Variable number digits +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\\hline + \texttt{includecheck} & Enable check digit\\ + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make check digit visible in the text + \end{tabular} +\end{description} + +\begin{LTXexample}[width=.5\linewidth] +\begin{pspicture}(6,1in) +\psbarcode{0123456789}{includecheck includetext}{msi} +\end{pspicture} +\end{LTXexample} + +\subsection{Plessey} + +\begin{description} +\item[Characters] \verb!01234B6789ABCDEF! +\item[Data] Variable number of hexadecimal characters +\item[Options]~\\ + \begin{tabular}{l|l} + Option & Feature\\\hline + \texttt{includetext} & Enable human readable text\\ + \texttt{includecheckintext} & Make the check digits visible in the text + \end{tabular} +\item[Notes] Check digits are always added automatically. +\end{description} + +\begin{LTXexample}[pos=t,preset=\centering] +\begin{pspicture}(0,-2mm)(12,1in) +\psbarcode{0123456789ABCDEF}{includetext}{plessey} +\end{pspicture} +\end{LTXexample} + +\subsection{Reduced Space Symbology (RSS)} +This is a family that includes RSS-14\textregistered, RSS Limited\textregistered, +and RSS Expanded\textregistered{} (\url{http://www.gs1.org/productssolutions/barcodes/technical/rss.html}). RSS-14 and RSS Limited encode Global Trade Item +Numbers (GTINs). RSS Expanded will encode any of the GS1 System identification +numbers as well as all other Application Identifiers. +RSS is used in the healthcare industry. + +\begin{description} +\item[Characters] \verb!0123456789! +\item[Data] Variable number digits +\end{description} + +\subsubsection{rss14} + +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(12,.3in) +\psbarcode{24012345678905}{height=0.3}{rss14} +\end{pspicture} +\end{LTXexample} + +\subsubsection{rsslimited} +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(12,.3in) +\psbarcode{00978186074271}{height=0.3}{rsslimited} +\end{pspicture} +\end{LTXexample} + +\subsubsection{rssexpanded} +\begin{LTXexample}[width=.3\linewidth] +\begin{pspicture}(12,.3in) +\psbarcode{000000010011001010100001000000010000}{height=0.3}{rssexpanded} +\end{pspicture} +\end{LTXexample} + + + +\section{Code Commentary} +This commentary assumes familiarity with the PostScript +language\footnote{The PostScript Language Tutorial and Cookbook +(a.k.a. the Blue Book), which is freely available online, serves +as both a useful tutorial and reference manual to the language.}. + +The code is split cleanly into two types of procedure: + +\begin{description} +\item[The encoders]{Each of these represents a barcode +symbology\footnote{By symbology we mean an accepted standard for +representation of data as a barcode}, +e.g. EAN-13 or Code-128. It takes a string containing the barcode +data and a string containing a list of options that modify the +output of the encoder. It generates +a structured representation of the barcode and its text for the +symbology, including the calculation of check digits where necessary.} +\item[The renderer]{This takes the output of an encoder and +generates a visual representation of the barcode.} +\end{description} + +This means that all barcodes can be generated simply in a similar +manner: + +\begin{lstlisting} +(78858101497) (includetext height=0.6) upca barcode +(0123456789) (includecheck) interleaved2of5 barcode +\end{lstlisting} + + +\subsection{The Barcode Data Structure} +\label{datastructure} +The following table describes the structured representation of a +barcode that is passed by an encoder to the renderer as a +dictionary when the PostScript is executed. + +\begin{center} + +\begin{tabular}{l|c|p{6.5cm}} +Element & Key & Value \\ +\hline +Space bar succession & \texttt{sbs} & +String containing the integer widths, in points, of each bar and +space, starting with the leftmost bar.\\ + +Bar height succession & \texttt{bhs} & +Array containing the height of each bar in inches, starting with +the leftmost bar.\\ + +Bar base succession & \texttt{bbs} & +Array containing the offset of the base of each bar in inches, +starting with the leftmost bar.\\ + +Human readable text & \texttt{txt} & +Array of arrays that contain the character, position, height, +font and scale factor (font size), in points, for each of the visible +text characters. +\end{tabular} + +\end{center} + + +\subsection{An Encoder} + +The procedure labelled code2of5 is a simple example of an encoder, +which we will now consider. Its purpose is to accept as input a string +containing the barcode contents and a string containing a list of options, +and to process these in a way +that is specific to this encoder, and finally to output an +instance of the dictionary-based data structure described in section +\ref{datastructure} that represents the barcode contents in the +Code 2 of 5 symbology. + +As with all of the encoders, the input string is assumed to be valid for +the corresponding symbology, otherwise the behaviour is undefined. + +The variables that we use in this procedure are confined to local +scope by declaring the procedure as follows: + +\begin{lstlisting} +/code2of5 { + + 0 begin + +... + + end + +} bind def +/code2of5 load 0 1 dict put +\end{lstlisting} + +We start by immediately reading the contents strings that are passed as +arguments to this procedure by the user. + +\begin{lstlisting} + /options exch def + /barcode exch def +\end{lstlisting} + +We initialise a few default variables. Those variables corresponding to +options that can be enabled with the options argument are initially +set to false. + +\begin{lstlisting} + /includetext false def + /textfont /Courier def + /textsize 10 def + /textpos -7 def + /height 1 def +\end{lstlisting} + +The options string is tokenised with each successive token defining either a +name value pair which we instantiate or a lone variable that we define as true, +allowing us to override the given default variables given above. + +\begin{lstlisting} +options { + token false eq {exit} if dup length string cvs (=) search + true eq {cvlit exch pop exch def} {cvlit true def} ifelse +} loop +\end{lstlisting} + +Since any user given options create variables that are strings we need to convert +them back to their intended types. + +\begin{lstlisting} +/textfont textfont cvlit def +/textsize textsize cvr def +/textpos textpos cvr def +/height height cvr def +\end{lstlisting} + +We then create an array of string encodings for each of the available +characters which we then declare in another string. This information +can be derived from careful reading of the relevant specification, +although this is often surprisingly difficult to obtain. + +\begin{lstlisting} + /encs + [ (1111313111) (3111111131) (1131111131) (3131111111) + (1111311131) (3111311111) (1131311111) (1111113131) + (3111113111) (1131113111) (313111) (311131) + ] def + + /barchars (0123456789) def +\end{lstlisting} + +We now store the length of the content string and calculate the +total number of bars and spaces in the resulting barcode. +We initialise a string of size dependant on this length into +which we will build the space bar succession. Similarly, we create +an array into which we will add the human readable text information. + +\begin{lstlisting} + /barlen barcode length def + /sbs barlen 10 mul 12 add string def + /txt barlen array def +\end{lstlisting} + +We now begin to populate the space bar succession by adding the +encoding of the start character to the beginning. + +\begin{lstlisting} + sbs 0 encs 10 get putinterval +\end{lstlisting} + +We now enter the main loop which iterates over the content string +from start to finish, looking up the encoding for each character, +adding this to the space bar succession. + +It is important to understand how the encoding for a given character +is derived. Firstly, given a character, we find its position in the +string of all available characters. We then use +this position to index the array of character encodings to obtain +the encoding for the given character, which is added to the space/bar +succession. Likewise, the character is added to the array of human +readable text along with positioning and font information. + +\begin{lstlisting} + 0 1 barlen 1 sub { + /i exch def + barcode i 1 getinterval barchars exch search + pop + length /indx exch def + pop pop + /enc encs indx get def + sbs i 10 mul 6 add enc putinterval + txt i [barcode i 1 getinterval i 14 mul 10 add -7 + textfont textsize] put + } for +\end{lstlisting} + +The encoding for the end character is obtained and added to +the end of the space bar succession. + +\begin{lstlisting} + sbs barlen 10 mul 6 add encs 11 get putinterval +\end{lstlisting} + +Finally we prepare to push a dictionary containing the space bar +succession (and any additional information defined in section +\ref{datastructure}) that will be passed to the renderer. + +\begin{lstlisting} + /retval 1 dict def + retval (sbs) sbs put + retval (bhs) [sbs length 1 add 2 idiv {height} repeat] put + retval (bbs) [sbs length 1 add 2 idiv {0} repeat] put + includetext { + retval (txt) txt put + } if + retval +\end{lstlisting} + + +\subsection{The Renderer} + +The procedure labelled barcode is known as the renderer, which we now +consider. Its purpose is to accept as input an instance of the +dictionary-based data structure described in section +\ref{datastructure} that represents a barcode in some arbitrary +symbology and produce a visual rendering of this at the current +point. + +The variables that we use in this procedure are confined to local +scope by declaring the procedure as follows: + +\begin{lstlisting} +/barcode { + + 0 begin + +... + + end + +} bind def +/barcode load 0 1 dict put +\end{lstlisting} + +We then immediately read the dictionary-based data structure which +is passed as a single argument to this procedure by an encoder, from +which we extract the space bar succession, bar height succession and bar +base succession. + +\begin{lstlisting} + /args exch def + /sbs args (sbs) get def + /bhs args (bhs) get def + /bbs args (bbs) get def +\end{lstlisting} + +We attempt to extract from the dictionary the array containing the +information about human readable text. However, this may not exist +in the dictionary in which case we create a default empty array. + +\begin{lstlisting} + args (txt) known + { + /txt args (txt) get def + } + { + /txt [] def + } ifelse +\end{lstlisting} + +We have extracted or derived all of the necessary information +from the input, and now use the space bar succession, bar height +succession and bar base succession in calculations that create a +single array containing elements that give coordinates for each of +the bars in the barcode. + +We start by creating a bars array that is half the length of the +space bar succession. We build this by repeatedly adding array elements +that contain the height, x-coordinate, y-coordinate and width of +single bars. The height and y-coordinates are read from the bar +height succession and the bar base succession, respectively, whilst +the x-coordinate and the width are made from a calculation of the +total indent, based on the space bar succession and a compensating +factor that accounts for ink spread. + +\begin{lstlisting} + /bars sbs length 1 add 2 idiv array def + /x 0.00 def + 0 1 sbs length 1 sub { + /i exch def + /d sbs i get 48 sub def + i 2 mod 0 eq + { + /h bhs i 2 idiv get 72 mul def + /c d 2 div x add def + /y bbs i 2 idiv get 72 mul def + /w d 0.15 sub def + bars i 2 idiv [h c y w] put + } if + /x x d add def + } for +\end{lstlisting} + +Finally, we perform the actual rendering in two phases. Firstly we +use the contents of the bars array that we just built to render each +of the bars, and secondly we use the contents of the text array +extracted from the input argument to render the +text. We make an efficiency saving here by not performing loading and +rescaling of a font if the scale factor for the font size is 0. The graphics +state is preserved across calls to this procedure to prevent +unexpected interference with the users environment. + +\begin{lstlisting} + gsave + + bars { + {} forall + setlinewidth moveto 0 exch rlineto stroke + } forall + + txt { + {} forall + dup 0 ne {exch findfont exch scalefont setfont} + {pop pop} + ifelse + moveto show + } forall + + grestore +\end{lstlisting} + +\subsection{Notes Regarding Coding Style} + +PostScript programming veterans are encouraged to remember that the +majority of people who read the code are likely to have little, +if any, prior knowledge of the language. + +To encourage development, the code has been written with these +goals in mind: + +\begin{itemize} +\item[-]{That it be easy to use and to comprehend} +\item[-]{That it be easy to modify and enhance} +\end{itemize} + +To this end the following points should be observed for all new +code submissions: + +\begin{itemize} +\item[-]{New encoders should be based on the code of a similar +existing encoder} +\item[-]{Include comments where these clarify the operations +involved, particular where something unexpected happens} +\item[-]{Prefer simplicity to efficency and clarity to +obfuscation, except where this will be a problem} +\end{itemize} + +\subsection{Installing the Barcode Generation Capability into a Printer's Virtual Machine} + +Most genuine PostScript printers allow procedures to be defined such +that they persist across different jobs through the use of the \texttt{exitserver} +command. If your printer supports this then you will be able to print +the main code containing the definitons of all the encoders and the +renderer once, e.g. soon after the device is turned on, and later omit +these definitons from each of the barcode documents that you print. + +To install the barcode generation capabilities into the +virtual machine of a PostScript printer you need to uncomment a line near the +top of the code so that it reads: + +\begin{lstlisting} +serverdict begin 0 exitserver +\end{lstlisting} + +Once this code is printed the procedural definitions for the encoders and +the renderer will remain defined across all jobs until the device is reset +either by power-cycling or with the following code: + +\begin{lstlisting} +serverdict begin 0 exitserver systemdict /quit get exec +\end{lstlisting} + + + +\clearpage +\section{Package code} +\subsection{\texttt{pst-barcode.sty}} + +\lstinputlisting[xleftmargin=-1cm,xrightmargin=-1cm]{pst-barcode.sty} + +\subsection{\texttt{pst-barcode.tex}} +\lstinputlisting[xleftmargin=-1cm,xrightmargin=-1cm]{pst-barcode.tex} + +%\subsection{\texttt{pst-barcode.pro}} +%\lstinputlisting[language={},xleftmargin=-1.5cm,xrightmargin=-1.5cm]{pst-barcode.pro} +\end{document} + |