Python实现OFD文件转PDF

 更新时间:2024年10月31日 08:44:53   作者:大橙子打游戏  
OFD 文件是由中国国家标准化管理委员会制定的国家标准,是一种开放式文档格式,具有高度可扩展性和可编辑性,本文主要介绍了如何利用Python实现OFD文件转PDF,需要的可以参考下

OFD 文件介绍

OFD 文件是由中国国家标准化管理委员会制定的国家标准,是一种开放式文档格式,具有高度可扩展性和可编辑性,可包含多种类型内容

数字化时代,电子发票已成为商务交易的常态。然而,对于许多用户来说,电子发票可能仍然是一个令人困惑的主题。特别是当涉及到OFD格式时,许多人可能不理解为什么它如此重要。在本文中,我们将探讨电子发票的OFD格式的重要性,以及为什么您应该了解并熟悉这种格式。

首先,让我们解释一下什么是OFD格式。OFD,全称是“开放式文件格式”,是中国自主研发的一种电子文件格式。由于其开放性和高效性,OFD格式被广泛用于电子发票等场景。

那么,为什么电子发票需要采用OFD格式呢?首先,OFD格式具有高度的可验证性。这意味着它可以轻松地验证电子发票的真实性和完整性,从而避免了假发票的风险。此外,OFD格式还有助于提高电子发票的处理效率。无论是打印、存储还是传输,OFD格式都能提供更高的效率和可靠性。

对于需要报销或归档电子发票的用户来说,OFD格式的重要性不言而喻。报销是许多公司和个人经常面临的一项任务,而电子发票可以大大简化这一过程。然而,为了确保电子发票能够被接受和认可,必须采用符合规定的格式。OFD格式恰好满足了这一需求,因此成为电子发票报销和归档的首选格式。

但是OFD文件格式并不能很顺畅的在普通阅读软件里使用,在代码中也不便于处理,于是我们需要将OFD格式的文件转成PDF。

转换代码

import base64
import os
import sys
from easyofd.ofd import OFD
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

pdfmetrics.registerFont(TTFont('宋体', '方正书宋简体.ttf'))


def cvt_ofd(file_path):

    file_prefix = os.path.splitext(os.path.split(file_path)[1])[0]
    with open(file_path, "rb") as f:
        ofdb64 = str(base64.b64encode(f.read()), "utf-8")
    ofd = OFD()
    ofd.read(ofdb64, save_xml=True, xml_name=f"{file_prefix}_xml")
    pdf_bytes = ofd.to_pdf()  # 转pdf
    img_np = ofd.to_jpg()  # 转图片
    ofd.del_data()

    with open(f"{file_prefix}.pdf", "wb") as f:
        f.write(pdf_bytes)

    for idx, img in enumerate(img_np):
        img.save(f"{file_prefix}_{idx}.jpg")


if __name__ == "__main__":
    cvt_ofd("example.ofd")

安装所需依赖

pip install easyofd reportlab

常见问题

1.字体不存在

免费字体库下载所需要的字体文件,参考使用 pdfmetrics.registerFont(TTFont('宋体', '方正书宋简体.ttf'))注册对应的字体文件到指定的名字即可

2.转换的PDF文件丢失图片

通过pip安装的easyofd包可能不是最新版的源码,需要修改一下,easyofd/draw/draw_pdf.py文件当中,SupportImgType的值,将IPEG改为JPEG即可。

到此这篇关于Python实现OFD文件转PDF的文章就介绍到这了,更多相关Python OFD转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python在Windows8下获取本机ip地址的方法

    python在Windows8下获取本机ip地址的方法

    这篇文章主要介绍了python在Windows8下获取本机ip地址的方法,涉及Python中socket包相关函数的使用技巧,需要的朋友可以参考下
    2015-03-03
  • 使用keras实现BiLSTM+CNN+CRF文字标记NER

    使用keras实现BiLSTM+CNN+CRF文字标记NER

    这篇文章主要介绍了使用keras实现BiLSTM+CNN+CRF文字标记NER,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python 使用csv模块读写csv格式文件的示例

    python 使用csv模块读写csv格式文件的示例

    这篇文章主要介绍了python 使用csv模块读写csv格式文件的示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-12-12
  • 分析语音数据增强及python实现

    分析语音数据增强及python实现

    数据增强是一种生成合成数据的方法,即通过调整原始样本来创建新样本。这样我们就可获得大量的数据。这不仅增加了数据集的大小,还提供了单个样本的多个变体,这有助于我们的机器学习模型避免过度拟合
    2021-06-06
  • python判断变量是否为列表的方法

    python判断变量是否为列表的方法

    在本篇文章里小编给大家整理了关于python判断变量是否为列表的方法,有需要的朋友们可以学习下。
    2020-09-09
  • 这可能是最好玩的python GUI入门实例(推荐)

    这可能是最好玩的python GUI入门实例(推荐)

    这篇文章主要介绍了这可能是最好玩的python GUI入门实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 在django-xadmin中APScheduler的启动初始化实例

    在django-xadmin中APScheduler的启动初始化实例

    今天小编就为大家分享一篇在django-xadmin中APScheduler的启动初始化实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python简介及下载安装

    python简介及下载安装

    这篇文章介绍了python以及下载安装的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Python+flask实现restful接口的示例详解

    Python+flask实现restful接口的示例详解

    这篇文章主要为大家详细介绍了Python如何利用flask实现restful接口,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-02-02
  • 用基于python的appium爬取b站直播消费记录

    用基于python的appium爬取b站直播消费记录

    因工作需要,需要爬取相关数据,之前是爬取网页数据,可以用python的requests和Selenium进行爬取。但b站的直播消费数据网页版不能显示,只能在手机上看到,所以就有了这篇文章。需要的朋友可以参考下
    2021-04-04

最新评论