2014-12-31 11 views
5

Sto usando CSSBox per rendere una pagina Web HTML e CSS e quindi stamparla. L'applicazione deve trattare con siti specifici. L'idea è di rendere alcuni siti che non sono progettati per essere stampabili effettivamente stampati e leggibili. Questo viene fatto rimuovendo i menu, le intestazioni, ecc. Centrando il contenuto, ignorando alcuni stili.Java - Come migliorare il rendering durante la stampa?

Il mio attuale approccio è quello di rendere il sito a un componente che fa parte dell'API CSSBox chiamato BrowserCanvas. Regolo la larghezza della tela per ogni sito supportato per garantire che i paragrafi siano belli in ogni caso. Questo BrowserCanvas discende da JPanel e ha i metodi di pittura che utilizzo per renderlo all'oggetto Graphics della stampante.

Il problema è che la tela di stampa è di solito enorme, pensate 300 ppp, 600 ppp, ecc Quello che ho finito adesso, si trova a RenderingHints per forzare l'interpolazione bicubica per scalare il documento fino a riempire tutto lo spazio nella stampa pagina.

Il problema è che si può vedere che i documenti sono come uno screenshot up-up, e non sembra molto buono nella pagina stampata.

C'è un approccio migliore?

Metodo di stampa

L'accesso alla stampante è ottenuto dalla classe PrinterJob.

Quindi ho eseguito l'override del metodo di stampa BrowserCanvas che accetta un numero di pagina. In base a questo numero, ho impostato la scala e la traduzione sull'oggetto grafico, facendo attenzione che se l'ultima riga di testo non può essere adattata completamente nella pagina, viene spostata nella pagina successiva. Quindi chiamo super.print() passando come parametro l'oggetto grafico che ha applicato tutto il ridimensionamento e la traduzione.

Ho pensato che il ridimensionamento sarebbe stato morbido, come se tutto accadesse a una risoluzione più alta, come le dimensioni dei caratteri, ma sembra più come disegnare tutto in una risoluzione di base, quindi scalare il risultato in quello desiderato.

Esempio di una pagina modificata (utilizzando il sito di documentazione CSSBox per il test):

Pagina 1 out-0.png


pagina 2 out-1.png

+0

Come va questo per stampare a tutti? Non capisco quella parte della domanda. –

+0

Sì, mi dispiace, aggiornerò la domanda. Sto estendendo BrowserCanvas per implementare Printable, quindi sovrascrivere la stampa, quindi applicare alcuni suggerimenti di ridimensionamento e ridimensionamento, quindi chiamare BrowserCanvas.print. I risultati non sono affatto soddisfacenti, la pagina stampata è molto pixelata. La piattaforma di test è Linux. –

+0

Il metodo di stampa che sovrascrivo è quello che accetta il numero di pagina, dopo aver applicato i suggerimenti, il ridimensionamento e la traduzione chiamo metodo di stampa super-classe che accetta solo un oggetto grafico, passando quello che ho impostato tutte quelle proprietà. –

risposta

1

Credo che si potrebbe provare il rendering di una nuova invece la pagina web stampabile. Visto che stai sovrascrivendo gli stili, potresti aggiungere nuove query multimediali o un foglio di stile di stampa come questo:

@media print { 
/* All your print styles go here */ 
#header, #footer, #nav { display: none !important; } 
} 

Oppure, alla vecchia maniera:

<link href="/print.css" rel="stylesheet" media="print" type="text/css" /> 

e quindi è possibile utilizzare la finestra di dialogo di stampa da qualsiasi browser del sistema operativo

+0

Ho già rinunciato a creare un'app che automatizza il processo. Ora ho solo modificare gli stili della pagina prima di stampare. Forse posso scrivere un'estensione del browser che lo fa automaticamente. C'è la leggibilità, ma è importante ottimizzare le pagine per i dispositivi mobili non per la stampa, i caratteri sono troppo grandi. Ti consente di regolare le dimensioni del carattere, ma anche il più piccolo è troppo grande. –

Problemi correlati