Impression à partir de Firefox

22/03/2007 at 12:55 - [FR]

Aujourd'hui, j'ai été confronté à un problème :

Je dois développer pour un client un site web générant des codes barres et lui donner la possibilité de les imprimer facilement (c'est à dire en un clic) avec Firefox via son imprimante à étiquettes répondant au doux nom de « TSC_TTP-245 » .

Pour cela, j'ai généré des images de codes barres avec PHP, et affiché l'image à imprimer dans une nouvelle page vide sans marges. Mais le problème c'est comment imprimer sans devoir faire Fichier > Imprimer , puis redéfinir toutes les options d'impression, et ceci à chaque fois ? De plus, des en-têtes et bas de pages s'incrustaient dans l'impression, ce qui est hors de question.

Après de fastidieuses recherches, voici la solution que j'ai trouvée :

Je définis l'imprimante par défaut :

print.use_global_printsettings -> true
print.print_printer -> TSC TTP-245

On enlève les notes d'en-tête et de bas de page :

print.printer_TSC_TTP-245.print_footercenter ->
print.printer_TSC_TTP-245.print_footerleft ->
print.printer_TSC_TTP-245.print_footerright ->
print.printer_TSC_TTP-245.print_headercenter ->
print.printer_TSC_TTP-245.print_headerleft ->
print.printer_TSC_TTP-245.print_headerright ->

On enlève les marges

print.printer_TSC_TTP-245.print_margin_bottom -> 0
print.printer_TSC_TTP-245.print_margin_left -> 0
print.printer_TSC_TTP-245.print_margin_right -> 0
print.printer_TSC_TTP-245.print_margin_top -> 0

On définit la taille de l'impression (pour moi je voulais imprimer exactement 98 x 33 mm)

print.printer_TSC_TTP-245.print_paper_data -> 0
print.printer_TSC_TTP-245.print_paper_height -> 33,00
print.printer_TSC_TTP-245.print_paper_size -> 0
print.printer_TSC_TTP-245.print_paper_size_type -> 0
print.printer_TSC_TTP-245.print_paper_size_unit -> 0
print.printer_TSC_TTP-245.print_paper_width -> 98,00

Il ne faut pas que l'image se redimensionne toute seule, le site doit y faire attention. On met donc :

print.printer_TSC_TTP-245.print_shrink_to_fit -> false

Sachant que TSC_TTP-245 est définie par défaut, je en veux pas que la boite de dialogue d'impression s'affiche à chaque fois : qu'elle imprime directement sans confirmation ! Pour cela, on ajoute une nouvelle valeur booléenne à la liste :

print.always_print_silent -> true

En enfin, voici la page d'impression :

  1. <html>
  2.     <head>
  3.         <title>Print page</title>
  4.         <style type="text/css">
  5.         body
  6.         {
  7.             padding: 0;
  8.             margin: 0;
  9.         }
  10.         </style>
  11.         <script language="Javascript">
  12.         function print_page()
  13.         {
  14.             window.print();
  15.             self.close();
  16.         }
  17.         </script>
  18.     </head>
  19.     <body onLoad="print_page();">
  20.         <img src="img.php?type=EAN13&amp;code=9782218048690" />
  21.     </body>
  22. </html>

Et voila, ça fonctionne parfaitement ! Dès qu'on appellera la page "print.php" avec target=_blank , celle-ci s'ouvrira dans une nouvelle fenêtre, imprimera le bon code barre et se refermera.

On peut dire que Firefox n'a pas simplifié la tâche en ne documentant absolument pas la chose (surtout la valeur print_paper_size qui m'a fait perdre un temps fou)