更改打印机默认纸张大小



我在打印机上定义了几种自定义纸张大小(打印机设置为默认值)。我需要能够选择其中一种格式作为默认格式。

编程(C#)解决方案是理想的,但命令行解决方案也可以。

现在,我能够获取打印机上定义的纸张尺寸(名称/尺寸)列表,并且可以找出哪个是默认值。

为了选择另一种格式作为默认格式,到目前为止我唯一的解决方案是更改 devMode 结构上的 dmPaperSize 字段;但是我找不到与所需纸张格式相对应的正确值。因此,我将 dmPaperSize 设置为 0,然后递增它,直到打印机上出现正确的格式。在某些打印机上,这需要很长时间。

有没有另一种方法可以在默认打印机上选择(按名称)默认纸张格式?

更改默认打印机设置的方向是正确的。 .NET 不提供对更改打印机默认设置的直接支持。

我使用了这篇代码项目文章中的 PrinterSettings 类来更改打印机设置。

可以使用PrintDocument.PrinterSettings检索打印机的可用纸张大小。请参阅下面的示例代码,了解如何从打印机检索可用的纸张大小,并使用PaperSize.RawKind更改打印机的纸张大小。

public class PrinterSettingsDlg : Form
{
    PrinterSettings ps = new PrinterSettings();
    Button button1 = new Button();
    ComboBox combobox1 = new ComboBox();
    public PrinterSettingsDlg()
    {
        this.Load += new EventHandler(PrinterSettingsDlg_Load);
        this.Controls.Add(button1);
        this.Controls.Add(combobox1);
        button1.Dock = DockStyle.Bottom;
        button1.Text = "Change Printer Settings";
        button1.Click += new EventHandler(button1_Click);
        combobox1.Dock = DockStyle.Top;
    }
    void button1_Click(object sender, EventArgs e)
    {
        PrinterData pd = ps.GetPrinterSettings(PrinterName);
        pd.Size = ((PaperSize)combobox1.SelectedItem).RawKind;
        ps.ChangePrinterSetting(PrinterName, pd);
    }
    void PrinterSettingsDlg_Load(object sender, EventArgs e)
    {
        PrintDocument pd = new PrintDocument();
        pd.PrinterSettings.PrinterName = // printer name
        combobox1.DisplayMember = "PaperName";
        foreach (PaperSize item in pd.PrinterSettings.PaperSizes)
        {
            combobox1.Items.Add(item);
        }            
    }
}

以下代码将设置默认打印机纸张大小:

PrintDocument pd = new PrintDocument();
pd.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("PaperA4", 840, 1180);
pd.Print();

关于如何使用打印文档打印,您可以参考此链接。

希望这有帮助。

对我来说

,这一行给出了从Devmode到PrinterData的转换错误

PrinterData pd = ps.GetPrinterSettings(PrinterName);

所以这就是我所做的,而不是使用该函数。

string deviceToUse = "EPSON LQ-590II"; //Printer to look for
string paperToUse = "DOT MATRIX HALF"; //Page size to look for
int paperSizeRawKind = 0; //Variable for paper size
PrintDocument printDocument = new PrintDocument();
PrinterSettings ps = new PrinterSettings();
//Iterate through all printers
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
   //Check if printer matches to what I want
   if (printer.Contains(deviceToUse))
   {
       //Iterate through all paper sizes for that printer
       for (int i = 0; i < printDocument.PrinterSettings.PaperSizes.Count; i++)
       {
          //Check if paper size matches what I want
          if (printDocument.PrinterSettings.PaperSizes[i].ToString().Contains(paperToUse))
          {
              //Set Paper Size RawKind here
              paperSizeRawKind = printDocument.PrinterSettings.PaperSizes[i].RawKind;
           }
        }
        printDocument.PrinterSettings.PrinterName = printer;
        PrinterData printData = new PrinterData();
        printData.Size = paperSizeRawKind;
        ps.ChangePrinterSetting(printer, printData);
    }
}

此代码在按钮单击事件中调用。

最新更新