我正在嘗試將 winform 專案中的函式用于我的 WPF 專案,但代碼似乎不適用于 WPF 或 WPF 的結構。經過數小時的研究,我發現此代碼僅適用于 winfowm。我真的需要用它來列印到熱敏列印機,而我正在使用它來列印 html,因為在這種情況下我的列印機將列印阿拉伯字符。
這是代碼:
private void button2_Click(object sender, EventArgs e)
{
StartBrowser(xx);
}
public static void StartBrowser(string source)
{
var th = new Thread(() =>
{
var webBrowser = new WebBrowser();
webBrowser.ScrollBarsEnabled = false;
webBrowser.IsWebBrowserContextMenuEnabled = true;
webBrowser.AllowNavigation = true;
webBrowser.DocumentCompleted = webBrowser_DocumentCompleted1;
webBrowser.DocumentText = source;
Application.Run();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
}
static void webBrowser_DocumentCompleted1(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var webBrowser = (WebBrowser)sender;
webBrowser.SetBounds(0, 0, 0, 0);
webBrowser.Print();
}
有沒有其他方法可以使用 WPF 列印這樣的 HTML?
uj5u.com熱心網友回復:
您可以使用WebView2. 但是,此方法并不能完全復制當前行為。WebView2 控制元件需要在完全初始化之前添加到 UI。
按照WPF 應用程式中的 WebView2 入門中的步驟操作:
- 確保您已安裝WebView2 運行時
- 將 WebView2 控制元件添加到您的視窗/頁面/控制元件:
<DockPanel> <DockPanel DockPanel.Dock="Top"> <Button x:Name="PopulateWebView2" Click="PopulateWebView2_Click" Content="Print"/> </DockPanel> <wv2:WebView2 Name="webView2" /> </DockPanel> - 初始化 WebView2,并在視窗/頁面建構式中呼叫它:
void InitializeAsync() { webView2.EnsureCoreWebView2Async(null); } - 處理按鈕單擊并列印頁面。
private void PopulateWebView2_Click(object sender, RoutedEventArgs e) { webView2.NavigateToString(xx); // your html string to populate the browser webView2.NavigationCompleted = async (s, e) => { await webView2.CoreWebView2.PrintToPdfAsync(@"Path/To/file.pdf"); }; }
如前所述,WebView2 控制元件需要在 UI 上呈現,然后才能完全初始化。這會將頁面作為 PDF 檔案列印到PrintToPdfAsync(path).
您可以使用內置的列印對話框并使用 DOM 來執行列印命令,而不是使用以下命令,但這需要用戶輸入以選擇檔案位置:
await webView2.CoreWebView2.ExecuteScriptAsync("window.print();")
uj5u.com熱心網友回復:
它將像在 WPF 中撰寫的那樣作業,無論如何它在 WinForms 中也是如此......
首先,添加對System.Windows.Forms程式集的參考。
然后讓一切都合格...
using WinForms = System.Windows.Forms;
public static void StartBrowser(string source)
{
var th = new Thread(() =>
{
var webBrowser = new WinForms.WebBrowser();
webBrowser.ScrollBarsEnabled = false;
webBrowser.IsWebBrowserContextMenuEnabled = true;
webBrowser.AllowNavigation = true;
webBrowser.DocumentCompleted = webBrowser_DocumentCompleted1;
webBrowser.DocumentText = source;
WinForms.Application.Run();
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
}
static void webBrowser_DocumentCompleted1(object sender, WinForms.WebBrowserDocumentCompletedEventArgs e)
{
var webBrowser = (WinForms.WebBrowser)sender;
webBrowser.SetBounds(0, 0, 0, 0);
webBrowser.Print();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/408084.html
標籤:
