Imprimer un fichier Texte (.txt) en Java

Résolu
critters Messages postés 14 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 2 novembre 2005 - 31 mai 2004 à 14:21
critters Messages postés 14 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 2 novembre 2005 - 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)

2 réponses

cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
2 juin 2004 à 01:16
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.]
3
critters Messages postés 14 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 2 novembre 2005
2 juin 2004 à 10:12
Je te remercie, je me renseigne sur les PNG et je tiendrais au courant
Merci
Critters :clown)
3
Rejoignez-nous