从表单打印面板时分辨率低

4
我的项目是从表格中打印一个面板,但分辨率非常糟糕。我查阅了很多帖子,发现主要问题是显示器和打印机之间的DPI差异。我试图将位图设置得更大,并以我想要的正确大小进行打印,但似乎我无法设置它们。分辨率仍然很差,而且大小变化不可控。如果我将位图大小设置为超过10k,它将在打印预览对话框中消失。以下是我的代码:
    Bitmap MemoryImage;
    public void GetPrintArea(Panel pnl)
    {

        MemoryImage = new Bitmap(9000,9000);
        Rectangle rect = new Rectangle(0,0,9000,9000);
        pnl.DrawToBitmap(MemoryImage, rect);

    }

    void doc_PrintPage(object sender, PrintPageEventArgs e)
    {
        GetPrintArea(flowLayoutPanel1);
        Rectangle pagearea = new Rectangle(0,0,5000, 5000);
        e.Graphics.DrawImage(MemoryImage,pagearea);
    }

    PrintDocument doc = new PrintDocument();
    private void button1_Click(object sender, EventArgs e)
    {
        PrintDocument doc = new PrintDocument();
        doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
        PrintPreviewDialog dlg = new PrintPreviewDialog();
        PaperSize psize = new PaperSize("A4 300DPI", 2480, 3508);
        doc.PrinterSettings.DefaultPageSettings.PaperSize = psize;
        dlg.Document = doc;
        dlg.ShowDialog();
    }

我希望获取面板并以像打印Word文档一样的分辨率将其打印在A4纸上。我花了近一个星期的时间尝试解决这个问题">"<。请救救我...

在网上有很多关于如何创建与屏幕相同DPI的表单图像的参考资料;但是您想将图像缩放到全页大小进行打印,是这样吗? - Ernest Friedman-Hill
只需确保面板上的一个像素变成纸张上的一个像素。这将非常清晰。但是,需要放大镜。您当然可以将其打印得更大。但是,您需要更长的手臂才能使其看起来清晰。大约需要6倍的长度。您需要得出的结论是,打印面板并不是一个好主意。 - Hans Passant
@Ghashgul,你为什么没有接受我的答案?我看到了。 - Ehsan
我以为我做了,也许我点击了两次,我的错,谢谢回答。 - Ghashgul
1个回答

3

我花了将近一周的时间来解决这个问题。

如果你还在错误的道路上,即使再试一周也无法解决它。

知道主要问题是显示器和打印机之间的DPI差异。

你知道问题并且知道没有解决方案,但仍然继续尝试。

解决方案:如果你想在报告中呈现一些数据,那么我不认为打印面板是解决方案。你应该考虑以报告的形式打印报告。比如,考虑制作一个RDLC/Crystal报告,并在报告中放置所需的数据。简而言之,使用报告进行报告


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接