【C#】ミリメートル指定で線を印刷してみる(XPS)

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

  • System.Printing

  • ReachFramework

private void button_Copy_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 defaultPrinter = LocalPrintServer.GetDefaultPrintQueue();

        //ジョブ名を設定する
        defaultPrinter.CurrentJobSettings.Description = "線の印刷サンプル(XPS)";

        //印刷用ライターを作成
        var docWriter = PrintQueue.CreateXpsDocumentWriter(defaultPrinter);

        //印刷
        docWriter.Write(doc);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}