私は解決策を得る必要があります
まず、新しい PrintDocument を作成し、その PrintPage イベントのハンドラーをいくつか接続しました。
mobjPrintDocument = New PrintDocument
RemoveHandler mobjPrintDocument.PrintPage, AddressOf Print_Report
AddHandler mobjPrintDocument.PrintPage, AddressOf Print_Report
次に、印刷したいときにいつでも PrintDocument で PrintBitmap 関数を呼び出すことができます。ここでは、ユーザーが [印刷] ボタンをクリックしたときに実行しています。
Private Sub xbtnPrint_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
mintPageIndex = 0
mobjPrintDocument.PrintBitmap(FileName)
End Sub
ここからが重要な部分です。PrintPage イベントにフックすることで、対象となるコンテンツを乗っ取ることができます (上記のように)。e.PageVisual を任意のビジュアル xaml 要素に設定すると、PrintBitmap がそれを処理します。ここでは、GetPages 関数を使用してループし、各ページ (pdfviewer 要素) を確実に印刷します。ただし、私が言ったように、任意の視覚要素を指すことができます。
Private Sub Print_Report(sender As System.Object, e As PrintPageEventArgs)
e.PageVisual = xobjReportViewer.GetPages(mintPageIndex)
mintPageIndex += 1
e.HasMorePages = mintPageIndex < xobjReportViewer.GetPages.Count
End Sub
e.HasMorePages を使用すると、終了するまでこのイベントを強制的に発生させることができます。
これが誰かに役立つことを願っています。Silverlight 5 と Post-Script プリンターのサポートにより、PostScript エミュレーターを備えた多くのプリンターは互換性がない可能性がありますが、デフォルトではビットマップ印刷にはなりません。この回避策はこれを修正し、LOB タイプのアプリケーションでの印刷を少し安定させます。