使用 img2pdf 转换失败

import os
import img2pdf

pdf_file = r'F:\test.pdf'
pic_path = r'F:\test_pics'

with open(pdf_file, 'wb') as pf:
    file_list = os.listdir(pic_path)
    img_list = []
    for pic in file_list:
        if '.tif' in pic:
            pic = f'test_pics\\{pic}'
            img_list.append(pic)
    print(img_list)
    pf.write(img2pdf.convert(img_list))

提示我 TypeError: a bytes-like object is required, not 'str',我之前写过一个类似的就成功了,一直没找到这段代码哪里错了,请各位指教。

 

文件路径错了,把pic改成试试

pic = os.path.join(pic_path, pic)

 

看看是不是python的版本不一样导致的。用python3.8应该可以。

 

我发现我写的代码的问题所在了,如果图片的目录只有一层,就可以正常合成PDF,如果嵌套了多层就会抛异常,但是不知道怎么优化解决,下面代码直接运行是可以的,注释掉的部分是有文件夹嵌套的情况下,会失败

def img_to_pdf(path_name, file_format):
    pdf_file = 'test.pdf'
    pn = path_name.split('\\')
    print(pn)
    pn1 = pn[1]
    # pn2 = pn[2]
    # pn3 = pn[3]
    # pn4 = pn[4]
    with open(pdf_file, 'wb') as pf:
        file_list = os.listdir(path_name)
        img_list = []
        for pic in file_list:
            if f'.{file_format}' in pic:
                # pic = os.path.join(pn1, pn2, pn3, pn4, pic)
                pic = os.path.join(pn1, pic)
                img_list.append(pic)
        print(img_list)
        pf.write(img2pdf.convert(img_list))
    print('处理完成,请检查文件“test.pdf”')


if __name__ == '__main__':
    file_format = 'tif'
    # path_name = 'F:\\tif\\MGTS_101_004172\\scan_image\\001'
    path_name = 'F:\\test_pics'
    img_to_pdf(path_name, file_format)

报错信息

JPEGPreDecode: Improper JPEG sampling factors 2,2
Apparently should be 1,1..
Traceback (most recent call last):
  File "F:/nlc_010.py", line 49, in <module>
    img_to_pdf(path_name, file_format)
  File "F:/nlc_010.py", line 41, in img_to_pdf
    pf.write(img2pdf.convert(img_list))
  File "C:\Users\XXX\venv\lib\site-packages\img2pdf.py", line 2032, in convert
    ) in read_images(rawdata, kwargs["colorspace"], kwargs["first_frame_only"]):
  File "C:\Users\XXX\venv\lib\site-packages\img2pdf.py", line 1601, in read_images
    newimg.save(pngbuffer, format="png")
  File "C:\zzz\zzz_python\python_soft\lib\site-packages\PIL\Image.py", line 2068, in save
    self._ensure_mutable()
  File "C:\zzz\zzz_python\python_soft\lib\site-packages\PIL\Image.py", line 589, in _ensure_mutable
    self._copy()
  File "C:\zzz\zzz_python\python_soft\lib\site-packages\PIL\Image.py", line 582, in _copy
    self.load()
  File "C:\zzz\zzz_python\python_soft\lib\site-packages\PIL\TiffImagePlugin.py", line 1070, in load
    return self._load_libtiff()
  File "C:\zzz\zzz_python\python_soft\lib\site-packages\PIL\TiffImagePlugin.py", line 1182, in _load_libtiff
    raise OSError(err)
OSError: -2