[Samba] not enough charcters available in %J or confusing blanks?
Thomas Bork
knuffelmail at gmx.de
Thu Jan 30 00:24:07 GMT 2003
Hi,
I try to create PDF files with an modified script from Buchan Milne and
have some problems with the Jobname var %J.
Because it is better for the users to find an file with an similar name
as the original document I'm looking for a way to read out %J, cut some
unnessasary stuff and use the rest as new file name. The problem is:
In %J in some circumstances is not the complete Jobname as some Windows
Applications (example: Ultraedit) send it:
1. (completely failed):
Jobname in Windows:
"C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Neu
Textdatei.txt"
Jobname in %J:
"C:\Dokumente und Einstellungen\"
[2003/01/30 01:05:12, 3] printing/print_generic.c:print_run_command(88)
Running the command `( /pdfcreate.sh smbprn.000175.ChIgbF ~root
\\\\linux\\root tb2 192.168.0.7 "C:\Dokumente und Einstellungen\" ) &'
gave 2
2.(okay):
Jobname in Windows:
"C:\Programme\Neu Textdatei.txt"
Jobname in %J:
"C:\Programme\Neu Textdatei.txt"
[2003/01/30 01:17:01, 3] printing/print_generic.c:print_run_command(88)
Running the command `( /pdfcreate.sh smbprn.000183.SokUlg ~root
\\\\linux\\root tb2 192.168.0.7 "C:\Programme\Neu Textdatei.txt" ) &'
gave 0
3. (failed):
Jobname in Windows:
C:\Programme\Ghostscript\gs7.04\examples\Neu Textdatei.txt
Jobname in %J:
"C:\Programme\Ghostscript\gs7.04"
[2003/01/30 01:19:00, 3] printing/print_generic.c:print_run_command(88)
Running the command `( /pdfcreate.sh smbprn.000187.CH3mll ~root
\\\\linux\\root tb2 192.168.0.7 "C:\Programme\Ghostscript\gs7.04" ) &'
gave 0
4. (failed):
Jobname in Windows:
C:\Neuer Ordner mit Leerzeichen\Neu Textdatei.txt
Jobname in %J:
"C:\Neuer Ordner mit Leerzeichen"
[2003/01/30 01:26:06, 3] printing/print_generic.c:print_run_command(88)
Running the command `( /pdfcreate.sh smbprn.000191.AoaS4Y ~root
\\\\linux\\root tb2 192.168.0.7 "C:\Neuer Ordner mit Leerzeichen" ) &'
gave 0
Is there a way to store th correct Jobname in %J? Only this way it is
possible to filter out the document name for new PDF file. Here is the
script for pdf printing with some debugging stuff:
#!/bin/sh
#----------------------------------------------------------------------
------
# /usr/local/bin/samba-print-pdf - print to a pdf-file
#
# Copyright (c) 2001-2003 Thomas Bork <tom at fli4l.de>
#
# Creation: 23.07.2002 Buchan Milne
# Last Update: 29.01.2003 tb
#
# 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 Job (%J)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#----------------------------------------------------------------------
------
info0=/var/tmp/info0-$$.log
PS2PDF=ps2pdf13
OPTIONS="-dAutoFilterColorImages=false -sColorImageFilter=FlateEncode"
INPUT=$1
echo "Input is $INPUT" >$info0
KEEP_PS=0
PERMS=640
INFILE=$(basename $INPUT)
echo "Infile is $INFILE" >>$info0
BASEFILE=pdf-service
echo "Basefile is $BASEFILE" >>$info0
PREFIX="$2"
echo "Prefix is $PREFIX" >>$info0
ORGNAME="$6"
echo "Orgname is $ORGNAME" >>$info0
NAME="$6"
echo "Name is now $NAME" >>$info0
NAME=`echo $NAME | sed 's#\\\\#/#g' | sed 's/ //g' | sed
's/\.[^\.]*$//'`
echo "name is now $NAME" >>$info0
NAME=`basename "$NAME"`
echo "name is now $NAME" >>$info0
WINBASE=$(echo "$3"|sed -e 's,/,\\\\,g')
if [ "$1" == "status" ]
then
echo "Printer: PDF-generator bogus status"
echo "Queue: no printable jobs in queue"
echo "Server: no server active"
echo "Filter_status: done"
echo "Rank Owner/ID Class Job Files Size Time"
exit 0
fi
OUTPUT="$2/$BASEFILE-$4-$$"
> $OUTPUT
if [ $? -ne 0 ]
then
echo "Can't create temp file $OUTPUT, exiting..." >$info0
else
if [ "$NAME" != "" ]
then
FINALOUTPUT="$PREFIX/$NAME"
else
FINALOUTPUT="$OUTPUT"
fi
WIN_OUTPUT="$WINBASE\\"`basename "$FINALOUTPUT"`
$PS2PDF $OPTIONS $INPUT $OUTPUT.pdf >/dev/null 2>&1
mv -f "$OUTPUT".pdf "$FINALOUTPUT".pdf
(echo "Hi,"
echo "your file with original name"
echo "$ORGNAME"
echo "was converted. You will find it here:"
echo ""
echo "$WIN_OUTPUT.pdf"
) >>$info0
if [ "$KEEP_PS" = "1" ]
then
mv -f $INPUT "${FINALOUTPUT}".ps
(echo ""
echo "Your postscript file is here:"
echo "$WIN_OUTPUT.ps"
) >>$info0
chmod $PERMS "${FINALOUTPUT}".ps
else
rm -f $INPUT
chmod $PERMS "${FINALOUTPUT}".pdf
fi
rm -f $OUTPUT
fi
smbclient -U "eisfair pdf-service" -M "$4" -I "$5" 1> /dev/null <$info0
rm -f $info0
Here is the printer share for the virtuell printer in smb.conf:
[pdf]
comment = pdf-service on %h
use client driver = yes
browseable = yes
printable = yes
path = /tmp
lpq command = /usr/local/bin/samba-print-pdf status
print command = ( /pdfcreate.sh %s ~%u \\\\%L\\%u %m %I "%J" ) &
public = yes
create mode = 0700
der tom
More information about the samba
mailing list