前言   版式文档格式是版面呈现效果固定的电子文档格式, pdf和ofd均为板式文档格式标准;pdf板式文件占有绝对的统治地位;ofd是我国自主研发的板式文档规范,属于后起之秀。同为板式文件, 理论上可以实现互转而又能达到呈现格式完全一致。

  ofd标准晚于pdf标准将近20年,ofd标准采用吸纳了软件行业近年来的一些先进技术和通用做法;ofd和pdf虽均为板式文件,但是两个标准对板式文件的描述差别还是非常大的。市面上的板式文件大部分为pdf,如果能实现pdf转ofd,就解决了ofd的来源问题,可以促进ofd更快的普及。

作者研究ofd和pdf多年,采用c#实现了pdf转ofd,并将此功能集成到阅读器;阅读器打开pdf文件时,是将pdf转换为ofd后再显示的。完全实现pdf到ofd的转换需要大量的工作,作者会逐步完善。对于wps生成的pdf的文件,大部分是可以转换成功的。ofd阅读器下载(集成pdf与ofd互转)(百度网盘提取密码:jj9v)。

pdf转ofd初步思路

  板式文件描述的内基本分为三大类:文字、线、图,称之为图元。绘制图元时,还需要确定图元所处的“环境”,如:前景色、背景色、剪切区域、坐标系等;称之为状态。最终的呈现效果由图元和状态决定的。

  ofd与pdf描述这些元素的词是完全不同的,但是有相同的“意境”。将pdf转换为ofd的前提是充分理解pdf和ofd标准,找准两个标准相通的“意境”;转换就是意境的转换,而不是词汇的转换。下面逐步分析两个标准之间的差异。

pdf与ofd文档描述差异

  pdf属于单体文件,ofd属于容器文件;暨ofd是压缩包,压缩包包含多个文件。pdf文件分为很多块,每个块称之为object,有唯一id对应。每个块分为header和body,header描述格式为dictionary。pdf文件的结构需要通过专用软件才能查看,这一点不如ofd。pdf文件内容查看器。

  ofd容器内主要包括资源文件和格式描述文件。资源文件可以是任意文件,如:图片、字体、签章数据等;文件之间互不影响,可以方便的添加删除文件。格式文件是描述呈现格式的文件,为xml格式;采用xml格式的好处是:xml是标准格式、解析xml有现成的库;xml的描述能力也比pdf的文本描述能力更好。

  对于状态的描述,ofd和pdf采用了两种不同的方式。pdf对状态的描述是分散的,确定当前状态的属性需要追溯到文档开始。ofd对状态的描述是自包含的,仅仅通过当前xml节点就能确定状态属性。从上可以看出,分析pdf的状态难度更大,但是pdf这种描述方式更能节省空间,特别是描述非常复杂的状态时。

 文字描述差异

  pdf对文字的描述比ofd要复杂很多;pdf标准诞生时,还没有unicode概念,最初pdf只是用来显示拉丁文字。为了显示东亚文件,pdf标准只能另辟蹊径,采用了cid格式字体文件。ofd对字体描述统一采用unicode,达到了化繁为简的效果。

图片描述差异

  pdf图片处理部分比ofd复杂很多。pdf中的图片不是一个直接的“图”,它会描述图的压缩格式、像素颜色个数、调色板等信息,需要软件合成图片文件;而ofd文件是直接存入一个图片文件。

线描述差异

  这两部分差异不大,线处理是相对来说简单些。ofd有一个特殊的操作符A,用来表示圆弧。

c# 实现pdf转ofd步骤

1)pdf文件读取

  可以借助开源库处理pdf,比如:itext,apose,pdfbox等。pdf文件的结构还是比较复杂的,实现文件的读取逻辑也是非常复杂。

2)pdf指令的分割

每个pdf的指令包括操作数和操作符。这些数据是混合到一块的,需要快速高效的找到每个完整的指令。

下图恰好是每行一个指令。

3)pdf指令的处理

  这里是pdf处理最复杂部分。pdf指令归为十几大类。从作用上来讲可以分为两类:状态指令、操作指令。状态指令是修改pdf状态属性的,操作指令是执行具体操作,如:显示文字、划线等。

4) pdf转ofd

  理解pdf的处理指令就是掌握了“语义”,这是将pdf翻译成ofd必要条件。将语义用xml语法表示出来就是水到渠成的事。

后记 要完成pdf转ofd的功能,需要同时理解pdf和ofd标准。只要准确把握了这两种标准的内涵,就能实现pdf转ofd而又能确保不失真。

  在板式文件领域,pdf仍然是主流;但是ofd具有后发优势。pdf标准文档达1300多页,还有大量的附加协议,完全掌握pdf标准需要假以时日。pdf标准出现的较早,所以背负了沉重的历史包袱;标准中的部分内容在今天看来是过时、冗余的。

  pdf已成为事实上的国际标准,流式文档软件(wps等)或其他编辑设计软件大都有转换pdf功能。ofd的普及需要各方面的共同努力, 让用户快捷方便的生成ofd文件是其中重要的一环。毕竟,无源之水无法汇集成浩瀚海洋。作者用c#尝试实现了pdf转ofd功能,达到了初步可用状况。实现pdf完美转换为ofd及ofd在国内普及是作者的梦想;前途漫漫,唯有奋斗。

思路初探:采用c#实现pdf转ofd相关推荐

  1. PDF转OFD ~java实现

    PDF转OFD ~java实现 上篇文章记录了一下我第一次对接"超阅云"实现了ofd转pdf功能,想了想,还是再写一篇pdf转ofd的实现,其实对接的API基本一样,如果你是第一次 ...

  2. java pdf与ofd文件相互转换

    借用spire.pdf进行pdf与ofd相互转化 spire.pdf for java 参考文档: https://www.e-iceblue.cn/spire-pdf-for-java-news.h ...

  3. [PDF]我们经常使用的PDF是什么? PDF, PDF/A, PDF/Archive, OFD

    经常在用PDF,一直也没去做过了解.今天整理备忘如下: PDF 全称 Portable Document Format ,便携式文档格式. PDF格式是跨平台(包括硬件和软件平台)的文件格式,由 Ad ...

  4. 用python3写一段代码提取pdf和ofd格式发票内容并json格式化输出

    使用Python 3写一段代码来提取PDF和OFD格式发票内容并以JSON格式输出,可以使用Python库PyPDF2和pyofd:import PyPDF2 import pyofd# 读取PDF文 ...

  5. Visio直接粘贴进Word的矢量图,采用Adobe导出PDF后图片内容存在缺失的解决方案;  打印生成PDF,字体的加粗效果会很不明显的解决方案;

    问题一    Visio直接粘贴进Word的矢量图,采用Adobe导出PDF后图片内容存在缺失 目标效果: 但是导成PDF后字总是消失,成了 调整Visio内容没用,尝试各种网上办法没用.师妹的福昕可 ...

  6. (开源kkFileView、kkOffice)在线预览word、pdf、ofd、excel、ppt、压缩包、图片等等

    (开源kkFileView.kkOffice)在线预览word.pdf.ofd.excel.ppt.压缩包.图片等 前言 此项目为文件文档在线预览项目解决方案,对标业内付费产品有[永中office][ ...

  7. PDF、OFD,普通、专用电子发票批量解析V1.2

    有用户反馈,部分ofd电子发票开始使用.希望小工具能支持ofd电子发票. 在一用户提供了两张ofd电子发票提供测试后,更新了此python小工具. 更新说明: 1.支持解析大多数PDF版本普通电子发票 ...

  8. 采用WPF技术,开发OFD电子文档阅读器

    前言 OFD是国家标准版式文档格式,于2016年生效.OFD文档国家标准参见<电子文件存储与交换格式版式文档>.既然是国家标准,OFD随后肯定会首先在政务系统使用,并逐步推向社会各个方面. ...

  9. JAVA识别PDF和OFD电子发票并解析为java对象

    上一篇我们说了java实现电子发票中的发票税号等信息识别的几种可用方案,最后博主选取了识别文件二维码的方式,而且文章最后也说了,这种有局限性,去到的信息有限,而且针对OFD格式也得继续想办法,那接下来 ...

  10. PHP 把ofd格式文件转PDF,打开OFD格式文件及将OFD格式文件转换成PDF文件

    今天收到一张浙江开具的ofd格式发票,便在网上找相关的软件来打开方便打印出来给财务做账,但是找了一大圈没有解决方案,有些收费的解决方法,大部分所谓的OFD软件是骗人的,下载安装后根本打不开OFD格式的 ...

最新文章

  1. Docker mongo副本集环境搭建
  2. 前端一HTML:四: html标签
  3. asp.net core使用serilog将日志推送到腾讯云日志服务
  4. Java线程面试题 Top 53
  5. Python字符串的替换
  6. 固定td 样式 随 内容 溢出
  7. c4d在运行时候显示计算机内存不足,打开c4d电脑电脑卡死怎么办
  8. 用大数据文本挖掘来看“共享单车”的行业现状及走势
  9. Java使用PDFBox将一个 PDF 文档拆分为多个 PDF
  10. 超级计算机浪漫展览,这是最独特的“中国式浪漫”
  11. 3D 小游戏《飞跃地平线 Plus》开发分享
  12. CTex+WinEdt下载
  13. python去除空行_Python中去除文件空行(strip)
  14. 系统进程里的edpa.exe是什么?
  15. 【听】红高粱,莫言经典诺贝尔文学奖小说
  16. 如何搭建多功能会议室
  17. SpringBoot-NutzDao
  18. 2 172.02 php,Web服务器部署02: Apache PHP Oracle
  19. 在线新华字典Sidebar Gadget
  20. windows常用快捷键及命令大全

热门文章

  1. 中国住户收入调查(CHIP)数据及问卷(1988-2008年)
  2. 使用github安装vue-devtools
  3. excel解决线性规划求解问题
  4. MATLAB显示图像为什么一片白
  5. macOS devtools安装github包失败解决
  6. 无线通信技术-NB-IoT
  7. 航班预定系统java源代码_飞机订票系统源代码(Java)
  8. 喜马拉雅FM专辑下载器,支持VIP付费专辑下载
  9. linux客户端 手机,WAPI客户端在Linux系统中的实现
  10. fork()函数详解