首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PrintDocument打印图像。如何调整图像以适应纸张大小

使用PrintDocument打印图像。如何调整图像以适应纸张大小
EN

Stack Overflow用户
提问于 2012-04-03 03:29:17
回答 6查看 110.2K关注 0票数 35

在C#中,我尝试使用PrintDocument类打印图像,代码如下。图像的大小为1200像素宽,1800像素高。我正尝试用一台小型zeebra打印机在4*6的纸张上打印这张图片。但是程序只打印了4*6张大图像。这意味着它不会将图像调整为纸张大小!

代码语言:javascript
复制
     PrintDocument pd = new PrintDocument();
     pd.PrintPage += (sender, args) =>
     {
           Image i = Image.FromFile("C://tesimage.PNG");
           Point p = new Point(100, 100);
           args.Graphics.DrawImage(i, 10, 10, i.Width, i.Height);
     };
     pd.Print();

当我使用窗口打印打印相同的图像时(右键单击并选择打印,它会自动缩放到纸张大小并正确打印。这意味着所有的东西都是用4*6的纸写的。)如何在我的C#程序中执行相同的操作?

EN

回答 6

Stack Overflow用户

发布于 2012-04-03 06:30:48

传递给DrawImage方法的参数应该是您希望在纸上显示的图像的大小,而不是图像本身的大小,然后DrawImage命令将为您处理缩放。最简单的方法可能是使用下面的DrawImage命令覆盖。

代码语言:javascript
复制
args.Graphics.DrawImage(i, args.MarginBounds);

注意:如果图像的比例与矩形不同,这将使图像倾斜。通过对图像大小和纸张大小进行一些简单的数学运算,您可以在不扭曲图像的情况下创建一个适合纸张边界的新矩形。

票数 38
EN

Stack Overflow用户

发布于 2013-10-11 05:01:52

我不想践踏BBoy已经不错的答案,但我已经完成了保持纵横比的代码。我接受了他的建议,所以他应该在这里得到部分学分!

代码语言:javascript
复制
PrintDocument pd = new PrintDocument();
pd.DefaultPageSettings.PrinterSettings.PrinterName = "Printer Name";
pd.DefaultPageSettings.Landscape = true; //or false!
pd.PrintPage += (sender, args) =>
{
    Image i = Image.FromFile(@"C:\...\...\image.jpg");
    Rectangle m = args.MarginBounds;

    if ((double)i.Width / (double)i.Height > (double)m.Width / (double)m.Height) // image is wider
    {
        m.Height = (int)((double)i.Height / (double)i.Width * (double)m.Width);
    }
    else
    {
        m.Width = (int)((double)i.Width / (double)i.Height * (double)m.Height);
    }
    args.Graphics.DrawImage(i, m);
};
pd.Print();
票数 29
EN

Stack Overflow用户

发布于 2015-06-30 23:12:33

BBoy提供的解决方案运行良好。但在我的例子中,我不得不使用

代码语言:javascript
复制
e.Graphics.DrawImage(memoryImage, e.PageBounds);

这将仅打印表单。当我使用MarginBounds时,即使窗体比显示器屏幕小,它也会打印整个屏幕。PageBounds解决了这个问题。感谢BBoy!

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9982579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档