Imprimer un fichier Texte (.txt) en Java [Résolu]

critters 14 Messages postés samedi 14 février 2004Date d'inscription 2 novembre 2005 Dernière intervention - 31 mai 2004 à 14:21 - Dernière réponse : critters 14 Messages postés samedi 14 février 2004Date d'inscription 2 novembre 2005 Dernière intervention
- 2 juin 2004 à 10:12
Bonjour tout le monde!
j'ai une "petite" Question concernant les impressions en Java: Comment fait-on? :question)

j'ai fait mes recherches un peu partout
et après plusieurs semaines, j'ai reussi à obtenir a peu près ca!
Je l'ai modifié pour qu'il n'imprime plus des images mais un fichier texte...
et voila le résultat

le problème est qu'apparemment (et à mon avis) j'ai mal configuré factories %-6
StreamPrintServiceFactory[] factories =                             StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor,DocFlavor.CHAR_ARRAY.TEXT_PLAIN.getMimeType()); 


Si l'un d'entre vous avait une réponse cela m'arrangerait.
J'ai bien essayé de la définir ainsi,
StreamPrintServiceFactory[] factories =                             StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor,null); 

afin qu'il accepte tous les types mais même ainsi la taille de factories est toujours de 0 et donc, je ne peux toujours rien faire...
Un petit coup de main serait vraiment apprécié! :big)
Merci à vous

Voici mon Code (j'ai essayé de le commenter un max) :

import java.io.*;
import javax.print.*;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;

public class BasicStream {
        public static void main (String [] args) {
                try{
                        //Ouvre le fichier
                        InputStream is = new BufferedInputStream (new FileInputStream("c:\\impression.txt"));
                        //Prépare la sortie à recevoir le postcript
                        OutputStream fos = new BufferedOutputStream(new FileOutputStream("impression.ps"));

                        //trouve une factory qui peut faire la conversion
                        DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_US_ASCII  ;
                          StreamPrintServiceFactory[] factories =
                              StreamPrintServiceFactory.lookupStreamPrintServiceFactories(
                                  flavor,DocFlavor.CHAR_ARRAY.TEXT_PLAIN.getMimeType()); 
System.out.println("Avant le If");

                          if (factories.length > 0) {
System.out.println("Dans le If");
                              StreamPrintService service = factories[0].getPrintService(fos);

// crée le Print Job
                              DocPrintJob job = service.createPrintJob();
                              Doc doc = new SimpleDoc(is, flavor, null);

// Determine quand le travail est fini
                              PrintJobWatcher pjDone = new PrintJobWatcher(job);

                              // imprime le travail
                              job.print(doc, null);

                              // Attends que le travail soit fini
                              pjDone.waitForDone();
                              // Prêt pour fermer les fluxs
                          }
System.out.println("Apres le If");

                          is.close();
                          fos.close();
                      } catch (PrintException e) {
                      } catch (IOException e) {
                      }
                  }
              }
              class PrintJobWatcher {
        // Passe à vrai quand les fluxs d'impressions peuvent etre fermés
        boolean done = false;
    
        PrintJobWatcher(DocPrintJob job) {
            // Ajoute un listener au travail d'impression
            job.addPrintJobListener(new PrintJobAdapter() {
                public void printJobCanceled(PrintJobEvent pje) {
                    allDone();
                }
                public void printJobCompleted(PrintJobEvent pje) {
                    allDone();
                }
                public void printJobFailed(PrintJobEvent pje) {
                    allDone();
                }
                public void printJobNoMoreEvents(PrintJobEvent pje) {
                    allDone();
                }
                void allDone() {
                    synchronized (PrintJobWatcher.this) {
                        done = true;
                        PrintJobWatcher.this.notify();
                    }
                }
            });
        }
        public synchronized void waitForDone() {
            try {
                while (!done) {
                    wait();
                }
            } catch (InterruptedException e) {
            }
        }
    }


Critters :clown)
Afficher la suite 

2 réponses

Répondre au sujet
cs_Dobel 333 Messages postés dimanche 25 mai 2003Date d'inscription 23 novembre 2009 Dernière intervention - 2 juin 2004 à 01:16
+3
Utile
Salut

je suis pas trop callé sur ce sujet donc ma réponse sera pit-être pasterrible ...
mais j'ai fait un petit test sur mon PC

StreamPrintServiceFactory[] factories =
          StreamPrintServiceFactory.lookupStreamPrintServiceFactories(null, DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType());

      if (factories.length > 0) {
        System.out.println("Dans le If");
        for (int i=0; i<factories.length; i++) {
          System.out.println(factories[i].getOutputFormat());
          DocFlavor[] docFlavors = factories[i].getSupportedDocFlavors();
          for (int j=0; j<docFlavors.length; j++) {
            System.out.println(" -> "+docFlavors[j].toString()+" > "+docFlavors[j].getMimeType());
          }
        }


pour afficher tous les factories qui sortent du postscript et toutes leurs entrées respectives :
resultat 1 seule factory qui n'accepte pas de txt ;-p:

application/postscript

 -> application/x-java-jvm-local-objectref; class="java.awt.print.Pageable" > application/x-java-jvm-local-objectref

 -> application/x-java-jvm-local-objectref; class="java.awt.print.Printable" > application/x-java-jvm-local-objectref

 -> image/gif; class="[B" > image/gif

 -> image/gif; class="java.io.InputStream" > image/gif

 -> image/gif; class="java.net.URL" > image/gif

 -> image/jpeg; class="[B" > image/jpeg

 -> image/jpeg; class="java.io.InputStream" > image/jpeg

 -> image/jpeg; class="java.net.URL" > image/jpeg

 -> image/png; class="[B" > image/png

 -> image/png; class="java.io.InputStream" > image/png

 -> image/png; class="java.net.URL" > image/png



Il n'y en a donc aucun qui accepte dirrectement du txt brut
...

peut-être une solution :
tu as toujours la possibilité de mettre ton texte dans un png (pas de perte au niveau de la qualité) avant de l'imprimer
(mais c'est un peu bourrin ...)

A+
Dobeliou
[Qui pisse loin, ménage ses chaussures.]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Dobel
critters 14 Messages postés samedi 14 février 2004Date d'inscription 2 novembre 2005 Dernière intervention - 2 juin 2004 à 10:12
+3
Utile
Je te remercie, je me renseigne sur les PNG et je tiendrais au courant
Merci
Critters :clown)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de critters

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.