我正在尋找一種在c#(主要是wpf)中以橫向模式打印格式化html文件的方法。打印對話框將很好,以便將頁面設置設置爲橫向。我試圖使用微軟的HTML到XAML轉換器,它破壞了格式。我覺得很奇妙,沒有辦法或者抓取文件並直接發送到打印機。在C#中打印格式化的HTML頁面
任何想法將不勝感激。
我正在尋找一種在c#(主要是wpf)中以橫向模式打印格式化html文件的方法。打印對話框將很好,以便將頁面設置設置爲橫向。我試圖使用微軟的HTML到XAML轉換器,它破壞了格式。我覺得很奇妙,沒有辦法或者抓取文件並直接發送到打印機。在C#中打印格式化的HTML頁面
任何想法將不勝感激。
聽起來對我來說,想要走的最佳方式是首先選擇HTML渲染引擎並將其用於打印支持。不管語言,操作系統或框架如何,打印HTML文檔都沒有「標準」方法。
您可以使用C#訪問WebBrowser類的Print()方法來執行此操作。很酷的是,你不需要在應用程序的任何地方實際顯示WebBrowser。只需簡單地喂內容到WebBrowser控件,像這樣:
webBrowser1.DocumentContent = openfiledialog.FileName;
然後只需調用webBrowser1.Print();
方法。下面是一個MSDN參考:
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.print.aspx
希望這有助於。
也許是這樣的:
webBrowser1.DocumentContent = YOUR_FILE_NAME;
mshtml.IHTMLDocument2 doc = webBrowser1.Document as mshtml.IHTMLDocument2;
doc.execCommand("Print", true, null);
WebBrowser myWebBrowser = new WebBrowser();
private void Form1_Load(object sender, EventArgs e)
{
myWebBrowser.DocumentCompleted += myWebBrowser_DocumentCompleted;
myWebBrowser.DocumentText =System .IO.File .ReadAllText (@"C:\a.htm");
}
private void myWebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
myWebBrowser.Print();
}
工程就像一個魅力! – 2014-10-20 02:29:29
這段代碼顯然是用於Windows窗體而不是WPF。 WPF WebBrowser控件不支持這個(它不能打印)。 – ygoe 2016-10-12 13:31:46
對於我們使用了.NET WebBrowser控件在其他的答案中概述,但最近控制已經變得越來越不穩定多年。即使重建我們用於在倉庫中打印選擇表以運行Windows 10的機器,我們仍然存在頁面問題,直到我們重新啓動計算機後纔會打印。相同的代碼爲我們提供了4年以上的服務,但現在看來微軟最近的更新使得這種控制方式比過去更加麻煩。
另一個主要問題是沒有簡單的方法來打印到Internet Explorer的默認設置以外的打印機,所以如果您希望打印到不同的打印機,那麼對於該控件而言,您幾乎沒有運氣。
很多年前,我們用C++和QtWebKit庫編寫了打包代碼打印代碼的版本。因此,爲了解決這些問題,我挖掘了打印網頁文件的舊C++應用程序,並將其轉化爲此項目以通過命令行進行打印,並使其能夠打印到不同的打印機。
你可以得到源代碼在這裏:
https://github.com/kendallb/PrintHtml
,你可以下載一個32位二進制預編譯的Windows使用MinGW的從這裏開始:
https://github.com/kendallb/PrintHtml/blob/master/deploy/PrintHtml-window-x86.zip?raw=true
代碼是完全可移植的,所以如果需要,您可以輕鬆地將它編譯爲在macOS或Linux上運行。
的命令行是很容易使用和下面的用法是:
Usage: PrintHtml [-test] [-p printer] [-l left] [-t top] [-r right] [-b bottom] <url> [url2]
-test - Don't print, just show what would have printed.
-p printer - Printer to print to. Use 'Default' for default printer.
-l left - Optional left margin for page.
-t top - Optional top margin for page.
-r right - Optional right margin for page.
-b bottom - Optional bottom margin for page.
url - Defines the list of URLs to print, one after the other.
顯然從.NET應用程序,您將需要生成它的命令行中使用這一點,但這是很容易去做。假設PrintHtml.exe程序的bin目錄爲你的應用程序或網站,你可以像這樣從.NET運行:
public bool PrintHtmlPages(
string printer,
List<string> urls)
{
try {
// Spawn the code to print the packing slips
var info = new ProcessStartInfo();
info.Arguments = $"-p \"{printer}\" \"{string.Join("\" \"", urls)}\"";
var pathToExe = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
info.FileName = Path.Combine(pathToExe, "PrintHtml.exe");
using (var p = Process.Start(info)) {
// Wait until it is finished
while (!p.HasExited) {
Application.DoEvents();
System.Threading.Thread.Sleep(10);
}
// Return the exit code
return p.ExitCode == 0;
}
} catch {
return false;
}
}
享受!
要多謝你,我必須花一天時間來獲得+50名聲譽:D。你救了我的命。 – huydq5000 2017-07-14 04:49:20
您應該注意,這僅受Windows窗體WebBrowser控件支持,而不受WPF支持。 – ygoe 2016-10-12 13:30:38