2009-05-21 9 views
1

J'imprime une interface utilisateur d'application de swing compliquée à une imprimante physique via un aéroport. J'ai Mac & machines Windows à la fois l'impression à la même imprimante. L'impression depuis le Mac est superbe. L'impression à partir de Windows est loin d'être géniale - tout est très pixelisé, y compris les polices et les lignes de graphique. Certaines recherches révèlent que les PrintServices disponibles sont différents pour les différentes plates-formes. Lorsqu'il est exécuté à partir du mac, ce qui précède renvoie un tableau à un seul élément. De windows, il retourne un tableau vide. Cela me porte à croire que Windows envoie une image de 72 DPI à l'imprimante, au lieu de données postscript.Impression à partir de swing sur Mac et Windows - Où est le support postscript?

Est-ce une différence dans les implémentations de la machine virtuelle Java mac &? Existe-t-il une solution de contournement pour que l'impression sur Windows fonctionne? Je réalise que je pourrais générer ma propre image rastérisée à 350 dpi et l'envoyer à l'imprimante, mais ces choses vont dans les centaines de pages, je voudrais vraiment éviter cette route si possible. Je pense avoir obtenu une réponse: La propriété système java.awt.printerjob a été définie sur sun.awt.windows.WPrinterJob.

+0

Je suis tombé sur cette question et je sais qu'il est ancien et que vous êtes probablement au courant de cela, mais la deuxième ligne de code est inutile, 'lookupPrintServices' permet au second argument d'être' null' dans le cas où vous n'avez pas besoin de définir des attributs. –

Répondre

1

Apparemment, il s'agit d'une sous-classe PrinterJob pratique si vous aimez la sortie pixelisée sur votre imprimante. Au lieu de cela, je reçois une instance de sun.print.PSPrinterJob si elle est disponible, comme ceci:

PrinterJob printerJob = null; 
try { 
    if (System.getProperty("java.awt.printerjob").equals("sun.awt.windows.WPrinterJob")) { 
     // WPrinterJob sends crappy GIF images to the printer, and everything looks all blocky 
     // try to get an instance of a PSPrinterJob instead 
     printerJob = (PrinterJob) Class.forName("sun.print.PSPrinterJob").newInstance(); 
    } 
} catch (Throwable e1) { 
    log.log(Level.SEVERE, "Could not instaniate sun.print.PSPrinterJob", e1); 
} 
if (printerJob == null) { 
     printerJob = PrinterJob.getPrinterJob(); 
} 
+0

FYI, Java 8 sur Mac semble définir cette valeur à 'sun.lwawt.macosx.CPrinterJob' – tresf