为什么不打印预览完全一样的纸张打印?

好吧,在你我的垃圾邮件与StringFormat.Alignment = StringAlignment.Center ......听到我的整个问题:

当我绘制文本用下面的代码,该字符串集中在打印预览,但不集中的实际纸张它打印时。 整个页面是关闭的右一点点,这样一些东西显示为打印在打印预览,但脱落的文件(不只是外边缘范围,但落纸)打印时。

private void button1_Click(object sender, EventArgs e) { PrintDocument pd = new PrintDocument(); pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); PrintPreviewDialog ppd = new PrintPreviewDialog(); ((Form)ppd).WindowState = FormWindowState.Maximized; ppd.Document = pd; ppd.ShowDialog(); } void pd_PrintPage(object sender, PrintPageEventArgs e) { for (int y = 100; y < 400; y += 25) { StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; e.Graphics.DrawRectangle(Pens.Black, new Rectangle(5, y, 840, 25)); } e.HasMorePages = false; }

任何想法,为什么它了吗? 这应该是微不足道的,但实际上并非如此。

编辑:我发现它不只是文字......这是打印所有设备只是一点点。 我已经更新上面的代码,以提供该问题的一个更好的例子。 刚落,这在窗体上有一个按钮。

编辑2:有了答案给定的,我已经修改了代码,这现在的作品。 我提供的那些可能想看到它的最终代码。 我不得不承认我是否在打印预览对话框,或在纸面上看到这一点,让我有一种IsPreview标志来处理这个问题。

public partial class Form1 : Form { bool IsPreview = true; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { IsPreview = true; PrintDocument pd = new PrintDocument(); pd.EndPrint += new PrintEventHandler(pd_EndPrint); pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); PrintPreviewDialog ppd = new PrintPreviewDialog(); ((Form)ppd).WindowState = FormWindowState.Maximized; ppd.Document = pd; ppd.ShowDialog(); } void pd_EndPrint(object sender, PrintEventArgs e) { IsPreview = false; } void pd_PrintPage(object sender, PrintPageEventArgs e) { Rectangle b3 = e.PageBounds; if (IsPreview) { e.Graphics.TranslateTransform(e.PageSettings.HardMarginX, e.PageSettings.HardMarginY); } b3.Width -= (int)e.PageSettings.HardMarginX * 2; b3.Height -= (int)e.PageSettings.HardMarginY * 3; int y = b3.Y; int x=0; while ((y + 25) < b3.Bottom) { x++; StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; Rectangle R = new Rectangle(b3.X, y, b3.Width, 25); e.Graphics.DrawRectangle(Pens.Black, R); e.Graphics.DrawString(x.ToString(), this.Font, Brushes.Black, b3.X + 5, y + 5); y += 25; } // draw the last little bit e.Graphics.DrawRectangle(Pens.Black, new Rectangle(b3.X, y, b3.Width, b3.Height - y)); e.HasMorePages = false; } }

--------------解决方案-------------

作为驰向正确的往往是可解释的价值PageSettings.HardMarginX财产。 由打印机驱动器产生的值。 打印机驱动程序通常却不太擅长猜测通过打印机纸张的实际路径可能的样子。 这是机械的,夹送辊,纸盒调校和诸如此类的东西。 软件工程师和机械工程师没有共进午餐往往不够。

但是,一个软件工程师几乎总是可以修复的机械工程师的问题。 你需要一个选项对话框,允许用户以固定的机械工程师的问题。 使用中的价值e.Graphics.TranslateTransform电话。

究其原因,预览不匹配的纸张是因为你没有选择的打印机呢。 每个打印机是一个有点不同的东西,像打印区域,迫使利润率等,已经有一段时间,因为我做的WinForms印刷,但我记得,通过图形对象有办法来解释这一点。

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#的WinForms,印刷
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.274 (s). 10 q(s)