前面文章分享了ReportBro工具的实际使用案例: 强大的PDF报表工具ReportBro。以将官网的用户指南翻译的中文版,算是一个尝试、学习的过程。
原文链接:https://www.reportbro.com/doc/userguide
设计元素
- 将设计元素拖拽到你的模板上
- 在模板或菜单面板上选择一个元素并点击此元素
- 根据您的需求配置此元素的属性和样式
- 选中多个元素时,可展示对齐选项
| 元素 | 说明 | ||
| 文本(Text) | 文本元素可由静态文本、参数、以及静态文本和参数共同构成, 或者是可解析的表达式(参考表达式语法)。预定义样式也可用于文本元素. 启用富文本可以在一个文本元素中使用不同的样式。 富文本还允许使用参数,但不支持表达式解析。 更多: 参考视频教程:使用文本元素 | ||
| 水平线(Horizontal line) | 水平线支持可调整的宽度、高度和颜色 | ||
| 图片(Image) | ReportBro支持两种常用的图像格式: PNG和JPG。 支持的文件扩展名: .png .webp .jpg 和 .jpeg。 添加图片的方式 1. 上传静态图像: 直接上传图片文件 2. 定义一个图像参数:利用图像参数动态包含图片 打印和缩放 – 在打印时,ReportBro可通过对图像进进行相应的缩放,以优化图片的质量。 – 保持纵横比以防止失真并保持打印质量。 – 图像可以调整到其实际高度和宽度,确保不会拉伸。 更多:参考教程:在报表中添加图像 | ||
| 表格(Table) | 表格用于展示值的列表,例如 收据、统计报表和发货单项目。在表格中打印动态数据时,需要将数据源设置为 列表参数。 选择和导航 在表格上单击时,选中表格本身。 在表格中双击时,选中表格中的内容元素,可对内容元素进行详细配置。 配置和样式 配置表格内容元素的方式和配置文本元素的方式相同。 表格配置的等级 1. 表格元素: – 包含数据源的定义。 – 允许启用/禁用表头和表尾。 – 在进行分组展示时,设置内容行的数量(参考下一段:数据分组)。 – 在默认情况下,一个表格包含一个内容行用于遍历列表参数。 2. 表格内容元素: – 配置内容元素 – 在打印设置中,启用“总在相同页面展示”,可以在换页时阻止拆分行。 3. 表头和表尾元素(当启用时): – 当表格的数据超过多页时,表头可在每页上都展示。 更多:参考教程: 创建表格 数据分组 对于在表格内将数据行分组展示的需求,ReportBro添加了强大的层,用于组织数据。 1. 内容行的需求: – 为了创建分组表格至少需要定义2个内空行。 – 第一个内容行的作用是接受分组表达式 – 另外一个内容行的作用是保存实际的数据。 2.配置内容行: – 单击表格,并找到“内容行”配置项。 – 在菜单面板中,可以找到所有的内容行。 – 选择第一个内容行入口,并在打印配置中录入一个“分组表达式” – 此行只会在分组表达式的值变化的时候才打印。 3. 分组头和分组尾: – 对于每个分组,都可以对分组头和分组尾的显示进行配置。 – 为了在每个分组上都显示一个分组头, 需要确认包含“分组表达式”的内容行显示在包含实际数据的内容行上方(没有分组表达式的行) 更多:参考教程: 表格分组 隐藏表格列 通过控制表格列的显示条件,可以自定义表格列的展示。 1. 选择表格头列: – 单击需要控制显示的格式头列。 2. 定义打印条件: – 在打印设置中,设置一个显示条件,该列就会根据该条件进行展示或隐藏。 3. 调整空间: – 如果你希望在某列隐藏时,其他列可以占用该列的空间,可以每个列头上都定义增长权重。 – 如果未设置增长权重,该列的宽度会保持预设的值。 更多: 参考教程: 根据条件打印表格列 动态表格列 当你的数据没有固定的列时,你需要同时在横向和纵向扩展表格, 你可以通过使用“简单列表参数”灵活实现这个功能。 更多: 参考教程: 在表格中使用动态列 | ||
| 条码(BarCode) | ReportBro 支持多种编码 1. Code128 是一种高密度的一维条码,支持全部128个ASCII字符。 可访问ASCIItable.com查询全部支持的字符。 2. Code39 一种一维条码,定义了43个字符,包含了大写字母(A-Z)、数字(0-9)和一系列特殊字符(-, ., $, /, +, %, 空格)。 3. EAN-13、UPC: EAN的全称是European Article Number 。是由国际物品编码协会 (GS1)制定的商品条码体系。EAN-13由一位前置码0 和12位数字组成。 UPC条码通常由12位数字组成,包括一个前导数字、5位制造商代码、5位产品代码和一个校验码. 4. EAN-8 EAN-8是EAN-13的简化简, 保持了和EAN-13相同的逻辑,由7位数字和一位检验码组成。 5. QR Code 可包含任意字符,也称为二维码。 对扫码设备的优化 调整样式选项以增强条码的可读性, 尤其是对于扫码设备的兼容性。 – 显示值: 在条码下方显示实际数值, 可用于QR Code以外的编码类型 – 条宽度: 调整一维条码中每个条的打印宽度 – 旋转: 可调整为纵向打印 – 边界条: 为扫码设备设置 EAN-8和EAN-13的参考点 – 纠错等级:在QR Code损坏或模糊时,扫码设备进行自动纠错的等级。 | ||
| 框架(Frame) | 框架是一种用于放置元素的灵活的容器,对于元素的组织和显示提供了增强。 以下是在使用框架时一些重要的功能点: 元素的容器: 框架可以容纳多个元素,创建一个分组。 动态尺寸: 同上 元素分组: 将多个元素组合到一起, 在分页时也可保持关系。 样式选项:对整个框架的边框和背景进行定制,增强可视化的表现。 位置:框架内的元素位置是相对于框架的,框架的位置是相对于页面的。 报表设计中的拖动影响:移动框架时,其内容跟随移动。框架提供了一种对元素位置批量移动的方式。 | ||
| 片段(Section) | 类似于表格, 片段的数据源是参数列表。与表格的核心差异是,片段不限于文件元素,可以像表格一样,提供灵活的分组功能。 片段配置: 1.片段元素: 配置数据源,位置,是否显示片段头和片段尾。 2 片段头、内容、片段尾 调整每个元素的高度,选择是否根据内容进行压缩 设置“总在同页显示”以阻止分页时拆开元素 可选项: 报表有多页时,在每页都显示片段头 更多: 参数教程:使用片段打印数据 | ||
| 分页符(Page break | 自定义分页符 | ||
文档属性

文档属性用于定义报表模板的全局属性
*选择预定义的页面格式和页面方式,或者进行自定义
*在充足的布局空间内设置合适的内容高度,以适配多页的报表, 更多关于多页报表的内容,请参考: 多页布局的设计
* 设置打印区分的边距,元素无法被移动到边界以外。
*启用页眉/页脚,并设置尺寸和显示选项。 页眉/页脚也可以在多页报表时,在每页上都显示,或者仅首页不显示。
*显示文字和图片水印
*设置本地化样式,货币符号,千分位符号。本地化样式用于根据区域标准格式化日期时间、数字。
条件样式
显示模式和参数

参数类型列表
| 类型 | 说明 | ||
| 文本 | 使用任意字符串 | ||
| 数值 | 数值,可使用模式进行格式化展示 使用$符号的数值模式会替换为现金符号 更多关于模式的说明,请参考 关于模式 | ||
| 布尔 | 布尔类型,真或假 | ||
| 日期 | 使用 datetime.date or datetime.datetime 或 ISO 8601 标准格式 (YYYY-MM-DD for date, YYYY-MM-DD HH:mm for datetime)的字符串可使用模式进行格式化 更多关于模式的说明,请参考 关于模式 | ||
| 图像 | 用于替代URL或已上传文件的图像参数(参考Image元素说明) | ||
| 富文本 | 当启用“富文件”选项时,可在文本元素中使用的格式化的字符串,以下是可以使用的标签: <strong> 粗体 <em> 斜体 <u> 下划线 <s> 删除线 <a> 超链接,使用href属性设置URL <p> 可设置对齐方式的文件段落,也可通过class指定样式 <span> 用于设置 class和style的标签,如下: 此标签可以包含style属性,用于font-size(字体大小)、color(颜色)、background-color(背景色)。 font-size属性以 px为单位, color属性为有效的 rgb值 此标签可以包含class属性,用于设置字体,class名称必须以 font- 开头加上内置字体名。 字体名称是大小写不敏感的,比如可以使用courier或者Courier设置Courier字体。默认使用的字体是 Helvetica。 有效字体为: Courier Helvetica Times DejaVuSerif LibraSans Montserrat Roboto tangerine Fireflysung (繁体中文) NotoSansTC (繁体中文) NotoSansJP (日文) NotoSansKhmer (高棉语) Sarabun (泰语) <p>标签可以使用class属性控制文本的对齐方式,例如align-center, align-right, align-justify。未设置时,默认使用 align-left. <p>标签必须以 </p>结束。不支持使用嵌套的<p>标签。在富文本参数中使用<p>标签时,富文本字段必须仅包含富文本参数,并且不能设置其他样式。 有效的富文本示例: <span style=”color: rgb(255, 255, 255); background-color: rgb(0, 0, 0);”> <strong>Black</strong> & <u>White</u> </span> <span class=”font-Roboto” style=”font-size: 16px”>Roboto font</span> 带段落的富文本示例: <p class=”align-center”> <em>centered text</em></p><p>another paragraph with left aligned text</p> | ||
| 列表 | 参数列表, 只以用于表格(Table)和片段(Section)的数据源 | ||
| 简单列表 | 某个指定类型(文本、数值、布尔或字符串)的列表参数。在使用表格(Table)创建动态列时,可以用于动态管理横向和纵向的长度, 参考链接:动态表格列 | ||
| 集合 | 用于文本、数字、日期、汇总、平均的逻辑分组参数。 更多用法,请参数: 使用框架(Frame) | ||
| 汇总 | 对于数值类型的参数列表时行汇总计算 | ||
| 平均 | 对于数值类型的参数列表计算平均值 | ||
表达式语法
表达式必须是有效的Python语句,并可以包含参数。 表达式中的参数,要符合各自的数据类型(比如文本参数对应为Python中的字符串,数值参数对应为Python中的 decimal.Decimal类型)。以下是ReportBro支持的运算和函数。 更多关于Python语句的详细信息,请参考:https://docs.python.org/3/reference/simple_stmts.html
关于表达式语法的向导链接为: 在参数中使用表达式
| 操作 | 说明 | 示例 |
| 算术运算 | +, -, /, *, % | ${NetPrice} + ${Vat} ${Minutes} % 60 |
| 比较运算 | <, >, <=, >=, ==, != | ${Price} > ${Budget} ${Tax} != 0 |
| 逻辑运算 | and, or, not | ${Weight} > 0 and ${Capacity} <= 200 ${CompanyName} or ${Name} not(${Age} >= 18 and ${AcceptTerms}) |
| 条件语法 | value if cond else other_value | 'ok' if ${Weight} <= ${Capacity} else 'not enough space''ok and plenty of space' if ${Weight} < ${Capacity}/2 else ('ok' if ${Weight} <= ${Capacity} else 'not enough space') |
| 函数 | 说明 | 示例 |
| abs(x) | 返回数值的绝对值 | abs(${Score}) |
| ceil(x) | 向上取整,大于或等于x的最小整数 | ceil(${Score}) |
| decimal(x) | 将x转换为decimal.Decimal类型 说明:数值参数被保存为decimals类型,因此不能在进行算术运算时使用float类型。 一般在使用decimal函数使用字符串类型,以防止float类型导致的精度问题。 例如将 decimal(‘3.4’)替换为decimal(3.4),可能会得到的结果是 3.39999… | # 错误用法,price可能是个float ${Price} * 2.5 # 正确用法 ${Price} * decimal(‘2.5’) |
| floor(x) | 向下取整, 小于或等于x的最大整数 | floor(${Score}) |
| float(x) | 将x转换为float类型 说明:可能会导致浮点类型精度问题,具体参考python关于浮点类型精度的说明(https://docs.python.org/3/tutorial/floatingpoint.html) | float(${Price}) * 1.2 |
| format_datetime(d, pattern) | 使用给出的模式参数pattern格式化时间参数d。 模式必须是有效的日期模式语法 | format_datetime(${Birthday}, ‘d.M.yyyy’) |
| format_decimal(n, pattern) | 使用给出的模式参数pattern格式化时间参数d。 模式必须是有效的数值模式语法 | format_decimal(${TotalAmount}, ‘#,##0.00’) |
| int(x) | 将x转换为整形int | int(${Price}) |
| len(x) | 返回列表或字符串类型的长度 | len(${Name}) len(${InvoiceItems}) |
| rand() | 返回0-1之间的浮点数值 | rand() * 100.0 |
| randint(x) | 返回小于x的整数值 | ‘random value between 1 and 3: ‘ + str(randint(3) + 1) |
| str(x) | 将x转换成字符串 | ‘Number of customers: ‘ + str(${CustomerCount}) |
键盘上的快捷键
| 快捷键 | 说明 |
|---|---|
| Shift+select elements | 选择多个元素 |
| ctrl+C(Windows, Linux) | 将选中的元素复制到剪切板 |
| ctrl+V(Windows, Linux) | 将剪切板的内容放到模板上 |
| ctrl+Z(Windows, Linux) | 返回到上一个操作,也可以使用菜单栏上的返回按钮 |
| ctrl+Y(Windows, Linux) | 与返回按钮相反,再次进行某个操作。也可以使用菜单栏的重做按钮 |
| esc | 关于一个弹窗,比如选中的参数、模式或列表的测试数据。弹窗中的内容会保留下来. |
| 退格键 | 删除选中的元素,也可以使用菜单栏上的删除按钮 |
| 方向键 | 按像素移动选中的元素,也可以在详情面板中输入具体位置。 |
| ctrl+鼠标拖动 | 按像素移动选中的元素(替代直接拖动时的10像素) |
2026-1-4,完成于北京,上东廓
