JAVA:OFD Reader Writer 开源库技术解析

1、简述

OFD Reader & Writer 是一个由开源社区推动的 OFD 文件处理库,它旨在提供对 OFD 格式文件的读取和写入功能。这一开源项目为开发者提供了强大而灵活的工具,使得在应用程序中处理和生成 OFD 文件变得更加容易和高效
开源地址:https://toscode.mulanos.cn/ofdrw/ofdrw

  • OFD 文件读取
    OFD Reader & Writer 提供了高效的 OFD 文件读取功能,能够准确解析 OFD 文件的结构和内容,以便进行后续的处理和分析。

  • OFD 文件写入
    除了读取,OFD Reader & Writer 还支持 OFD 文件的生成和写入。开发者可以通过这个库创建、编辑并生成符合 OFD 标准的文件。

  • 高度模块化
    OFD Reader & Writer 设计为高度模块化,提供了丰富的 API 接口,使得开发者可以根据需要选择性地使用其中的功能,保持了库的轻量性和灵活性。

  • 开放扩展性
    这一库注重开放性,支持插件和扩展,使得开发者能够根据自身需求轻松扩展功能,满足不同场景的需求。

2、模块

根据《GB/T 33190-2016 电子文件存储与交换格式版式文档》标准实现版式文档OFD库,项目采用Maven模块管理,各模块如下:

  • ofdrw-core OFD核心API,参考《GB/T 33190-2016 电子文件存储与交换格式版式文档》实现的基础数据结构。
  • ofdrw-font 生成OFD字体相关。
  • ofdrw-layout OFD布局引擎库,用于文档构建和渲染。
  • ofdrw-pkg OFD文件的容器,用于文档的打包。
  • ofdrw-reader OFD文档解析器,用于OFD的反序列化以及签名签章。
  • ofdrw-sign OFD文档数字签章。
  • ofdrw-gm 用于支持签章模块需要的国密电子签章数据结构。
  • ofrw-crypto 用于实现《GM/T 0099-2020 开放版式文档密码应用技术规范》对OFD的密码相关功能。
  • ofdrw-gv OFDRW 所有模块所共用的全局变量。
  • ofdrw-converter OFD文档转换。
  • ofdrw-tool OFD文档工具,文档合并、裁剪、重组。
  • ofdrw-graphics2d 实现了AWT Graphics2D接口,生成OFD文档内容。
  • ofdrw-full 上述所有模块整合包,用于简化依赖引入

3、应用

这一库不仅具备对 OFD 文件的读取功能,还提供了强大的写入功能,为开发者提供全面的 OFD 文件处理解决方案。

3.1 引用

通过Maven项目引用相关依赖:

<dependency><groupId>org.ofdrw</groupId><artifactId>ofdrw-full</artifactId><version>2.2.6</version>
</dependency>

备注:OFDRW 将持续保证API的向下兼容,您可以放心的升级OFDRW库至最新版本。

3.2 创建

public class HelloWorld {public static void main(String[] args) throws IOException {Path path = Paths.get("HelloWorld.ofd");try (OFDDoc ofdDoc = new OFDDoc(path)) {Paragraph p = new Paragraph("你好呀,OFD Reader&Writer!");ofdDoc.add(p);}System.out.println("生成文档位置: " + path.toAbsolutePath());}
}

在这里插入图片描述

3.3 解析

通过OFD文件路径,将当前文件解析,并且获取相关OFD文件信息:

public static OFDReader ofdParse(String ofdFilePath) throws Exception{Path input = Paths.get(ofdFilePath);return  new OFDReader(input);
}

3.4 根目录

获取解析完成的ofd根目录:

String sysAbsPath = ofdReader.getOFDDir().getSysAbsPath();

3.5 打包

在使用个过程中有时候需要修改ofd文件的内容,我们可以将他解压后,然后通过OFDRW提供的接口重新打包成OFD文件:

public static void jar(Path jarPath, Path targetFilePath) throws IOException {OFDDir ofdDir = new OFDDir(jarPath);ofdDir.jar(targetFilePath);
}

3.6 转换

在开发工程中很多文件重新去构造OFD会浪费大量的时间,我们可以轻松的从已有的PDF直接转成OFD:

public static void convertBy2D(String resourceFilePath, String targetFilePath) throws Exception{Path src = Paths.get(resourceFilePath);Path dst = Paths.get(targetFilePath);try (PDFConverter converter = new PDFConverter(dst)) {converter.convert(src);}
}

4、其他解决方案

4.1 HTML5

HTML5前端预览解决方案: DLTech21/ofd.js . https://github.com/DLTech21/ofd.js

  • jszip解压。
  • fast-xml-parser解析xml为json数据。
  • svg及canvas渲染实现。
  • 完全浏览器OFD页面渲染。
4.2 开源阅读器
  • 数科网维公司 . 数科OFD阅读器 . www.ofd.cn
  • Foxit . 福昕OFD . www.foxitsoftware.cn/ofd/

5、结语

OFD Reader & Writer 开源库作为一项致力于 OFD 文件处理的技术工具,通过其完整的 OFD 标准支持、高度模块化和开放扩展性等特点,为开发者提供了一种强大的 OFD 文件处理解决方案。如果你正在寻找一个全面的 OFD 文件读写库,OFD Reader & Writer 无疑是值得深入研究和应用的技术利器,为你的项目带来更高效的文件处理能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/423044.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA语言的新能源电池回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

【江科大】STM32:定时器中断

文章目录 TIM&#xff08;Timer&#xff09;定时器根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型基本定时器通用定数器 高级定时器 时钟&#xff08;时钟电路&#xff09;的作用是什么&#xff1a;设置定时器触发中断普通方法&#xff1a;预分频器时序…

《WebKit 技术内幕》学习之九(2): JavaScript引擎

2 V8引擎 2.1 基础 V8是一个开源项目&#xff0c;也是一个JavaScript引擎的实现。它最开始是由一些语言方面的专家设计出来的&#xff0c;后被Google收购&#xff0c;成为了JavaScript引擎和众多相关技术的引领者。其目的很简单&#xff0c;就是为了提高性能。因为在当时之前…

FastDFS分布式文件存储

为什么会有分布式文件系统&#xff1f; 分布式文件系统是面对互联网的需求而产生。因为互联网时代要对海量数据进行存储。很显然靠简单的增加硬盘个数已经满足不了我们的要求。因为硬盘传输速度有限但是数据在急剧增长&#xff0c;另外我们还要要做好数据备份、数据安全等。采用…

Vue2中CesiumV1.113.0加载离线地图

Vue2中CesiumV1.113.0加载离线地图&#xff0c;本文以天地图为例。 1.使用nodejs获取天地图 新建nodejsdownmap项目文件夹&#xff0c;初始化项目 npm init -y src/index.js // An highlighted block var Bagpipe require(bagpipe) var fs require("fs"); var r…

Kafka-服务端-日志存储

基本概念 首先需要了解的是&#xff0c;Kafka使用日志文件的方式保存生产者发送的消息。每条消息都有一个offset值来表示它在分区中的偏移量&#xff0c;这个offset值是逻辑值&#xff0c;并不是消息实际存放的物理地址。 offset值类似于数据库表中的主键&#xff0c;主键唯一…

【GitHub项目推荐--中国 Web 开发者路线图】【转载】

中国 Web 开发者路线图 在你学技术进阶的路上&#xff0c;如果你对接下来要学习的内容感到困惑&#xff0c;可以看看这个开源项目&#xff0c;这是中国 Web 开发者路线图。 它会让你对技术全景有一个了解&#xff0c;并在为你提供指导&#xff0c;该路线图并不会鼓励你选择时…

【GitHub项目推荐--基于 Flutter 的游戏引擎】【转载】

Flame 引擎的目的是为使用 Flutter 开发的游戏会遇到的常见问题提供一套完整的解决方案。 目前 Flame 提供了以下功能&#xff1a; 游戏循环 (game loop) 组件/对象系统 (FCS) 特效与粒子效果 碰撞检测 手势和输入支持 图片、动画、精灵图 (sprite) 以及精灵图组 一些简化…

【GitHub项目推荐--12306 抢票助手 python】【转载】

这个项目名很干脆&#xff0c;不知道以为是 12306 网站的源码&#xff0c;其实不是这是全 GitHub最德高望重的抢票小助手&#xff0c;功能一直在更新&#xff0c;且现已支持 Python 3.6 以上版本。 开源地址&#xff1a;https://github.com/testerSunshine/12306

深度学习|RCNNFast-RCNN

1.RCNN 2014年提出R-CNN网络&#xff0c;该网络不再使用暴力穷举的方法&#xff0c;而是使用候选区域方法&#xff08;region proposal method&#xff09;创建目标检测的区域来完成目标检测的任务&#xff0c;R-CNN是以深度神经网络为基础的目标检测的模型 &#xff0c;以R-C…

Unity - 简单音频

“Test_04” AudioTest public class AudioTest : MonoBehaviour {// 声明音频// AudioClippublic AudioClip music;public AudioClip se;// 声明播放器组件private AudioSource player;void Start(){// 获取播放器组件player GetComponent<AudioSource>();// 赋值…

深入Matplotlib:画布分区与高级图形展示【第33篇—python:Matplotlib】

文章目录 Matplotlib画布分区技术详解引言方法一&#xff1a;plt.subplot()方法二&#xff1a;简略写法方法三&#xff1a;plt.subplots()实例展示添加更多元素 进一步探索Matplotlib画布分区自定义子图布局3D子图结语 Matplotlib画布分区技术详解 引言 Matplotlib是一个强大…