BizDraw framework for .NET






4.80/5 (20投票s)
2007年2月2日
5分钟阅读

135431

3291
一个用于设计和打印包含形状、文本、图像、条形码...的文档的小型框架。
引言
我从 2003 年开始使用 Framework .NET。我现在已经精通 ADO.NET 和数据操作,并且无法想象使用其他框架。但是,我被要求为我们公司的用户创建一个工具,以便创建需要自由手绘和特殊打印功能的特殊文档。起初,我想知道 .NET Framework 是否具备创建此类应用程序所需的功能。这是因为我之前用 VB 6 尝试过类似的操作,结果是“NULL”。
经过几个小时的工作和网络搜索,我对 .NET Framework 的强大功能印象深刻,尤其是在看到 Paint.NET 项目之后。因此,我决定创建一个小型但非常有用的框架,以满足我们用户和我自己的需求。现在我确信 .NET Framework 不仅仅是 System.Data 命名空间,还有许多其他有趣的命名空间值得去探索。这是 BizDraw 应用程序可以做什么的预览。我现在用它来创建员工徽章(用于注册)以及带有条形码的用于制造产品的票证。
框架
我将从简要介绍框架的命名空间开始。
BizDraw.Core
Core 命名空间包含 Document 对象,该对象是框架的核心。您可以以编程方式访问文档的属性和方法,以完成您在设计器中所做的任何操作:添加/移动/更改对象、打印、保存、加载等。
BizDraw.Objects
这里是您可以插入文档的所有对象:文本、线条、矩形、椭圆、条形码、自由手绘。任何新对象都必须添加到此命名空间,例如图像对象。所有这些对象都继承自 DrawObject 抽象类。该命名空间还包含绘图对象的编辑器。通常,每个对象都有自己的编辑器。但我们发现了一些例外,例如矩形和椭圆对象,它们拥有相同的编辑器,因为它们的属性相同。我本可以基于 PropertyGrid 创建一个唯一的编辑器,但我更喜欢这种方式,以便获得更好的用户界面。这是文本对象编辑器的预览。
BizDraw.Tools
BizDraw 设计器需要工具。每个绘图对象都有其工具来定义操作、光标等。当然,指针工具是一个特殊工具,用于所有对象进行选择、调整大小和移动操作。
BizDraw.IO
这包含使保存/加载操作成为可能的 DocumentManager 类。这里使用了二进制序列化。该命名空间可以扩展以处理导出/导入操作,例如 BMP、PDF、Word 等。
BizDraw.Printing
打印是此框架中最有趣的功能。它不仅仅是单个文档打印;您可以根据文档大小、纸张大小和边距在同一张纸上打印多个文档。例如,您可以在一张 A4 纸上打印 44 张尺寸为 2.5 厘米 x 5 厘米的文档。您还可以通过在预览屏幕上使用鼠标自定义要打印的单元格。这是打印预览屏幕。
BizDrawData
在引言中,我说过我是 System.Data .NET 命名空间的粉丝,所以实现我自己的 BizDraw.Data 命名空间并不奇怪。此命名空间用于将文档连接到数据库。因此,您不必拥有静态文本字段,而是可以将文本对象与表或查询中的字段绑定。连接字符串编辑器和查询编辑器远非 Visual Studio 2005 向导,但它们工作得很好。
BizDraw.Interop
为了向后兼容,我添加了这个命名空间,以便可以使用 COM 来使用这个框架。因此,VB6 开发人员(如 Excel、MFC 等)无需任何编码工作即可享用该框架。他们只需在 Visual Studio 中编译项目,并直接从其 Visual Studio 6 IDE 中插入 DocumentSpace 控件,就像 OCX 一样。我已经完成了测试,我的 VB6 应用程序看起来就像一个 .NET 应用程序,尤其是在使用 .NET 2.0 工具栏之后。
BizDraw.BarCodes
这是一个用于条形码的特殊命名空间。我实现了 EAN13 条形码——感谢 Grand Zebu 提供的代码——但可以通过 IBarCode 接口轻松实现其他条形码格式。请不要担心更新 BarCodeEditor 窗体;它已经通过反射完成。
使用框架
这个框架提供了必要的控件;您只需在将引用添加到 _BizDraw.dll_ 后,将 DocumentSpace 控件从工具箱拖放到表单中。您也可以改用 DocumentArea 控件。在这种情况下,您必须定义自己的菜单并捕获必要的事件来更新用户界面。使用框架的另一种方法是编程。您可以创建一个新文档,添加一些对象,保存文档并将其打印到打印机。这里有一个小例子。
//Creating the Document
BizDraw.Core.Document myDoc = new Document();
myDoc.Name = "Simple test";
myDoc.Height = 25;
myDoc.Width = 50;
//Adding a text object
BizDraw.Objects.DrawText myText = new BizDraw.Objects.DrawText();
myText.Location = new PointF(0, 0);
myText.Font = new Font("Verdana", 14);
myText.Text = "Sample text object";
myDoc.Items.Add(myText);
//Saving the document
BizDraw.IO.DocumentManager.Save(myDoc, @"c:\Docs\SampleDoc.bzw");
//Printing 44 copies of the document
BizDraw.Printing.DocumentPrintEngine printEngine = new DocumentPrintEngine();
printEngine.Count = 44;
printEngine.Document = myDoc;
printEngine.Format = PrintFormat.GetFormats()[0];
// gets the first format in the formats directory
printEngine.Print();
//Freeing resources
myDoc = null; // We can also implemebnt IDisposable to the Document class
printEngine = null;
待办
- 实现撤销/重做操作
- 实现更多条形码
- 实现更多数据提供程序,目前只提供 SQL Server
- 在框架中,我为用户界面使用了毫米作为度量单位,为屏幕显示使用了像素,为打印机使用了英寸;必须进行一些修改才能在所有部分中使用一种度量单位。
结论
这对我来说是一个很好的机会,可以从经典的 ADO.NET 开发中转型。我希望这个框架至少能对一个人有所帮助。
历史
- 5/30/2007
- 文章已编辑并发布到 CodeProject.com 主文章库
- 3/1/2007
- Bug 修复:打印时仅打印预览模式下选定的单元格
- 应用程序已添加图像支持
- 2/2/2007
- 第一个版本发布在 Code Project