EOS Low-Code Platform 8 EOS Low-Code Platform 8
产品简介
学习指南
更新说明
安装与集成
上线指南
初见EOS
低代码开发手册
专业代码开发手册
专题场景实战
公共服务框架
应用运行治理
最佳实践
运维指南
  • 打印与模板问题排查与解决手册
  • 现象一:打印内容不显示或显示不完整
  • 现象二:打印的格式(字体、样式、分页)与预期不符
  • 现象三:打印按钮无响应或下载失败
  • 预防措施

# 打印与模板问题排查与解决手册

在使用 EOS 低代码平台的打印功能(包括 Excel 模板和 Word 模板)时,遇到打印内容缺失、格式错乱或下载失败等问题,请根据以下场景进行排查。

# 现象一:打印内容不显示或显示不完整

典型表现:

  • 表单中的签名、图片在打印结果中缺失。
  • 人员选择组件在打印时只显示了人员 ID,未显示名称。
  • 子表格数据在打印时未呈现或数据合并在一起。

常见原因:

  1. 组件数据未正确传递:打印模板无法直接获取到关联对象(如 __xxObject)中的扩展信息,只能获取到存储的原始值(如 ID)。
  2. 模板语法错误:Word 模板中使用的占位符语法不正确,或 Excel 模板中引用的字段名有误。
  3. 前端包或组件包版本过低:签名等扩展组件的打印功能依赖于特定版本的前端包。

解决步骤:

  1. 更新前端包及扩展组件包:

    • 对于签名、图片等无法打印的问题,首先确认是否已应用包含该修复的 最新前端包及扩展组件包。
  2. 使用“打印前事件”传递数据:

    • 这是最常用的解决方案。在视图或表单的 打印前事件 中,通过 Ajax 查询或逻辑流处理,将需要展示的数据(如人员名称、图片 URL)拼装成一个对象,赋值给 data 并返回。打印模板中的占位符需与返回对象中的字段名一致。

    • 示例(在打印前事件中处理人员名称):

    let result = data; // data 是当前表单数据
    // 假设人员 ID 存储在 formData.userId,我们需要查询其名称
    const res = await this.Ajax.get("/api/your-service/get-user-name?userId=" + data.userId);
    result.userName = res.data; // 将查询到的名称赋值给新的字段 userName
    return result; // 返回增强后的数据对象
    
  3. 检查Word模板语法:

    • 确保Word模板遵循 docxtemplater 的语法规范。对于子表格数据,需要使用循环标签,例如:
    {#details}      // details 是子表格数据数组
        {name}      // 子表格中的名称字段
    {/details}
    
    ### 详细语法请参考 docxtemplater 文档(https://docxtemplater.com/docs/tag-types/)。
    

# 现象二:打印的格式(字体、样式、分页)与预期不符

典型表现:

  • 打印出来的字体与Word模板中设置的字体不一致。
  • 设置了字体加粗,但打印无效。
  • 打印时无法自动分页,或分页位置错误。

常见原因:

  1. 模板类型限制:Excel模板对复杂样式(如特定字体)的支持有限,且易受浏览器打印设置影响。
  2. 浏览器兼容性问题:不同浏览器对打印样式的解析存在差异。
  3. 缺少转换服务:Word模板直接打印时,会依赖浏览器内置的PDF转换功能,可能导致样式丢失。启用“Word转PDF”服务(LibreOffice)可以大幅提升打印质量。

解决步骤:

  1. 推荐使用Word模板:

    • 对于有复杂样式需求的场景,强烈建议使用Word模板而非Excel模板。Word模板能更好地保留字体、加粗、分页符等样式设置。
  2. 启用Word转PDF功能:

    • 在应用中心-首选项中,开启 “Word转PDF” 开关。
    • 服务器端安装LibreOffice:此功能需要后端服务器安装LibreOffice,并在配置文件中指定其路径。请参考相关文档进行安装和配置。
  3. 通过CSS调整打印样式:

    • 如果必须使用Excel模板,可以通过在首选项-CSS编辑中添加打印样式来微调。
    • 示例(强制打印方向为横向):

    css

    @media print {
        @page {
            size: landscape;
        }
    }
    
  4. 检查并清理模板缓存:

    • 修改模板后,有时浏览器会缓存旧的模板文件。尝试清理浏览器缓存或在无痕模式下重新打印。

# 现象三:打印按钮无响应或下载失败

典型表现:

  • 点击打印按钮后,无任何反应或长时间加载。
  • 下载的打印文件为0KB或文件名乱码。
  • 报错“找不到对应的模板”。

常见原因:

  1. Nginx超时配置:当打印数据量较大或生成PDF较慢时,Nginx默认的超时时间可能太短,导致连接中断。
  2. 模板ID不匹配:在迁移环境(如从开发到生产)后,打印按钮关联的模板ID发生了变化,导致找不到模板。
  3. 权限问题:用户没有访问该打印模板或调用打印服务的权限。

解决步骤:

  1. 调整Nginx超时时间:

    • 在Nginx配置文件的 location 块中,增加以下配置:

    nginx

    proxy_connect_timeout 600s;
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    
  2. 重新选择或配置打印模板:

    • 如果在构件包导入后出现此问题,请进入打印按钮的配置页面,重新选择一下打印模板并保存。这会将新环境中正确的模板ID绑定到按钮上。
  3. 检查文件大小限制:

    • 如果导出的文件为0KB,检查应用配置文件(application.properties)中关于文件上传下载大小的限制,以及Nginx的 client_max_body_size 设置,确保没有限制过小。
  4. 检查日志:

    • 查看应用后端日志(如 eos-trace.log),确认打印请求是否到达后端,以及是否有具体的报错信息(如NullPointerException、SQL异常等)。

# 预防措施

  • 模板选型:复杂报表优先使用Word模板并开启Word转PDF功能。
  • 环境迁移:在通过构件包或基线迁移应用后,务必检查所有打印按钮关联的模板,必要时重新绑定。
  • 性能优化:对于包含大量数据或复杂子表格的打印,考虑在服务端进行异步处理,避免前端请求超时。

← 视图相关问题排查指南 其他常见问题 →