Les internautes impriment la page qu'ils consultent en cas de besoin. Pour les applications Java, c'est plus complexe. Il faut passer par des outils dédiés ou par Java2D.
Si les contraintes d'impression ne sont pas trop fortes, il est possible de
générer un document et de passer par le navigateur pour l'imprimer.
CSS permet d'obtenir une excellente présentation, mais il n'est pas encore
possible de gérer les sauts ni les entêtes et pieds de pages.
Le code fonctionne sous Windows et repose sur une DLL qui est donnée sur divers forums comme
permettant d'afficher un document en lançant le navigateur par défaut.
En fait, cette DLL extrèmement puissante lance l'application gérant n'importe quel type
de fichier rattaché à une application Windows. Pour un fichier RTF,
l'application lancera le plus souvent Word.
Sous unix, le code du lancement du navigateur est variable.
Des exemples sont disponibles dans les forums si le navigateur est
Netscape.
Voici le code, qui n'appelle pas beaucoup de commentaires :
import java.io.*; import java.net.*; public class TestNav { public final static String NAV = "rundll32 url.dll,FileProtocolHandler"; public static void main(String[] args) { try { File tmpFile = File.createTempFile("Test", ".html"); String filePath = tmpFile.getCanonicalPath(); FileOutputStream fos = new FileOutputStream(tmpFile); PrintStream doc = new PrintStream(fos); doc.println("<HTML><head><title>Coucou print</title></head>"); doc.println("<body>"); doc.println("<h1>Une petit test d'impression</h1>"); doc.println("Imprimer depuis un programme Java sans trop se fatiguer."); doc.println("<p>Le fichier généré est <code>"+filePath+"</code>."); doc.println("</body></Html>"); doc.flush(); doc.close(); fos.close(); Runtime run = Runtime.getRuntime(); run.exec(NAV + " " + filePath); run.wait(5000); // Time to run navigator before removing file. tmpFile.deleteOnExit(); } catch (Exception e) { e.printStackTrace(); } } }Pour faire simple, vous avez intérêt à tout coder dans une classe qui constitue le document et réalise l'impression. Quelques méthodes assez basiques de génération des principaux tags avec et sans paramètres simplifient l'utilisation. Une petite demi journée suffit à coder un ensemble assez propre.
Pour les cas plus complexes, se pencher sur les classes Swing dédiées à HTML.
Si vous avez déjà essayé avec plus ou moins de succès de lancer proprement des applications comme Excel, Internet Explorer, Paint Shop ou tout autre sous Windows, je vous propose la solution miracle. Depuis la console DOS, essayez
rundll32 url.dll,FileProtocolHandler c:\monfichier.testavec un vrai nom de fichier ou un url.
C'est confondant de simplicité et ça marche dans tous les cas.
Il ne serait pas étonnant que Windows utilise cette dll quand quelque
chose est à lancer.
J'ai essayé de creuser le sujet pour trouver comment lancer l'équivalent de l'option "imprimer" du clic droit, sans succès. Si vous trouvez, je suis preneur.
Avec Java, il y a juste un petit problème si vous utilisez
un protocole file
avec un objet URL
.
La systaxe est de type file:///c:\mondoc.txt
,
et l'objet URL ne gère pas correctement les 3 slash.
J'ai utilisé la notation
rundll32 url.dll,FileProtocolHandler url.getProtocol()+'://'+url.getFile();
Patrick Larreya, Juillet - Octobre 2000