April 23, 2011 at 11:33 PM by Dr. Drang
What follows is the repository’s README, which should explain how to use and customize the scripts for your own purposes.
Perl scripts for printing sheet-fed labels. They take simple text as input and generate PostScript or PDF output formatted to print on Avery (or equivalent) sheet-fed labels.
pflabels (“print folder labels”) script prints to Avery 5161 labels. These are 1″×4″ labels that come 20 to a sheet—10 rows by 2 columns. They’re usually called Address Labels, but I use them to label the tabs of file folders and jackets.
ptlabels script (“print tiny labels”) prints to Avery 5167 labels. These are ½″×1¾″ labels that come 80 to a sheet—20 rows by 4 columns. They’re usually called Return Address Labels, but I use them for all kinds of small things.
Using these scripts provides several advantages over using the template files that Avery provides:
- They don’t require Microsoft Word.
- They generally require less typing than templates.
- They can accept input piped from another script, which makes it easy to create sequentially numbered labels.
- They’re smart enough to start a new sheet when needed. The user doesn’t have to think about the layout.
The input consists of plain text, formatted like this:
#Header left|right Centered text More centered text for the next label Even more centered text with the same header #Second header|2nd More text Text with 2nd header
This input, when passed to
pflabels will create labels that look like this:
The input rules are simple:
- Blank lines separate labels.
- Lines that start with a hash (#) are header lines. Header lines are printed in bold with the part before the vertical bar (|) flush left and the part after the bar flush right.
- Nonblank lines with no hash are info lines. Info lines are centered.
- Headers persist for every subsequent label until a new header is given.
The labels don’t have to start in the upper left corner of the sheet. Both
ptlabels take two options:
-r m and
-c n, where m and n give the row and column numbers of the first label to be printed. This allows you to print part of a sheet with one command, and then pick up where you left off the next time.
If the input specifies more labels than can fit on a single sheet, the scripts will continue at the top left corner of a new sheet.
In each script is a section that looks like this:
# Pipe output through groff to printer (manual feed). open OUT, "| groff | lpr -o ManualFeed=True"; # Change to PDF before sending to printer. # open OUT, "| groff | ps2pdf - - | lpr -o ManualFeed=True"; # Preview output instead of printing directly. # open OUT, "| groff | ps2pdf - - | open -f -a /Applications/Preview.app"; # Print raw troff code for debugging. # open OUT, "> labels.rf"; select OUT;
There are four
open lines that allow you to choose the output behavior. Uncomment the one that’s appropriate for your situation.
- The first pipes the PostScript generated by
groffdirectly to the printer. This is best if, like me, you have a PostScript printer.
- The second converts the PostScript to PDF by piping it through
ps2pdfbefore sending it to the printer. This should work for any printer, but I confess I haven’t tested it much.
- The third converts the PostScript to PDF and opens the PDF in Preview. This will be useful if you want to save the PDF or check the output before printing.
- The fourth sends the generated troff code to a file, which is useful for debugging.
ps2pdf utility is part of the Ghostscript distribution. I believe Ghostscript comes with every Linux distribution, but it will have to be installed on a Mac. If you install the MacTeX package, you’ll get
Each script also has a section that defines certain geometric constants. These are
# Set up geometry constants for Avery 5161. $topmargin = 0.55; $poleft = 0.4375; $poright = 4.625; $lheight = 1;
# Set up geometry constants for Avery 5167. $topmargin = 0.55; $pocol = 0.45; $pocol = 2.50; $pocol = 4.55; $pocol = 6.60; $lheight = 0.50;
ptlabels. These dimensions (in inches) work for my printer, but your printer’s manual paper feed may work a little differently. If you find the printing isn’t aligned with the labels, you can adjust these values to get the positioning right.