...印刷前に総ページ数を計算するためにPrintDocumentを前処理する方法はありますか?この質問への答えで
受け入れ答えは、この文を含め...
あなたは二度それを印刷する必要はありません、あなただけシミュレートする必要があります初めて を印刷します。
これで、プリンタや画面に何も出力せずにドキュメントを一度通過させることはできますか?
...印刷前に総ページ数を計算するためにPrintDocumentを前処理する方法はありますか?この質問への答えで
受け入れ答えは、この文を含め...
あなたは二度それを印刷する必要はありません、あなただけシミュレートする必要があります初めて を印刷します。
これで、プリンタや画面に何も出力せずにドキュメントを一度通過させることはできますか?
プリンタデバイスコンテキストを作成し、レンダリングしたページ数を記録しながら、そのデバイスコンテキストを参照DCとして使用してページをレンダリングする必要があります。これは、.NET印刷インフラストラクチャの範囲外で行う必要があります。
はここでステップ1でのショットです、あなたはリサイズで作業していると仮定し...
Private Function GetHighResolutionGraphics() As Graphics
Try
Dim HighestResolution As Printing.PrinterResolution = Nothing
Dim HighestResolutionPrinter As String = ""
Dim XResolution As Integer = Integer.MinValue
Using dlg As New PrintDialog
For Each Printer As String In Printing.PrinterSettings.InstalledPrinters
dlg.PrinterSettings.PrinterName = Printer
For Each Resolution As Printing.PrinterResolution In dlg.PrinterSettings.PrinterResolutions
Using gr As Graphics = dlg.PrinterSettings.CreateMeasurementGraphics()
If gr.DpiX > XResolution Then
HighestResolution = Resolution
HighestResolutionPrinter = Printer
XResolution = gr.DpiX
End If
End Using
Next
Next
dlg.PrinterSettings.PrinterName = HighestResolutionPrinter
dlg.PrinterSettings.DefaultPageSettings.PrinterResolution = HighestResolution
Return dlg.PrinterSettings.CreateMeasurementGraphics()
End Using
Catch ex As Exception
' handle or ignore .NET AccessViolation for certain network printers that are turned off, etc...
End Try
Return Me.CreateGraphics()
End Function
ステップ2「を単に」あなたすでに実装PagePrintイベントで返さ参考Graphicsオブジェクトを使用していますレンダリング中のページ数を記録しながら、ページを適切なビットマップにレンダリングするコード。 PagePrintイベントをGraphicsオブジェクトを受け付ける別のルーチンにリファクタリングすることを忘れないでください。そうすれば、印刷、プレビュー、ページ番号付けに使用できます。 Graphicsオブジェクトとビットマップを処分することを忘れないでください。
using gfxReference as Graphics = GetHighResolutionGraphics()
using bmpPage as new Bitmap(gfxReference.DpiX * 8.5, gfxReference.DpiY * 11)
using gfxRender as Graphics = Graphics.FromImage(bmpPage)
gfxRender.Clear(Color.White)
// Existing PagePrint event logic goes here (uses gfxRender)
// Track Number of pages printed
end using
end using
end using