Ich benutze CSSBox, um eine Webseite HTML und CSS zu rendern und dann zu drucken. Die Anwendung muss sich mit bestimmten Websites befassen. Die Idee besteht darin, einige Websites, die nicht druckbar sind, tatsächlich zu drucken und lesbar zu machen. Dies geschieht durch das Entfernen von Menüs, Überschriften usw., die den Inhalt zentrieren und einige Stile außer Kraft setzen.Java - Wie kann das Rendering beim Drucken verbessert werden?
Mein aktueller Ansatz ist es, die Website zu einer Komponente zu machen, den Teil der CSSBox API genannt BrowserCanvas ist. Ich passe die Breite der Zeichenfläche für jede unterstützte Site an, um sicherzustellen, dass Absätze in jedem Fall gut aussehen. Dieser BrowserCanvas stammt von JPanel ab und verfügt über die Malmethoden, die ich verwende, um es auf dem Grafikobjekt des Druckers darzustellen.
Das Problem ist, dass der Drucker Canvas ist in der Regel riesig, denke 300 PPP, 600 PPP, etc. Was ich jetzt getan werde, ist ein RenderingHints, um Bicubic Interpolation zu zwingen, das Dokument bis zu füllen den gesamten Platz in der gedruckten Seite.
Das Problem ist, dass Sie sehen können, dass die Dokumente wie ein hochskaliert Screenshot ist, und sieht nicht sehr gut in der gedruckten Seite.
Gibt es einen besseren Ansatz?
Druckmethode
Zugriff auf Drucker durch die Printer Klasse erhalten wird.
Dann überschreiben ich die BrowserCanvas Druckmethode, die eine Seitennummer akzeptiert. Entsprechend dieser Nummer setze ich Skalierung und Übersetzung auf das Grafikobjekt und sorge dafür, dass wenn die letzte Textzeile nicht vollständig in die Seite passt, sie auf die nächste Seite verschoben wird. Dann rufe ich super.print() auf und übergibt als Parameter das Grafikobjekt, auf das die Skalierung und die Übersetzung angewendet werden.
Ich dachte, die Skalierung wäre weich, wie alles in einer höheren Auflösung, wie Schriftgrößen passieren, aber es sieht eher so aus, alles in einer Basisauflösung zu zeichnen und dann das Ergebnis auf das gewünschte zu skalieren.
Beispiel einer modifizierten Seite (mit der CSSBox Dokumentations-Website zur Prüfung):
Seite 1
Seite 2
Wie verwenden Sie das überhaupt drucken zu bekommen? Ich verstehe diesen Teil der Frage nicht. –
Ja, tut mir leid, ich werde die Frage aktualisieren. Ich erweitere BrowserCanvas, um Printable zu implementieren, überschreibe dann den Druck, wende dann einige Skalierungs- und Redering-Tipps an und rufe dann BrowserCanvas.print an. Die Ergebnisse sind überhaupt nicht befriedigend, gedruckte Seite ist sehr pixelig. Testplattform ist Linux. –
Die Druckmethode, die ich überschreibe, ist diejenige, die die Seitennummer akzeptiert, nach dem Anwenden von Hinweisen, Skalierung und Übersetzung rufe ich eine Superklasse-Druckmethode auf, die nur ein Grafikobjekt akzeptiert und dasjenige übergibt, das ich all diese Eigenschaften eingestellt habe. –