मैं एकाधिक प्रिंटर जो नीचे की तरह एक "घुमाएँ 180 डिग्री" चेकबॉक्स शामिल है:नियंत्रण या उपयोग कस्टम प्रिंटर सेटिंग्स (घुमाएँ 180 डिग्री)
यहाँ एक और एक है ("नी" "नहीं" का मतलब है):
वहाँ एक रास्ता प्रोग्राम के रूप में यह मान सेट करने के लिए है, और PrintTicket
बदलते हैं? यदि नहीं, तो मैं इसका वर्तमान मूल्य कैसे प्राप्त कर सकता हूं? मेरे सॉफ़्टवेयर के लिए मुझे यह जानने की ज़रूरत है कि यह सेट है या नहीं और यदि यह सेट है, तो यदि संभव हो तो इसे बदलने की जरूरत है। मेरे सॉफ़्टवेयर के लिए यह सबसे अच्छा होगा यदि मुझे प्रिंटडिअलॉग खोलना नहीं है, यह सॉफ़्टवेयर का एक टुकड़ा है जहां उपयोगकर्ता बिना किसी बटन पर क्लिक किए सीधे प्रिंट कर सकते हैं, इसलिए इसे प्रोग्रामेटिक रूप से सेट करना या प्राप्त करना जो मैं ढूंढ रहा हूं।
मैं ManagementObjectSearcher
और सामान्य PrintDocument.DefaultPageSettings
संपत्ति का उपयोग करके चारों ओर खोज रहा हूं लेकिन कुछ भी नहीं मिला!
यदि यह विकल्प सेट नहीं है, तो मैं स्वचालित रूप से उपयोगकर्ताओं के लिए इसे अस्थायी रूप से सेट करना चाहता हूं (अन्यथा यह मेरे विशेष प्रिंटर के साथ उल्टा प्रिंट करता है)। मैं उपयोगकर्ताओं के लिए इसे सेट करने की कोशिश कर रहा हूं लेकिन मैं यह समझ नहीं सकता कि इसे कैसे काम पर लाया जाए। मैं DEVMODE
संरचना को देख रहा हूं और इसे कार्यान्वित करने का प्रयास किया है, लेकिन इसमें "180 डिग्री विकल्प घुमाएं" या कुछ भी समान नहीं है।
नोट: मैं लैंडस्केप मोड सेट करने की कोशिश नहीं कर रहा हूं। यह बहुत आसान है और कुछ अलग है। pdialog.PrintQueue.CurrentJobSettings.CurrentPrintTicket.PageOrientation = PageOrientation.ReversePortrait;
हालांकि, यह केवल पेज अभिविन्यास और नहीं सामग्री (सामग्री के रूप में अच्छी तरह से घुमाया जा करने की जरूरत है) उलट:
मैं निम्न कार्य करने की कोशिश की।
यदि मैं उस दृश्य को घुमाता हूं जिसे मैं प्रिंट कर रहा हूं, तो मार्जिन अभी और सही नहीं हैं ताकि यह काम न करे! उम्मीद है कि कोई मदद कर सकता है।
अग्रिम धन्यवाद।
संपादित
मैं हंस 'विधि का इस्तेमाल किया यह पता लगाने की जो मान बदलने के लिए। ध्यान दें कि उसकी विधि किसी भी प्रकार के प्रिंटर के लिए लागू होगी! devmode
PrintDialog
के मान को बदलता है। मुझे हल करने में घंटों और घंटे लग गए ताकि जो भी मैं मदद कर सकूं, यहां मेरा कोड है और मुझे साझा करने या मदद करने में खुशी है! सबसे पहले मैं DefaultPrintTicket
को new PrintServer()
से बदलने की कोशिश कर रहा था जो काम नहीं करता था, लेकिन UserPrintTicket
सही प्रतीत होता था जहां आप वास्तव में विंडोज Control Panel if you don't switch back to the original one. *However*, this only seemed to work on just my pc (which was necessary), on a virtual machine for example the
जादू मूल्य में मूल्य परिवर्तन पहले ही अलग दिख सकते थे। यह वास्तविक जीवन के उपयोग की तुलना में अभ्यास था।
var pdialog = new PrintDialog();
pdialog.PrintQueue = new PrintQueue(new LocalPrintServer(), _printername, PrintSystemDesiredAccess.AdministratePrinter); // this will be your printer. any of these: new PrintServer().GetPrintQueues()
pdialog.PrintTicket.PageMediaSize = size;
pdialog.PrintTicket.CopyCount = _amount;
if (CheckPrinterDriverName(_printername))
{
int magic = 361;
var defaulttckt = pdialog.PrintQueue.UserPrintTicket;
pdialog.PrintQueue.UserPrintTicket = PrinterModifier.ChangeDevMode(pdialog, magic, vis);
pdialog.PrintQueue.Commit();
pdialog.PrintVisual(vis, "Label");
//Set back old settings so it's not permanently changed
pdialog.PrintQueue.UserPrintTicket = defaulttckt;
pdialog.PrintQueue.Commit();
}
...
class PrinterModifier
{
public static PrintTicket ChangeDevMode(PrintDialog pdialog, int prpty, DrawingVisual vis)
{
var queue = pdialog.PrintQueue;
var cvt = new PrintTicketConverter(queue.Name, PrintTicketConverter.MaxPrintSchemaVersion);
// Display dialog, don't make changes
var devmode1 = cvt.ConvertPrintTicketToDevMode(pdialog.PrintTicket, BaseDevModeType.UserDefault);
// Consistency check
var dmSize = BitConverter.ToInt16(devmode1, 68);
var dmDriverExtra = BitConverter.ToInt16(devmode1, 70);
if (devmode1[361] == 0)
{
devmode1[361] = 1;
}
return cvt.ConvertDevModeToPrintTicket(devmode1, PrintTicketScope.PageScope);
}
}
printdialog परिवर्तन में मूल्य, लेकिन यह अभी भी गलत प्रिंट करता है। परिवर्तन लागू नहीं होते हैं। किसी भी मदद का स्वागत है!
क्या आप इसे स्वचालित रूप से 180 डिग्री आकर्षित नहीं कर सकते? –
@ डैनियलए। व्हाइट मेरे अपडेट की जांच करें, उम्मीद है कि इससे थोड़ा और स्पष्ट हो जाएगा कि मुझे इसकी पहुंच क्यों है! – Markinson
एक एक्स-वाई समस्या की तरह लगता है। –