2014-12-31 17 views
5

Web sayfası HTML ve CSS oluşturmak için CSSBox kullanıyorum ve sonra yazdırın. Uygulama belirli sitelerle ilgilenmelidir. Buradaki fikir, yazdırılabilir olacak şekilde tasarlanmamış bazı sitelerin aslında yazdırılması ve okunabilir görünmesidir. Bu, bazı stilleri geçersiz kılan, içeriği ortalayan menüleri, başlıkları vb. Kaldırarak yapılır.Java - Yazdırırken oluşturma nasıl iyileştirilir?

Geçerli yaklaşımım, siteyi BrowserCanvas adlı CSSBox API'sinin bir parçası olan bir bileşene dönüştürmektir. Her bir durumda paragrafların iyi görünmesini sağlamak için desteklenen her site için tuval genişliğini ayarlıyorum. Bu BrowserCanvas, JPanel'den çıkıyor ve onu, onu Printer Graphics nesnesine dönüştürmek için kullandığım boya yöntemlerine sahip.

Sorun, yazıcı tuvalinin genellikle büyük olması, 300 ppp, 600 ppp, vs. düşünmesidir. Şimdi yaptığım şey, Bicubic enterpolasyonu yazdırılan tüm alanı doldurmak için belgeyi ölçeklendirmek üzere zorlamak için bir RenderingHints ayarıdır. sayfa.

Sorun, belgelerin yukarı ölçeklenmiş bir ekran görüntüsü olduğunu ve yazdırılan sayfada çok iyi görünmediğini görebilmenizdir.

Daha iyi bir yaklaşım var mı?

Baskı Yöntemi

yazıcıya erişim PrinterJob sınıfı tarafından elde edilir.

Sonra bir sayfa numarası kabul eden BrowserCanvas yazdırma yöntemini geçersiz kılıyorum. Bu sayıya göre, grafik nesnesinde ölçek ve çeviri yaptım, metnin son satırı tamamen sayfaya sığmazsa, bir sonraki sayfaya taşınır. Sonra super.print() parametresini, tüm ölçekleme ve çevirme uygulanan grafik nesnesini parametre olarak çağırıyorum.

Ölçeklendirmenin yumuşak olacağını düşündüm, her şey daha yüksek çözünürlükte, yazı tipi boyutları gibi gerçekleşiyor, ancak her şeyi temel çözünürlükte çizmek ve ardından sonucu istenen bir boyuta yükseltmek gibi görünüyor. değiştirilmiş sayfanın

Örnek (test için CSSBox dokümantasyon sitesini kullanarak):

sayfa 1 out-0.png


sayfa 2 out-1.png

+0

Nasıl bu tüm yazdırmak alıyorsanız OS herhangi bir tarayıcıdan yazdırma iletişim kutusu kullanabilir? Sorunun o kısmını anlamadım. –

+0

Evet, üzgünüm, soruyu güncelleyeceğim. BrowserCanvas'ı yazdırılabilir, daha sonra baskı yapan bir baskı uygulamak, sonra da bazı ölçeklendirme ve ipuçlarını uygulamak ve BrowserCanvas.print'i çağırmak için genişletiyorum. Sonuçlar hiç tatmin edici değil, basılı sayfa çok pikselli. Test platformu Linux. –

+0

Üzerinde çalıştığım yazdırma yöntemi, ipuçlarını, ölçeklemeyi ve çevirmeyi uyguladıktan sonra, sayfa numarasını kabul eden numaradır. Yalnızca bir grafik nesnesini kabul eden süper sınıf yazdırma yöntemini arıyorum, tüm bu özellikleri yerleştirdiğim birini iletiyorum. –

cevap

1

Sana yeni render deneyebilirsiniz inanmak yazdırılabilir web sayfası yerine. Stilleri geçersiz kılıyorsunuzdur belki yeni medya sorguları veya bu gibi bir yazdırma stil sayfası ekleyebilirsin:

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

Veya, eski şekilde:

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

ve sonra

+0

Zaten süreci otomatikleştiren bir uygulama oluşturmayı bıraktım. Şimdi yazdırmadan önce sayfa stillerini değiştirdim. Belki otomatik olarak yapan bir tarayıcı uzantısı yazabilirim. Okunabilirlik var, ancak yazdırmak için değil, yazı tipi için sayfalar çok büyük olduğu için optimize etmek anlamına gelir. Yazı tipi boyutunu ayarlamanıza olanak tanır, ancak en küçüğü bile çok büyüktür. –

İlgili konular