.NET打印设置问题
在处理单据时,遇到有打印的单据。我们需要提供preview的功能。同时对于不同的单据所使用的纸张也各不相同。这就需要我们能对用户的打印设置进行保存。当用户进行print ,preview时再调用先前的设置.
在.NET中关于打印设置M$好象很不友好.感觉使用起来不很爽.
来看一下如何对用户的打印设置进行操作.
首先我这边定义一个基本的关于打印设置的类
/// <summary>
/// 用户自定义页面设置类,要加上可序列化标记,用户保存时,需将设置进行序列化成文件,到时可反序列化
/// </summary>
[Serializable()]
public class UserPageSettings
{
public bool Landscape=true;//横打
public int LeftMargin=0; //左边距
public int RightMargin=0;//右边距
public int BottomMargin=0;//底边距
public int TopMargin=0;//顶边距
public string PageKind;//纸张种类
public int Height=0; //纸高
public int Width=0; //纸宽
}
/// <summary>
/// 加载打印设置
/// </summary>
private void LoadPageSetting()
{
if(UserSettingPage==true)
{
return;
}
string pageSettingFile=mLayoutPath+"//"+System.IO.Path.GetFileNameWithoutExtension(this.mGridLayoutFileName)+"PageSetting.bin";
if(!File.Exists(pageSettingFile))
return ;//如果用户没有设置页面属性
//以二进制方式进行序列化
BinaryFormatter bf=new BinaryFormatter();
FileStream fs = new FileStream(pageSettingFile, FileMode.Open);
try
{
//将上次用户设置进行反序列化.
UserPageSettings ups=(UserPageSettings)bf.Deserialize(fs);
PageSettings ps=ultraGridPrintDocument1.DefaultPageSettings;
ps.Landscape=ups.Landscape;
ps.Margins.Left=ups.LeftMargin;
ps.Margins.Right=ups.RightMargin;
ps.Margins.Top=ups.TopMargin;
ps.Margins.Bottom=ups.BottomMargin;
int i=0;
//M$ 可有点恶心.居然设为只读类型,那只能循环一下来获取纸张类型
for(i=0;i< ps.PrinterSettings.PaperSizes.Count;i++)
{
if(ps.PrinterSettings.PaperSizes[i].Kind.ToString()==ups.PageKind)
{
break;
}
}
ps.PaperSize=ps.PrinterSettings.PaperSizes[i];
// PaperSize psize=new PaperSize(ups.PageKind,ups.Width,ups.Height);
// ps.PaperSize=psize;
//ultraGridPrintDocument1.PrinterSettings.DefaultPageSettings.PaperSize=psize;
}
finally
{
fs.Close();
}
}
/// <summary>
/// 保存用户定义的页面设置信息
/// </summary>
private void SavePageSetting()
{
string pageSettingFile=mLayoutPath+"//"+System.IO.Path.GetFileNameWithoutExtension(this.mGridLayoutFileName)+"PageSetting.bin";
BinaryFormatter bf=new BinaryFormatter();
FileStream fs = new FileStream(pageSettingFile, FileMode.Create);
try
{
UserPageSettings ups=new UserPageSettings();
//获取用户当前打印设置
PageSettings ps=ultraGridPrintDocument1.DefaultPageSettings;
ups.Height=ps.PaperSize.Height;
ups.Width=ps.PaperSize.Width;
ups.TopMargin=ps.Margins.Top;
ups.BottomMargin=ps.Margins.Bottom;
ups.LeftMargin=ps.Margins.Left;
ups.RightMargin=ps.Margins.Right;
ups.Landscape=ps.Landscape;
ups.PageKind=ps.PaperSize.Kind.ToString(); //当前纸张类型如A4等
bf.Serialize(fs,ups); //序列化到流中.
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
fs.Close();
}
}
不知各位在对于打印设置问题上是否还有更好的解决方案