2012-02-09 20 views
12

Bu cevap için yüksek ve düşük arama yaptım ve boş çıktım.Bir JTextPane altbilgisinde toplam sayfa sayısı nasıl yazdırılır?

ben "<n> <m> sayfaları Page" yazan bir altlık içeren JTextPane içeriğini yazdırmak için bir gereksinim var. Bu basit işlevi Java'da yapmak imkansız gibi görünüyor.

Altyazıyı, yazdırılabilir aldığımda yazdırmak için sayfa numaralarını yazdırabilirim.

 

    String header = "whatever"; 
    String footer = " Page - {0}"; 
    printText(textPane.getPrintable(new MessageFormat(header), 
     new MessageFormat(footer))); 

Ama yazıcı iletişim kutusu gönderilir sonrasına kadar basılacak toplam sayfa sayısını bulmak için bir yol olduğu görülmektedir. Bunun nedeni, bu iletişim kutusunun sayfaların yazıcıya gönderilmeden önce biçimlendirilmesinde kullanılmasıdır. Yazıcı iletişim kutusu her zaman sadece 1 (bir) sayfa olduğunu söylüyor.

JTextPane belgesinden geçecek ve yazdırılabilir alanı PrintFormat'tan ( ) ve sonra her satırın yüksekliğini (fontsize) kullanarak sayfaları görüntüleyebilecek bir rutini yazmaya başladım. Her sayfada satırları sayın ve daha sonra sayfa sayısını sayın. Sistem baskı() yöntem haline geri çağırır ve zamana göre bu baskı() yöntemine gelene kadar

 

     int maxh = (int) pf.getImageableHeight(); 
     Element section = doc.getDefaultRootElement(); 
     for (int i=0; i<paraCount; i++) 
     { 
     Element e = section.getElement(i); 
     // Get the attributeSet for this paragraph (Element) 
     // The attributeSet contains the Styles, which contain 
     // the fonts etc. 
     AttributeSet attrs = e.getAttributes(); 
     int fontsize = StyleConstants.getFontSize(attrs); 

     // .... add up the lines and count filled pages ... 
     } 

Ancak PageFormat mevcut değil, çünkü altbilgi değiştirmek imkansız gibi görünen üstbilgi ve altbilgi hem yöntem çağrısında "nihai" olarak tanımlanmıştır:

 


     public Printable getPrintable(final MessageFormat headerFormat, 
             final MessageFormat footerFormat) 

Şüphesiz birileri bu temel işlevi yapmak için basit bir yol bulmuş.

Yardım edebilecek kişiler için şimdiden teşekkür ederiz. Sayfalara ayırma ve JEditorPane/JTextPane baskı ilgili makaleleri için aşağıdaki bağlantıları sizin için hile olacaktır eğer

+0

+1, soru güzel :-) – kleopatra

+0

MessageFormat final değil - ilk önce bunları belirledikten sonra ancak yazdırma işleminden hemen önce iletileri değiştirmek için MessageFormat.applyPattern'i denediniz mi? Ayrıca, sayfa hesaplamaları sun.swing.text.TextComponentPrintable.java içinde yapılır. Çok karmaşıklar ama belki de iki kez çalıştırabiliyorsunuz, bir kez alt sınıflara yazılıyor veya gerçek baskıyı atlamak için yeniden yönlendiriliyorsunuz ancak sayfaların toplamı ve ikinci kez yazdırılıyor. Sadece bazı fikirler ... – Boann

+0

Henüz bunlardan hiç birini denemedim. Bahşişler için teşekkür ederim.Print() yönteminde değişiklik için üstbilgiyi ve altbilgiyi nasıl alacağımı bilmiyorum. Bir şekilde oraya gitmeden önce sayfa sayısını hesaplayabilirsem, print() yöntemini basit tutardı. – Banjo

cevap

2
+0

+1 http://java-sl.com/JEditorPanePrinter.html dosyasını kontrol etmek için bir makale daha var. Paginated yazıcıyı kendi altbilgi eklemek için değiştirmek kolaydır. – StanislavL

1

Bunu gerçekleştirmek için "doğrudan" bir yol yok gibi görünüyor.

çıktıda toplam sayfa sayısı baskı zamanından önce bilinmediği için

, gibi bir numaralandırma biçimi belirtmek için bir yolu yoktur "Sayfa 5 1": tutorial on JTextComponent aşağıdaki söylüyor.