Windows表格打印的单位是不是一直都是100dpi点?

Is the unit in Windows Forms printing always 100dpi point?

使用PrintDocumentclass打印Windows表格时坐标系的单位是什么?需要此信息才能在特定位置以特定尺寸打印内容。

PrintPage event, the PrintPageEventArgs instance has the properties Graphics and PageBounds。他们似乎使用相同的坐标系。

对于 A4 纵向 sheet,PageBounds returns 大小为 827 x 1169。给定 A4 sheet 为 210mm x 297mm,单位 Graphics / PageBounds 单位似乎是 pixels/points 100dpi。 (827 / 210 * 25.4 = 100.0278, 1169 / 297 * 25.4 = 99.9751).

使用100dpi缩放定位对象,绘制结果正确。但它总是 100dpi 吗?或者如何查询单位?

(查询Graphics.DpiX不行,returns600dpi,是打印机DPI,不是坐标系DPI。)

private void PrintButton_Click(object sender, EventArgs e)
{
    PrintDocument pd = new PrintDocument();
    pd.PrintPage += new PrintPageEventHandler(PrintDocument_PrintPage);
    pd.Print();
}

private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
    Rectangle bounds = e.PageBounds; // For A4 portrait sheet: {X = 0 Y = 0 Width = 827 Height = 1169}
    float dpi = e.Graphics.DpiX; // 600
    DrawIt(e.Graphics);
}

感谢吉米指出单位是显示。简短的回答是:打印总是 100dpi。

Graphics 实例使用 GraphicsUnit.Display as the PageUnit。对于打印机,这是 1/100 英寸打印机 ,即 100dpi。文档说 “通常” 但这可能指的是 视频显示

它也与PrinterUnit.Display重合,总是0.01in。

由于 图形 测量值也与 PageBounds, I can probably safely assume that PageBounds and other PrintPageEventArgs 属性一致,因此也使用 打印机显示单位 100dpi。虽然没有记录。