更改打印机默认纸张大小

Posted

技术标签:

【中文标题】更改打印机默认纸张大小【英文标题】:Change printer default paper size 【发布时间】:2014-03-16 14:19:54 【问题描述】:

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

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

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

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

是否有另一种方法来选择(按名称)默认打印机上的默认纸张格式?

【问题讨论】:

你试过我建议的解决方案了吗? 【参考方案1】:

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

我使用this 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 - 检查课程的代码项目链接。它只是一个示例代码 sn-p。 我同意,PrinterData 没有定义。它也不在 codeproject 类中。但是进入讨论部分,看看这篇关于如何创建缺失类的帖子:codeproject.com/Articles/6899/…【参考方案2】:

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

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

关于如何使用 PrintDocument 进行打印,您可以参考link。

希望这会有所帮助。

【讨论】:

虽然问题是关于 选择 现有格式作为默认格式(与打印无关),但此代码仅适用于某些打印机。但我不想打印,我想更改打印机上的 default settings,以便在发送文档时(通过任何其他程序),新格式将被使用。

以上是关于更改打印机默认纸张大小的主要内容,如果未能解决你的问题,请参考以下文章

C#修改打印机默认纸张A4到A3

水晶报表设置纸张大小

如何把A4的word文档,用A5大小的纸张打印出来,

c# winform如何设置打印纸张大小

如何在arcmap里设置地图输出的纸张大小

lodop SET_PRINT_PAGESIZE设置的纸张大小对打印器不起作用