解决C#打印设置控件页面边距值变化问题
protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
{
//检查printDocument是否为空,空的话抛出异常
ThrowPrintDocumentNullException(printDocument);
//声明返回值的PageSettings
PageSettings ps = new PageSettings();
//申明并实例化PageSetupDialog
PageSetupDialog psDlg = new PageSetupDialog();
ps = printDocument.DefaultPageSettings;
try
{
//相关文档及文档页面默认设置
psDlg.Document = printDocument;
Margins mg = printDocument.DefaultPageSettings.Margins;
if (System.Globalization.RegionInfo.CurrentRegion.IsMetric)
{
mg = PrinterUnitConvert.Convert(mg, PrinterUnit.Display, PrinterUnit.TenthsOfAMillimeter);
}
//备份打印文档的DefaultPageSettings,因为转换后会改变,而设置对话框单击取消按钮后不还原就不能正确显示原来的值
PageSettings psPrintDocumentBack = (PageSettings)(printDocument.DefaultPageSettings.Clone());
psDlg.PageSettings = psPrintDocumentBack;//printDocument.DefaultPageSettings; //用printDocument的时取消了对话框就要还原
psDlg.PageSettings.Margins = mg;

//显示对话框
DialogResult result = psDlg.ShowDialog();
if (result == DialogResult.OK)
{
ps = psDlg.PageSettings;
printDocument.DefaultPageSettings = psDlg.PageSettings;
}
else
{
}

}
catch (System.Drawing.Printing.InvalidPrinterException e)
{
ShowInvalidPrinterException(e);
}
catch (Exception ex)
{
ShowPrinterException(ex);
}
finally
{
psDlg.Dispose();
psDlg = null;
}
return ps;
}

浙公网安备 33010602011771号