Pregunta

Estoy impresión de una complicada interfaz de usuario de aplicación swing a una impresora física en un aeropuerto. Tengo Mac y Windows máquinas de impresión de ambos a la misma impresora. Impresión de la Mac se ve muy bien. Impresión desde las ventanas se ve lejos de genial -. Todo es muy pixelada, incluyendo las fuentes y líneas del gráfico

Algunos excavar alrededor revela que los printservices disponibles son diferentes para las distintas plataformas.

DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
PrintServiceLookup.lookupPrintServices(flavor, attrs);

Cuando se ejecuta desde el mac, la anterior devuelve una matriz de un solo elemento. Desde las ventanas, devuelve una matriz vacía. Esto me lleva a creer que las ventanas se está enviando una imagen de 72 DPI a la impresora, en lugar de datos PostScript.

¿Es esta una diferencia en las implementaciones mac y ventanas JVM? ¿Hay alguna solución para obtener una impresión en Windows de trabajo? Me di cuenta de que podía generar mi propia 350dpi imagen rastrillada y enviar eso a la impresora, pero estas cosas van en los cientos de páginas, me gustaría evitar esa ruta si es posible.

¿Fue útil?

Solución

Creo que tengo una respuesta: La propiedad del sistema java.awt.printerjob se establece en sun.awt.windows.WPrinterJob. Al parecer se trata de una subclase PrinterJob útil si te gusta la salida de pixelado en bloques de la impresora. En su lugar, me sale una instancia de sun.print.PSPrinterJob si está disponible, así:

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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top