尝试从WinForms应用程序打印时出现2个问题。首先是非常糟糕的质量,无论我尝试什么。第二个是我在左上角有一个很大的页边距,而winform正在剪切。有任何想法吗?这是我的代码:
Bitmap MemoryImage;
public void GetPrintArea(Panel pnl)
{
MemoryImage = new Bitmap(pnl.Width, pnl.Height);
Rectangle rect = new Rectangle(0, 0, pnl.Width, pnl.Height);
pnl.DrawToBitmap(MemoryImage, new Rectangle(0, 0, pnl.Width, pnl.Height));
}
protected override void OnPaint(PaintEventArgs e)
{
if (MemoryImage != null)
{
e.Graphics.DrawImage(MemoryImage, 0, 0);
base.OnPaint(e);
}
}
void printdoc1_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
Rectangle pagearea = e.PageBounds;
e.Graphics.DrawImage(MemoryImage, (pagearea.Width / 2) - (this.panel1.Width / 2), this.panel1.Location.Y);
}
public void Print(Panel pnl)
{
panel1 = pnl;
GetPrintArea(pnl);
printPreviewDialog1.Document = printdoc1;
printPreviewDialog1.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
Print(this.panel1);
}
最佳答案
这一遍又一遍地出现。尽管最终该问题可能会消失,但没有魔术解决方案。 “视网膜”显示器的出现至关重要。
核心问题是显示器的分辨率大大低于打印机。典型的打印机具有每英寸600点的分辨率。这使其能够在一张纸上打印6600 x 5100单个像素。全高清监视器的分辨率远远超过监视器的显示能力,最高可显示1920 x 1080像素。给予或接受大约是差5倍。
当您在一张纸上打印监视器上显示的内容并尝试保持相同尺寸时,这样做的效果很差。不可避免地,由于监视器上缺少像素,因此监视器上的每个像素都作为5x5 Blob 打印在纸上。如果您尝试使像素保持一一对应,则会在纸上获得清晰的副本。但是它变成了邮戳。
不可避免地,由于这些像素 Blob ,打印输出看起来非常粗糙。看起来特别糟糕的是文本。操作系统使用许多技巧来使文本在分辨率较差的监视器上看起来不错。抗锯齿是标准的,ClearType之类的技巧旨在利用显示器物理特性来帮助提高可感知的分辨率。当打印文本时,这不再起作用,那些抗锯齿像素变成 Blob 并变得非常明显,从而完全破坏了效果。对于彩色打印机上的ClearType文本特别不利,现在可以清楚地看到红色和蓝色条纹。
唯一可行的方法是使用实际分辨率而不是监视器分辨率渲染到打印机。就像在.NET中使用PrintDocument类一样。使用报告生成器可以帮助避免为它编写代码。
关于c# - 打印质量Winform,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12510811/