完全指南)
OpenProject 工作包 PDF 表格导出PDF Table Export完全指南【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openprojectOpenProject 的PDF Table 导出将工作包表格Work package table按当前所选列以一行一个工作包的形式渲染为 PDF 文档是项目团队把工作包列表归档、外发或打印的常用手段。本文以 PDF table export 官方文档为主体结合 导出器源码 与 表格渲染组件系统讲解如何触发导出、控制列与分组、启用合计行以及底层实现原理。读完本文你将掌握从任意工作包视图一键生成 PDF 表格、利用合计与分组输出结构化报表、通过保存视图固化导出配置并理解 PDF 表格导出在 OpenProject 代码中的完整渲染链路。什么是 PDF Table 导出PDF Table 导出把工作包表格本身作为输出对象每个工作包渲染为表格中的一行表格只包含当前工作包表格视图中选定的列工作包 ID 是超链接在 PDF 中点击 ID 会直接跳转到 OpenProject 中对应的工作包详情页。它与 PDF Report 导出带封面、目录与描述的工作计划文档、Gantt 图表 PDF 共同构成 OpenProject 的三大 PDF 导出类型。导出对话框中的类型选择在源码中定义于 export_settings_component.rbtable、report、gantt三种取值其中 Gantt 导出需要 Enterprise 版授权EnterpriseToken.allows_to?(:gantt_pdf_export)表格与报告导出则在社区版即可使用。如何触发 PDF 表格导出触发导出的完整流程来自 导出工作包进入工作包Work packages模块选择要导出的默认视图或已保存视图表格视图或卡片视图均可点击右上角的设置图标三个点在下拉菜单中选择导出Export在导出的对话框中格式选择PDF导出类型选择表格Table按需调整对话框提供的选项点击导出Export按钮开始导出导出在后台准备对话框会显示进度文件就绪后即可下载。[!NOTE] 生成的导出文件仅保留有限时间下载链接不能无限期复用需要时请及时下载。导出的后台实现是 WorkPackageListToPdf 类它继承WorkPackage::Exports::QueryExporter以:pdf为注册键并混入Exports::PDF::Components::WpTable表格渲染与Exports::PDF::Components::Cover封面等模块。表格模式默认使用**横向landscape**页面布局见 setup_page!更契合宽表格的阅读体验。保存导出设置对于已保存的工作包视图可以在导出对话框中勾选Save setting复选框把本次调整的导出设置写入对应的工作包查询query。下次导出时该复选框默认保持勾选团队成员可以复用同一套导出配置。复选框只对已保存的视图提供默认视图如 All open或尚未保存的视图不提供如果查询是公开的其他用户也可以修改并保存导出设置若不想让其他人改动需要创建私有的工作包查询。这与保存工作包视图机制紧密相关详见保存工作包视图。导出权限执行导出需要Export work packages权限该权限可在角色与权限管理中为角色分配。没有该权限的用户在界面上不会获得导出入口。导出内容列的选择与顺序PDF 表格的列完全取决于当前工作包表格视图的列配置你可以自行选择要显示的列长文本字段除外并调整列的顺序默认预选的列就是工作包表格查询query中的列建议先保存工作包视图再基于该视图导出保证列配置稳定、可复用。列配置的操作方式点击工作包表格右上角的More图标三个点→Configure view在Columns选项卡中添加、移除或拖拽排序列点击Apply应用。源码视角列是如何被挑选的在 wp_table.rb 的limit_table_columns_objects中可以看到两层列过滤逻辑def limit_table_columns_objects(query) list query .columns .reject { |c| c.is_a?(Queries::WorkPackages::Selects::RelationSelect) } list list.reject { |c| c query.group_by_column } if query.grouped? list end关系列RelationSelect一律被移除例如子级前置任务这类以列表形式存在的关联列不会出现在 PDF 表格中当表格按某属性分组时分组所用列也不会重复出现在列中因为其值已显示在分组标题里见下文分组导出。列宽的分配也体现了对长文本的照顾table_column_widths主题subject列与字符串/文本型自定义字段列获得4.0的相对宽度其余列宽度为1.0再按页面可用宽度等比缩放——这正是文档强调长文本字段特殊性的底层原因。显示合计Display sums如果在工作包表格配置中启用了显示合计Display sums路径Configure view →Display settings选项卡 → 勾选Display sums则导出的 PDF 表格底部会追加一行合计行。界面上的合计功能会汇总以下属性的数值来自工作包表格配置工时Work剩余工时Remaining work完成度% Complete类型为Integer 或 Float的自定义字段在源码中合计行由 build_table_rows 控制当query.display_sums?为真时在数据行之后追加build_sum_row并且合计行第一列固定显示本地化的 SumI18n.t(js.label_sum)标签。合计数据的来源是query.results.all_total_sums见 get_sums即与界面上合计栏完全一致的数据。分组导出Grouped work package tables如果工作包表格按某个属性分组配置方式Configure view →Display settings→ 设置 Group by 属性PDF 表格导出会呈现如下行为每个分组输出一张独立的表格每张表格前都有一个分组标题显示该分组的值分组所用的属性不会作为列重复出现因为其值已经显示在分组标题中启用合计时每个分组表格都有自己独立的合计行每组底部各一个 Sum 行。分组渲染的入口是 write_work_packages_table!当query.grouped?为真时走write_grouped!分支按query.group_by_column.value(work_package)对工作包分组后对每个分组调用 write_group!def write_group!(group, work_packages, query, columns, sums) write_optional_page_break with_margin(styles.wp_table_margins) do with_margin(styles.wp_table_group_header_margins) do style styles.wp_table_group_header pdf.formatted_text([style.merge({ text: make_group_label(group) })], style) end write_table!(work_packages, query, columns, sums) end end分组标题的显示逻辑见make_group_labelcommon.rb分组值为空时显示(none)风格的本地化标签分组值为数组如多选自定义字段时以逗号连接各项其他情况直接输出分组值。各组的合计取自query.results.all_group_sums由于该接口返回的分组键与渲染所需的分组值键存在差异源码中还包含一段针对列表型、层级型与单选自定义字段分组的键转换逻辑transformed_sum_group见 wp_table.rb确保每个分组都能拿到自己的合计行。组与组之间还会根据剩余空间自动插入分页write_optional_page_break。其它 PDF 导出的通用能力以下能力适用于所有 OpenProject PDF 导出含表格导出多语言字符支持支持常见字符集包括不同字母体系的多语言字体、数学/技术符号与 emoji富文本宏Macros可通过 宏Macros 嵌入其他工作包的描述等富文本前提是嵌入不发生在表格单元格内部或仅包含基础文本格式分页符如果工作包描述中使用了分页符导出内容会按分页符拆分为独立页面。底层实现与渲染链路小结一张 PDF 表格从点击导出到生成文件核心链路如下入口导出对话框选择table类型映射到 Table::ExportSettingsComponent其format返回pdf_table导出器WorkPackageListToPdf 负责整体流程按每批 100 个工作包分段生成小 PDF 再合并避免内存溢出见文件头部注释渲染WpTable 组件 判断是否分组构建表头行、数据行与合计行调用 Prawn 的pdf.table渲染自动宽度失败时回退固定宽度见 pdf_table_auto_widths链接ID 列通过get_id_column_cellcommon.rb生成指向work_package_url(work_package)的 PDF 内部链接——这就是点击 ID 直达工作包的实现方式样式表格的单元格、表头、合计单元格、分组标题样式统一由 wp_table_styles.rb 从样式配置中解析。相关文档导航导出工作包总览PDF/XLS/CSV 各格式对比与通用导出流程工作包表格配置列、筛选、排序、分组、合计与保存视图PDF Report 导出带封面与目录的详细报告Gantt 图表 PDF甘特图导出XLS / CSV 导出表格的电子表格导出工作包 PDF 导出单个工作包的 PDF 模板导出【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考