2014-12-31 5 views
5

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 out-0.png


Seite 2 out-1.png

+0

Wie verwenden Sie das überhaupt drucken zu bekommen? Ich verstehe diesen Teil der Frage nicht. –

+0

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. –

+0

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. –

Antwort

1

Ich glaube, Sie könnten versuchen, eine neue Rendering druckbare Webseite. Da Sie die Stile überschreiben, könnten Sie vielleicht neue Medienabfragen oder ein Druck-Stylesheet wie folgt hinzufügen:

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

Oder In der alten Art und Weise:

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

und dann können Sie den Druckdialog von jedem Browser des OS

+0

Ich habe bereits aufgegeben, eine App zu erstellen, die den Prozess automatisiert. Jetzt ändere ich einfach die Stile der Seite vor dem Drucken. Vielleicht kann ich eine Browser-Erweiterung schreiben, die es automatisch macht. Es gibt Lesbarkeit, aber es ist wichtig, Seiten für das Handy zu optimieren, nicht für den Druck, Schriften sind zu groß. Sie können die Schriftgröße anpassen, aber auch die kleinste ist zu groß. –

Verwandte Themen