Wednesday, January 17, 2007

Printing LNCS format PDFs

(Non-academics: just scratch your head and walk away...)

[UPDATE 4/15/2008] I've created a shell script that simplifies the process described below: it takes an LNCS-formatted PDF or Postscript file and generates a 2-up Postscript using acroread (for PDF inputs) and pstops. Download here. Note: The script will probably have to be tweaked for system-specific pstops settings, as below.

[UPDATE 3/12/2007] The right parameters for this turn out to be a constantly moving target. Here's the command that currently works best for me on Ubuntu Gutsy:

pstops '2:0L@.8(8.5in,-.25in)+1L@.8(8.5in,4.5in)' lncsdoc.ps lncsdoc.2up.ps


So you can make up your own mind whether I'm crazy for giving this any though at all, here's a comparison on a paper I just happen to be reading today.

Standard LNCS format (2 pages):

Those are (approximately) 2 inch margins and a 12+ point font. (The copyright notice eats into the bottom margin a bit at left, but it's not present past page one.)

Using GNOME/Evince standard "Pages per side: 2" print option:

Look at that gutter! The bottom margin is more than 3 inches.

Using acroread -toPostScript and the above pstops command:

Better...

It's totally not worth it, is it?
[/UPDATE]

[Editor's Note] This is old material imported from my now-defunct Wiki

LNCS format papers from SpringerLink have always been a frustration to me. They are an odd digest size (not letter, A4, or A3, AFAIK) with wide margins. Printing them 1-to-1 on letter paper is a waste---the font blows up to almost 14 points with 2 inch margines. Printing them naively 2-to-1 landscape letter makes the font too small and the margins too big (especially down the middle).

I just spent a few minutes hacking up a solution with pstops (part of psutils). Here it is:

acroread -toPostScript -size letter \
lncsdoc.pdf
pstops '2:0L@.7(8in,0)+1L@.7(8in,5in)' \
lncsdoc.ps lncsdoc.2up.ps
ps2pdf lncsdoc.2up.ps lncsdoc.2up.pdf

I've tested this on a few papers and it seems to work.

Caveats: It might generate sub-optimal or even broken Postscript (Acrobat Reader seems less happy with the final PDF than it is with the original, maybe just because there's twice as much PS data on each page). The file lncsDoc.2up.ps doesn't have the right size and orientation parameters in GhostView. The parameters to pstops may be installation-specific.

For the pstops-curious, the second command does the following:

2: - groups the input pages by twos
0L - takes the first page of each pair and rotates it left
@.7 - then scales it down by 0.7
(8in,0) - then moves it 8 inches down (the point of rotation seems to be the lower left corner, meaning without translation, the rotated (logical) page is no longer on the (physical) page)
+1L - takes the second page of each pair and rotates it left
@.7 - then scales it down by 0.7
(8in,5in) - then moves it 8 inches down and 5 inches across (I guess the left/right pages start from the same point!)

Modifications to the scaling factor and translation are all that should be necessary for personal taste/local compatibility.

Alternative One-liner

cat lncsdoc.pdf | \
acroread -toPostScript -size letter | \
pstops '2:0L@.7(8in,0)+1@.7L(8in,5in)' \
> lncsdoc.2up.ps

Caveats: The generated PS file doesn't work with ps2pdf, for some reason. It also didn't print the last page, when I used lpr on it. It looks like somehow the PS file doesn't get properly closed off. Suggestions are welcome.

Alternative Non-Adobe Solution

The following works, but produces awful screen output. I guess pdf2ps doesn't get the right fonts or something. It also has the wrong orientation in both GhostView and Acrobat Reader.

pdf2ps lncsdoc.pdf lncsdoc.ps
pstops \
'2:0L@.85(7.75in,0.5in)+1L@.85(7.75in,5.5in)' \
lncsdoc.ps lncsdoc.2up.ps
ps2pdf lncsdoc.2up.ps lncsdoc.2up.pdf

I'm not sure if pdf2ps is a standard utility or just some random thing I downloaded (from here for example). It boils down to the following:

gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite \
-sOutputFile=lncsdoc.ps -c save pop \
-f lncsdoc.pdf

Where gs is your friendly local GhostScript install.

NOTE: This may be applicable to other Springer formats, but I'm not familiar with them.

Windows XP to A4 paper

pstops '2:0L@.85(9.5in,-.5in)+1L@.85(9.5in,5in)' \
lncsdoc.ps lncsdoc.2up.ps

Or is it better to just scale up with pstops and let psnup do the rest?

pstops \
'2:0@1.3(-22mm,-58mm),1@1.3(-48mm,-58mm)' \
lncsdoc.ps | psnup -2 > lncsdoc.2up.ps

The former file is a little smaller. And they both look bad in GSview.

No comments: