打印适合纸张C#

时间:2016-03-04 19:36:48

标签: c# .net image winforms printing

关于

我正在使用WinForms。在我的表格中,我有一个打开和打印按钮。 “打开”按钮可将tif图像打开到图片框中。打印按钮从图片框中打印这些图片。我使用大图像文档,例如宽度和长度:(3000,3600)。因此,我将这些tif图像文档缩放到适合常规打印纸张尺寸(8.5 x 11)。我这样做的原因是使用下面的方法,tif图像上的字母不会模糊。

问题

好消息是它很好地缩放意味着它不模糊。坏消息是它缩小了很多。见图A.2

测试

测试i增加和减少* 100奇怪的是它不会增加尺寸但是它会减小尺寸

float newWidth = i.Width * 100 / i.HorizontalResolution;
float newHeight = i.Height * 100 / i.VerticalResolution;


代码

        private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        { //pageViewer = picturebox
            Image i = pageViewer.Image;

            float newWidth = i.Width * 100 / i.HorizontalResolution;
            float newHeight = i.Height * 100 / i.VerticalResolution;

            float widthFactor = newWidth / e.MarginBounds.Width;
            float heightFactor = newHeight / e.MarginBounds.Height;

            if (widthFactor > 1 | heightFactor > 1)
            {
                if (widthFactor > heightFactor)
                {
                    newWidth = newWidth / widthFactor;
                    newHeight = newHeight / widthFactor;
                }
                else
                {
                    newWidth = newWidth / heightFactor;
                    newHeight = newHeight / heightFactor;
                }
            }
            e.Graphics.DrawImage(i, 0, 0, (int)newWidth, (int)newHeight);
        }


如何打印

enter image description here

目前的打印方式 图A.2 enter image description here

1 个答案:

答案 0 :(得分:3)

您的图片已包含边距,因此当您使用e.MarginBounds属性时,您的边距实际上会翻倍。要修复,请改用PageBounds属性。

float widthFactor = newWidth / e.PageBounds.Width;
float heightFactor = newHeight / e.PageBounds.Height;