Installation of the cups-pdf driver and virtual printer
1.1 Install the cups-pdf package:
# emerge cups-pdf
1.2  Launch a Web browser and enter http://localhost:631/ in the Address bar to display the CUPS Printer Manager.
1.3 Click on ‘Administration’ to call up the Administration page, then click ‘Add Printer’. If prompted, enter the username ‘root’ (without the quotes) and the root user’s password.
1.4 Select ‘CUPS-PDF (Virtual PDF Printer)’ in the list of local printers, and click ‘Continue’.
1.5 Enter a name, decription and location for the virtual printer. For example, I entered ‘Virtual_PDF_Printer’, ‘Virtual PDF Printer’ and ‘Mesh Edge DX’ (without the quotes), respectively. Then click ‘Continue’.
1.6 Select ‘Generic’ in the ‘Make:’ box, and click ‘Continue’.
1.7 Select ‘Generic CUPS-PDF Printer (w/ options) (en)’ in the ‘Model:’ box, and click ‘Add Printer’. The virtual printer should now be available for you to use.
1.8  When you come to print from an application, if you select Virtual_PDF_Printer from the list of available printers the PDF file will be saved in the directory /var/spool/cups-pdf/<your username>/. Note that the directory will be created automatically the first time you ‘print’ to PDF.
1.9 Optionally, you could create a shortcut (Desktop Config File) on your Desktop to open the directory mentioned in Step 1.8 above.
1.10 Optionally, instead of Step 1.9 you could edit the file /etc/cups/cups-pdf.conf as root user to get cups-pdf to ‘print’ PDF documents to your Desktop instead of in /var/spool/cups-pdf/<your username>/, by changing the line:
| #Out /var/spool/cups-pdf/${USER} | 
to:
| Out ${HOME}/Desktop | 
 
2.0  How to display a dialog box prompting for the directory and file name of the PDF file
If you prefer to be prompted for a file name so that you can save the PDF file wherever you want and give it any name you want, perform the steps below instead of Steps 1.9 or 1.10 above. Either perform the steps in 2.1 (Zenity) or the steps in 2.2 (KDialog). Then perform the steps in 2.3, which apply in both cases.
2.1 Zenity (GTK+)
2.1.1 Install Zenity:
# emerge zenity
2.1.2 Check it is installed:
# eix -I zenity
[I] gnome-extra/zenity
     Available versions:  3.12.1 {debug libnotify test +webkit}
     Installed versions:  3.12.1(13:49:47 04/12/14)(libnotify webkit -debug -test)
     Homepage:            https://wiki.gnome.org/Projects/Zenity
     Description:         Tool to display dialogs from the commandline and shell scripts
2.1.3   Using a text editor, create the following shell script in your home directory and give it a meaningful name, such as cups-pdf_script.sh:
| #!/bin/bashCURRENT_PDF="${1}"CURRENT_USER="${2}"DISPLAY=:0.0exportDISPLAYXAUTHORITY=/home/${CURRENT_USER}/.XauthorityexportXAUTHORITYPDFNAME=$(zenity --file-selection --save --confirm-overwrite)mv"$CURRENT_PDF""$PDFNAME" | 
2.2 KDialog (KDE/Qt)
2.2.1 Install KDialog:
# emerge kde-base/kdialog
2.2.2 Check it is installed:
# eix -I kde-base/kdialog
[I] kde-base/kdialog
     Available versions:  (4) 4.12.5(4/4.12) (~)4.14.2(4/4.14) (~)4.14.3(4/4.14)
       {aqua debug}
     Installed versions:  4.14.3(4)(00:56:36 04/12/14)(-aqua -debug)
     Homepage:            http://www.kde.org/
     Description:         KDialog can be used to show nice dialog boxes from shell scripts
2.2.3   Using a text editor, create the following shell script in your home directory and give it a meaningful name such as cups-pdf_script.sh:
| #!/bin/bashget_dbus(){if[ -z $1 ]; then    echo"specify user">> $HOME/cups-pdf_script.log    return1fi# Search these processes for the session variable (they are run as the current user and have the DBUS session variable set)compatiblePrograms=( kdeinit kded4 pulseaudio trackerd )# Attempt to get a program pidforindex in${compatiblePrograms[@]}; do   PID=$(ps-ef | grep$1 | grep${index} | head-1 | awk'{print $2}')   if[[ "${PID}"!= ""]]; then      break   fidoneif[[ "${PID}"== ""]]; then   echo"Could not detect active login session">> $HOME/cups-pdf_script.log   return1fiQUERY_ENVIRON="$(tr '\0' '\n' < /proc/${PID}/environ | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"if[[ "${QUERY_ENVIRON}"!= ""]]; then#   echo ${QUERY_ENVIRON} >> $HOME/cups-pdf_script.log   return0else   echo"Could not find dbus session ID in user environment.">> $HOME/cups-pdf_script.log   return1fi}CURRENT_PDF="$1"CURRENT_USER="$2"exportDISPLAY=:0exportXAUTHORITY=/home/${CURRENT_USER}/.XauthorityexportHOME=/home/${CURRENT_USER}/CONFIG_FILE="/home/${CURRENT_USER}/.pdf-writer.conf"CANCELLED="No"date> $HOME/cups-pdf_script.logget_dbus ${CURRENT_USER}if[ $? -eq0 ]; then   exportDBUS_SESSION_BUS_ADDRESS=${QUERY_ENVIRON}   while[ True ]; do      CURDATE=$(/bin/date+%Y%m%d)      CURNAME=$(/bin/cat"$CONFIG_FILE")      BASENAME=$(basename$CURRENT_PDF)      FILENAME=$(/usr/bin/kdialog--getsavefilename "$CURNAME$CURDATE-""*.pdf"--title="Save PDF")      if[ $? -eq1 ]; then         CANCELLED="Yes"         break      fi      echo$FILENAME      if[ ! "$FILENAME"= ""]; then         if[ -e "$FILENAME"]; then            /usr/bin/kdialog--warningcontinuecancel "File already exists"            if[ $? -eq1 ]; then               continue;            fi         fi         FILENAME=$(echo$FILENAME.pdf | sed-re "s/(\.pdf)+$/.pdf/g")         break;      else         /usr/bin/kdialog--error "You must select a file or hit Cancel."      fi      break   done   if[ "${CANCELLED}"== "No"]; then      /bin/cp"${CURRENT_PDF}""${FILENAME}"      okular "${FILENAME}"&   fi   /bin/rm"${CURRENT_PDF}"   echo"No errors encountered.">> $HOME/cups-pdf_script.log   exit0else   /bin/rm"${CURRENT_PDF}"   echo"Errors encountered.">> $HOME/cups-pdf_script.log   exit1fi | 
2.3 Whichever of the above two options (Zenity or KDialog) you chose, do the following:
2.3.1 Make the shell script file executable:
# chmod +x /home/<your username>/cups-pdf_script.sh
2.3.2   Edit the file /etc/cups/cups-pdf.conf, find the line starting with ‘#PostProcessing‘, and change it to:
| PostProcessing /home/<your username>/cups-pdf_script.sh | 
2.3.3 Restart CUPS:
# /etc/init.d/cupsd restart # If your installation uses OpenRC.
# systemctl restart cups.service # If your installation uses systemd.
Now, when you select Virtual_PDF_Printer from your 
applications’ list of available printers and click ‘Print’, a pop-up 
window should appear, allowing you to select the target directory for 
the PDF file and enter a file name of your choice.
 
 
Комментариев нет:
Отправить комментарий