blob: c97b7dd7d0080c96acf0d5a0b489cbf4ca77364c (
plain)
- #!/bin/sh
- #
- # This script is intended to be used as a CUPS backend, to create
- # PDF file on-the-fly. Just create a printer using the device uri
- # pdf:/path/to/dir/. When printing to this printer, a PDF file
- # will be generated in the directory specified. The file name will
- # be either "<jobname>.pdf" or "unknown.pdf", depending wether the
- # jobname is empty or not.
- #
- # Usage:
- # 1. Copy this script to your backend directory (/usr/lib/cups/backend)
- # and name it "pdf".
- # 2. Create a printer in CUPS and use the URI "pdf:/tmp".
- # 3. Optional: Install either mime-construct or mimeit (part of
- # metamail) to have the PDF files emailed instead of dumped to dir.
- #
- # Copyright (C) Michael Goffioul (goffioul@imec.be) 2001
- LOGFILE=/tmp/pdf.log
- PDFBIN=`which ps2pdf`
- 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 pdf \"Unknown\" \"PDF Writing\""
- 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=
- #I found out that when the user 'nobody' prints, the script tries to mail the PDF
- #to that user - as a local mail. To avoid this, I changed the conditions in the if-statement below.
- if [ "$2" = "" -o "$2" = "nobody" ]; then
- OUTPUTFILENAME="$PDFDIR/unknown-$PRINTTIME.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 ghostscript
- if [ $# -eq 6 ]; then
- $PDFBIN $6 $OUTPUTFILENAME
- #>& /dev/null
- else
- $PDFBIN - $OUTPUTFILENAME >& /dev/null
- fi
- # modify ownership and permissions on the file
- # - world readable
- # - owns to user specified in argument
- chmod a+r $OUTPUTFILENAME
- #An extra argument in this statement proved to be needed to ensure that after entering
- #the previous if-statement (in case user is nobody) this if-statement isn't entered as well..
- if [ "$2" != "" -a $2 != "nobody" ]; then
- if [ -x /usr/bin/mime-construct ]; then
- /usr/bin/mime-construct --to "$2" --subject "PDF print" --type application/pdf --attachment `basename $OUTPUTFILENAME` --file $OUTPUTFILENAME \
- && rm $OUTPUTFILENAME
- elif [ -x /usr/bin/mimeit ]; then
- cat $OUTPUTFILENAME | /usr/bin/mimeit application/pdf $2 "PDF print" \
- && rm $OUTPUTFILENAME
- else
- chown $2 $OUTPUTFILENAME
- fi
- fi
- exit 0
|