c# - 打印未从页面的上边缘开始

标签 c# .net winforms printing

我正在尝试使用 Graphicss.DrawString() 打印一些 string。我已将边距设置为 printdocument 但不是从页面的原点开始。我已将 margins 设置为 (0,0,0,0) 但不知何故它打印在页面上边缘下方半厘米处。另一件事是它可以从左边缘打印。

下面是我的代码。

private void button1_Click(object sender, EventArgs e)
    {
        ////PaperSize pkCustomSize1 = new PaperSize("First custom size", 1020, 3517);
        ////printDocument1.DefaultPageSettings.PaperSize = pkCustomSize1;
        printPreviewDialog1.Document = printDocument1;
        printDocument1.PrinterSettings.PrinterName = this.comboBox1.Text;
        Margins margins = new Margins(0, 0, 0, 0);
        printDocument1.PrinterSettings.DefaultPageSettings.Margins = margins;
        printPreviewDialog1.Show();
        printDocument1.Print();
    }

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        int resX = GetPrinterResolutionX(comboBox1);
        int resY = PrnOpra.GetPrinterResolutionY(comboBox1);
        Graphics g = e.Graphics;

        float scale = resX / ScrnRes;
        Bitmap bm = new Bitmap(367, 1205);
        g.DrawRectangle(new Pen(Color.Black, 0.5F), panel9.Location.X / 2, panel9.Location.Y / 2, panel9.Width, panel9.Height);
        g.DrawImage(bm, 0, 0);
}

代码有什么问题?

最佳答案

您必须将 PrintDocument.OriginAtMargins 属性设置为 true 才能考虑边距。

来自 MSDN ,

当 OriginAtMargins 为真时,Graphics 对象位置会考虑 PageSettings.Margins 属性值和页面的可打印区域

但是从确切的边缘打印取决于打印设备的物理限制所定义的可打印区域。检查 HardMarginXHardMarginY 以获取打印机的物理原点。有关更多信息,请参阅 this 的答案问题。

关于c# - 打印未从页面的上边缘开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21448977/

相关文章:

c# - 数据网格 - "Two-way binding requires Path or XPath."

c# - 可通过索引和键访问的内置列表

.net - Blazor 应用程序如何能够在不调用 Startup.cs 中的 MapRazorPages() 的情况下公开 Razor Pages 端点?

c# - 取消固定在 .NET 套接字服务器中自动固定的 byte[]

c# - 为什么 StringBuilder 比字符串操作快,但 List<T> 比 LinkedList<T> 快?

c# - C++ CLI 句柄类型

c# - 同时接收 PictureBox 和 DataGridViewImageCell 的函数

macos - 在Mac上以32位模式运行交互式F#

c# - 为什么 KeyPress 的消息框显示在 KeyDown 之前?

c# - 可空类型作为 C# 中的函数参数