46 votes

Impression "silencieuse" dans une application Web

Je travaille sur une application web qui doit imprime en silence -- c'est à dire sans intervention de l'utilisateur. Quelle est la meilleure façon d'accomplir cette? Il n'aime pas il peut être fait avec strictement avec Javascript, Flash nor et/ou de l'AIR. Le plus proche que j'ai vu, implique une applet Java.

Je peux comprendre pourquoi ce serait une Mauvaise Idée pour juste un site web pour être en mesure de le faire. Ce cas précis est d'une application interne, et il est parfaitement acceptable si l'utilisateur doit ajouter l'URL à une liste de sites de confiance, d'installer un addon, etc.

6voto

Espo Points 24318

Voici deux exemples de code que vous pouvez essayer:

1 :

 <script>
function Print() {
  alert ("THUD.. another tree bites the dust!")
  if (document.layers)
  {
    window.print();
  }
  else if (document.all)
  {
    WebBrowser1.ExecWB(6, 1);
    //use 6, 1 to prompt the print dialog or 6, 6 to omit it
    //some websites also indicate that 6,2 should be used to omit the box
    WebBrowser1.outerHTML = "";
  }
}
</script>
<object ID="WebBrowser1" WIDTH="0" HEIGHT="0"
CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">
</object>
 

2 :

 if (navigator.appName == "Microsoft Internet Explorer")
{ 
  var PrintCommand = '<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>';
  document.body.insertAdjacentHTML('beforeEnd', PrintCommand); 
  PrintCommandObject.ExecWB(6, -1); PrintCommandObject.outerHTML = ""; 
} 
else { 
  window.print();
}
 

Vous devrez peut-être ajouter le site / la page que vous testez dans votre zone intranet locale.

6voto

user1779358 Points 41

Nous avons lutté avec un problème similaire. Nous avions besoin d'imprimer des chèques à un contrôle de l'imprimante, des étiquettes à une imprimante d'étiquettes, et les factures des clients pour une facture de l'imprimante pour la vente au détail embrasse-moi. Nous avons mannequin ordinateurs, les recoins, les ipads, les iphones avec aucun des capacités d'impression. L'impression d'une facture fonction était essentiellement un silencieux d'impression. Un pdf a été écrit pour le serveur, et un script shell est utilisé localement pour les récupérer et de les imprimer.

Nous avons utilisé les méthodes suivantes pour une solution parfaite avec un minimum de bibliothèques:

  1. utilisation TCPDF en PHP pour créer des PDF. Stocker le fichier PDF sur le serveur. Le mettre dans une "File d'attente d'Impression' Dossier. Bravo pour TCPDF, un peu difficile à apprendre, mais MALADE MALADE MALADE. Notez que nous avons l'impression de 80 étiquettes par page à l'aide d'avery 5167 avec un code à barres avec une parfaite précision. Nous avons une des étiquettes, vérifiez, et la facture d'impression de la file d'attente. Les différents dossiers de coeur pour différentes imprimantes.

  2. Utiliser le script shell pour se connecter au serveur via FTP, téléchargez le fichier PDF, supprimer le fichier PDF sur le serveur, envoyer le fichier PDF à l'imprimeur, et de nouveau, supprimer le fichier PDF.

  3. À l'aide d'un ordinateur local connecté à l'imprimante, exécutez le script dans le terminal. bien évidemment modifier vos imprimantes et les chemins d'accès.

  4. Parce que vous voulez toujours de cette course, et parce que vous utilisez un MAC, créer une application à l'aide d'automator. Commencer à automator, placez le script dans un "run script shell" et enregistrez. Puis coller cette application dans un élément d'ouverture de session. Voir le script ci-dessous le script shell si vous voulez voir la "production" de la fenêtre sur le MAC.

BAM - travaux de malades.

Voici le script shell

#!/bin/bash

# Get a remote directory Folder
# List the contents every second
# Copy the files to a local folder
# delete the file from server
# send the file to a printer
# delete the file
# compliments of embrasse-moi.com


clear               # clear terminal window

echo "##########################################"
echo "Embrasse-Moi's Remote Print Queue Script"
echo "##########################################"

#Local Print Queue Directory
COPY_TO_DIRECTORY=/volumes/DATA/test/
echo "Local Directory: $COPY_TO_DIRECTORY"
#Priter
PRINTER='Brother_MFC_7820N'
echo "Printer Name: $PRINTER"

#FTP Info
USER="user"
PASS="pass"
HOST="ftp.yourserver.com"
#remote path
COPY_REMOTE_DIRECTORY_FILES=/path
echo "Remote Print Queue Directory: $HOST$COPY_REMOTE_DIRECTORY_FILES"

echo 'Entering Repeating Loop'
while true;  do

    #make the copy to directory if not exist
    echo "Making Directory If it Does Not Exist"
    mkdir -p $COPY_TO_DIRECTORY
    cd $COPY_TO_DIRECTORY

    ######################### WGET ATTEMPTS ############################################
    #NOTE wget will need to be installed
    echo "NOT Using wget to retrieve remote files..."

    # wget --tries=45 -o log --ftp-user=$USER --ftp-password=$PASS ftp://ftp.yourserver.com$COPY_REMOTE_DIRECTORY_FILES/*.pdf

    ######################### FTP ATTEMPTS ############################################
    echo "NOT Using ftp to retrieve and delete remote files..."
    #This seems to fail at mget, plus not sure how to delete file or loop through files
    ftp -n $HOST <<END_SCRIPT
    quote USER $USER
    quote PASS $PASS
    cd $COPY_REMOTE_DIRECTORY_FILES
    ls
    prompt
    mget *
    mdel *
END_SCRIPT


    echo "Examining Files in $COPY_TO_DIRECTORY"
    for f in $COPY_TO_DIRECTORY/*.pdf
    do
      # take action on each file. $f store current file name      
      #print
      echo "Printing File: $f To: $PRINTER"
      lpr -P $PRINTER $f

      # This will remove the file.....
      echo "Deleting File: $f"
      rm "$f"
    done
    echo "Script Complete... now repeat until killed..."
    sleep 5
done

et le script automator si vous voulez voir le résultat, garder l'application avec le script choisissez une course d'apple option du script:

on run {input, parameters}

    tell application "Finder" to get folder of (path to me) as Unicode text
    set workingDir to POSIX path of result
    tell application "Terminal"
            do script "sh " & "'" & workingDir & "script1.sh" & "'"

    end tell

    return input
end run

2voto

Christopher Mahan Points 4275

J'ai écrit un python tsr qui interrogeait le serveur de temps en temps (il tirait sa fréquence d'interrogation du serveur) et imprimait sur l'imprimante d'étiquettes. C'était relativement sympa.

Une fois écrit en python, j'ai utilisé py2exe dessus, puis aucun compilateur de configuration, puis mis sur intranet et demandé à l'utilisateur de l'installer.

Ce n'était pas génial, mais cela a fonctionné. Les utilisateurs le lanceraient le matin et le programme recevrait le kill switch du serveur la nuit.

1voto

Jef S. Points 11

Je le fais fonctionner toute la journée en utilisant une simple page JSP et la bibliothèque Java PDF Renderer (https://pdf-renderer.dev.java.net). Cela fonctionne car Java imprime à l'aide du système d'exploitation et non du navigateur. Soi-disant, "l'impression silencieuse" est considérée comme une vulnérabilité / exploitation du navigateur et a été corrigée après IE 6, alors bonne chance pour qu'elle fonctionne via Javascript ou Active X. Peut-être que c'est possible mais je ne pourrais pas la faire fonctionner sans Java.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X