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