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.mzph.cn/news/642324.shtml

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

相关文章

【RF FILTER 仿真】滤波器 Ansys Electronics not ADS

第一&#xff0c;声明 全网搜索&#xff0c;用这个HFSS继承的介绍非常少&#xff0c;并且没有什么指导意义。所以有必要写一下&#xff0c;就像之前的xpedition,总要挑战一下吧。本文仅仅和大家学习研究&#xff0c;对比ADS体会一下差别。 第二&#xff0c;记录直接开始&…

【服务器】安装Docker环境

目录 &#x1f33a;【前言】 &#x1f33c;1. 打开Xshell软件 &#x1f33b;2. 安装Docker环境 ①&#xff1a;下载docker.sh脚本 ②&#xff1a;列出下载的内容 ③&#xff1a;执行一下get-docker.sh文件&#xff0c;安装docker ④&#xff1a;运行docker服务 ⑤&…

openEuler操作系统安装+部署+配置

目录 一、下载 二、创建虚拟机实例 三、安装部署 四、配置OpenEuler22.03 1、登录账号 2、Xshell建立连接 3、关闭防火墙及SELinux 4、修改主机名修改root密码 5、配置yum源 6、查看网卡配置 7、用yum下载软件 8、网络配置 1&#xff09;nmtui --图形化界面配置 …

攸信UMS工业配送AMR F1引领智能物流发展,侨智大会瞩目焦点

近日&#xff0c;由中国侨联、福建省人民政府共同主办的第一届中国侨智发展大会在福州开幕。本次大会以“五洲聚‘福’汇侨智&#xff0c;同心共圆中国梦”为主题&#xff0c;立足福建、服务全国、面向海外&#xff0c;吸引了来自37个国家和地区的一千余名海内外嘉宾参会。 01|…

98.乐理基础-记号篇-装饰音记号(六)倚音

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;97.乐理基础-记号篇-装饰音记号&#xff08;五&#xff09;颤音-CSDN博客 从历史的发展上来讲&#xff0c;倚音本质上是分为短倚音 和 长倚音这两种类型&#xff0c;但是长倚音确实是一个目前看上去没有什么意义的…

火车票车票查询-Python

一、相关代码 # Time: 2024/1/22 20:24 # Author: 马龙强 # File: 实现12306查票购票.py # software: PyCharm """网址&#xff1a;https://www.12306.cn/index/ 数据&#xff1a;车次信息 查票链接&#xff1a;https://kyfw.12306.cn/otn/leftTicket/queryE?…

常用界面设计组件 —— 数字输入和显示组件

2.3 数字输入和显示组件2.3.1 QSpinBox 与 QDoubleSpinBox2.3.2其它数值输入和显示组件 2.3 数字输入和显示组件 2.3.1 QSpinBox 与 QDoubleSpinBox QSpinBox用于整数的显示和输入&#xff0c;一般显示十进制 数&#xff0c;也可以显示二进制、十六进制数&#xff0c;而且可以…

GEE错误——Image (Error) Image.select: Pattern ‘SR_B1‘ did not match any bands.

错误 我花了大量时间试图解决这个问题,但我找不到解决办法。开发人员和小组成员,我需要你们的帮助,这是我学习项目的一部分。 原始代码链接: https://code.earthengine.google.com/ccd8eb582aa520b970f4dee2d5118def Image (Error) Image.select: Pattern SR_B1 did …

02 MyBatisPlus核心功能之基于Mapper接口/Service接口实现CRUD+分页查询

项目结构&#xff1a; 1.1 Insert方法 // 插入一条记录 // T 就是要插入的实体对象 // 默认主键生成策略为雪花算法&#xff08;后面讲解&#xff09; //返回值是影响条数 int insert(T entity);1.2 Delete方法 // 根据 entity 条件&#xff0c;删除记录 int delete(Param(…

Python学习03—Python语法元素分析

一、程序的格式框架 1.1 代码高亮 代码高亮是Python编程环境根据代码不同含义&#xff0c;给予不同色彩标注的一种色彩辅组体系。在不同的代码编程环境中&#xff0c;代码高亮的表现形式各有不同。 1.2 缩进 缩进是一行代码开始前的空白区域&#xff0c;它用来表达程序的格式…

不同知识表示方法与知识图谱

目录 前言1 一阶谓词逻辑1.1 简介1.2 优势1.3 局限性 2 产生式规则2.1 简介2.2 优势2.3 局限性 3 框架系统3.1 简介3.2 优势3.3 局限性 4 描述逻辑4.1 简介4.2 优势4.3 局限性 5 语义网络5.1 简介5.2 优势5.3 局限性 结语 前言 知识表示是人工智能领域中至关重要的一环&#x…

vue3前端开发,生命周期函数的基础练习

vue3前端开发,生命周期函数的基础练习&#xff01; 下面先给大家看一个图片&#xff0c;帮助大家了解&#xff0c;vue3的生命周期函数&#xff0c;和旧版本vue2的生命周期函数&#xff0c;有什么变化。 如图所示&#xff0c;vue3里面&#xff0c;把前面2个函数&#xff0c;混在…

再不学Python就晚了!——2023年度总结:市场需求最大的8种编程语言!

众所周知&#xff0c;编程语言的种类实在是太多了。直到现在&#xff0c;经常还会看到关于编程语言选择和学习的讨论。 虽说编程语言有好几百种&#xff0c;但实际项目使用和就业要求的主流编程语言却没有那么多。 大家可能也会好奇&#xff1a;现如今就业市场上到底什么编程…

【C++】Qt:QCustomPlot图表绘制库配置与示例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍QCustomPlot图表绘制库配置与示例。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…

【网站项目】新冠疫情隔离人员信息管理系统(有源码)

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。作者完整代码目录供你选择: 《Springboot网站项目…

【Linux与windows的文件互相传输】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 关于 rzsz 注意事项 查看软件包 使用命令 下载到本地&#xff08;使用sz的命令&#xff09; 本地文件上传到Linux中&#xff08;使用rz命令&#xff09; 方法一…

【立创EDA-PCB设计基础】3.网络表概念解读+板框绘制

前言&#xff1a;本文对网络表概念解读板框绘制&#xff08;确定PCB板子轮廓&#xff09; 网络表概念解读 在本专栏的上一篇文章【嘉立创EDA-PCB设计指南】2&#xff0c;将设计的原理图转为了PCB&#xff0c;在PCB界面下出现了所有的封装&#xff0c;以及所有的飞线属性&…

Minio 判断对象是否存在

引 Minio数据模型 中描述了 MinIO 中什么是桶&#xff0c;什么是对象&#xff0c;也给出了操作桶和操作对象的API。 在 MinIO 中&#xff0c; 对象 中间前缀 对象名称 。如何判定对象是否存在呢&#xff1f; 分析 在 MinIO 中并没有提供判断对象是否存在的操作&#xff…

Python基础之文件操作(I/O)

和其他编程语言一样&#xff0c;Python 也具有操作文件&#xff08;I/O&#xff09;的能力&#xff0c;比如打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。合理应用python提供的文件操作基本函数&#xff0c;可大大提高自动化实现的效率与框架代码的稳定性…

C++ | 六、栈 Stack、队列 Queue

栈的基础知识 栈&#xff08;stack&#xff09;是一种数据结构&#xff0c;在C中属于STL&#xff08;标准库&#xff09;特点&#xff1a;先进后出 栈的使用&#xff1a; 一、引入头文件<stack>二、创建栈变量&#xff08;类似容器、集合的创建方式&#xff09;&#xf…