Thursday 22 October 2009

Ghostscript


Η αποθήκευση ορισμένων σελίδων από αρχεία pdf, ps, eps ώς ξεχωριστά αρχεία καθώς και η συγχώνευση πολλών αρχείων pdf, ps, eps είναι αρκετά εύκολη με το πρόγραμμα ghostscript. Από τη γραμμή εντολών το πρόγραμμα αυτό εκτελείται πληκτρολογόντας gs. 


H αποθήκευση ορισμένων σελίδων ως νέο αρχείο γίνεται με την παρακάτω εντολή:

gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf -dFirstPage=first -dLastPage=last input.pdf

όπου output.pdf είναι το όνομα του καινούριου αρχείου, first είναι ο αριθμός της πρώτης σελίδας που θέλουμε να εξάγουμε, last είναι ο αριθμός της τελευταίας σελίδας που θέλουμε να εξάγουμε, και input.pdf είναι το όνομα του αρχικού αρχείου.


Η συγχώνευση πολλών αρχείων pdf γίνεται με την παρακάτω εντολή:

gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf input1.pdf input2.pdf input3.pdf

όπου output.pdf είναι πάλι το όνομα του νέου αρχείου και input1.pdf, input2.pdf input3.pdf είναι τα ονόματα των αρχείων προς συγχώνευση.


Και ένα script που αυτοματοποιεί κάπως την πληκτρολόγηση δίνεται παρακάτω:


#!/bin/csh -f

# pdfextract - extracts pages from a pdf

# 2009.06.19 - written by DP

set output=0

set com=`basename $0`

set USAGE="usage: $com [-f FirstPage] [-l LastPage] [-o OutputFile] [file]"

set argv=(`getopt f:l:o: $*`)

set errflg=$status

set first=1

set last=0

set pdffile=""

if ($errflg == 0) then

while ("$argv[1]" != "--")

switch ($argv[1])

case -f:

set first=$argv[2]

shift argv

breaksw

case -l:

set last=$argv[2]

shift argv

breaksw

case -o:

set output=1

set OutputFile=$argv[2]

shift argv

breaksw

default:

set errflg=1

breaksw

endsw

shift argv

end

shift argv

endif

if ( $#argv == 0 ) then

set errflg=2

endif

if ($errflg != 0) then

echo "$USAGE"

exit 1

endif

if ($output == 0) then

if ( $last == 0 ) then

set OutputFile="`basename -s .pdf $1`$first-end.pdf"

else

set OutputFile="`basename -s .pdf $1`$first-$last.pdf"

endif

endif

foreach i ( ${argv} )

set pdffile="$pdffile $i"

end

if (-e $OutputFile) then

echo "$OutputFile already exists"

exit 1

endif

if ( $last == 0 ) then

set gsargs=""

else

set gsargs="-dLastPage=$last"

endif

gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$OutputFile -dFirstPage=$first $gsargs $pdffile


ΥΓ. Προσοχή που αλλάζει η γραμμή και που συνεχίζεται.