Документ HTML печати от службы Windows без диалогового окна печати

14
задан Community 23 May 2017 в 12:24
поделиться

5 ответов

От этого сайта http://www.ussbd.com/printhtm.html

using HtmlPrinter;
hpObj=new HtmlPrinter.HtmlPrinter();
hpObj.PrintUrlFromMemory(txtUrl.Text);

Теперь Вы добавляете код в своем проекте распечатать страницу HTML из ее исходного текста:

HtmlPrinter.HtmlPrinter hpObj=new HtmlPrinter.HtmlPrinter();
hpObj.PrintHtml(txtString.Text, true);

, Если Вы хотите распечатать без диалогового окна печати затем, используют следующую строку:

hpObj.PrintHtml(txtString.Text, false); 
1
ответ дан 1 December 2019 в 13:48
поделиться

OLECMDEXECOPT_PROMPTUSER, кажется, вынуждает подсказку пользователю выбрать принтер и весь связанный материал, который я вполне уверен, не позволяется от сервиса. Кто-то может проверить это?

0
ответ дан 1 December 2019 в 13:48
поделиться

Вот еще один способ печати без диалогового окна печати. Вы создаете объект PrintDialog, инициализируете его, а затем вызываете метод Print ().

Функция ниже используется для печати небольшой этикетки со штрих-кодом 2 "x0,75". Вам нужно будет найти способ получить объект Document из файла html.

public void PrintToPrinter(string printerName)
{
    PrintDialog pd = new PrintDialog();
    pd.Document = userControl11.PrintDoc; // <--- Update this line with your doc
    pd.PrinterSettings.PrinterName = printerName;
    try
    {
            pd.Document.DocumentName = "My Label";
            pd.Document.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("2-.75", 200, 75);
            pd.Document.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
            //pd.PrinterSettings.Copies = (short)mNumCopies;
            pd.Document.PrinterSettings.Copies = (short) mNumCopies;
            pd.Document.Print();
    }
    catch
    {
        MessageBox.Show("INVALID PRINTER SPECIFIED");
    }
}
1
ответ дан 1 December 2019 в 13:48
поделиться

Вы можете использовать класс PrintDocument в пространстве имен System.Drawing.Printing, чтобы дать вам больше контроля над печатью, см. здесь для получения дополнительной информации.

Например, вы можете сделать следующее:

using (PrintDocument doc = new PrintDocument())
{
    doc.PrintPage += this.Doc_PrintPage;
    doc.DefaultPageSettings.Landscape = true;
    doc.DocumentName = fileNameOfYourDocument;
    doc.Print();
}

Затем вызывается функция для каждой страницы, которая будет напечатана, и вам будет предоставлена ​​графическая область для рисования в

private void Doc_PrintPage(object sender, PrintPageEventArgs ev)
{
    ....
    ev.Graphics.DrawImage(image, x, y, newWidth, newHeight);
}

. Это требует от вас обработки фактического рисования текста / изображения на странице, см. здесь для получения дополнительной информации.

0
ответ дан 1 December 2019 в 13:48
поделиться

Во-первых, вот код:

using System.Reflection;
using System.Threading;
using SHDocVw;

namespace HTMLPrinting
{
  public class HTMLPrinter
  {
    private bool documentLoaded;
    private bool documentPrinted;

    private void ie_DocumentComplete(object pDisp, ref object URL)
    {
      documentLoaded = true;
    }

    private void ie_PrintTemplateTeardown(object pDisp)
    {
      documentPrinted = true;
    }

    public void Print(string htmlFilename)
    {
      documentLoaded = false;
      documentPrinted = false;

      InternetExplorer ie = new InternetExplorerClass();
      ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
      ie.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(ie_PrintTemplateTeardown);

      object missing = Missing.Value;

      ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
      while (!documentLoaded && ie.QueryStatusWB(OLECMDID.OLECMDID_PRINT) != OLECMDF.OLECMDF_ENABLED)
        Thread.Sleep(100);

      ie.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
      while (!documentPrinted)
        Thread.Sleep(100);

      ie.DocumentComplete -= ie_DocumentComplete;
      ie.PrintTemplateTeardown -= ie_PrintTemplateTeardown;
      ie.Quit();
    }
  }
}
  1. Вы можете получить доступ к пространству имен SHDocVw, добавив ссылку на «Microsoft Internet Controls», находящуюся на вкладке COM диалогового окна Добавить ссылку.
  2. Дополнительную информацию об объекте InternetExplorer можно найти на MSDN .
  3. Метод Navigate () загрузит файл HTML. Другие параметры позволяют указать необязательные параметры, такие как флаги и заголовки.
  4. Мы не можем печатать, пока документ не загружен. Здесь я ввожу цикл, ожидая вызова события DocumentComplete, после чего устанавливается флаг, уведомляющий нас о завершении навигации. Обратите внимание, что DocumentComplete вызывается всякий раз, когда навигация завершается - в случае успеха или неудачи.
  5. После установки флага documentLoaded, статус печати запрашивается через QueryStatusWB () до тех пор, пока печать не будет разрешена.
  6. Печать запускается с помощью вызова ExecWB (). Указана команда OLECMDID_PRINT вместе с опцией OLECMDEXECOPT_DONTPROMPTUSER для автоматической печати без вмешательства пользователя. Важное примечание: это будет печататься на принтере по умолчанию. Чтобы указать принтер, вам нужно будет установить принтер по умолчанию (в коде вы можете вызвать SetDefaultPrinter () ). Два последних параметра допускают необязательные параметры ввода и вывода.
  7. Мы не хотим завершать работу, пока печать не будет завершена, поэтому снова вводится цикл. После запуска события PrintTemplateTeardown устанавливается флаг documentPrinted. Затем объекты можно очистить.
15
ответ дан 1 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

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