Вставьте PDF-файл в веб-браузер WPF, а затем распечатайте его - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь динамически создать веб-браузер WPF, загрузить PDF из файла в c: \ temp \ MyPdf.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 : Я также пытался создать 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();
    }
}

Проблема здесьявляется то, что LoadCompleted будет запущен только если окно WPF видно.Это не стреляет, если это скрыто.Во всяком случае, PDF не печатается.

...