日期:2014-05-18  浏览次数:20764 次

如何获得打印机所在路径
asp.net   中,如何获得打印机所在路径


------解决方案--------------------
开源:.NET环境下有关打印页面设置、打印机设置、打印预览对话框的应用

前篇说了.NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现,现在到了我们应用它们的时候了。
  
我们需要做下面的一些事情:
1、将上篇中写的程序输出类型改为类库并编译成PrinterPageSetting.dll;
2、建立C#或VB.net项目,并在项目的引用处添加引用,在弹出的对话框的.NET标签中浏览并选择PrinterPageSetting.dll;
3、在默认窗口Form1上增加一个TextBox文本框控件,默认名TextBox1(实际项目中建议采用命名及编码规范,如frmTestPrint,txtPrint)
4、从工具箱中拖一个MainMenu到窗口Form1,创建mainMenu1菜单对象,建立主菜单menuFile
5、单击menuFile,在其下方输入处分别建立menuFilePageSetup、menuFilePrintPreview、menuFilePrint菜单。我想大家明白这几个菜单的意义了,这是命名规范最基本的。

准备工作做完了,看看我们怎么使用PrinterPageSetting轻松完成打印页面设置、打印机设置、打印预览对话框。

第一步:在窗口类中申明并实例化PrinterPageSetting,当然实例化对象可以放在构造函数中。
C#:
private GoldPrinter.PrinterPageSetting printerPageSetting = new GoldPrinter.PrinterPageSetting();
VB.net:
Private printerPageSetting As New GoldPrinter.PrinterPageSetting

第二步:写一个实现打印的具体过程
C#:
private void PrintDocument_PrintPage_Handler(object o,System.Drawing.Printing.PrintPageEventArgs e)
{
System.Drawing.Graphics g = e.Graphics;
if (Draw(g))
{
e.HasMorePages = true; //要分页打印
}
else
{
e.HasMorePages = false; //打印结束
}
}

VB.net:
Private Sub printDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim g As System.Drawing.Graphics = e.Graphics
If Me.Draw(g) Then
e.HasMorePages = True ´要分页打印
Else
e.HasMorePages = False ´打印结束
End If
End Sub

大家可以看到我们是怎么使程序在打印时自动分页的,就是设置HasMorePages属性为真就可以了。为了清晰可见,我将真正打印的具体过程独立出来用Draw()实现。
在第二步中我们实现打印的具体过程,在PrinterPageSetting类中,我们并不知道打印的具体实现,就设计了PrintPage委托,让调用者自己实现,然后告诉PrinterPageSetting是用哪一个方法实现,也就是第三步了。

第三步:打印委托
在窗口空白处双击,在Form1_Load事件中输入相关语句。当然也可以放在构造函数中,这里为了描述的方便。
C#:
private void Form1_Load(object sender, System.EventArgs e)
{
this.printerPageSetting.PrintPage += new GoldPrinter.PrintPageDelegate(PrintDocument_PrintPage_Handler);
}
  
如果你不知上一句是什么意思,就用这一句吧:
this.printerPageSetting.PrintPageValue = new GoldPrinter.PrintPageDelegate(PrintDocument_PrintPage_Handler);
意思就是告诉printerPageSetting打印的具体实现过程是PrintDocument_PrintPage_Handler(第二步)
  
VB.net:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.printerPageSetting.PrintPageValue = New GoldPrinter.PrintPageDelegate(AddressOf printDocument_PrintPage)
End Sub

大家还可以一试啊,
Private WithEvents printDocument As System.Drawing.Printing.PrintDocument ´第一步:在申明窗口级变量
Me.printDocument = Me.printerPageSetting.PrintDocument ´第二步:在此将两个量联系起来
将printDocument_PrintPage(...)加上 Handles printDocument.PrintPage


第四步:显示页面设置\打印机设置\打印预览对话框
分别在几个菜单上单击,具体代码如下:

C#:
private void menuFilePageSetup_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPageSetupDialog(); //显示页面设置对话框
}

private void menuFilePrintPreview_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPrintPreviewDialog(); //显示打印预览对话框
}

private void menuFilePrint_Click(object sender, System.EventArgs e)
{
this.printerPageSetting.ShowPrintSetupDialog(); //显示打印预览对话框
}

VB.net:
Private Sub menuFilePageSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuFilePageSetup.Click
Me.printerPageSetting.ShowPageSetupDialog()
End