C# 更改打印机默认纸张大小

C# 更改打印机默认纸张大小,c#,printing,windows-7,windows-xp,C#,Printing,Windows 7,Windows Xp,我在打印机上定义了几种自定义纸张尺寸打印机设置为默认值。我需要能够选择其中一种格式作为默认格式 一个programmaticC解决方案是理想的,但是一个命令行解决方案也可以 现在,我可以获得打印机上定义的纸张尺寸名称/尺寸列表,并可以确定哪一个是默认值 为了选择另一种格式作为默认格式,到目前为止,我唯一的解决方案是更改devMode结构上的dmPaperSize字段;但我无法找到与所需纸张格式对应的正确值。因此,我将dmPaperSize设置为0,并递增,直到打印机上显示正确的格式。在某些打印机

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

一个programmaticC解决方案是理想的,但是一个命令行解决方案也可以

现在,我可以获得打印机上定义的纸张尺寸名称/尺寸列表,并可以确定哪一个是默认值

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


是否有其他方法可以按名称选择默认打印机上的默认纸张格式?

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

PrintDocument pd = new PrintDocument();
pd.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("PaperA4", 840, 1180);
pd.Print();
关于如何使用PrintDocument打印,您可以参考以下内容


希望这有帮助。

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

我使用codeproject文章中的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);
        }            
    }
}

您是否尝试了我建议的解决方案?虽然问题是选择现有格式作为默认格式,而不是打印,但此代码仅适用于某些打印机。但是我不想打印,我想更改打印机的默认设置,这样当其他程序发送文档时,将使用新的格式。PaperSize.RawKind正是我想要的,谢谢@Andy-很高兴提供帮助:找不到PrinterData类。@digz6666-检查该类的codeproject链接。这只是一个示例代码片段。我同意,PrinterData没有定义。它也不在codeproject类中。但是进入讨论部分,看看这篇关于如何创建缺少的类的帖子: