我正在尝试创建一个 WPF WebBrowser,从 c:\temp\MyPdf.pdf 中的文件加载 PDF,最后在默认打印机中打印它。
我使用了 AcroPDFLib,如下代码所示:
System.Windows.Controls.WebBrowser wbPdfWebViewer = new System.Windows.Controls.WebBrowser();
wbPdfWebViewer.Navigate(new System.Uri("c:\\temp\\MyPdf.pdf"));
// Sleep some time until pdf is loaded in webbrowser
Thread.Sleep(2000);
var pdfdoc = wbPdfWebViewer.Document as AcroPDFLib.AcroPDF;
if (pdfdoc != null)
{
pdfdoc.Print();
}
但它不起作用。PDF 没有被打印(根本没有任何反应)。我确保 pdfdoc 不为空。
注意:上面的代码是从 STA 线程调用的。
尝试#2:我还尝试使用 Webbrowser 控件创建 WPF 窗口:
<Window x:Class="My.Apps.WPF.PdfWebViewerContainer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="wPdfWebViewer" Height="300" Width="300"
Visibility="Hidden">
<Grid>
<WebBrowser x:Name="wbPdfWebViewer" />
</Grid>
</Window>
由于我不希望 WPF 窗口可见,因此我将其设置为隐藏。
然后:
wPdfWebViewer _pdfWebViewer;
private void PrintPdf(string file)
{
_pdfWebViewer = new wPdfWebViewer();
_pdfWebViewer.wbPdfWebViewer.LoadCompleted += wbPdfWebViewer_LoadCompleted;
_pdfWebViewer.wbPdfWebViewer.Navigate(new System.Uri(file));
}
private void wbPdfWebViewer_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
var pdfdoc = _pdfWebViewer.wbPdfWebViewer.Document as AcroPDFLib.AcroPDF;
if (pdfdoc != null)
{
pdfdoc.Print();
}
}
这里的问题是只有在 WPF 窗口可见时才会触发 LoadCompleted。如果隐藏,它不会触发。无论如何,没有打印pdf。