如何使用远程打印机连接C#

时间:2013-09-30 10:55:08

标签: c# asp.net visual-studio-2010 visual-c#-express-2010

我正在尝试使用System.printing命名空间连接connect C#和远程服务器 这是我的代码它执行正常,但它不打印任何东西,我不知道为什么。

[DllImport("winspool.drv")]
public static extern bool AddPrinterConnection(string PrinterName);
[DllImport("winspool.drv")]
public static extern bool SetDefaultPrinter(string printerName);

private void ConnectToNetworkPrinter()
{
    bool result = AddPrinterConnection(@"\\CHSADMIN-PC\Canon LBP2900");
    bool resultdef = SetDefaultPrinter(@"\\CHSADMIN-PC\Canon LBP2900");
}

public void Button1_Click(object sender, EventArgs e)
{
    PrintServer myPrintServer = new PrintServer(
        @"\\CHSADMIN-PC", 
        System.Printing.PrintSystemDesiredAccess.EnumerateServer);
    PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();

    String printQueueNames = "My Print Queues:\n\n";
    foreach (PrintQueue pq in myPrintQueues)
    {
        printQueueNames += "\t" + pq.Name + "\n";
    }

    Console.WriteLine(printQueueNames);
    Console.WriteLine("\nPress Return to continue.");
    Console.ReadLine();
}

1 个答案:

答案 0 :(得分:1)

protected void Button1_Click(object sender, EventArgs e)
     {
        //String strDefaultPrinter;
        //SetDefaultPrinter("doPDF v7");
        PrintDialog printDialog = new PrintDialog();
        PrintDocument documentToPrint = new PrintDocument();
        printDialog.Document = documentToPrint;
        documentToPrint.PrinterSettings.PrinterName = "canon LBP2900 on CHSADMIN-PC";

        StringReader reader = new StringReader(TextBox1.Text);
        documentToPrint.PrintPage += new PrintPageEventHandler(DocumentToPrint_PrintPage);
        documentToPrint.Print();


    }


    private void DocumentToPrint_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        StringReader reader = new StringReader(TextBox1.Text);
        float LinesPerPage = 0;
        float YPosition = 0;
        int Count = 0;
        float LeftMargin = e.MarginBounds.Left;
        float TopMargin = e.MarginBounds.Top;
        string Line = null;
        Font PrintFont = SystemFonts.DefaultFont;
        System.Drawing.SolidBrush PrintBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
        PrintServer ps = new PrintServer();
        //pd.PrinterSettings.PrinterName = printer;

        LinesPerPage = e.MarginBounds.Height / PrintFont.GetHeight(e.Graphics);
        //DefaultHttpHandler ip = new DefaultHttpHandler();

        while (Count < LinesPerPage && ((Line = reader.ReadLine()) != null))
        {
            YPosition = TopMargin + (Count * PrintFont.GetHeight(e.Graphics));
            e.Graphics.DrawString(Line, PrintFont, PrintBrush, LeftMargin, YPosition, new StringFormat());
            Count++;
        }

        if (Line != null)
        {
            e.HasMorePages = true;
        }
        else
        {
            e.HasMorePages = false;
        }
        PrintBrush.Dispose();
    }
相关问题