找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Huang SpreadJS 开发认证

超级版主

40

主题

3180

帖子

4858

积分

超级版主

Rank: 8Rank: 8

积分
4858

SpreadJS 认证SpreadJS 高级认证

Richard.Huang SpreadJS 开发认证
超级版主   /  发表于:2024-5-27 15:07  /   查看:268  /  回复:0
本帖最后由 Richard.Huang 于 2024-5-27 15:15 编辑

背景
OFD全名Open Fixed-layout Document ,是由工业和信息化部软件司牵头中国电子技术标准化研究院成立的版式编写组制定的版式文档国家标准,属于咱们国家的一种自主格式,主要目的是要打破政府部门和党委机关电子公文格式不统一,以方便地进行电子文档的存储、读取以及编辑。

现在咱们很多小伙伴的项目会偏国企性质,因此项目中导出PDF文件格式并无法满足他们的需求,那么如何导出OFD,对于咱们来说,目前还是个空白

OFD文件解析
底层原理
image.png204295958.png

1. XML结构
  • OFD 文件使用 XML 元素和方案定义文档的结构、内容和属性。
  • 母版页、模板、页面内容、图层、文字、图像、矢量图形等都以 XML 的形式进行定义和组织。

2. 数据封装
  • OFD 文件以压缩包的形式进行存储,包含多个 XML 文件和其他资源文件(如图像、字体等)。
  • 类似于 PDF 中的 COS(Container Object System)对象系统,OFD 中使用了多级文件目录结构进行组织。

3. 图层与对象
image.png917610778.png
  • 页面内容由多个图层(Layer)组成,每个图层包含不同类型的对象(Object)。
  • 常见对象包括:文本、图像、矢量图形(如线条、矩形、路径等)、多媒体内容和注释。

布局与元素
1. 页面
image.png587238158.png
  • 每个页面对应一个独立的 XML 文件,定义页面的大小、边距和背景等页面特性。
  • 页面的内容以图层为单位进行组织,确保复杂页面布局的灵活性和可控性。

2. 图层(Layer)
  • 图层类似于层叠样式表中的层次概念,可以重叠、隐藏或显示特定内容。
  • 每个图层的内容在 XML 文件中通过序列化方式依次描述。

3. 文本(Text)
image.png556663207.png
  • 以 XML 元素形式定义,包含字体、大小、颜色、位置等属性。
  • 支持丰富的文本样式,如粗体、斜体、下划线等。
  • 复杂文本布局可以使用文本框(TextBlock)进行定义和管理。

4. 图像(Image)
  • 引用外部资源文件(如 JPEG、PNG 格式的图像),并在 XML 元素中定义图像位置、大小和裁剪方式等。
  • 支持内嵌或外部链接模式,方便文档和资源的统一管理。

5. 矢量图形(Vector Graphic)
  • 包括基本形状(如矩形、圆形、线条)和路径(Path)等。
  • 使用贝塞尔曲线、直线路径等方式描述复杂图形。

6. 多媒体与交互元素
  • 支持嵌入音频、视频等多媒体内容。
  • 定义交互行为(如超链接、表单字段),用于实现电子文档的互动功能。

页面元素存储方式
  • 文本和图像等元素通过 XML 标签定义,各元素的属性直接存储在 XML 属性和内容内。
  • 字体、图像等资源文件存储在 OFD 压缩包中,并在 XML 文件中通过引用进行关联。
  • 复杂图形和样式等通过分层和属性引用的方式进行组织,确保文档结构清晰且便于解析。

环境搭建
本期OFD导出方案主要借助了ofdrw和GcExcel来实现,“ofdrw” 是一个开源的 Java 库,用于生成和操作OFD格式的电子文档。
主要功能包括:
1. 生成OFD文档 - 可以用来创建复杂的OFD文档,包括文本、图片、表格等。
2. 修改OFD文档 - 允许对已有的OFD文档进行修改和编辑。
3. 解析OFD文档 - 能够解析现有的OFD文档,提取其中的各类信息。

例如,在金融、政府、公文和出版等领域,OFD格式文件和工具被广泛应用。ofdrw库简化了OFD文档的生成和处理过程,使开发者可以更加便捷地处理这种文档格式:https://github.com/ofdrw/ofdrw

而GcExcecl则是由咱们葡萄城推出的一个高性能的电子表格组件,它打包了所有必要的特性,以帮助用户以有效的方式处理复杂的电子表格挑战。该产品可以与Java Web应用程序和Java桌面应用程序一起使用,也可以部署在云平台上。

两者结合,就能够实现数据文件的ofd格式导出。

依赖
  1. <dependency>
  2.   <groupId>com.grapecity.documents</groupId>
  3.   <artifactId>gcexcel</artifactId>
  4.   <version>7.1.0</version>
  5. </dependency>
  6. <dependency>
  7.   <groupId>org.ofdrw</groupId>
  8.   <artifactId>ofdrw-full</artifactId>
  9.   <version>2.2.13</version>
  10. </dependency>
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部