Могу ли я напечатать стандартную тестовую страницу с выделенным кодом в .NET 3.5? - PullRequest
2 голосов
/ 13 мая 2009

Есть ли способ напечатать стандартную тестовую страницу в WPF из кода C #, если у меня есть имя сетевого принтера?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 мая 2009

Ниже приведен пример использования пространства имен System.Management для доступа к WMI и печати тестовой страницы на принтере. Это зависит от того, подключен ли принтер к компьютеру, и я могу предоставить код для подключения сетевого принтера через System.Management, если вы этого хотите. Этот код должен работать для любой версии .Net Framework

using System;
using System.Management;

public class PrintTestPageUsingWMI
{
    private String _name;
    private ManagementObject _printer = null;

    public PrintTestPageUsingWMI(String printerName)
    {
        this._name = printerName;

        //Find the Win32_Printer which is a Network Printer of this name

        //Declare WMI Variables
        ManagementObject MgmtObject;
        ManagementObjectCollection MgmtCollection;
        ManagementObjectSearcher MgmtSearcher;

        //Perform the search for printers and return the listing as a collection
        MgmtSearcher = new ManagementObjectSearcher("Select * from Win32_Printer");
        MgmtCollection = MgmtSearcher.Get();

        foreach (ManagementObject objWMI in MgmtCollection)
        {
            if (objWMI.Item("sharename").ToString().Equals(this._name))
            {
                this._printer = objWMI;
            }
        }

        if (this._printer == null)
        {
            throw new Exception("Selected Printer is not connected to this Computer");
        }        
    }

    public void PrintTestPage()
    {
        this.InvokeWMIMethod("PrintTestPage");
    }

    /// <summary>
    /// Helper Method which Invokes WMI Methods on this Printer
    /// </summary>
    /// <param name="method">The name of the WMI Method to Invoke</param>
    /// <remarks></remarks>
    private void InvokeWMIMethod(String method) {
        if (this._printer == null)
        {
            throw new Exception("Can't Print a Test Page on a Printer which is not connected to the Computer");
        }

        Object[] objTemp = new Object[0] { null };
        ManagementObject objWMI;

        //Invoke the WMI Method
        this._printer.InvokeMethod(method, objTemp);
    }
}

В качестве альтернативы вы можете взглянуть на пространство имен System.Printing, которое поддерживается в .Net 3.0 и более поздних версиях

1 голос
/ 13 мая 2009

Это должно быть возможно при использовании prnadmin.dll. Скорее всего, вам придется сначала создать принтер в Windows (либо по коду, либо с помощью пользовательского интерфейса), если он еще не настроен на рабочей станции.

http://support.microsoft.com/kb/321025

http://www.codeproject.com/KB/cs/PrinterAdmin.aspx?display=Print

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...