Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 生成员工卡_C#_Drawing - Fatal编程技术网

C# 生成员工卡

C# 生成员工卡,c#,drawing,C#,Drawing,我们公司想为我们的员工打印员工卡,所以我们准备了一个模板,其中包含每个人的照片、姓名和部门的占位符。 我们有一个数据库表,其中包括照片路径、每个人的姓名和部门。 我想知道是否有可能通过该表循环并将人员数据添加到卡模板中并保存它。 我使用的是C.Net,但如果你知道一个更好的解决方案,我很乐意听 好吧,只是一个想法可能不起作用,但我想我会抛出一些东西,也许会有所帮助 你可以创建一个程序,按照你说的那样循环数据库。但是对于员工卡,创建一个用户界面,比如一个图形框和一些文本框;在Ui上创建/使用打印功

我们公司想为我们的员工打印员工卡,所以我们准备了一个模板,其中包含每个人的照片、姓名和部门的占位符。 我们有一个数据库表,其中包括照片路径、每个人的姓名和部门。 我想知道是否有可能通过该表循环并将人员数据添加到卡模板中并保存它。 我使用的是C.Net,但如果你知道一个更好的解决方案,我很乐意听


好吧,只是一个想法可能不起作用,但我想我会抛出一些东西,也许会有所帮助

你可以创建一个程序,按照你说的那样循环数据库。但是对于员工卡,创建一个用户界面,比如一个图形框和一些文本框;在Ui上创建/使用打印功能,使打印输出的窗口无边框

我不确定这是否会起作用,因为我用C++,从来没有真正想过做这样的事情,但我从我的头上得到这个给你,你永远不会知道!p>
但很明显,我猜你是在用高质量的塑料印刷,还是在层压?这不是真正的问题,只是感兴趣:

好吧,只是一个想法可能不管用,但我想我会抛出一些东西来帮助你

你可以创建一个程序,按照你说的那样循环数据库。但是对于员工卡,创建一个用户界面,比如一个图形框和一些文本框;在Ui上创建/使用打印功能,使打印输出的窗口无边框

我不确定这是否会起作用,因为我用C++,从来没有真正想过做这样的事情,但我从我的头上得到这个给你,你永远不会知道!p>
但很明显,我猜你是在用高质量的塑料印刷,还是在层压?这不是真正的问题,只是感兴趣:

使用C和GDI一点问题都没有+

以下是简短的版本:

创建大小和分辨率正确的位图 测量你想要的图像和文本的坐标 从数据库中提取数据 使用Graphics.DrawImage和Graphics.DrawString创建图形 以您喜欢的格式保存,最好是PNG格式,这样可以保持文本清晰 详情如下:

您需要计算图像应有多少像素。由于您希望能够打印它,您应该使用至少150dpi或200dpi。 您发布的图像没有DPI设置和1004x638像素;将其设置为150dpi将导致物理尺寸为170x108 mm。让我们假设这是可以的

因此,我们使用以下参数创建位图:

Size keyCardSize = new Size (1004, 638);
float Dpi = 150f;
Bitmap bmp = new Bitmap(keyCardSize.Width, keyCardSize.Height);
bmp.SetResolution(Dpi, Dpi);
下面的代码将使用毫米作为单位。您可能需要将此更改为其他内容。 查看您的模板,我们会看到6个图像徽标、照片和4个图标以及7块文本名称、职位、部门和四条联系人文本

使用图形G绘制图像或文本的基本命令如下所示:

   G.DrawImage(bitmap, location);
   G.DrawString(text, font, brush, location);
在我们的例子中,这适用于徽标和照片,因为它们是左对齐的。您需要做的就是测量位置并创建定位点。确保以正确的大小和分辨率创建图像,或者调整dpi以弥补不同的像素大小

更新:我已经包括代码,以适应照片的dpi,使宽度适合在模板中的30毫米帧。这假设比例是正确的和/或我们更关心宽度而不是高度。。如果我们需要两者匹配,要么得到正确的比例,要么要求裁剪代码-

测量我们的其他项目有点复杂,因为它们都是右对齐的。下面是如何对字符串txt1执行此操作的示例:

SizeF s1 = G.MeasureString(txt1, font1, PointF.Empty, StringFormat.GenericTypographic);
G.DrawString(txt1, font1, brush1, new Point((int)(rightBorder - s1.Width), y1));
您可以而且必须测量每个位置的顶部Y,但左侧X必须如上所述进行计算

请注意,您需要告诉测量命令要使用的字体;忽略其他参数!测量右边框后,这些命令将与必要的数据和图形对象配合使用

从数据库中提取数据。我想你能做到!我进一步假设,您可以更改和扩展下面的代码,以填充数据字段,并使文件名与您的记录动态。。 4号和5号。请参见以下代码示例:

我希望这能让你走。如果你有问题,请随时提问

以下是初步结果:


事后思考:您可能希望通过使用模板作为起点来简化整个代码:您可以将徽标、图标和竖条全部放置到位,只需绘制一个图像和文本

使用C和GDI根本没有问题+

以下是简短的版本:

创建大小和分辨率正确的位图 测量你想要的图像和文本的坐标 从数据库中提取数据 使用Graphics.DrawImage和Graphics.DrawString创建图形 以您喜欢的格式保存,最好是PNG,因为这样可以保留文本shar P 详情如下:

您需要计算图像应有多少像素。由于您希望能够打印它,您应该使用至少150dpi或200dpi。 您发布的图像没有DPI设置和1004x638像素;将其设置为150dpi将导致物理尺寸为170x108 mm。让我们假设这是可以的

因此,我们使用以下参数创建位图:

Size keyCardSize = new Size (1004, 638);
float Dpi = 150f;
Bitmap bmp = new Bitmap(keyCardSize.Width, keyCardSize.Height);
bmp.SetResolution(Dpi, Dpi);
下面的代码将使用毫米作为单位。您可能需要将此更改为其他内容。 查看您的模板,我们会看到6个图像徽标、照片和4个图标以及7块文本名称、职位、部门和四条联系人文本

使用图形G绘制图像或文本的基本命令如下所示:

   G.DrawImage(bitmap, location);
   G.DrawString(text, font, brush, location);
在我们的例子中,这适用于徽标和照片,因为它们是左对齐的。您需要做的就是测量位置并创建定位点。确保以正确的大小和分辨率创建图像,或者调整dpi以弥补不同的像素大小

更新:我已经包括代码,以适应照片的dpi,使宽度适合在模板中的30毫米帧。这假设比例是正确的和/或我们更关心宽度而不是高度。。如果我们需要两者匹配,要么得到正确的比例,要么要求裁剪代码-

测量我们的其他项目有点复杂,因为它们都是右对齐的。下面是如何对字符串txt1执行此操作的示例:

SizeF s1 = G.MeasureString(txt1, font1, PointF.Empty, StringFormat.GenericTypographic);
G.DrawString(txt1, font1, brush1, new Point((int)(rightBorder - s1.Width), y1));
您可以而且必须测量每个位置的顶部Y,但左侧X必须如上所述进行计算

请注意,您需要告诉测量命令要使用的字体;忽略其他参数!测量右边框后,这些命令将与必要的数据和图形对象配合使用

从数据库中提取数据。我想你能做到!我进一步假设,您可以更改和扩展下面的代码,以填充数据字段,并使文件名与您的记录动态。。 4号和5号。请参见以下代码示例:

我希望这能让你走。如果你有问题,请随时提问

以下是初步结果:


事后思考:您可能希望通过使用模板作为起点来简化整个代码:您可以将徽标、图标和竖条全部放置到位,只需绘制一个图像和文本

保存为什么?图像、PDF文件、XML?事实上,这并不重要,真的-是的!这是可能的@TaW将其保存为jpeg文件会很好。你能帮我更多吗,一个链接或教程?当然。但是首先告诉我们更多关于你的意思,我们准备了一个模板,其中包含每个人的照片、姓名和部门的占位符。那个模板是什么?还有图像吗?一组测量值,每个零件的位置和尺寸?你能发布该模板的截图吗?@TaW谢谢你的帮助。更新了我的Q,是的,卡片模板是一个图像psd或jpeg,其中一些地方必须填写员工信息。我看到,即使在我的所有更正进入之前,您已经接受了答案。注意:我刚刚添加了代码,使照片在模板上始终具有正确的宽度。保存为什么?图像、PDF文件、XML?事实上,这并不重要,真的-是的!这是可能的@TaW将其保存为jpeg文件会很好。你能帮我更多吗,一个链接或教程?当然。但是首先告诉我们更多关于你的意思,我们准备了一个模板,其中包含每个人的照片、姓名和部门的占位符。那个模板是什么?还有图像吗?一组测量值,每个零件的位置和尺寸?你能发布该模板的截图吗?@TaW谢谢你的帮助。更新了我的Q,是的,卡片模板是一个图像psd或jpeg,其中一些地方必须填写员工信息。我看到,即使在我的所有更正进入之前,您已经接受了答案。注意:我刚刚添加了代码,使照片在模板上始终具有正确的宽度。PointintrightBorder-s1。宽度这一行中的rightBorder是什么意思?PointintrightBorder-s1。宽度这一行中的rightBorder是什么意思?在那个示例行中,我说的是一般术语;在后面的代码中,我将其命名为rBorder,以使其略短一些。它是,在选定的单位中,纸张的右边框。那么你是指纸张的全宽-文本的长度-右边框?可以对齐文本吗?不管文本长度。嗯,forumla确实包含tect长度,不是吗?但是,有一种方法可以与自动对齐。为此,您需要一个足够大的矩形,以右边框结束,系统将负责测量和对齐..PointintrightBorder-s1.宽度这一行中的右边框是什么意思?PointintrightBorder-s1.宽度这一行中的右边框是什么意思?在那个示例行中,我说的是一般术语;在后面的代码中,我将其命名为rBorder,以使其更简单
呃。它是,在选定的单位中,纸张的右边框。那么你是指纸张的全宽-文本的长度-右边框?可以对齐文本吗?不管文本长度。嗯,forumla确实包含tect长度,不是吗?但是,有一种方法可以与自动对齐。为此,您需要一个足够大的矩形,在右边框结束,系统将负责测量和对齐。。