【C#】WPFで印刷プレビュー(XPS)

前回『ミリメートル指定で線を印刷してみる』で作成した印刷ドキュメントを、プレビュー画面で表示するようにしてみました。

下記を参照設定に追加する必要があります

  • System.Printing

  • ReachFramework

private void btnPreviewXPS_Click(object sender, RoutedEventArgs e)
{
    try
    {
        //1インチをミリメートルに換算した値
        const double MmPerInch = 25.40;
        //FixedPageの解像度
        const double DPI = 96;

        var canvas = new Canvas();

        //線を作成する
        var line = new Line();
        line.Stroke = Brushes.Black;

        //ピクセルで太さ、始点、終点を指定
        //※ Pixel = ミリメートル ÷ インチへの換算係数 × 解像度
        line.StrokeThickness = 1 / MmPerInch * DPI;
        line.X1 = 20 / MmPerInch * DPI;
        line.Y1 = 20 / MmPerInch * DPI;
        line.X2 = 180 / MmPerInch * DPI;
        line.Y2 = 20 / MmPerInch * DPI;

        //作成した線をキャンバスに追加
        canvas.Children.Add(line);

        //印刷ドキュメントにキャンバスを追加
        FixedPage page = new FixedPage();
        page.Children.Add(canvas);
        PageContent content = new PageContent();
        content.Child = page;
        FixedDocument doc = new FixedDocument();
        doc.Pages.Add(content);

        //ドキュメントビューアコントロールを作成
        var viewer = new DocumentViewer();
        viewer.HorizontalAlignment = HorizontalAlignment.Left;
        viewer.VerticalAlignment = VerticalAlignment.Top;
        viewer.Margin = new Thickness(0, 0, 0, 0);
        viewer.Document = doc;

        //プレビュー用のウインドウを作成
        var previewWindow = new Window();
        previewWindow.Owner = this;
        previewWindow.Height = 600;
        previewWindow.Width = 800;

        //プレビュー用ウインドウにドキュメントビューアをセット
        previewWindow.Content = viewer;

        //プレビュー画面を表示
        previewWindow.ShowDialog();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}