मैंने इस उत्तर के लिए उच्च और निम्न खोजा है और खाली हो गए हैं।एक JTextPane फ़ूटर में पृष्ठों की कुल संख्या कैसे प्रिंट करता है?
मैं एक आवश्यकता एक पाद लेख है कि कहते हैं, "< मीटर > पृष्ठों की <n> पृष्ठ" के साथ एक JTextPane की सामग्री को मुद्रित करने के लिए की है। जावा में यह सरल कार्य करना असंभव प्रतीत होता है।
जब मैं प्रिंट करने योग्य प्राप्त करता हूं, तो मैं पृष्ठ संख्या मुद्रित करने के लिए पाद लेख सेट कर सकता हूं, उदा।
String header = "whatever"; String footer = " Page - {0}"; printText(textPane.getPrintable(new MessageFormat(header), new MessageFormat(footer)));
लेकिन वहाँ पृष्ठों उसके बाद प्रिंटर संवाद बॉक्स भेजा जाता है जब तक प्रिंट किया जाएगा की कुल संख्या को खोजने के लिए कोई रास्ता नहीं प्रतीत होता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि प्रिंटर पर भेजे जाने से पहले पृष्ठों को प्रारूपित करने के लिए उस संवाद का उपयोग किया जाता है। प्रिंटर संवाद बॉक्स हमेशा कहता है कि केवल 1 (एक) पृष्ठ है।
तो, मैंने एक दिनचर्या लिखना शुरू किया जो JTextPane दस्तावेज़ के माध्यम से जाएगा और प्रिंट() विधि में पेजफॉर्मेट से देखने योग्य क्षेत्र प्राप्त करके पृष्ठों को गिनें और फिर प्रत्येक पंक्ति (फोंटनाइज़) की ऊंचाई का उपयोग करके प्रत्येक पृष्ठ में लाइनों की गिनती करें, और बाद में पृष्ठों की संख्या गिनें .eg
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 ... }
हालांकि, PageFormat जब तक सिस्टम विधि प्रिंट() में वापस बुलाता है, और जब तक यह विधि प्रिंट() करने के लिए हो जाता है उपलब्ध नहीं है, यह बाद से पाद लेख को संशोधित करने के लिए असंभव प्रतीत होता है शीर्ष लेख और पाद दोनों के रूप में "अंतिम" विधि कॉल में परिभाषित कर रहे हैं:
public Printable getPrintable(final MessageFormat headerFormat, final MessageFormat footerFormat)
निश्चित रूप से किसी को इस बुनियादी कार्य करने के लिए एक आसान तरीका मिल गया है।
किसी भी मदद के लिए अग्रिम धन्यवाद।
+1, अच्छा प्रश्न :-) – kleopatra
संदेशफॉर्मैट अंतिम नहीं है - क्या आपने संदेशों को प्रारंभ करने के बाद संदेशों को बदलने के लिए संदेशफॉर्मैट.प्लीप्टर पैटर्न की कोशिश की है, लेकिन प्रिंटिंग से पहले ही? साथ ही, पृष्ठ गणना sun.swing.text.TextComponentPrintable.java में की जाती है। वे बहुत जटिल हैं, लेकिन हो सकता है कि आप वास्तविक प्रिंटिंग को बाईपास करने के लिए उप-वर्गीकृत या पुनर्निर्देशित करने के बाद उन्हें दो बार चला सकें, लेकिन पृष्ठ को कुल और प्रिंट करने के लिए दूसरी बार प्राप्त करें। बस कुछ विचार ... – Boann
मैंने अभी तक उनमें से किसी भी कोशिश नहीं की है। इन सुझावों के लिए आपका धन्यवाद।मुझे यकीन नहीं है कि प्रिंट() विधि में संशोधन के लिए हेडर और पाद लेख कैसे प्राप्त करें। अगर मैं वहां पहुंचने से पहले पृष्ठों की संख्या की गणना कर सकता हूं, तो यह प्रिंट() विधि को सरल रखेगा। – Banjo