问题
I have several custom paper sizes defined on a printer(the printer is set as default). I need to be able to select one of these formats as the default one.
A programmatic(C#) solution would be ideal, but a command line one would be ok too.
Right now, I am able to get the list of paper sizes(name/dimensions) defined on the printer, and I can find out which one is the default.
In order to select another format as default, the only solution I have so far is by changing the dmPaperSize field on the devMode structure; BUT I cannot find out the correct value that corresponds to the desired paper format. So I set dmPaperSize to 0, and increment it, until the correct format appears on the printer. This takes a very long time on some printers.
Is there another way to select(by name) the default papaer format on the default printer ?
回答1:
You are in the right direction in changing the default printer settings. .NET doesn't provide direct support to change the default settings of a printer.
I used the PrinterSettings
class from this codeproject article to change the printer settings.
The available paper sizes from the printer can be retrieved using the PrintDocument.PrinterSettings
. See the sample code below for retrieving the available papersizes from the printer and using the PaperSize.RawKind
for changing the papersize of the printer.
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);
}
}
}
回答2:
The following code would set the default printer papersize:
PrintDocument pd = new PrintDocument();
pd.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("PaperA4", 840, 1180);
pd.Print();
On how to print using PrintDocument you could refer this link.
Hope this helps.
来源:https://stackoverflow.com/questions/21826507/change-printer-default-paper-size