2014-07-08 10 views
7

मुद्रण के बिना प्रिंट पेज संख्या प्राप्त करें यह कुछ हद तक सवाल के समान है के बारे में Is there a better way to get the page count from a PrintDocument than this?दस्तावेज़

लेकिन मेरे मामले में मैं स्वरूपित एचटीएमएल के साथ एक वेब ब्राउज़र नियंत्रण है। फिलहाल मेरे पास विकल्प है जो ShowPrintPreviewDialog() पर कॉल करता है ताकि उपयोगकर्ता देख सके कि कितने पेज मुद्रित किए जा रहे हैं।

क्या PrintPreview लॉन्च किए बिना मुद्रित होने वाले पृष्ठों की संख्या प्राप्त करने के लिए वैसे भी है?

मैं एक ऐसी विधि बनाने की कोशिश कर रहा हूं जो OnTextChange पर कॉल करे और प्रिंट-पेज गिनती स्वचालित रूप से प्रदर्शित करे?

मैं PrintPage घटना

private void PrintDocumentOnPrintPage(object sender, PrintPageEventArgs e) 
{ 
    e.Graphics.DrawString(this.webBrowser1.DocumentText, this.webBrowser1.Font, Brushes.Black, 10, 25);    
} 
+0

मुझे लगता है कि आपका जवाब [लिंक किए गए प्रश्न के उत्तर] में है [http://stackoverflow.com/a/11456713/1552016): यह एक स्थिर विधि है जिसे आप टेक्स्ट चेंज इवेंट हैंडलर में कॉल कर सकते हैं, और यह कोई भी संवाद प्रदर्शित नहीं करेगा। – qqbenq

+0

@qqbenq: यदि 'StandardPrintController' का उपयोग करें, तो यह ठीक काम करता है लेकिन 'पूर्वावलोकनप्रिंट नियंत्रक' नहीं है, इसलिए उत्तर –

उत्तर

10

बुरी खबर हमेशा इतनी धीमी गति से यात्रा करता है का उपयोग करें। आपको इस विचार को खरोंच करने की आवश्यकता होगी कि यह व्यावहारिक है।

हालांकि प्रश्न में अस्थिर, आपको पहले से ही पता होना चाहिए था कि आपका प्रिंटपेज ईवेंट हैंडलर काम नहीं करता है। यह हमेशा 1 की गिनती पैदा करता है। ऐसा इसलिए है क्योंकि आपने कभी भी e.HasMorePages संपत्ति को सत्य पर सेट नहीं किया है, वह संपत्ति जो एक से अधिक पृष्ठों को उत्पन्न करने का कारण बनती है।

विश्वसनीय उस संपत्ति को सत्य पर सेट करें, आपको यह पता लगाने की आवश्यकता है कि HTML लेआउट इंजन द्वारा HTML को कैसे प्रदान किया जाता है। और उन पृष्ठों में इसे तोड़ने के बारे में बिल्कुल पता लगाएं जो कटौती नहीं करते हैं, कहें, टेक्स्ट की एक पंक्ति या दो में एक छवि। और यह पता लगाएं कि यह सटीक में कैसे है, ब्राउज़र ब्राउज़र यह करता है। एक प्रोग्राम जो कई प्रोग्रामर द्वारा किया गया है, किसी के द्वारा पूरा नहीं किया गया है। ब्राउज़र के स्वचालन ऑब्जेक्ट मॉडल में केवल आवश्यक एपीआई नहीं है।

एकमात्र उचित तरीका वह है जिसे आप पहले ही जानते हैं। ShowPrintPreviewDialog() को कॉल करने के लिए में है। कौन सा आसानी से पूर्वावलोकन संवाद में पृष्ठ संख्या प्रदर्शित करता है IE11 में इस तरह दिखता है:

enter image description here

मामले में आप संवाद बंद उस नंबर ताक-झांक करने पर विचार करेंगे: नहीं, कि या तो काम नहीं कर सकता। संवाद किसी भी नियंत्रण का उपयोग नहीं करता है, यह एक मोनोलिथिक खिड़की है।

+0

में मदद नहीं करता है, जहां मैं वास्तव में 'e.NewPage' सेट करता हूं। मुझे समान संपत्ति नहीं मिल रही है? –

+0

वह एक टाइपो था, सही। कृपया उत्तर के बिंदु को समझने का प्रयास करें, आप इसे सही तरीके से सेट करने का मौका नहीं खड़े हैं। –

संबंधित मुद्दे