从文件名读取单页 .tif 文件为 multipage.tiff
read single page .tif files as multipage.tiff from filename
更新:我发现从 OCRed 文件创建 pdf 文件是不合理的
所以最好保持原样,不进行转换。我仍然遇到一些图像已连接而其他图像是 1 个寻呼机的问题。
data = []
listOfPages = glob.glob(r"C:/Users/name/test/*.tif")
for entry in listOfPages:
text = pytesseract.image_to_string(
Image.open(entry), lang="en"
)
data.append(text)
df0 = pd.DataFrame(data, columns =['raw_text'])
这将创建一个 pandas df,其中每一行都是 .tif
文件的第一页(单页)的字符串。我如何连接 tif 文件(参见原始问题)以获得完整的多页字符串?
原题:
我想将 my_folder
中的单页 .tif 文件转换为 pdf_folder
中的多页 .pdf
文件。没有后续页面的 TIFF 也应转换为单页 PDF。最终,我想要一个通过对多个基于图像的 TIFF 文件进行 OCR 处理而创建的文本 PDF。
因此我从文件名模式推断出 .tiff
组文件应该放在一起:
Drs_1_00109_1_ADS.tif
Drs_1_00099_1_ADS_000.tif
Drs_1_00099_1_ADS_001.tif
Drs_1_00099_1_ADS_002.tif
Drs_1_00186_1_ADS.tif
Drs_1_00192_1_ADS_000.tif
Drs_1_00192_1_ADS_001.tif
例如 Drs_1_00192_1_ADS_000.tif
和
Drs_1_00192_1_ADS_001.tif
(这是两张 [单页] 图片)我想转换为包含这两张图片文本数据的第 2 页 Drs_1_00192_1_ADS.pdf
。
该代码适用于单页 pdf 创建。 我怎样才能使文件名中的所述多页模式起作用?
谢谢!
我会通过遍历所有以 000.tif
结尾的文件来做到这一点,这大概是多页文档的起点,然后附加由于增加后缀而产生的文件,直到文件丢失。
#!/usr/bin/env python3
import os
from PIL import Image
from glob import glob
# Iterate over all files ending in '000.tif' and find their friends (subsequent pages)
for filename in glob('*_000.tif'):
# Work out stem of filename
stem = filename.replace('_000.tif', '')
print(f'DEBUG: stem={stem}')
# Build list of images to be put in this PDF
images = [Image.open(filename)]
index = 1
while True:
this = f'{stem}_{index:03d}.tif'
print(f'DEBUG: this={this}')
if os.path.isfile(this):
images.append(Image.open(this))
index += 1
else:
break
output = stem + '.pdf'
print(f'DEBUG: Saving {len(images)} pages to {output}')
images[0].save(output, save_all=True, append_images=images[1:])
示例输出
DEBUG: stem=Drs_1_00192_1_ADS
DEBUG: this=Drs_1_00192_1_ADS_001.tif
DEBUG: this=Drs_1_00192_1_ADS_002.tif
DEBUG: this=Drs_1_00192_1_ADS_003.tif
DEBUG: this=Drs_1_00192_1_ADS_004.tif
DEBUG: Saving 4 pages to Drs_1_00192_1_ADS.pdf
DEBUG: stem=Drs_1_00099_1_ADS
DEBUG: this=Drs_1_00099_1_ADS_001.tif
DEBUG: this=Drs_1_00099_1_ADS_002.tif
DEBUG: this=Drs_1_00099_1_ADS_003.tif
DEBUG: Saving 3 pages to Drs_1_00099_1_ADS.pdf
请注意,您可以轻松地使用 OpenCV 读取文件,只需替换:
image = Image.open(filename)
和
image = cv2.imread(filename)
但是,您不能像使用 PIL 那样简单地使用 OpenCV 编写 PDF,所以我只是坚持使用 PIL。如果您还记得 PIL 使用 RGB 排序,而 OpenCV 使用 BGR,所以你可以从 PIL 到 OpenCV 使用:
OpenCVImage = np.array(PILImage)[...,::-1]
和
PILImage = Image.fromarray(OpenCVImage[...,::-1])
更新:我发现从 OCRed 文件创建 pdf 文件是不合理的
所以最好保持原样,不进行转换。我仍然遇到一些图像已连接而其他图像是 1 个寻呼机的问题。
data = []
listOfPages = glob.glob(r"C:/Users/name/test/*.tif")
for entry in listOfPages:
text = pytesseract.image_to_string(
Image.open(entry), lang="en"
)
data.append(text)
df0 = pd.DataFrame(data, columns =['raw_text'])
这将创建一个 pandas df,其中每一行都是 .tif
文件的第一页(单页)的字符串。我如何连接 tif 文件(参见原始问题)以获得完整的多页字符串?
原题:
我想将 my_folder
中的单页 .tif 文件转换为 pdf_folder
中的多页 .pdf
文件。没有后续页面的 TIFF 也应转换为单页 PDF。最终,我想要一个通过对多个基于图像的 TIFF 文件进行 OCR 处理而创建的文本 PDF。
因此我从文件名模式推断出 .tiff
组文件应该放在一起:
Drs_1_00109_1_ADS.tif
Drs_1_00099_1_ADS_000.tif
Drs_1_00099_1_ADS_001.tif
Drs_1_00099_1_ADS_002.tif
Drs_1_00186_1_ADS.tif
Drs_1_00192_1_ADS_000.tif
Drs_1_00192_1_ADS_001.tif
例如 Drs_1_00192_1_ADS_000.tif
和
Drs_1_00192_1_ADS_001.tif
(这是两张 [单页] 图片)我想转换为包含这两张图片文本数据的第 2 页 Drs_1_00192_1_ADS.pdf
。
该代码适用于单页 pdf 创建。 我怎样才能使文件名中的所述多页模式起作用?
谢谢!
我会通过遍历所有以 000.tif
结尾的文件来做到这一点,这大概是多页文档的起点,然后附加由于增加后缀而产生的文件,直到文件丢失。
#!/usr/bin/env python3
import os
from PIL import Image
from glob import glob
# Iterate over all files ending in '000.tif' and find their friends (subsequent pages)
for filename in glob('*_000.tif'):
# Work out stem of filename
stem = filename.replace('_000.tif', '')
print(f'DEBUG: stem={stem}')
# Build list of images to be put in this PDF
images = [Image.open(filename)]
index = 1
while True:
this = f'{stem}_{index:03d}.tif'
print(f'DEBUG: this={this}')
if os.path.isfile(this):
images.append(Image.open(this))
index += 1
else:
break
output = stem + '.pdf'
print(f'DEBUG: Saving {len(images)} pages to {output}')
images[0].save(output, save_all=True, append_images=images[1:])
示例输出
DEBUG: stem=Drs_1_00192_1_ADS
DEBUG: this=Drs_1_00192_1_ADS_001.tif
DEBUG: this=Drs_1_00192_1_ADS_002.tif
DEBUG: this=Drs_1_00192_1_ADS_003.tif
DEBUG: this=Drs_1_00192_1_ADS_004.tif
DEBUG: Saving 4 pages to Drs_1_00192_1_ADS.pdf
DEBUG: stem=Drs_1_00099_1_ADS
DEBUG: this=Drs_1_00099_1_ADS_001.tif
DEBUG: this=Drs_1_00099_1_ADS_002.tif
DEBUG: this=Drs_1_00099_1_ADS_003.tif
DEBUG: Saving 3 pages to Drs_1_00099_1_ADS.pdf
请注意,您可以轻松地使用 OpenCV 读取文件,只需替换:
image = Image.open(filename)
和
image = cv2.imread(filename)
但是,您不能像使用 PIL 那样简单地使用 OpenCV 编写 PDF,所以我只是坚持使用 PIL。如果您还记得 PIL 使用 RGB 排序,而 OpenCV 使用 BGR,所以你可以从 PIL 到 OpenCV 使用:
OpenCVImage = np.array(PILImage)[...,::-1]
和
PILImage = Image.fromarray(OpenCVImage[...,::-1])