2015-11-29 5 views
6

मेरे पास C# .net प्रोग्राम है जो विभिन्न दस्तावेज़ बनाता है। इन दस्तावेजों को विभिन्न स्थानों और अलग-अलग, स्पष्ट रूप से परिभाषित नामों से संग्रहीत किया जाना चाहिए।प्रोग्रामेटिक रूप से माइक्रोसॉफ्ट में फ़ाइल नाम और पथ सेट करें पीडीएफ प्रिंटर

ऐसा करने के लिए, मैं System.Drawing.Printing.PrintDocument कक्षा का उपयोग करता हूं। मैं इस कथन से प्रिंटर के रूप में Microsoft Print to PDF का चयन करें:

PrintDocument.PrinterSettings.PrinterName = "Microsoft Print to PDF";

ऐसा करने पर मैं अपने दस्तावेज़ को pdf file में प्रिंट करने में सक्षम हूं। उपयोगकर्ता को एक फ़ाइल चयन संवाद मिलता है। उसके बाद वह इस संवाद बॉक्स में पीडीएफ फ़ाइल का नाम और इसे स्टोर करने के लिए कहां निर्दिष्ट कर सकता है।

चूंकि फाइलों की मात्रा बड़ी है और यह हमेशा सही पथ और नाम खोजने के लिए परेशान और त्रुटि-प्रवण है, मैं इस संवाद बॉक्स में प्रोग्रामेटिक रूप से सही पथ और फ़ाइल नाम सेट करना चाहता हूं।

मैं पहले से ही इन विशेषताओं का परीक्षण किया है:

PrintDocument.PrinterSettings.PrintFileName PrintDocument.DocumentName

मदद नहीं की इन विशेषताओं के लिए आवश्यक पथ और फ़ाइल नाम लिख रहा है। क्या कोई जानता है, सी # में Microsoft Print to PDF प्रिंटर के लिए पथ और फ़ाइल नाम के लिए डिफ़ॉल्ट मान कैसे सेट करें?

नोट: मेरा पर्यावरण: Windows 10, दृश्य स्टूडियो 2010, .नेट फ्रेमवर्क अगर PrintToFile संपत्ति true करने के लिए सेट नहीं है 4.5

उत्तर

0

यह PrintFilename की तरह लगता है नजरअंदाज कर दिया है। यदि PrintToFiletrue पर सेट किया गया है और एक वैध फ़ाइल नाम (पूर्ण पथ) प्रदान किया गया है, तो दायरियल जहां उपयोगकर्ता फ़ाइल नाम का चयन करता है, प्रदर्शित नहीं किया जाएगा।

युक्ति: प्रिंटरसेटिंग के प्रिंटरनाम को सेट करते समय आप यह प्रिंटर वास्तव में मौजूद है यह जांचने के लिए IsValid संपत्ति देख सकते हैं। printersettings अधिक जानकारी के लिए और स्थापित प्रिंटर check this post

0

खोजने मैंने किया था कुछ अपने आप प्रयोग लेकिन जैसे अपने आप को भी DocumentName या PrinterSettings.PrintFileName साथ PrintDialog में SaveAs संवाद पूर्व-भरण में सक्षम नहीं था पहले से ही PrintDocument उदाहरण में भर दिया। यह counterintuitive लगता है, तो शायद मुझे कुछ

यदि आप चाहते हैं, तो आप प्रिंटडिअलॉग को बाईपास कर सकते हैं और बिना किसी उपयोगकर्ता इंटरैक्शन के स्वचालित रूप से प्रिंट कर सकते हैं। यदि आप ऐसा करना चुनते हैं, तो आपको पहले यह सुनिश्चित करना होगा कि जिस निर्देशिका में आप दस्तावेज़ को जोड़ना चाहते हैं वह अस्तित्व में है और दस्तावेज़ को जोड़ा जाना अस्तित्व में नहीं है।

string existingPathName = @"C:\Users\UserName\Documents"; 
string notExistingFileName = @"C:\Users\UserName\Documents\TestPrinting1.pdf"; 

if (Directory.Exists(existingPathName) && !File.Exists(notExistingFileName)) 
{ 
    PrintDocument pdoc = new PrintDocument(); 
    pdoc.PrinterSettings.PrinterName = "Microsoft Print to PDF"; 
    pdoc.PrinterSettings.PrintFileName = notExistingFileName; 
    pdoc.PrinterSettings.PrintToFile = true; 
    pdoc.PrintPage += pdoc_PrintPage; 
    pdoc.Print(); 
} 
1

के रूप में अन्य उत्तर में बताया गया है, तो आप PrinterSettings.PrintToFile = true मजबूर कर सकते हैं, और PrinterSettings.PrintFileName निर्धारित करते हैं, लेकिन उसके बाद अपने उपयोगकर्ता पॉपअप के रूप में सहेज नहीं मिलता है। मेरा समाधान आगे बढ़ना है और सहेजें के रूप में स्वयं को दिखाएं, मेरे "सुझाए गए" फ़ाइल नाम [मेरे मामले में, एक टेक्स्ट फ़ाइल (.txt) जिसे मैं .pdf में बदलता हूं] के साथ पॉप्युलेट कर रहा हूं, फिर परिणाम के लिए PrintFileName सेट करें।

DialogResult userResp = printDialog.ShowDialog(); 
if (userResp == DialogResult.OK) 
{ 
    if (printDialog.PrinterSettings.PrinterName == "Microsoft Print to PDF") 
    { // force a reasonable filename 
     string basename = Path.GetFileNameWithoutExtension(myFileName); 
     string directory = Path.GetDirectoryName(myFileName); 
     prtDoc.PrinterSettings.PrintToFile = true; 
     // confirm the user wants to use that name 
     SaveFileDialog pdfSaveDialog = new SaveFileDialog(); 
     pdfSaveDialog.InitialDirectory = directory; 
     pdfSaveDialog.FileName = basename + ".pdf"; 
     pdfSaveDialog.Filter = "PDF File|*.pdf"; 
     userResp = pdfSaveDialog.ShowDialog(); 
     if (userResp != DialogResult.Cancel) 
      prtDoc.PrinterSettings.PrintFileName = pdfSaveDialog.FileName; 
    } 

    if (userResp != DialogResult.Cancel) // in case they canceled the save as dialog 
    { 
     prtDoc.Print(); 
    } 
} 
संबंधित मुद्दे