首页
登录 | 注册

一个打印报表的简单的类

一、前两天为公司改程序,其中有一部分是要打印出报表。原来的程序是调用VB写的一个程序。那个程序用VBA方式实现的,在一个空的WORD表格模板里填入数据,让WORD去打印,效果还可以,就是速度很慢。但是这次,上次写代码的人已经不在这里了, 我并不想去学VBA,无奈之下找到了一个Rob.A Fraydl写的打印类示例,但是里面没有我要的功能,只是示范了怎么去打印。于是自己重新的封装了一下,基本算是合格了。
    程序实现了在指定位置画横线和竖线的功能,可以在画线之前选画笔,以及在指定的区域写文字的功能,并可以设定选择字体。

二、关于类,简单说明如下:
class CPrintRX  
{
public:
 void MoveTo(int xCur, int yCur);
 int GetStrSize(char *str, CSize& size);
 int GetWidth();
 void NewPage();             //开始新的一页
 void EndPage();             //结束一页
 int StartPage();            //开始一页
 void SetDistance (int punkte);
 int SetMargins(int Top, int Bottom, int Left, int Right);
 int EndPrint();             //结束作业
 int StartPrint();           //开始打印作业
 int InitToPrint(char *PrinterName, int Copies);  
                             //初始化
 int SetFontFace(int iFont, int iFace);
 int AddFont(LOGFONT *lf);   //添加字体
 int AddFont(CFont &newfont);
 int DrawVLine(int x_up, int y_up, int x_bottom, int y_bottom, CPen &newpen);
 int DrawVLine(int x_up, int y_up, int x_bottom, int y_bottom);
 int DrawHLine(int x_left, int y_left, int x_right, int y_right, CPen & newpen);
 int DrawHLine(int x_left, int y_left, int x_right, int y_right);
 int DrawText(char *str, CRect& m_rt, int iFont = 0, int iFace = 0, int format = FORMAT_NORMAL);
 int DrawText(char *str, int iFont = 0, int iFace = 0, int format = FORMAT_NORMAL);
 CPrintRX();
 virtual ~CPrintRX();

private:
 CDC  m_DC;           // 打印的设备内容
 HDC  m_hPrinter;     // 当给定了一个打印机的时候使用
 CDC  m_PrinterDC;    // 没有指定打印机的时候使用

 CFont* m_font[10][4];// 存放字体的的变量
 int  m_nFonts;       // 现有的字体数
 int  m_iFont;        // 使用的字体索引
 int  m_iFace[10];    // 使用的风格索引

 int  m_nCopies;      // 打印的份数
 CSize  m_WorkSize;   // 纸张的物理的宽度,以打印机的像素数为准
 CRect  m_Margins;    // 使用范围,以屏幕的像素数为准
 int  m_yCur;         // 当前的鼠标的位置Y
 int  m_xCur;         // 当前的鼠标的位置X
 int  m_Abstand;      // 行间距
 int  m_iPage;        // 当前的页数
 int  m_LastErrNo;    // 最后一个错误值
 CPrintDialog  *m_pPrintDlg;
                      // 使用打印机设置对话框
};
在使用时候流程是这样的:
CPrintRX m_Print; m_Print.InitToPrint(NULL, 1); // 调用打印对话框,初始化得到设备内容 m_Print.StartPrint(); // 开始一个新的打印作业 m_Print.StartPage(); // 开始新的一页 CPen newPen; // 新建一个画笔 newPen.CreatePen (PS_SOLID, 3, RGB(0,0,0)); m_Print.DrawVLine(x_pos[0], y_pos[0], x_pos[0], y_pos[29], newPen); // 画横线 m_Print.EndPage(); m_Print.EndPrint(); // 结束打印
三、在测试程序中的打印效果如下


图一 打印效果扫描图

四、当然,这个类实现的比较简单,还没有画位图的功能,但是可以给做相关的工作的朋友一些帮助。也希望朋友们把它做的更加完善。

相关文章

  • 体系结构方案 - 大清单报表
    [摘要] 一般的报表工具或 BI 系统都是怎么实现大清单报表的呢? ?数据全部读出,直接报表呈现 ?游标方式逐步读入呈现 ?使用数据库的分页机制按页读出 传统模式实现问题: 1)全量读模式,全部读出耗时太长,用户体验恶劣:全内存计算的报表可 ...
  • .NET基础学习:经典水晶报表设计三则一.经典水晶报表设计三则之"分栏" 借助"多列格式化"功能实现. 1. 启用"多列格式化"功能. (1) 进入"节专家"对 ...
  • 在.NET开发中经常会涉及到报表的开发,通常我们采用报表工具来快速生成报表,报表生成工具最常用的是水晶报表.Stimusoft Reports,下面我们以Stimulsoft Reports为例,做一个快速生成报表的教程,同时水晶报表也可以 ...
  • 报表控件哪家强?.NET三大报表控件盘点
    对于大型的综合程序,特别是企业级的程序解决方案,都会依赖报表来解决企业中的各种数据及可视化表现,从而让企业掌握运营中的各项数据汇 总..NET程序中著名的三大报表控件是:FastReport.Net.ActiveReports.Stimul ...
  • 首先来认识一下java报表软件的分类:纯java工具盒支持java的工具.支持java的报表工具,其实就是非java的报表工具,但是呢,这类报表软件可以再java程序中调用. 而纯java报表软件即java语言编写的报表软件,包括报表引擎. ...
  • 今天我们来聊聊Java防盗链,多说无用,直接上应用案例. 这里所用的工具是报表软件FineReport,搭配有决策系统(一个web前端展示系统,主要用于权限控制),可以采用java防盗链的方式来实现页面权限. 浏览器中直接输入报表URL的时 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号