2010-06-29 11 views
8

यह सबसे अच्छा है जिसके साथ मैं आया हूं:इस पृष्ठ से प्रिंट डॉक्यूमेंट से पृष्ठ गिनने का कोई बेहतर तरीका है?

public static int GetPageCount(PrintDocument printDocument) 
{ 
    printDocument.PrinterSettings.PrintFileName = Path.GetTempFileName(); 
    printDocument.PrinterSettings.PrintToFile = true; 

    int count = 0; 

    printDocument.PrintController = new StandardPrintController(); 
    printDocument.PrintPage += (sender, e) => count++; 

    printDocument.Print(); 

    File.Delete(printDocument.PrinterSettings.PrintFileName); 

    return count; 
} 

क्या ऐसा करने का कोई बेहतर तरीका है? (यह वास्तव में काफी धीमी है)

+0

। आपको उस फ़ाइल के उस पृष्ठ की मात्रा जाननी होगी, जिसे आप लाइन की मात्रा और मार्जिन के उपयोग के माध्यम से प्रिंट करना चाहते हैं और प्रति पृष्ठ जितनी लाइन चाहते हैं, आदि – Wildhorn

उत्तर

5

तो अंतिम समाधान होगा:

public static int GetPageCount(PrintDocument printDocument) 
{ 
    int count = 0; 
    printDocument.PrintController = new PreviewPrintController(); 
    printDocument.PrintPage += (sender, e) => count++; 
    printDocument.Print(); 
    return count; 
} 
PrintDocument के साथ ही नहीं
+1

मैं प्रिंटकंट्रोलर का बैक अप लेने और पुनर्स्थापित करने का सुझाव दूंगा नकली प्रिंट करने के बाद यह कैसा था। इसके बिना, जब मैं असली प्रिंट करना चाहता था तो मेरा प्रिंट नहीं होगा। तो यह गिनती मूल्य वापस करने से पहले "प्रिंटकंट्रोलर पीसीबीकअप = प्रिंट डॉक्यूमेंट.प्रिंट कंट्रोलर" और "printDocument.PrintController = पीसी बैकअप" होगा। – joshhendo

+0

आप 'printDocument' कैसे बनाते हैं? –

0

चेक - http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.querypagesettings.aspx

एक PrintDocument.QueryPageSettings घटना है कि नियंत्रित किया जा सकता है नहीं है। यदि संभाला जाता है, तो इसे प्रत्येक PrintDocument.PrintPage ईवेंट से पहले कहा जाता है। तो आप पृष्ठों की गिनती करने के लिए वहां एक काउंटर डाल सकते हैं। इस तरह आप दो पास से बच सकते हैं (पृष्ठ को गिनने के लिए फ़ाइल को दस्तावेज़ में प्रिंट करने के लिए एक पास और वास्तविक नौकरी प्रिंटिंग के लिए दूसरा पास)।

उपरोक्त यूआरएल में काउंटर के लिए कुछ उदाहरण कोड भी है।

आशा इस मदद करता है

1

एक Printing.PreviewPrintController रूप PrintController घोषित।

इस तरह, आप केवल एक फ़ाइल के लिए स्मृति को प्रिंट कर रहे हैं।

मैं इसे एक वीबी.नेट परियोजना में उपयोग करता हूं, और यह पूरी तरह से काम करता है!

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