2013-05-01 13 views
7

Su alcune stampanti, per qualsiasi motivo, le stampe vengono automaticamente ingrandite con quelle che sembrano impostazioni predefinite durante la stampa tramite Java JVM (Java 7). Questo sembra essere con le stampanti precedenti, ed è piuttosto raro, ma sta succedendo con più di un modello di stampante. Anche l'aggiornamento dei driver non risolve il problema.Stampa Java - Stampa ingrandita su un numero ridotto di stampanti

Il software utilizza la libreria JFreeReport (motore classico) e quando si utilizza la libreria per esportare come PDF, tutto è perfetto. Anche l'anteprima di stampa che usa la libreria è perfetta. Tuttavia, quando si tratta di stampare, e questo è solo con un numero molto piccolo di stampanti, le stampe sono ingrandite. Non sono ingranditi, ma i caratteri sono molto più grandi e distanziati in modo non corretto in modo che si sovrappongano l'uno sull'altro.

Queste stesse stampanti con JDK 6 sembrano funzionare correttamente. Sembra, sto ancora cercando di isolare il problema. Il mio pensiero è che forse queste stampanti non supportano correttamente Java 7

Aggiornamento: Ho trovato this thread which seems to indicate that there are some issues with JDK 7u21. Non ho visto nulla nelle note di rilascio per affrontare questo. Inoltre, ecco another example of the a similar bug report.

Update2: Per chiunque fosse interessato, ho scritto un post sul blog chiamato Printing is Broken on Mac OS X with Java 7 su questo problema che contiene maggiori dettagli e ciò che ho scoperto.

+0

Per ora sto creando un file temporaneo e poi chiama "lp tempFile.pdf" ma questo non è l'ideale perché presuppone che la stampante predefinita sia quella corretta. Ci deve essere una soluzione. Non riesco a credere che Oracle e Apple abbiano lasciato questo grave bug da mesi. Questo è qualcosa di critico per molte applicazioni !!! –

risposta

0

Apparentemente non c'è soluzione. Il problema è che gli attributi dei font impostati dalla JVM vengono ignorati da Mac OS come reported in this bug report e this bug report.

L'unica soluzione è quella di creare un file temporaneo e quindi stamparlo utilizzando:

try 
{ 
    Process process = Runtime.getRuntime().exec(new String[]{"lp", tempFileFullPath}); 
    process.waitFor(); 
} catch (Exception e) { 
    // error handling 
} 

Naturalmente questo può essere sparato in un thread o tramite SwingUtils a seconda se si dispone di un'applicazione GUI, ma è l'unico modo possibile in questo momento.

2

Questo è un known bug purtroppo. Mentre ci sono alcune soluzioni alternative (la risoluzione di stampa simmetrica menzionata nei collegamenti, la conversione in un'immagine bufferizzata e la stampa) non sono ancora a conoscenza di alcuna correzione.