web-dev-qa-db-ja.com

プリンタのデフォルトの用紙サイズを変更する

プリンタでいくつかのカスタム用紙サイズを定義しています(プリンタはデフォルトとして設定されています)。これらの形式の1つをデフォルトの形式として選択できるようにする必要があります。

プログラマティック(C#)ソリューションが理想的ですが、コマンドラインソリューションでも問題ありません。

現在、プリンタで定義されている用紙サイズ(名前/寸法)のリストを取得でき、どれがデフォルトであるかを確認できます。

デフォルトとして別の形式を選択するために、私がこれまでに持っている唯一の解決策は、devMode構造のdmPaperSizeフィールドを変更することです。しかし、希望の用紙フォーマットに対応する正しい値を見つけることができません。そこで、dmPaperSizeを0に設定し、正しい形式がプリンターに表示されるまでインクリメントします。一部のプリンタでは、これに非常に長い時間がかかります。

デフォルトのプリンタでデフォルトの紙のフォーマットを(名前で)選択する別の方法はありますか?

6
Andy

デフォルトのプリンタ設定を変更するのは正しい方向です。 .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);
        }            
    }
}
9
Junaith

次のコードは、デフォルトのプリンタの用紙サイズを設定します。

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

PrintDocumentを使用して印刷する方法については、これを参照できます リンク

お役に立てれば。

5