0

下面的代码在 Web 应用程序中用于条码(斑马条码打印机)打印。如果我在应用程序服务器中打印,我可以打印。

[DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true,                                            ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]          
public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount,     out Int32 dwWritten);

public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount)
{
    Int32 dwError = 0, dwWritten = 0;
    IntPtr hPrinter = new IntPtr(0);
    DOCINFOA di = new DOCINFOA();
    bool bSuccess = false; // Assume failure unless you specifically succeed.

    //di.pDocName = "My C#.NET RAW Document";
    //di.pDataType = "RAW";

    // Open the printer.
    if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
    {
        // Start a document.
        if (StartDocPrinter(hPrinter, 1, di))
        {
            // Start a page.
            if (StartPagePrinter(hPrinter))

            {
                // Write your bytes.
                bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                EndPagePrinter(hPrinter);
            }
            EndDocPrinter(hPrinter);

        }
        ClosePrinter(hPrinter);
    }
    // If you did not succeed, GetLastError may give more information
    // about why not.
    if (bSuccess == false)
    {
        dwError = Marshal.GetLastWin32Error();
    }
    return bSuccess;
}

szPrinterName是应用程序下拉框中的打印机名称。在这里,我只能获取安装在应用程序服务器中的打印机名称,并且打印将转到服务器。

如何获取客户端机器打印机名称并在客户端机器打印机中打印?

4

1 回答 1

1

正如@PabloRomeo 在上面的评论中所指出的那样,简短的回答是,您不能以简单的方式做您所描述的事情。原因是 Web 浏览器不允许直接访问本地资源,包括打印机。这样做是出于安全目的。话虽如此,如果将访问该站点的机器将安装一些您需要编写的帮助软件,那么有一些方法可以获得您想要的体验类型。不久前,我在类似类型的问题中提供了一些重要的细节,您可以在下面的链接中看到。

从网页打印条形码到 Zebra 打印机

于 2012-09-06T15:17:40.573 回答