C#无法打印正确的图像尺寸

时间:2013-05-03 09:12:40

标签: c# printing

我正在尝试制作一个程序,将打印机上的图像文件打印到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%。我该如何修改代码?

1 个答案:

答案 0 :(得分: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)重载可能是一个更好的选择,它可以让您直接控制纸张上的图像大小。同时让您有机会处理不同的纸张尺寸并使图像更合适。