Eli*_*net 12 c# printing winforms
尝试从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);
}
Run Code Online (Sandbox Code Playgroud)
Han*_*ant 18
这一次又出现了.没有神奇的解决方案,尽管最终问题可能会消失."视网膜"显示器的出现是关键.
核心问题是,显示器具有的分辨率是大大高于打印机更糟.典型的打印机的分辨率为每英寸600点.这使它能够在一张纸上打印6600 x 5100个别像素.多,很多比显示器可以显示更多的,全高清显示器,在1920 x 1080像素冠上.差不多大约5倍,给予或接受.
当您将显示在显示器上的内容打印在纸张上并尝试保持相同尺寸时,效果不佳.不可避免地,由于显示器上缺少像素,显示器中的每个像素都会在纸上打印为5x5的斑点.如果你试图保持像素映射一对一,你将在纸上获得一个锋利的副本.但它已经变成了一张邮票.
不可避免的是,由于这些像素斑点,打印输出看起来非常粗糙.看起来特别差的是文字.操作系统使用大量技巧使文本在分辨率较差的显示器上看起来很好.抗锯齿是标准的,像ClearType这样的技巧旨在利用可以帮助提高感知分辨率的监视器物理.当打印文本时,这不再有效,那些抗锯齿像素变成斑点并变得非常明显,完全破坏了效果.对彩色打印机上的ClearType文本特别不好,现在可以清楚地看到红色和蓝色的条纹.
唯一合适的方法是使用实际分辨率而不是显示器分辨率渲染到打印机.就像在.NET中使用PrintDocument类一样.使用报告生成器可以帮助避免为其编写代码.
| 归档时间: |
|
| 查看次数: |
4538 次 |
| 最近记录: |