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
+1, soru güzel :-) – kleopatra
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
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