印刷质量winform

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类一样.使用报告生成器可以帮助避免为其编写代码.

  • `如果你试图保持像素映射一对一,你将在纸上获得一个锋利的副本.但它已经变成了一张邮票.这真的让我笑得很开心.汉斯,你真棒! (3认同)