将PDF嵌入到WPF WebBrowser中,然后打印

时间:2018-07-06 13:22:33

标签: c# wpf visual-studio-2008 .net-3.5 axacropdf

我正在尝试创建一个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线程调用的。

ATTEMPT#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。

0 个答案:

没有答案