[cups.general] Printing to a file...

Daniel Hawker Daniel.Hawker at animal.co.uk
Thu Jan 20 04:56:08 PST 2005


> 
> Get that script (link as from the CUPS web site)
> 
>              ftp://ftp.kde.org/pub/kde/printing/pdfdistiller
> 
> and edit accordingly (modify the Ghostscript command line 
> including the respective options for GhostPCL.
> 
> Helge


Helge,

I have downloaded the above distiller backend script (previously tried
using it before I digressed around a bit) and all *seems* fine. However
I still don't get a pdf file at the end.

I have upped the Log level to debug to try and see what is going on.

It *seems* that the file is sent to cups as PCL as expected. CUPS then
analyses it, sets it up and passes it to the backend. Unfortunately it
doesn't get any further. If I look in the CUPS Print Queue (via the
web-browser) it just says its *pending*. If I look in /var/spool/cups
there is an appropriate spool file in there. I can then send it directly
to pcl2pdf from the command-line and sure enough a pdf is output.
Looking at  error_log... It just stops the job with *printer state is 3*
???

Any ideas???  The salient points of the error_log and also the backend
script are below
The backend script is *exactly* the same as the one from kde downloads
page, but with pcl2pdf used instead of ps2pdf. As GhostPCL uses the same
syntax as GhostScript, I presume this will work fine.

TIA

Dan

----error_log----

D [19/Jan/2005:17:53:41 +0000] StartJob(5787, 0x80cc798)
D [19/Jan/2005:17:53:41 +0000] StartJob() id = 5787, file = 0/1
D [19/Jan/2005:17:53:41 +0000] StartJob: Sending job to queue tagged as
raw...
D [19/Jan/2005:17:53:41 +0000] job-sheets=none,none
D [19/Jan/2005:17:53:41 +0000] banner_page = 0
D [19/Jan/2005:17:53:41 +0000] StartJob: argv =
"PCLPDFWRITER","5787","dh1","fileVbkVan","1","","/var/spool/cups/d05787-
001"
D [19/Jan/2005:17:53:41 +0000] StartJob: envp =
"PATH=/usr/lib/cups/filter:/bin:/usr/bin","SOFTWARE=CUPS/1.1","USER=root
","CHARSET=iso-8859-1","LANG=en_GB","","PPD=/etc/cups/ppd/PCLPDFWRITER.p
pd","CUPS_SERVERROOT=/etc/cups","RIP_MAX_CACHE=8m","TMPDIR=/var/spool/cu
ps/tmp","CONTENT_TYPE=application/vnd.cups-raw","DEVICE_URI=pclpdf://tmp
/pdf_out/","PRINTER=PCLPDFWRITER","CUPS_DATADIR=/usr/share/cups","CUPS_F
ONTPATH=/usr/share/cups/fonts","","",""
D [19/Jan/2005:17:53:41 +0000] StartJob: statusfds = 4, 6
D [19/Jan/2005:17:53:41 +0000] StartJob: filterfds[1] = 8, -1
D [19/Jan/2005:17:53:41 +0000] StartJob: backend =
"/usr/lib/cups/backend/pclpdf"
D [19/Jan/2005:17:53:41 +0000] StartJob: filterfds[0] = -1, 9
D [19/Jan/2005:17:53:41 +0000]
start_process("/usr/lib/cups/backend/pclpdf", 0xbfff8bf0, 0xbfff80a0, 8,
9, 6)
I [19/Jan/2005:17:53:41 +0000] Started backend
/usr/lib/cups/backend/pclpdf (PID 30067) for job 5787.
E [19/Jan/2005:17:53:41 +0000] PID 30067 stopped with status 1!
D [19/Jan/2005:17:53:41 +0000] UpdateJob: job 5787, file 0 is complete.
D [19/Jan/2005:17:53:41 +0000] StopJob: id = 5787, force = 0
D [19/Jan/2005:17:53:41 +0000] StopJob: printer state is 3

----end of error_log----

----pclpdf backend script----
LOGFILE=/tmp/pdf.log
PDFBIN=`which pcl2pdf`
FILENAME=
# this is borrowed from printpdf script for the filename
PRINTTIME=`date +%b%d-%H%M%S`

echo "Executable: $PDFBIN" > $LOGFILE
echo "Arguments: |$1|$2|$3|$4|$5|$6|" >> $LOGFILE
echo $# $PRINTTIME >> $LOGFILE

# case of no argument, prints available URIs
if [ $# -eq 0 ]; then
        if [ ! -x "$PDFBIN" ]; then
                exit 0
        fi
        echo "direct pclpdf \"Unknown\" \"PDF Writing via PCL\""
        exit 0
fi

# case of wrong number of arguments
if [ $# -ne 5 -a $# -ne 6 ]; then
        echo "Usage: pdf job-id user title copies options [file]"
        exit 1
fi

# get PDF directory from device URI, and check write status
PDFDIR=${DEVICE_URI#pdf:}
if [ ! -d "$PDFDIR" -o ! -w "$PDFDIR" ]; then
        echo "ERROR: directory $PDFDIR not writable"
        exit 1
fi

echo "PDF directory: $PDFDIR" >> $LOGFILE

# generate output filename
OUTPUTFILENAME=
if [ "$3" = "" ]; then
        OUTPUTFILENAME="$PDFDIR/unknown.pdf"
else
        # OUTPUTFILENAME="$PDFDIR/${3//[^[:alnum:]]/_}.pdf"
        # I changed this to user name, and the printtime to track down
who
        # printed the PDF and when, samba printing just uses nobody

        OUTPUTFILENAME="$PDFDIR/$2-$PRINTTIME.pdf"
        echo "PDF file: $OUTPUTFILENAME placed in: $PDFDIR" >> $LOGFILE
fi

echo "Output file name: $OUTPUTFILENAME" >> $LOGFILE

# run GhostPCL
if [ $# -eq 6 ]; then
        $PDFBIN $6 "$OUTPUTFILENAME"
#>& /dev/null
else
        $PDFBIN $6 "$OUTPUTFILENAME" >& /dev/null
fi

# modify ownership and permissions on the file
#  - world readable
#  - owns to user specified in argument
chmod a+r "$OUTPUTFILENAME"
if [ "$2" != "" ]; then
        chown $2 "$OUTPUTFILENAME"
fi

exit 0

----end of pclpdf backend script----





More information about the cups mailing list