NCReport制作报表

2025-11-10 23:56:41 6434

前言

有关NCReport的网络上的教程一般是如何生成一个简单的报表,而且讲的也不是很清楚,中文网络上的资料又很匮乏。索性笔者直接根据官网提供的《NCReport Definitive Guide》对如何使用NCReport构建一个像模像样的报表进行讲解。主要是大致翻译一下《NCReport Definitive Guide》。

关于NCReport

这一章将从宏观层面进行讲解,详细描述随着博文会不断深入。 1.如何使用NCReport (1)生成报表必须定义XML(Extensible Markup Language)作为一个报表模版。XML文件中包含了报表定义位置、尺寸信息,在不实用报表设计师时直接修改XML文件也可以达到对报表修改的目的。 (2)可以使用报表设计师,设计一张报表然后保存为XML文件。 (3)报表数据源可能来自SQL Database、文本、QString、QStringList。 (4)报表可以输出为printer, print preview, postscript, PDF, SVG,Image, HTML, Text。 下图(NCReport结构图)阐释了如何生成一张报表的完整过程:

入门

使用教程中的例子,新建一个简单的产品价格表报表。 (1)打开报表设计师,新建一张空白表 (2)打开报表和页面设置对话框 在这个对话框,我们能够看到如下一些选项: 报表名、报表类型、页面尺寸、页眉页脚设置、页边空白、页面方向等。 文件编码:指的是XML文件的编码格式,除了特别需要选择默认UTF-8即可。 默认字体:这里可以选择宋体等字体。 (3)数据源类型

说明, 数据ID :这个ID是重要的对于细节部分。 位置类型:我们选择静态,可以在静态文本框中插入静态文本。也可以选择文件,这样要给其一个路径和文件名。

产品列表例子包括下面这些内容: •type as 0. column •product name as 1. column • product code as 2. column • available as 3. column • weight as 4. column • price as 5. column 相应的静态文本为:

A;Magnetometer;D54/78;1;0.778;15.6

A;Pressostat CMR;M542;0;2.547;30

B;Oil pump Merin;CT-784;1;1.510;17

B;Hydraulic pump;RF-800;1;3.981;58

B;Erling o-ring;577874;0;2.887;49

C;Hydraulic cup;HC55;0;0.435;39

C;Ballistic rocket;BV01;1;1.260;157.9

C;Wheel WRRT56;Q185/70;1;25.554;199.0

文本数据源列名在一行,例如:type;productname;code;available;weight;price 在这个例子中col0-col5分别用这几个列名。 (4)分配已经定义的数据源到报表,细节选择对应的数据源,选择保存。 当增加细节后,可以发现报表也有相应变化如下: (5)几何编辑器 在设计师的右侧,如下图: (6)设计页眉 这里我们增加列名用Label在页面部分。Label条目用于在报表中展示描述信息,如:标题、表头等。Label是静态条目,其内容在设计师或XML外不可以更改。增加Labels,修改文本为列名,并移动到合适的位置。 编辑好的页眉如下: (7)修改尺寸 在几何编辑器中可以对页眉、页脚和细节位置进行修改。 (8)插入一条直线 (9)设计细节部分 报表的核心内容在细节部分,这是报表最重要的部分,包含了若干行数据源信息。 增加字段信息,col0,col1,col2,col3,col4,col5,这些列号自动索引可以出来。 数据类型:数值或文本,根据情况选择。 对报表修改如下: (10)设计页脚 页脚通常用于展示页码信息。在这个例子中我们仅增加爱两个系统变量字段:引用信息和当前页码。 增加系统信息字段appinfo和页码字段pageno如下(这两个字段可以自动索引出来,不用自己起名字): (11)在设计师中测试报表 选择快捷方式Ctrl+r,选择NCReport预览执行。

将我们设计好的报表用于应用程序

(1)将设计好的报表重命名保存为productlist.xml并重新修改数据源参数,因为我们要将productlist.xml用于程序,其属性要进行修改。 添加到软件中 代码如下:

QString data;

data += "A;Magnetometer;D54/78;1;0.778;15.6\n";//数据分号间隔,我们前面选择的方式。

data += "A;Pressostat CMR;M542;0;2.547;30\n";

NCReport *report = new NCReport();

report->setReportFile("productlist.xml");//我们刚才保存的xml文件。

report->addParameter("data", data);//“data”为前面的参数ID,很重要。

//打印机

//report->runReportToPrinter();

//PDF

//QString fileName("ncTest.pdf");

//report->runReportToPDF( fileName);

report->runReportToShowPreview();

if (report->hasError())

{

QMessageBox msgBox;

msgBox.setText(QObject::tr("Report error: ") + report->lastErrorMsg());

msgBox.exec();

}

delete report;

运行结果和我们在设计师中构建的效果一致。 提示:由于是试用版,故生成的报表有英文的试用版字样。消除方法,报表保存为PDF后,水印可以使用Acrobat进行删除!

结语

这篇博客是对NCReport设计报表的入门讲解,从报表设计到结合代码显示自己的数据,已经比目前网络上绝大部分讲解详细认真,后面博客会制作更为复杂的报表敬请关注。