renoyuan / easyofd

use python parse OFD file: finished ofd2img ofd2pdf pdf2ofd img2ofd ;(纯 python的ofd解析与pdf转换)
Apache License 2.0
159 stars 25 forks source link

运行时候报错:TypeError: Parameters to generic types must be types. Got <module 'PIL.Image' from 'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\PIL\\Image.py'>. #24

Open Fan-shine opened 1 month ago

Fan-shine commented 1 month ago

import sys, os import base64 import json from PIL import Image from easyofd.ofd import OFD

def test_ofd2(file_path): """ ofd2pdf ofd2img """

with open(r"0e7ff724-1011-4544-8464-ea6c025f6ade.ofd","rb") as f:

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 工具类
ofd.read(ofdb64, save_xml=True, xml_name=f"{file_prefix}_xml")  # 读取ofdb64
# print("ofd.data", ofd.data) # ofd.data 为程序解析结果
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):
    # im = Image.fromarray(img)
    img.save(f"{file_prefix}_{idx}.jpg")

file_path = 'C:\Users\XUN\Desktop\test\178,422.79.ofd' test_ofd2(file_path)

===============================报错内容如下====================================== C:\ProgramData\Anaconda3\python.exe C:/Users/XUN/PycharmProjects/office_automation/Kimo_assistant_v.5.2/test0631.py Traceback (most recent call last): File "C:/Users/XUN/PycharmProjects/office_automation/Kimo_assistant_v.5.2/test0631.py", line 63, in from easyofd.ofd import OFD File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd__init.py", line 1, in from .ofd import OFD File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd\ofd.py", line 21, in from easyofd.parser_ofd import OFDParser File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd\parser_ofd\init.py", line 26, in from easyofd.parser_ofd.ofd_parser import OFDParser File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd\parser_ofd\ofd_parser.py", line 28, in class OFDParser(object): File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd\parser_ofd\ofd_parser.py", line 41, in OFDParser def img2data(self,imglist:List[Image]): File "C:\ProgramData\Anaconda3\lib\typing.py", line 254, in inner return func(*args, **kwds) File "C:\ProgramData\Anaconda3\lib\typing.py", line 629, in getitem__ params = tuple(_type_check(p, msg) for p in params) File "C:\ProgramData\Anaconda3\lib\typing.py", line 629, in params = tuple(_type_check(p, msg) for p in params) File "C:\ProgramData\Anaconda3\lib\typing.py", line 142, in _type_check raise TypeError(f"{msg} Got {arg!r:.100}.") TypeError: Parameters to generic types must be types. Got <module 'PIL.Image' from 'C:\ProgramData\Anaconda3\lib\site-packages\PIL\Image.py'>.

进程已结束,退出代码为 1

YanceyHo commented 1 month ago

@renoyuan 0.3.4是有这个情况,看了下是作者导包错了导致的 ofd_parser.py里面 from PIL import Image 改成 from PIL.Image import Image

renoyuan commented 1 month ago

可以的话提供下你的 python &pillow版本 以及问题文件。我开发环境倒没出现过这类问题,我复现下看看。

Fan-shine commented 1 month ago

谢谢@YanceyHo 问题解决了。 但是运行上述代码,又有一个新的报错。@renoyuan我的python是3.7.6版,pillow是9.4.0版本。看到easyofd需要在python3.8+的环境中运行,但由于实际工作中需要用到ofd转pdf或者图片的功能,所以还是想在python3.7.6的版本中运行试试。 Traceback (most recent call last): File "C:/Users/XUN/PycharmProjects/office_automation/Kimo_assistant_v.5.2/test0631.py", line 55, in from easyofd.ofd import OFD File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd__init.py", line 1, in from .ofd import OFD File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd\ofd.py", line 22, in from easyofd.draw import DrawPDF,OFDWrite File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd\draw\init__.py", line 14, in from .draw_ofd import OFDWrite File "C:\ProgramData\Anaconda3\lib\site-packages\easyofd\draw\draw_ofd.py", line 66 elif pfd_res_uuid_map and (pfd_img := pfd_res_uuid_map.get("img")): ^ SyntaxError: invalid syntax

进程已结束,退出代码为 1

renoyuan commented 1 month ago

目前暂无考虑兼容3.8 以下版本,建议创建一个更新python环境,或fork 后去更改 3.8 以下语法特性和相关依赖