WPF Webbrowser печать после изменения настроек и без взаимодействия с пользователем - PullRequest
0 голосов
/ 19 июля 2011

У меня есть приложение, которое печатает на принтер этикеток из элемента управления WebBrowser.Идея заключается в том, что при печати HTML-документ печатается в соответствии с различными настройками, такими как размер бумаги и ориентация.Когда я это делаю, все работает нормально:

public Boolean DrawHTML(String HTML)
{
  try
  {
    // Load HTML document as a string
    //using (StringReader reader = new StringReader(HTML))
    using (StreamReader reader = new StreamReader(HTML))
    {
      // Navigate to HTML document string
      Web_Document.Navigate(reader.ReadToEnd());
    }
    return true;
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message + ":\nFile:\n\n" + HTML);
    return false;
  }
}

public Boolean Print(String PrinterName, String PrintJobName, Boolean IsLandscape, int LabelCount,double LabelWidth, double LabelHeight)
{
  try
  {
    PrintQueueCollection _Printers = new PrintServer().GetPrintQueues(new[] {
    EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections});

    foreach (PrintQueue Q in _Printers)
    {
      if (Q.FullName == PrinterName)
      {
        Q.UserPrintTicket.CopyCount = LabelCount;

        if (IsLandscape)
        {
          Q.UserPrintTicket.PageOrientation = PageOrientation.Landscape;
        }
        else
        {
          Q.UserPrintTicket.PageOrientation = PageOrientation.Portrait;
        }

        Q.UserPrintTicket.PageBorderless = PageBorderless.Borderless;

        double W = ((LabelWidth / 25.4) * 96);
        double H = ((LabelHeight / 25.4) * 96);

        Q.UserPrintTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.Unknown, W, H);

        var writer = PrintQueue.CreateXpsDocumentWriter(Q);
        writer.Write(Web_Document, Q.UserPrintTicket);



        return true;
      }
    }
    //Printer Not Found
    return false;
  }
  catch (Exception)
  {
    //problem occured
    return false;
  }
}   

#endregion

}

Все работает, КРОМЕ 3 проблем.contains scroll = "no" появятся полосы прокрутки, что нормально, но также и печать, что не хорошо.

Печать ДЕЙСТВИТЕЛЬНО плохая.очень размытоЯ думаю, что это происходит при создании визуала.

Если хост-фрейм меньше, чем HTML-контент, это будет печатать ТОЛЬКО видимый контент.Я хочу напечатать весь контент.

Любой совет, как мне это сделать?

Спасибо

1 Ответ

4 голосов
/ 20 марта 2012

Используйте этот код:

try
{ 
    var doc = Web_Document.Document as mshtml.IHTMLDocument2;
    const string keyName = @"Software\Microsoft\Internet Explorer\PageSetup";
    using (var key = Registry.CurrentUser.OpenSubKey(keyName, true))
    {
        if (key != null)
        {
            var oldFooter = key.GetValue("footer"); 
            var oldHeader = key.GetValue("header"); 
            key.SetValue("footer", ""); 
            key.SetValue("header", "");
            doc.execCommand("Print", true, null);
            key.SetValue("footer", oldFooter); 
            key.SetValue("header", oldHeader);
        }
    }
}
catch (Exception ex)
{
    Log.Error(ex.Message,ex);
}

Это будет хорошо печататься без колонтитулов

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