critters
Messages postés14Date d'inscriptionsamedi 14 février 2004StatutMembreDernière intervention 2 novembre 2005
-
31 mai 2004 à 14:21
critters
Messages postés14Date d'inscriptionsamedi 14 février 2004StatutMembreDerniè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
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) {
}
}
}
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 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:
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.]