Как напечатать html-страницу в приложении Windows vb.net - PullRequest
2 голосов
/ 14 февраля 2012

Я занимаюсь разработкой приложения для Windows с использованием vb.net, у меня есть простая html-страница с заполнителями в ней, я загружаю страницу в потоковый ридер, заменяю заполнители, а затем мне нужно напечатать html-контент, кто угодноесть идеи, как напечатать html-контент как html, а не как исходный текст.PS код в vb.bet или c # в порядке.Спасибо

Ответы [ 3 ]

6 голосов
/ 14 февраля 2012

Для этого можно использовать элемент управления WebBrowser. Это позволит вам показать HTML внутри вашего WinForms.

Свойство DocumentText позволит вам установить строку, представляющую HTML-код, который вы хотите показать.

Например:

webBrowser.DocumentText = "<html><body><p>I like StackOverflow</p><body></html>";

После этого, если вы хотите распечатать страницу, вам придется подождать, пока документ не будет завершен, и вызвать метод Print для WebBrowser. MSDN показывает простой способ сделать это:

private void PrintHelpPage()
{
    // Create a WebBrowser instance. 
    WebBrowser webBrowserForPrinting = new WebBrowser();

    // Add an event handler that prints the document after it loads.
    webBrowserForPrinting.DocumentCompleted +=
        new WebBrowserDocumentCompletedEventHandler(PrintDocument);

    // Set the Url property to load the document.
    webBrowserForPrinting.Url = new Uri(@"\\myshare\help.html");
}

private void PrintDocument(object sender,
    WebBrowserDocumentCompletedEventArgs e)
{
    // Print the document now that it is fully loaded.
    ((WebBrowser)sender).Print();

    // Dispose the WebBrowser now that the task is complete. 
    ((WebBrowser)sender).Dispose();
}

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

Вот ссылка на MSDN: Печать с помощью элемента управления WebBrowser на MSDN

Возможный дубликат: Печать содержимого элемента управления WebBrowser

0 голосов
/ 27 июля 2014

На этой странице я нашел отличное компактное решение, которое действительно легко внедрить:

Dim printProcess As New Diagnostics.ProcessStartInfo()
printProcess.FileName = "YOUR_FILE_HERE.html"
printProcess.Verb = "print"
'printProcess.WindowStyle = ProcessWindowStyle.Hidden
Process.Start(printProcess)

Надеюсь, оно пригодится будущим посетителям этой страницы!

0 голосов
/ 26 июня 2014

Я использую следующий код.Большая проблема у меня была с изменением ориентации страницы, единственное рабочее решение - изменить настройки страницы на принтере по умолчанию, используется прямой взлом реестра.

Sub printHTMLFile (FileName As String, Portrait As Boolean, Copies As Integer)
  Const PAGESET_KEY As String = "Software\Microsoft\Internet Explorer\PageSetup"

  If Copies < 1 Then Exit Sub
  Dim MyKey As RegistryKey = Registry.CurrentUser.OpenSubKey (PAGESET_KEY, True)
  Dim TempFooter As String = MyKey.GetValue ("footer").ToString ()
  Dim TempHeader As String = MyKey.GetValue ("header").ToString ()
  Dim TempBottom As String = MyKey.GetValue ("margin_bottom").ToString ()
  Dim TempLeft   As String = MyKey.GetValue ("margin_left").ToString ()
  Dim TempRight  As String = MyKey.GetValue ("margin_right").ToString ()
  Dim TempTop    As String = MyKey.GetValue ("margin_top").ToString ()
  MyKey.SetValue ("footer", String.Empty)
  MyKey.SetValue ("header", String.Empty)
  MyKey.SetValue ("margin_bottom", "0.40000")
  MyKey.SetValue ("margin_left",   "0.40000")
  MyKey.SetValue ("margin_right",  "0.40000")
  MyKey.SetValue ("margin_top",    "0.40000")
  MyKey.Close ()
  pageSet (Portrait)

  Dim WB As WebBrowser = New WebBrowser ()
  WB.Navigate (FileName)
  While WB.ReadyState <> WebBrowserReadyState.Complete
    'Thread.Sleep (100)
    Application.DoEvents ()
  End While
  For i As Integer = 1 To Copies
    WB.Print ()
  Next

  MyKey = Registry.CurrentUser.OpenSubKey (PAGESET_KEY, True)
  MyKey.SetValue ("footer",        TempFooter)
  MyKey.SetValue ("header",        TempHeader)
  MyKey.SetValue ("margin_bottom", TempBottom)
  MyKey.SetValue ("margin_left",   TempLeft)
  MyKey.SetValue ("margin_right",  TempRight)
  MyKey.SetValue ("margin_top",    TempTop)
  MyKey.Close ()
End Sub

Sub pageSet (Portrait As Boolean)
' page orientation settins on default printer
  Const DEVICE_KEY = "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows"
  Const DEVMODE_KEY = "HKEY_CURRENT_USER\Printers\DevModePerUser"
  Const DEFAULT_DEVMODE_KEY = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\"

  Dim DevStr As String = Registry.GetValue (DEVICE_KEY, "Device", String.Empty)
  Dim PrinterName As String = DevStr.Substring (0, (DevStr.IndexOf (",")))

  Dim DevMode() As Byte = Registry.GetValue (DEVMODE_KEY, PrinterName, Nothing)
  If DevMode Is Nothing Then
    DevMode = Registry.GetValue (DEFAULT_DEVMODE_KEY & PrinterName.Replace ("\"c, ","c), "Default DevMode", Nothing)
  End If
  If Portrait Then
    DevMode(76) = 1
  Else
    DevMode(76) = 2
  End If
  Registry.SetValue (DEVMODE_KEY, PrinterName, DevMode)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...