2012-09-01 27 views
7

我已经安装了打印机并在Intranet服务器上工作,我想以编程方式将“hello world”发送到默认打印机。这似乎是最简单的事情,但我已经搜索了几个小时没有成功。 (注意:我正在运行Windows 7的部署机器上开发asp.net mvc)ASP.NET MVC中以编程方式“hello world”默认SERVER端打印机

我尝试将VB here的示例转换为C#,但它说“没有安装打印机”。

public void TestPrint() 
{ 
    var x = new PrintDocument(); 
    x.PrintPage += new PrintPageEventHandler(PrintPage); 
    x.Print(); 
} 
private void PrintPage(Object sender, PrintPageEventArgs e) 
{ 
    var textToPrint = "Hello world"; 
    var printFont = new Font("Courier New", 12); 
    var leftMargin = e.MarginBounds.Left; 
    var topMargin = e.MarginBounds.Top; 
    e.Graphics.DrawString(textToPrint, printFont, Brushes.Black, leftMargin, topMargin); 
} 

我还曾试图片段从MSDN here但它说,它不承认打印机名称。

public void TestPrint(string msg) 
{ 
    var server = new LocalPrintServer(); 
    var queue = LocalPrintServer.GetDefaultPrintQueue(); 

    // Call AddJob 
    var job = queue.AddJob(); 

    // Write a Byte buffer to the JobStream and close the stream 
    var stream = job.JobStream; 
    var buffer = UnicodeEncoding.Unicode.GetBytes(msg); 
    stream.Write(buffer, 0, buffer.Length); 
    stream.Close(); 
} 
+0

我把降压的“内网服务器”是一个与测试此代码的机器不同。 –

+0

我打算购买什么? – Benjamin

+0

@HansPassant请帮忙!我保证会把你的美元退回来。 – Benjamin

回答

10

打印的 “Hello World” 服务器端在.NET

  1. 分享打印机
  2. 创建一个PrintDocument对象
  3. 通过名称引用
  4. 打印机添加一个方法来提供内容
  5. 打印

代码

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

public void Print() 
{ 
    var doc = new PrintDocument(); 
    doc.PrinterSettings.PrinterName = "\\\\deployment-machine-name\\share-name"; 
    doc.PrintPage += new PrintPageEventHandler(ProvideContent); 
    doc.Print(); 
} 
public void ProvideContent(object sender, PrintPageEventArgs e) 
{ 
    e.Graphics.DrawString(
    "Hello world", 
    new Font("Arial", 12), 
    Brushes.Black, 
    e.MarginBounds.Left, 
    e.MarginBounds.Top); 
} 
1

首先给出一个选项来选择打印机。您的整个要求已经在Microsoft支持网站上进行了说明。

Have a look here.

从那里样本(在万一哪天页面已经死了): -

private void print_Click(object sender, System.EventArgs e) 
{ 
    string s = "Hello"; // device-dependent string, need a FormFeed? 

    // Allow the user to select a printer. 
    PrintDialog pd = new PrintDialog(); 
    pd.PrinterSettings = new PrinterSettings(); 
    if(DialogResult.OK == pd.ShowDialog(this)) 
    { 
     // Send a printer-specific to the printer. 
     RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, s); 
    } 
} 
+0

谢谢,我正在查看它。顺便说一下我正在运行Windows 7. – Benjamin

+0

什么是ShowDialog部件?我不希望为此需要用户交互。实际上,当我使用它的时候,我会从asp.net调用它。 – Benjamin

+0

如果你失败了,你可以尝试[C#打印机]中的非托管代码操作(http://support.microsoft.com/kb/138594) – perilbrain

相关问题