2014-12-31 10 views
5

Używam CSSBox do renderowania HTML strony i CSS, a następnie drukowania. Aplikacja musi obsługiwać określone witryny. Chodzi o to, aby niektóre witryny, które nie zostały zaprojektowane do drukowania, faktycznie drukują i wyglądają czytelnie. Odbywa się to poprzez usunięcie menu, nagłówków itp., Które koncentruje zawartość, nadpisując niektóre style.Java - Jak poprawić renderowanie podczas drukowania?

Moje obecne podejście polega na renderowaniu witryny na składnik będący częścią interfejsu CSSBox API o nazwie BrowserCanvas. Dostosowuję szerokość obszaru roboczego dla każdej obsługiwanej witryny, aby zapewnić, że akapity wyglądają dobrze w każdym przypadku. To BrowserCanvas pochodzi z JPanel i ma metody malowania, których używam do renderowania go do obiektu Graphics drukarki.

Problem polega na tym, że płótno drukarki jest zwykle ogromne, wydaje się, że 300 ppp, 600 ppp itd. To, co teraz zrobiłem, to RenderingHints, aby wymusić interpolację Bicubic, aby skalować dokument tak, aby wypełnić całe miejsce w drukowanym strona.

Problem polega na tym, że można zobaczyć, że dokumenty są jak zeskalowane zrzuty ekranu i nie wyglądają zbyt dobrze na wydrukowanej stronie.

Czy istnieje lepsze podejście?

Metoda druku

Dostęp do drukarki jest otrzymywany przez klasę PrinterJob.

Następnie przesłonię metodę drukowania BrowserCanvas, która akceptuje numer strony. Zgodnie z tą liczbą ustawiam skalę i tłumaczenie na obiekcie graficznym, uważając, że jeśli ostatnia linia tekstu nie mieści się w całości na stronie, zostaje przeniesiona na następną stronę. Następnie wywołuję super.print() przekazując jako parametr obiekt graficzny, który ma zastosowane całe skalowanie i tłumaczenie.

Pomyślałem, że skalowanie będzie miękkie, tak jak w przypadku wszystkiego, co dzieje się w wyższej rozdzielczości, takich jak rozmiary czcionek, ale wygląda bardziej jak rysowanie wszystkiego w podstawowej rozdzielczości, a następnie przeskalowanie wyniku do pożądanego.

Przykład zmodyfikowanej stronie (za pomocą witryny dokumentacji CSSBox do testowania):

strona 1 out-0.png


strona 2 out-1.png

+0

Jak się masz to wydrukować w ogóle? Nie rozumiem tej części pytania. –

+0

Tak, przepraszam, zaktualizuję pytanie. Rozszerzam BrowserCanvas, aby zaimplementować Printable, a następnie nadpisuję druk, następnie stosuję wskazówki skalowania i rederingu, a następnie wywołuję BrowserCanvas.print. Wyniki nie są satysfakcjonujące, drukowana strona jest bardzo pikselowana. Platformą testową jest Linux. –

+0

Metoda nadpisywania I to ta, która akceptuje numer strony, po zastosowaniu wskazówek, skalowania i tłumaczenia nazywam metodę druku superklasy, która akceptuje tylko obiekt graficzny, przekazując tę, którą ustawiłem wszystkie te właściwości. –

Odpowiedz

1

wierzę można spróbować renderowania nowy Zamiast tego możesz zastąpić stronę do druku. Gdy nadpisujesz style, możesz dodać zapytania o nowe media lub arkusz stylów drukowania:

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

lub w stary sposób:

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

a następnie można użyć okna dialogowego drukowania z dowolnej przeglądarki systemu operacyjnego

+0

Już zrezygnowałem z tworzenia aplikacji, która automatyzuje proces. Teraz po prostu modyfikuję style strony przed wydrukowaniem. Może mogę napisać rozszerzenie przeglądarki, które zrobi to automatycznie. Jest czytelność, ale oznacza to, że optymalizuje strony pod kątem urządzeń mobilnych, a nie w celu drukowania, czcionki są zbyt duże. Pozwala dostosować rozmiar czcionki, ale nawet najmniejsza jest zbyt duża. –

Powiązane problemy