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
pagina 2
Come va questo per stampare a tutti? Non capisco quella parte della domanda. –
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. –
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à. –