从文件名读取单页 .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.tifDrs_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,所以你可以从 PILOpenCV 使用:

OpenCVImage = np.array(PILImage)[...,::-1]

PILImage = Image.fromarray(OpenCVImage[...,::-1])