0

我正在尝试制作一个程序,将图像文件打印到打印机上 A4 大小的纸上。(图像缩放到 A4)这是我目前正在使用的代码。

Function.cs        

    Image tmp;
    public void PrintImage(string FileName)
    {
        tmp = Image.FromFile(FileName);
        PrintDocument printDoc = new PrintDocument();
        printDoc.DocumentName = "My Print Document";
        printDoc.PrintPage += new PrintPageEventHandler(OnPrintPage);
        // Send print message
        Console.WriteLine("Sending Print Message...");
        try
        {
            printDoc.Print();
        }
        catch(Exception)
        {
            Console.WriteLine("Error: No Printer Installed");
        }
        //
        // Event Handler
        //
    }
    private void OnPrintPage(object sender, PrintPageEventArgs ppea)
    {
    Console.WriteLine("Printing...");
    Graphics g = ppea.Graphics;
    g.DrawImage(tmp,0,0);
    }



Main.cs

    string ReceiptFilePath = "C:\\Receipt.jpg"; // The Image I want to print.

    private void button1_Click(object sender, EventArgs e)
    {
        functions.PrintImage(ReceiptFilePath);
    }

使用上面的代码,它可以打印,但它不是 A4 大小,而是放大了近 400%。我应该如何修改代码?

4

1 回答 1

2

图片缩放到A4

这就是问题陈述。PrintDocument 已经缩放。它将您从 PrintPage 事件处理程序中的 e.Graphics 获得的 Graphics 实例初始化为 PageUnit = GraphicsUnit.Display。这是一种预先准备好的缩放模式,使一个像素在纸上变为 0.01 英寸。或者换句话说,100 x 100 像素的图像在纸上变成 1.00 x 1.00 英寸。

这是一种方便的缩放模式,选择它可以使您在屏幕上绘制的任何内容在纸上的大小大致相同。视频适配器倾向于以每英寸 96 点的分辨率运行。尽管这种情况正在发生变化,但后来的 Windows 版本使增加这一点变得非常容易。

因此,通过预缩放图像,您最终会使图像变大。然后通过打印机的 Graphics 对象完成的额外缩放使其在纸上变得太大。

提供更好的建议并不容易,因为您没有描述如何预缩放图像。简单地不进行预缩放可能已经解决了您的问题。使用 Graphics.DrawImage(Image, Rectangle) 重载可能是更好的选择,它可以让您直接控制纸上图像的大小。还让您有机会处理不同的纸张尺寸并仍然使图像适合。

于 2013-05-03T11:19:22.020 回答