第一种选择:将表单位图复制到文件
您可以执行以下操作:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
....
// This code saves the current Form Control.
// In order to save some other Control,
// replace "this" by the Control object
Control ctl = this;
Bitmap bm = new Bitmap(ctl.Bounds.Width, ctl.Bounds.Height);
Graphics g = Graphics.FromImage(bm);
g.CopyFromScreen(ctl.Left, ctl.Top, 0, 0, bm.Size);
g.Dispose();
bm.Save("bitmap.jpg", ImageFormat.Jpeg);
....
请注意,生成的图片不会有表单的漂亮圆角。
需要一些装饰来删除角落周围的屏幕背景。由于表单的半透明性质,部分屏幕内容是可见的。
添加一些错误检查并计算所需的文件名。
第二种选择:将表单控件绘制到位图
正如@Alexander 在他的评论中所建议的那样:
Control ctl = this;
Rectangle rectangle = ctl.Bounds;
Bitmap bm = new Bitmap(rectangle.Width, rectangle.Height);
Graphics g = Graphics.FromImage(bm);
Rectangle bmRectangle = new Rectangle(0, 0, bm.Width, bm.Height);
ctl.DrawToBitmap(bm, bmRectangle);
g.Dispose();
bm.Save("bitmap.jpg", ImageFormat.Jpeg);
此变体可避免屏幕背景的可见部分出现问题。
似乎不需要递归调用。
第三种选择:创建 HTML 并使用外部渲染工具
您可以从您的C# 应用程序创建一个HTML 文本文件并调用external tool 将HTML 转换为JPG。
HTML到JPG的渲染可以使用wkhtmltoimage来完成:
set IN=yyy.html
set OUT=xxx.jpg
set HEIGHT=640
wkhtmltoimage.exe --height %HEIGHT% %IN% %OUT%
打印尺寸 A4 是缩放问题。