winforms 基于英寸打印矩形导致大小错误

kzipqqlq  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(159)

尝试基于打印机dpi以英寸为单位打印矩形。在8.5x11的纸张上,可打印区域的宽度报告为850,而dpi报告为600。这很奇怪。我试图乘以英寸 * dpi,得到一个太大的框。(显然)我从

PrinterSettings.DefaultPageSettings.PrinterResolution.X;

结果是600我在这里遗漏了什么,为什么宽度与分辨率相差如此之大?

PrintDataPage dp = PrintData[Pageno];
float yloc = Top;
Rectangle Box = new();
PointF point;
int dpi = prdc.PrinterSettings.DefaultPageSettings.PrinterResolution.X;
// float pry = prdc.PrinterSettings.DefaultPageSettings.PrinterResolution.Y;
int bFixWidth =(int) (dpi * 1.875f);
int bFixHeight = (int)(dpi * .1875f);
mec1mxoz

mec1mxoz1#

我做了一些测试,发现Graphics.PageUnit被设置为GraphicsUnit.Display。因此,将其更改为GraphicsUnit.Pixel以获得所需的结果。

private void Pd_PrintPage(object sender, PrintPageEventArgs e)
{
    int dpi = e.PageSettings.PrinterResolution.X;
    e.Graphics.PageUnit = GraphicsUnit.Pixel; // <== This fixes the scaling problem.

    float sizeInInches = 1.0f;

    // Draws a rectangle of one inch in size at the upper left page margins.
    e.Graphics.DrawRectangle(Pens.Blue, 0, 0, dpi * sizeInInches, dpi * sizeInInches);
}

请注意,我设置了printDocument.OriginAtMargins = true;。否则,您将不得不手动添加边距。
我还做了一个测试,将单位设置为GraphicsUnit.Inch,以便能够直接以英寸绘制。但由于未知的原因,这并不起作用。

相关问题