【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());
    }
}

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

参照設定で System.Drawing を追加する必要があります。

private void button1_Click(object sender, RoutedEventArgs e)
{
    var printDoc = new System.Drawing.Printing.PrintDocument();
    printDoc.DocumentName = "線の印刷サンプル";
    printDoc.PrintPage += PrintDoc_PrintPage;
    printDoc.Print();
}

private void PrintDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    //単位をミリメートルにする
    e.Graphics.PageUnit = System.Drawing.GraphicsUnit.Millimeter;
    //1mmのペンを作成する
    var pen = new System.Drawing.Pen(System.Drawing.Color.Black, 1);
    //ラインを引く
    e.Graphics.DrawLine(pen, new System.Drawing.Point(20,20), new System.Drawing.Point(180,20));
}