Mailinglist Archive: opensuse (3337 mails)

< Previous Next >
Re: [SLE] print to PDF pseudo printer
From: <kevin.kempter@xxxxxxxxxxxxxxxxx>
Hi List;

I want to be able to print to a pdf file. If I go to Kmenu --> Utilities -->
Printing --> Printing Manager

then I see "print to file (PDF)" listed but this printer does not show up in
any application as a printer selection. Can someone tell me how to setup this
pseudo printer so my applications see it...

Thanks

/Kevin

You can just do it manually. Here is the script I copied from mdk and migrated it to my suse box:

The basic process is:

(1) to copy the print-pdf script (included below) to the SuSE box. That is the:

[david@bonza scripts]$ ll /usr/share/samba/scripts/
total 12
-rwxr-xr-x 1 root root 3555 Apr 4 09:03 print-pdf*

(note file permissions)

The actual script is:
******************************
#!/bin/bash
# samba-print-pdf
# This is a script which allows you to set up a virtual printer on samba
# which will take the file (generated by a postscript filter on windows)
# and turn it into a PDF, informing the user of where it is when it
# is done
#
# (c) Buchan Milne <bgmilne@xxxxxxxxx> 2002
# License: GPLv2
# Changelog
# v0.0.6 20030428
# - Allow options passed as env. variables from print command
# - Inline and simplify sed (use tr) clean script
# - Ensure file arrives in PREFIX even if TEMP is used without provided
name
# - Changes from Joshua M. Schmidlkofer <joshua@xxxxxxxxxxx> 20030425
# - Debugging, adjustments, and corrections.
# - Stupid sed sanitizing script. [probably horribly inefficient also].
# - Temp file usage cleanup.
# v0.0.5 20020723
# - Add support for preset settings
# - Allow passing of filename provided by client as final filename
#
# Arguments:
# $1 = file (usually passed with %s from samba)
# $2 = unix prefix to where to place the file (~%u should work)
# $3 = windows prefix to the same location (//%L/%u should work)
# $4 = user/computer to send a notification to (%u or %m)
# $5 = IP address of client (%I)
# $6 = Name of destination file without extension (%J)
# $7 = PDF setting (prepress,print,screen etc)
#
# If you want to customise any of the following configuration defaults,
# you can place them in the file /etc/samba/print-pdf.conf.
# If you need to modify anything in this script, please provide me with your
# changes, preferably in such a way that the changes are configurable.

PS2PDF=ps2pdf13
OPTIONS="-dAutoFilterColorImages=false -sColorImageFilter=FlateEncode"
#Values taken from arguments:
INPUT=$1
PREFIX="$2"
WINBASE=$(echo "$3"|sed -e 's,/,\\\\,g')
#NAME=`echo "$6"|sed -e 's/[&/:{}\\\[<>$#@*^!?=|]/-/g;s/\]/-/g'`
NAME=`echo "$6"|tr '[:punct:]' '[-*]'`

# Source config file if it exists:
CONFFILE=/etc/samba/print-pdf.conf
[ -e $CONFFILE ] && . $CONFFILE

#Values not taken as arguments, could be set via env. vars (?) or config
file
KEEP_PS=${KEEP_PS=0}
PERMS=${PERMS=640}
BASEFILE=${BASEFILE=pdf-service}
TEMP="${TEMP=$2}"
UMASK=${UMASK=006}

#Make sure that destination directory exists
mkdir -p "$PREFIX"

INFILE=$(basename $INPUT)

umask $UMASK

[ -n "$NAME" ] && TEMP="$PREFIX"

#make a temp file to use for the output of the PDF
OUTPUT=`mktemp -q $TEMP/$BASEFILE-XXXXXX`
if [ $? -ne 0 ]; then
echo "$0: Can't create temp file $TEMP/$OUTPUT, exiting..."
exit 1
fi
if [ -n "$NAME" ]; then
FINALOUTPUT="$PREFIX/$NAME"
else
FINALOUTPUT="$OUTPUT"
fi
if [ -n "$7" ]; then
OPTIONS="$OPTIONS -dPDFSETTINGS=/${7#pdf-}"
else
OPTIONS="$OPTIONS -dPDFSETTINGS=/default"
fi

WIN_OUTPUT="$WINBASE\\"`basename "$FINALOUTPUT"`
#mv "$INPUT" "$INPUT.ps";INPUT="$INPUT.ps"

# create the pdf
$PS2PDF $OPTIONS "$INPUT" "$OUTPUT.pdf" >/dev/null 2>&1
mv -f "${OUTPUT}.pdf" "${FINALOUTPUT}".pdf

# Generate a message to send to the user, and deal with the original file:
MESSAGE=$(echo "Your PDF file has been created as $WIN_OUTPUT.pdf\n")

# Cleanup
if [ $KEEP_PS != 0 ];then
mv -f $INPUT "${FINALOUTPUT}".ps
MESSAGE=$(echo "$MESSAGE and your postscript file as $WIN_OUTPUT.ps")
# Fix permissions on the generated files
chmod $PERMS "${FINALOUTPUT}".ps "${FINALOUTPUT}".pdf
else
rm -f $INPUT
# Fix permissions on the generated files
chmod $PERMS "${FINALOUTPUT}".pdf
fi

#Remove empty file from mktemp:
rm -f $OUTPUT

# Send notification to user
echo -e $MESSAGE|smbclient -M $4 -I $5 -U "PDF Generator" >/dev/null 2>&1

******************************

literally .... copy and paste it into ... /usr/share/samba/scripts/print-pdf
on whatever box you are using

The permissions are:

[david@bonza scripts]$ ls -al /usr/share/samba/scripts/
total 20
drwxr-xr-x 2 root root 4096 Jul 16 10:24 ./
drwxr-xr-x 3 root root 4096 Apr 4 09:03 ../
-rwxr-xr-x 1 root root 3555 Apr 4 09:03 print-pdf*
-rwxr-x--- 1 root adm 5757 Apr 4 09:03 smb-migrate*

(2) Confirm you have ps2pdf13 installed or edit the script to work with what
you do have. You will at least have one of the following if you have
ghostscript installed:

skyline:/home/david # ls /usr/bin/ps2*
/usr/bin/ps2ascii /usr/bin/ps2frag /usr/bin/ps2pdf12 /usr/bin/ps2pdf14
/usr/bin/ps2pk
/usr/bin/ps2epsi /usr/bin/ps2pdf /usr/bin/ps2pdf13 /usr/bin/ps2pdfwr
/usr/bin/ps2ps

(3) Then, just edit /etc/samba/smb.conf and add the following share:

[pdf-gen]
path = /var/tmp
guest ok = No
printable = Yes
comment = PDF Generator (only valid users)
printing = bsd
printcap name = cups
#print command = /usr/share/samba/scripts/print-pdf file path win_path
recipient IP &
print command = /usr/share/samba/scripts/print-pdf "%s" "%H" "//%L/%u"
"%m" "%I" "%J" &
lpq command = /bin/true

(4) Then (run testparm -- always; and (5) restart Samba):

On SuSE (as root): rcsmb restart
On mdk (as root): /etc/rc.d/init.d/smb restart

(6) Then from M$ clients, browse to the pdf-gen share and double-click it or
control panel - printers - add printer - network and select it. Choose OK to
'manually select' the driver. Choose one of the latest HP Laserjet
postscript (PS) drivers; (eg. Laserjet 8150 color PS, or Laserjet 6P/6.. PS,
or Laserjet 5, etc..

That's it, that's all it takes! Open Word, (choose your most used app),
select pdf-gen as your printer and BINGO your pdf is created in the users
home directory -- no questions asked. You can also change where it puts the file by changing the path above.

--
David C. Rankin, J.D., P.E.
RANKIN LAW FIRM, PLLC
510 Ochiltree Street
Nacogdoches, Texas 75961
(936) 715-9333
(936) 715-9339 fax
www.rankinlawfirm.com
--


< Previous Next >
References