python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python OFD转PDF

Python实现OFD文件转PDF

作者:大橙子打游戏

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文