如何将用户输入从毫米转换为像素,以便将其打印在页面的正确位置?
我使用以下代码:
private void document_PrintPage(object sender, PrintPageEventArgs e)
{
float dpiX = e.Graphics.DpiX;
float dpiY = e.Graphics.DpiY;
Point p = new Point(mmToPixel(float.Parse(edtBorderLeft.Text), dpiX),
mmToPixel(float.Parse(edtBorderTop.Text), dpiY));
e.Graphics.DrawImage(testImage, p);
}
private int mmToPixel(float mm, float dpi)
{
return (int)Math.Round((mm / 25.4) * dpi);
}
edtBorderLeft.Text的值为“9.5”,edtBorderTop.Text的值为“21,5”。这些值是毫米。如果我用这段代码检查输出:
private void printPage()
{
PrintDialog dialog = new PrintDialog();
dialog.Document = document;
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
PrintPreviewDialog preview = new PrintPreviewDialog();
preview.Document = document;
preview.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
preview.Show();
//document.Print();
}
}
它几乎在页面中央显示图像。计算示例:
mmToPixel(float.Parse(edtBorderLeft.Text),dpiX) edtBorderLeft.Text =“9.5” dpiX = 600; 返回:224
如何计算打印图像的正确点?
答案 0 :(得分:6)
我找到了解决方案。您可以使用以下代码更改页面单位。所以我不需要转换:
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
或
e.Graphics.PageUnit = GraphicsUnit.Pixel;
我可以使用上面的代码。
答案 1 :(得分:5)
只是添加一点解释。默认情况下,Graphics.PageUhit设置为“Display”。对于屏幕显示,这通常意味着每英寸96像素,对于打印机,它是每英寸100个点。这个信息埋藏在MSDN中,但很难找到。
因此,对于打印机而言,您可以假设值为100,而不是使用dpiX / dpiY,但将单位设置为毫米可能更安全。