.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();
   }
  }

不知各位在对于打印设置问题上是否还有更好的解决方案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值