Как распечатать Файл PCL в C #?

У меня есть файл PCL, который я сгенерировал с помощью «print to file».

Какой лучший способ программно напечатать этот файл? в C #?

(учитывая, конечно, что принтер, на котором я печатаю, поддерживает PCL.)

Я знаю, что могу печатать, вызывая из приглашения:

copy filename.pcl //location/printername

Так что я мог бы предположить, что я мог бы сделать то же самое вещь программно (с использованием копирования) ... Интересно, есть ли более чистый способ сделать это, скажем, с помощью PrintDocument.

Обратите внимание, что когда я использую PrintDocument:

var pd = new PrintDocument
         {
             DocumentName = @"filename.pcl";
             PrinterSettings = {PrinterName = @"\\location\printername"}
         };

pd.Print();

Я всегда печатаю пустую страницу.

12
задан Peter Mortensen 25 May 2018 в 22:03
поделиться

2 ответа

Эта статья относится к Visual Basic , но я думаю, что ей достаточно просто следовать, чтобы применить ее к C #. В противном случае я с радостью помогу вам с любыми проблемными деталями.

Если принтер находится в сети, вот небольшой забавный пример того, как разговаривать напрямую с ним . Не уверен, что это также работает, если вы просто отправляете байты PCL на принтер.

2
ответ дан 2 December 2019 в 22:51
поделиться

Мы используем следующие методы для импорта DLL:

    [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);

    [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool ClosePrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool StartDocPrinter(IntPtr hPrinter, Int32 level, [In, MarshalAs(UnmanagedType.LPStruct)] RawPrinter di);

    [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool EndDocPrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool StartPagePrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool EndPagePrinter(IntPtr hPrinter);

    [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);
2
ответ дан 2 December 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: