Python實現(xiàn)OFD文件轉PDF
OFD 文件介紹
OFD 文件是由中國國家標準化管理委員會制定的國家標準,是一種開放式文檔格式,具有高度可擴展性和可編輯性,可包含多種類型內(nèi)容
數(shù)字化時代,電子發(fā)票已成為商務交易的常態(tài)。然而,對于許多用戶來說,電子發(fā)票可能仍然是一個令人困惑的主題。特別是當涉及到OFD格式時,許多人可能不理解為什么它如此重要。在本文中,我們將探討電子發(fā)票的OFD格式的重要性,以及為什么您應該了解并熟悉這種格式。
首先,讓我們解釋一下什么是OFD格式。OFD,全稱是“開放式文件格式”,是中國自主研發(fā)的一種電子文件格式。由于其開放性和高效性,OFD格式被廣泛用于電子發(fā)票等場景。
那么,為什么電子發(fā)票需要采用OFD格式呢?首先,OFD格式具有高度的可驗證性。這意味著它可以輕松地驗證電子發(fā)票的真實性和完整性,從而避免了假發(fā)票的風險。此外,OFD格式還有助于提高電子發(fā)票的處理效率。無論是打印、存儲還是傳輸,OFD格式都能提供更高的效率和可靠性。
對于需要報銷或歸檔電子發(fā)票的用戶來說,OFD格式的重要性不言而喻。報銷是許多公司和個人經(jīng)常面臨的一項任務,而電子發(fā)票可以大大簡化這一過程。然而,為了確保電子發(fā)票能夠被接受和認可,必須采用符合規(guī)定的格式。OFD格式恰好滿足了這一需求,因此成為電子發(fā)票報銷和歸檔的首選格式。
但是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實現(xiàn)OFD文件轉PDF的文章就介紹到這了,更多相關Python OFD轉PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python寫入已存在的excel數(shù)據(jù)實例
下面小編就為大家分享一篇python寫入已存在的excel數(shù)據(jù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
pandas系列之DataFrame 行列數(shù)據(jù)篩選實例
下面小編就為大家分享一篇pandas系列之DataFrame 行列數(shù)據(jù)篩選實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python實現(xiàn)連接dr校園網(wǎng)示例詳解
在校園里認證上網(wǎng)很麻煩需要web輸入賬號密碼有時還會忘記web地址,所以為了解決這一問題,本文將為大家介紹通過Python實現(xiàn)校園網(wǎng)的連接,快來跟隨小編一起學習吧2021-11-11
Python使用ntplib庫同步校準當?shù)貢r間的方法
NTP網(wǎng)絡時間協(xié)議其實大家平時或多或少都能接觸到,包括Windows在內(nèi)的操作系統(tǒng)中的很多Internet時間同步功能都是在NTP的基礎上來做,這里我們來看一下Python使用ntplib庫同步校準當?shù)貢r間的方法2016-07-07

