#!/bin/sh ################################################################################ # Script: printpdf2pcl # Fonction: Convert PDF to PCL # # Auteur: Marc-Henri PAMISEUX # Libricks.org # Version: 1.0 # Date: 17/06/2005 # # Dépendance: Ghostscript # Acrobat Reader 5 (Version 7 pas testée) # # ToDo: - Ajouter des paramètres avec des options courtes ou longues: # -f --file=pdf_file_to_print.pdf # -p --printer=printername # -o --orientation=[portrait|landscape] # -t --pcltype=[PCL5|PCL6] # - Ajouter d'autres type de conversion que le PCL # - Ajouter une sortie autre que vers une imprimante # - Ajouter une detection automatique d'acrobat reader et de sa version # - Ajouter une detection automatique de Ghostscript # ################################################################################ #............................................................................... # On vient définir les variables du programme #............................................................................... unset ACROREAD export ACROREAD=/opt/acrobat5/bin/acroread unset GS export GS=/usr/bin/gs #............................................................................... # On vient tester si Acrobat Reader est installé et s'il est executable #............................................................................... if [ ! -x ${ACROREAD} ] then echo "Acrobat Reader 5 is not installed in ${ACROREAD} !" 2>&1 exit 1 fi #............................................................................... # On vient tester si Ghostscript est installé et s'il est executable #............................................................................... if [ ! -x ${GS} ] then echo "Ghostscript is not installed in ${GS} !" 2>&1 exit 1 fi #............................................................................... # Compte le nombre de paramètres (Seuls deux sont obligatoires) #............................................................................... if [ $# -lt 2 ] then echo "Usage: `basename $0` pdf_file_to_print.pdf printername [portrait|landscape] [PCL5|PCL6]" 1>&2 exit 1 else unset pdffile unset tmpfile unset pclfile unset printername unset format unset type #............................................................................... # Initialisation des paramètres: # Premier paramètre=Nom_du_fichier.pdf # Second paramètre=Nom de l'imprimante # Troisième paramètre=libellé du format de page # Quatrième paramètre=Type de language utilisé PCL5 ou PCL6 #............................................................................... pdffile=$1 printername=$2 # On fixe le format par défaut à portrait if [ ! -z "$3" ] then format=$3 else format=portrait fi # On fixe le type par défaut à PCL5 if [ ! -z "$4" ] then type=$4 else type=PCL5 fi # On vient générer le nom du fichier postscript issu de la conversion PDF tmpfile=`dirname "$1"`/`basename "$1" \.pdf`.ps pclfile=/tmp/`basename "$1" \.pdf`.pcl fi #............................................................................... # On teste l'existence du fichier à imprimer #............................................................................... if [ ! -s ${pdffile} ] then echo "File ${pdffile} does not exist or empty." 1>&2 exit 1 fi #............................................................................... # On teste l'existence de l'imprimante #............................................................................... unset valret lpstat -v ${printername} 1>/dev/null 2>&1 valret=$? if [ ${valret} -ne 0 ] then echo "Printer $2 does not exist or empty." 1>&2 exit 1 fi # On teste si le fichier postscript n'existe pas déjà if [ -f ${tmpfile} ] then rm -f ${tmpfile} fi if [ -f ${pclfile} ] then rm -f ${pclfile} fi #............................................................................... # On vient réaliser la conversion du PDF en PS par le biais d'acrobat reader. # Il n'y a pas d'option de sortie du fichier. Acrobat Reader génère un fichier du même # nom que le fichier PDF mais sous l'extension .ps et dans le même dossier #............................................................................... if [ "${format}" = "landscape" ] then ${ACROREAD} -toPostScript -${format} -size a4 ${pdffile} 1>/dev/null 2>&1 else ${ACROREAD} -toPostScript -size a4 ${pdffile} 1>/dev/null 2>&1 fi #............................................................................... # On vient vérifier que la conversion PDF->PS a bien eu lieu #............................................................................... if [ ! -s ${tmpfile} ] then echo "An error occurs while converting ${pdffile}." 1>&2 exit 1 fi # On vient convertir le fichier Postscript en fichier PCL case ${type} in "PCL5") ${GS} -q -sDEVICE=ljet4 -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -dSAFER -sOutputFile="${pclfile}" -f "${tmpfile}" 1>/dev/null 2>&1 ;; "PCL6") ${GS} -q -sDEVICE=pxlmono -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -dSAFER -sOutputFile="${pclfile}" -f "${tmpfile}" 1>/dev/null 2>&1 ;; *) ${GS} -q -sDEVICE=ljet4 -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -dSAFER -sOutputFile="${pclfile}" -f "${tmpfile}" 1>/dev/null 2>&1 ;; esac export Flag=0 export Compteur=1 #............................................................................... # On vient vérifier que le fichier PCL a bien été généré #............................................................................... if [ -s ${pclfile} ] then while [ ${Flag} -eq 0 ] do lp -d${printername} ${pclfile} 1>/dev/null 2>&1 export ValRet=$? if [ ${ValRet} -ne 0 ] then export Compteur=`expr ${Compteur} + 1` sleep 1 else export Compteur=4 fi if [ ${Compteur} -eq 4 ] then if [ ${ValRet} -ne 0 ] then echo -e "`date '+%Y-%m-%d %H:%M:%S'` Impression incorrecte apres ${Compteur} essais.\nCode retour de lp -d ${printername}: ${ValRet}" 2>&1 fi export Flag=1 fi done rm -f ${pclfile} rm -f ${tmpfile} else echo "Le fichier ${pclfile} n'est pas présent. Pas d'impression" 2>&1 rm -f ${tmpfile} exit 1 fi exit 0