ASP.Net環(huán)境下有關(guān)打印方面的技術(shù)精華

我個(gè)人認(rèn)為,開發(fā)MIS,首先就得解決網(wǎng)格的問題,而開發(fā)工具為我們提供了如DataGrid、MSHFlexGrid的控件。其次,是打印的問題,將業(yè)務(wù)單據(jù)與數(shù)據(jù)報(bào)表打印出來??上攵词挂粋€(gè)業(yè)務(wù)功能非常完美齊全的管理軟件,沒有打印的支持,也一定不算是一個(gè)完整的軟件。

創(chuàng)新互聯(lián)主營天寧網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),天寧h5小程序定制開發(fā)搭建,天寧網(wǎng)站營銷推廣歡迎天寧等地區(qū)企業(yè)咨詢

對于打印,我們總是在用戶打印之前可以看看打印的效果,這時(shí),一般的軟件都提供了打印預(yù)覽;如果需要調(diào)整打印的效果如紙張的大小、邊距的設(shè)置,又提供了頁面設(shè)置對話框讓用戶選擇和調(diào)整;如果系統(tǒng)有多個(gè)打印機(jī),當(dāng)用戶單擊打印按鈕時(shí)還可以選擇輸出的對象。

總之,對于打印,我們至少要提供打印頁面設(shè)置、打印機(jī)設(shè)置、打印預(yù)覽對話框,讓用戶有更多的機(jī)會(huì)參與交互。這一些,是一個(gè)打印模塊比較重要也比較基本的東西,讓我們一起來實(shí)現(xiàn)它們吧。

進(jìn)入Vs2003 IDE,從文件菜單上單擊新建項(xiàng)目,項(xiàng)目類型為C#,在模板中選擇類庫,名稱估且叫GoldPrinter,確定即可。在打開的開發(fā)環(huán)境中,刪除解決方案資源管理器中默認(rèn)生成的Class1.cs。

現(xiàn)在,我們要考慮一下,對于打印,可能是在Windows下,也可能是Web下。如果將兩者的方法統(tǒng)一起來,讓調(diào)用者不用操心是什么方式下那該多好啊。因此,我們首先設(shè)計(jì)一個(gè)接口,提供兩者共用的方法。
在項(xiàng)目上鼠標(biāo)右鍵單擊后添加一個(gè)新類,名稱為:IPrinterPageSetting,由于是接口,將class改為interface,并去掉構(gòu)造函數(shù)。看上去應(yīng)類似如下:
using System;
namespace GoldPrinter
{
/// <summary>
/// IPrinterPageSetting 的摘要說明。
/// </summary>
public class IPrinterPageSetting
{
}
}

方法中至少包含三個(gè)聲明即ShowPageSetupDialog()、ShowPrintSetupDialog()、ShowPrintPreviewDialog(),也就是打開打印頁面設(shè)置、打印機(jī)設(shè)置、打印預(yù)覽對話框。
  Vs2003為我們提供了一個(gè)PrintDocument,名字空間是System.Drawing.Printing。PrintDocument是為打印而提供的一個(gè)類,它的概述(summary)是這樣的:定義一個(gè)可再次使用的對象,該對象將輸出發(fā)送到打印機(jī)。

PrintDocument為我們封裝了很多復(fù)雜的細(xì)節(jié),它有一個(gè)至關(guān)重要的事件叫PrintPage,PrintPage的概述是:當(dāng)需要為當(dāng)前頁打的輸出時(shí)發(fā)生。因此,我們只要引發(fā)了打印事件,把打印的具體輸出的對象交給PrintPage,別的我們就不用操心了。

那么,我們怎么實(shí)現(xiàn)具體輸出的過程呢?由于是封裝,我們也不可能知道最終用戶具體怎么去實(shí)現(xiàn),這時(shí),委托(Delegate)為我們起了大的作用。大家都知道一個(gè)函數(shù)實(shí)現(xiàn)某個(gè)功能的時(shí)候往往需要一些輸入的數(shù)據(jù),但是函數(shù)本身并不知道這些數(shù)據(jù)到底是哪個(gè)具體的值,只知道這個(gè)值的數(shù)據(jù)類型,這時(shí)引入了參數(shù),調(diào)用者調(diào)用函數(shù)據(jù)的時(shí)候傳入相應(yīng)類型的具體值就行了。大家應(yīng)該意識(shí)到了我的用意,與函數(shù)類似,我們?yōu)榇蛴√峁┝岁P(guān)聯(lián)打印機(jī)的方法,但是具體的實(shí)現(xiàn)只有由調(diào)用者去實(shí)現(xiàn),不同之處是函數(shù)傳遞的是參數(shù),而我們要做的委托傳遞的是方法。這時(shí),我們只要為兩者建立對應(yīng)關(guān)系就可以了,這就是委托。我們需要定義一個(gè)委托,參數(shù)類型與PrintPage的一致就可以了,即(Object obj,System.Drawing.Printing.PrintPageEventArgs ev)。

由此可見,我們需要做下面的一些事情:
  1、在項(xiàng)目的引用處添加引用,在彈出的對話框的.NET標(biāo)簽中選擇System.Drawing.dll,
原因是PrintDocument的名字空間是System.Drawing.Printing,在System.Drawing.dll實(shí)現(xiàn);
  2、在IPrinterPageSetting接口中增加PrintDocument屬性的聲明;
  3、定義委托
  4、在IPrinterPageSetting接口中增加PrintPage屬性的聲明,類型為定義的委托;

以下是IPrinterPageSetting接口文件內(nèi)容:

using System;
using System.Drawing;
using System.Drawing.Printing;

namespace GoldPrinter
{
/// <summary>
/// PrintDocument.PrintPage的委托定義
/// </summary>
public delegate void PrintPageDelegate(Object obj,System.Drawing.Printing.PrintPageEventArgs ev) ;

/// <summary>
/// IPrinterPageSetting 的接口,顯示打印紙張?jiān)O(shè)置、打印機(jī)設(shè)置、打印預(yù)覽對話框。
/// 程序提供:周方勇;Email:flygoldfish@sina.com。
/// </summary>
public interface IPrinterPageSetting
{
  /// <summary>
  /// 獲取或設(shè)置打印文檔
  /// </summary>
  System.Drawing.Printing.PrintDocument PrintDocument
  {
   get;
   set;
  }

/// <summary>
  /// 關(guān)聯(lián)一個(gè)方法,目的是讓具體的打印由實(shí)例化者來操作
  /// 如PrinterPageSetting1.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler);
  /// </summary>
  PrintPageDelegate PrintPage
  {
   get;
   set;
  }

/// <summary>
  /// 顯示頁面設(shè)置對話框,并返回PageSettings
  /// </summary>
  /// <returns></returns>
  System.Drawing.Printing.PageSettings ShowPageSetupDialog();

/// <summary>
  /// 顯示打印機(jī)設(shè)置對話框,并返回PrinterSettings
  /// </summary>
  /// <returns></returns>
  System.Drawing.Printing.PrinterSettings ShowPrintSetupDialog();

/// <summary>
  /// 顯示打印預(yù)覽對話框
  /// </summary>
  void ShowPrintPreviewDialog();

}//End Interface
}//End NameSpace

下面,我們以Windows下的編程方式實(shí)現(xiàn),同時(shí)也列Web編程下的框架。由于是Windows下的編程,我們可能用到對話框什么的作為錯(cuò)誤提示,因此,我們同理要加入System.Windows.Forms.dll引用。再建立一個(gè)類文件,名稱為WinPrinterPageSetting。進(jìn)入文件后,在類聲明后面加上:IPrinterPageSetting,實(shí)現(xiàn)接口功能。程序清單如下,程序中有很多注釋,這里不再多說。

using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace GoldPrinter
{
/// <summary>
/// WinForm下的打印紙張?jiān)O(shè)置、打印機(jī)設(shè)置、打印預(yù)覽對話框。
/// </summary>
public class WinPrinterPageSetting:IPrinterPageSetting
{
  //把PrintPage委托聲明為類的一個(gè)成員變量
  private PrintPageDelegate _printPage; 
  // 打印文檔
  private PrintDocument _printDocument;

#region 構(gòu)造函數(shù)
  public WinPrinterPageSetting():this(null)
  {
  }

/// <summary>
  /// 使用printDocument來初始化類的新實(shí)例,當(dāng)printDocument為null時(shí)自動(dòng)創(chuàng)建一個(gè)printDocument的實(shí)例
  /// </summary>
  /// <param name="printDocument"></param>
  public WinPrinterPageSetting(PrintDocument printDocument)
  {
   if (printDocument != null)
   {
    _printDocument = printDocument;
   }
   else
   {
    _printDocument = new PrintDocument();
   }
  }
  #endregion

  #region IPrinterPageSetting 成員

/// <summary>
  /// 獲取或設(shè)置打印文檔
  /// </summary>
  public PrintDocument PrintDocument
  {
   get
   {
    return this._printDocument;
   }
   set
   {
    this._printDocument = value;
   }
  }

/// <summary>
  /// 一定要實(shí)例化此類后在調(diào)用打印/預(yù)覽之前設(shè)置此屬性,使之關(guān)聯(lián)一個(gè)方法,目的是讓具體的打印由實(shí)例化者來操作
  /// 如PrinterPageSetting1.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler);
  /// </summary>
  public PrintPageDelegate PrintPage
  {
   set
   {
    //初始委托變量,關(guān)聯(lián)方法
    _printPage = value;
    if (_printDocument==null)
    {
     throw new Exception("關(guān)聯(lián)的打印文檔不能為空!");
    }
    _printDocument.PrintPage +=new System.Drawing.Printing.PrintPageEventHandler(this._printPage);
   }
   get
   {
    return _printPage;
   } 
  }

/// <summary>
  /// 顯示頁面設(shè)置對話框,并返回PageSettings
  /// </summary>
  /// <returns></returns>
  public PageSettings ShowPageSetupDialog()
  {
   return ShowPageSetupDialog(this._printDocument);
  }

/// <summary>
  /// 顯示打印機(jī)設(shè)置對話框,并返回PrinterSettings
  /// </summary>
  /// <returns></returns>
  public PrinterSettings ShowPrintSetupDialog()
  {
   return ShowPrintSetupDialog(this._printDocument);
  }

/// <summary>
  /// 顯示打印預(yù)覽對話框
  /// </summary>
  public void ShowPrintPreviewDialog()
  {
   ShowPrintPreviewDialog(this._printDocument);
  }

#endregion

  //***************注意:以下幾個(gè)對話框方法可以獨(dú)立使用***************
  #region 頁面設(shè)置對話框 protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
  /// <summary>
  /// 頁面設(shè)置對話框,可以獨(dú)立使用
  /// </summary>
  /// <param name="printDocument"></param>
  /// <returns></returns>
  /// <remarks>
  /// 作 者:周方勇
  /// 修改日期:2004-08-07
  /// </remarks>
  protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
  {
   //聲明返回值的PageSettings
   PageSettings ps = new PageSettings();

if (printDocument==null)
   {
    throw new Exception("關(guān)聯(lián)的打印文檔不能為空!");
   }

try
   {
    //申明并實(shí)例化PageSetupDialog
    PageSetupDialog psDlg = new PageSetupDialog();
    //相關(guān)文檔及文檔頁面默認(rèn)設(shè)置
    psDlg.Document = printDocument;
    psDlg.PageSettings = printDocument.DefaultPageSettings;

//顯示對話框
    DialogResult result = psDlg.ShowDialog();
    if (result == DialogResult.OK)
    {
     ps = psDlg.PageSettings;
     printDocument.DefaultPageSettings = psDlg.PageSettings;
    }

}
   catch(System.Drawing.Printing.InvalidPrinterException e)
   {
    MessageBox.Show("未安裝打印機(jī),請進(jìn)入系統(tǒng)控制面版添加打印機(jī)!","打印",MessageBoxButtons.OK,MessageBoxIcon.Warning);
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message,"打印",MessageBoxButtons.OK,MessageBoxIcon.Warning);
   }

return ps;
  }
  #endregion

  #region 打印設(shè)置對話框 protected virtual PrinterSettings ShowPrintSetupDialog(PrintDocument printDocument)
  /// <summary>
  /// 打印設(shè)置對話框,可以獨(dú)立使用
  /// </summary>
  /// <param name="printDocument"></param>
  /// <returns></returns>
  /// <remarks>
  /// 作 者:周方勇
  /// 修改日期:2004-08-07
  /// </remarks>
  protected virtual PrinterSettings ShowPrintSetupDialog(PrintDocument printDocument)
  {
   //聲明返回值的PrinterSettings
   PrinterSettings ps = new PrinterSettings();
   if (printDocument==null)
   {
    throw new Exception("關(guān)聯(lián)的打印文檔不能為空!");
   }

try
   {
    //申明并實(shí)例化PrintDialog
    PrintDialog pDlg = new PrintDialog();
    //可以選定頁
    pDlg.AllowSomePages = true;

//指定打印文檔
    pDlg.Document = printDocument;

//顯示對話框
    DialogResult result = pDlg.ShowDialog();
    if (result == DialogResult.OK)
    {
     //保存打印設(shè)置
     ps = pDlg.PrinterSettings;
     //打印
     printDocument.Print();
    }

}
   catch(System.Drawing.Printing.InvalidPrinterException e)
   {
    MessageBox.Show("未安裝打印機(jī),請進(jìn)入系統(tǒng)控制面版添加打印機(jī)!","打印",MessageBoxButtons.OK,MessageBoxIcon.Warning);
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message,"打印",MessageBoxButtons.OK,MessageBoxIcon.Warning);
   }

return ps;
  }
  #endregion

  #region 打印預(yù)覽對話框 protected virtual void ShowPrintPreviewDialog(PrintDocument printDocument)
  /// <summary>
  /// 打印預(yù)覽對話框,可以獨(dú)立使用
  /// </summary>
  /// <param name="printDocument"></param>
  /// <returns></returns>
  /// <remarks>
  /// 作 者:周方勇
  /// 修改日期:2004-08-07
  /// </remarks>
  protected virtual void ShowPrintPreviewDialog(PrintDocument printDocument)
  {
   if (printDocument==null)
   {
    throw new Exception("關(guān)聯(lián)的打印文檔不能為空!");
   }

try
   {
    //申明并實(shí)例化PrintPreviewDialog
    PrintPreviewDialog ppDlg = new PrintPreviewDialog();
    //指定打印文檔
    ppDlg.Document = printDocument;

    //顯示對話框
    DialogResult result = ppDlg.ShowDialog();
    if (result == DialogResult.OK)
    {
     //...
    }

}
   catch(System.Drawing.Printing.InvalidPrinterException e)
   {
    MessageBox.Show("未安裝打印機(jī),請進(jìn)入系統(tǒng)控制面版添加打印機(jī)!","打印",MessageBoxButtons.OK,MessageBoxIcon.Warning);
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message,"打印",MessageBoxButtons.OK,MessageBoxIcon.Warning);
   }
  }
  #endregion

}//End Class
}//End NameSpace

大家可以看到了#region指定,它與#endregion一起使用,可以把中間的文本折疊起來,很方便,需要查看的時(shí)候就單擊前面的展開符號(hào)。后三個(gè)函數(shù)是比較重要的方法,同時(shí)提供它們的重載函數(shù)。ShowPageSetupDialog()與ShowPrintSetupDialog()返回用戶確認(rèn)的當(dāng)前設(shè)置選擇。

再建立一個(gè)類文件,名稱為WebPrinterPageSetting。進(jìn)入文件后,在類聲明后面加上:IPrinterPageSetting,實(shí)現(xiàn)接口功能。程序清單如下:

using System;

namespace GoldPrinter
{
/// <summary>
/// WebForm下的打印紙張?jiān)O(shè)置、打印機(jī)設(shè)置、打印預(yù)覽對話框。(***暫無具體實(shí)現(xiàn)***)
/// </summary>
public class WebPrinterPageSetting:IPrinterPageSetting
{
  public WebPrinterPageSetting()
  {
   //
   // TODO: 在此處添加構(gòu)造函數(shù)邏輯
   //
  }

#region IPrinterPageSetting 成員

public System.Drawing.Printing.PrintDocument PrintDocument
  {
   get
   {
    // TODO:  添加 WebPrinterPageSetting.PrintDocument getter 實(shí)現(xiàn)
    return null;
   }
   set
   {
    // TODO:  添加 WebPrinterPageSetting.PrintDocument setter 實(shí)現(xiàn)
   }
  }

public PrintPageDelegate PrintPage
  {
   get
   {
    // TODO:  添加 WebPrinterPageSetting.PrintPage getter 實(shí)現(xiàn)
    return null;
   }
   set
   {
    // TODO:  添加 WebPrinterPageSetting.PrintPage setter 實(shí)現(xiàn)
   }
  }

public System.Drawing.Printing.PageSettings ShowPageSetupDialog()
  {
   // TODO:  添加 WebPrinterPageSetting.ShowPageSetupDialog 實(shí)現(xiàn)
   return null;
  }

public System.Drawing.Printing.PrinterSettings ShowPrintSetupDialog()
  {
   // TODO:  添加 WebPrinterPageSetting.ShowPrintSetupDialog 實(shí)現(xiàn)
   return null;
  }

public void ShowPrintPreviewDialog()
  {
   // TODO:  添加 WebPrinterPageSetting.ShowPrintPreviewDialog 實(shí)現(xiàn)
  }

#endregion

}//End Class

}//End NameSpace

做到了這一步,大家可能說已經(jīng)可以了,確實(shí)如此。因?yàn)樵谡{(diào)用的時(shí)候?qū)嵗疻inPrinterPageSetting/WebPrinterPageSetting并調(diào)用它的方法或?qū)傩跃涂梢粤?。大家再想想我為什么要提供IPrinterPageSetting呢?如果我現(xiàn)在調(diào)用打印對話框,我也不管是Windows下還是Web下的,這時(shí),IPrinterPageSetting就發(fā)揮了作用。

例如:
IPrinterPageSetting _printerPageSetting;
申明了一個(gè)打印接口對象,以后就可以直接調(diào)用它的方法了,但是到底是Windows模式還是Web模式呢,我們只需要讓程序自己去根據(jù)系統(tǒng)去實(shí)例為真正的WinPrinterPageSetting或WebPrinterPageSetting了。如:

//創(chuàng)建接口對象的新實(shí)例,使其指象真正的實(shí)現(xiàn)其接口的對象
if (Windows模式)
{
_printerPageSetting = new WinPrinterPageSetting();
}
else if(Web模式)
{
_printerPageSetting = new WebPrinterPageSetting();
}
在接下來的程序清單中我們可以看到這個(gè)效果。我們再建立一個(gè)PrinterPageSetting類,將WinPrinterPageSetting與WebPrinterPageSetting合二為一。在類的構(gòu)造函數(shù)中增加自動(dòng)判斷Windows模式還是Web模式,同時(shí)也提供PrintMode屬性可以讓用戶修改。程序清單如下:

using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace GoldPrinter
{

/// <summary>
/// 打印方式
/// </summary>
public enum PrintModeFlag
{
  /// <summary>
  /// Windows窗口打印方式
  /// </summary>
  Win
   ,
  /// <summary>
  /// Web窗口打印方式
  /// </summary>
  Web
}

/// <summary>
/// 封裝頁面設(shè)置、打印機(jī)設(shè)置、打印預(yù)覽,適合于Window和Asp.Net。
/// 程序提供:周方勇;Email:flygoldfish@sina.com。
/// </summary>
public class PrinterPageSetting
{
  //申明一個(gè)封裝頁面設(shè)置、打印機(jī)設(shè)置、打印預(yù)覽的接口
  private IPrinterPageSetting _printerPageSetting;

//打印方式
  private PrintModeFlag _printModeFlag;

public PrintModeFlag PrintMode
  {
   get
   {
    return this._printModeFlag;
   }
   set
   {
    this._printModeFlag = value;
   //運(yùn)用了抽象模式,創(chuàng)建接口對象的新實(shí)例,使其指象真正的實(shí)現(xiàn)其接口的對象
   if (this._printModeFlag == PrintModeFlag.Win)
   {
    _printerPageSetting = new WinPrinterPageSetting();
   }
   else if(this._printModeFlag == PrintModeFlag.Web)
   {
    _printerPageSetting = new WebPrinterPageSetting();
   }
   }
  }

/// <summary>
  /// 獲取或設(shè)置打印文檔
  /// </summary>
  public PrintDocument PrintDocument
  {
   get
   {
    return _printerPageSetting.PrintDocument;
   }
   set
   {
    _printerPageSetting.PrintDocument = value;
   }
  }

  /// <summary>
  /// 一定要實(shí)例化此類后在調(diào)用打印/預(yù)覽初始此變量,使之關(guān)聯(lián)一個(gè)方法,目的是讓具體的打印由實(shí)例化者來操作
  /// 如PrinterPageSetting1.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler);
  /// </summary>
  public PrintPageDelegate PrintPage
  {
   set
   {
    _printerPageSetting.PrintPage = value;
   }
   get
   {
    return _printerPageSetting.PrintPage;
   }
  }

#region 構(gòu)造函數(shù)
  /// <summary>
  ///  封裝頁面設(shè)置、打印機(jī)設(shè)置、打印預(yù)覽,適合于Window和Asp.Net,Web方式下請?jiān)谂渲梦募性黾渔IPrintMode及值Web,也可以實(shí)例化后設(shè)置PrintMode屬性為PrintModeFlag.Web。
  /// </summary>
  public PrinterPageSetting():this(null)
  {
  }

/// <summary>
  ///  封裝頁面設(shè)置、打印機(jī)設(shè)置、打印預(yù)覽,適合于Window和Asp.Net,Web方式下請?jiān)谂渲梦募性黾渔IPrintMode及值Web,也可以實(shí)例化后設(shè)置PrintMode屬性為PrintModeFlag.Web。
  /// </summary>
  /// <param name="printDocument"></param>
  public PrinterPageSetting(PrintDocument printDocument)
  {
   string strPrintMode = "";

//配置文件中鍵PrintMode
   strPrintMode = System.Configuration.ConfigurationSettings.AppSettings["PrintMode"];

if (strPrintMode == null)
   {
    //默認(rèn)為Win方式
    strPrintMode = "Win";
   }

//配置文件中鍵PrintMode的值Win/Web
   if (strPrintMode.ToUpper() == "WIN")
   {
    this.PrintMode = PrintModeFlag.Win;
   }
   else
   {
    this.PrintMode = PrintModeFlag.Web;  
   }

/*  //配置文件中添加鍵值的寫法
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <appSettings>
       <add key="PrintMode" value="Web"/>
     </appSettings>
    </configuration>
   */

_printerPageSetting.PrintDocument = printDocument;

}
  #endregion

  /// <summary>
  /// 顯示頁面設(shè)置對話框,并返回PageSettings
  /// </summary>
  /// <returns></returns>
  public PageSettings ShowPageSetupDialog()
  {
   return _printerPageSetting.ShowPageSetupDialog();
  }

/// <summary>
  /// 顯示打印機(jī)設(shè)置對話框,并返回PrinterSettings
  /// </summary>
  /// <returns></returns>
  public PrinterSettings ShowPrintSetupDialog()
  {
   return _printerPageSetting.ShowPrintSetupDialog(); 
  }

/// <summary>
  /// 顯示打印預(yù)覽對話框
  /// </summary>
  public void ShowPrintPreviewDialog()
  {
   _printerPageSetting.ShowPrintPreviewDialog();
  }

}//End Class
}//End NameSpace

在這個(gè)類的構(gòu)造函數(shù)中,提到了配置文件。在建立Asp.Net應(yīng)用程序的時(shí)候自動(dòng)會(huì)生成一個(gè)名為WebMIS.Config的文件,文件里有一些環(huán)境和其它信息的設(shè)置,可以簡單的理解為為程序提供一個(gè)外部設(shè)置的接口,提高應(yīng)用程序的靈活性。在建立Windows應(yīng)用程序的時(shí)候默認(rèn)情況下沒有這樣的文件,但是可以在項(xiàng)目上單擊鼠標(biāo)右鍵添加新項(xiàng),選擇應(yīng)用程序配置,默認(rèn)的配置文件名為App.config。在構(gòu)造函數(shù)中我們默認(rèn)為Win下的打印,如果是Web方式下,可以在配置文件中增加鍵PrintMode及值Web,也可以實(shí)例化后設(shè)置PrintMode屬性為PrintModeFlag.Web。下面是在配置文件中添加鍵值的寫法

<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <appSettings>
       <add key="PrintMode" value="Web"/>
     </appSettings>
    </configuration>

至此,關(guān)于NET環(huán)境下有關(guān)打印頁面設(shè)置、打印機(jī)設(shè)置、打印預(yù)覽對話框的實(shí)現(xiàn)全部結(jié)束,我們可以將程序編譯成一個(gè)動(dòng)態(tài)庫了。

文章標(biāo)題:ASP.Net環(huán)境下有關(guān)打印方面的技術(shù)精華
文章網(wǎng)址:http://bm7419.com/article40/pcogho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、微信小程序、響應(yīng)式網(wǎng)站外貿(mào)網(wǎng)站建設(shè)、電子商務(wù)品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化