将 PDF 页面合并为 1 个文件而不生成单页文件
Merge PDF pages to 1 file without generating single page files
目标是拍摄一组 jpg/tif 图像并将它们转换为 1 个可文本搜索的 PDF。我正在使用 Python 的 PyPDF2 和 pytesseract 来完成这个;但是,如果不将每个页面保存为自己的 PDF,我无法找到组合这些页面的方法。原来这些集合中的一些可能是 1k-10k 页,所以不幸的是,单独保存每一页不再可行......这是我到目前为止所得到的:
# Convert each image to a searchable PDF
for fileset in filesets:
merger = PdfFileMerger()
page_path = fr".\output\pages"
for file in fileset:
# Load image, read with pytesseract
path = os.path.join(download_location,file)
img = cv2.imread(path,1)
result = (pytesseract.image_to_pdf_or_hocr(img, lang="eng",config=tessdata_dir_config))
# Save result as PDF
f = open(os.path.join(path_out,getfilename.findall(file)[0])+".pdf","w+b")
f.write(bytearray(result))
f.close()
这对单个页面来说效果很好,从这里我可以合并每个页面并将它们保存为一个文档,例如:
# pdfs is a list of all the single page pdf's
for page in pdfs:
merger.append(page)
merger.write(fr".\output\{FILE}.pdf")
merger.close();
del merger
# Get rid of single page files
for page in pdfs:
os.remove(page)
这会根据需要生成可文本搜索的 PDF,但那些单独的页面文件会破坏我的记忆。我尝试将 result
对象附加到 merger
,这会产生 AttributeError: 'bytearray' object has no attribute 'seek'
错误。我还尝试使用 PyPDF2.PdfFileReader()
将 result
对象读取为 PDF,并得到了类似的结果。有任何想法吗?我的直觉是有一个快速的解决方案需要某种类型的变量 type() 转换,但我很少使用 PDF。
您需要使用BytesIO:
for fileset in filesets:
merger = PdfFileMerger()
page_path = fr".\output\pages"
for file in fileset:
# Load image, read with pytesseract
path = os.path.join(download_location,file)
img = cv2.imread(path,1)
result = pytesseract.image_to_pdf_or_hocr(img, lang="eng",config=tessdata_dir_config)
merger.append(BytesIO(result))
merger.write(fr".\output\{FILE}.pdf")
目标是拍摄一组 jpg/tif 图像并将它们转换为 1 个可文本搜索的 PDF。我正在使用 Python 的 PyPDF2 和 pytesseract 来完成这个;但是,如果不将每个页面保存为自己的 PDF,我无法找到组合这些页面的方法。原来这些集合中的一些可能是 1k-10k 页,所以不幸的是,单独保存每一页不再可行......这是我到目前为止所得到的:
# Convert each image to a searchable PDF
for fileset in filesets:
merger = PdfFileMerger()
page_path = fr".\output\pages"
for file in fileset:
# Load image, read with pytesseract
path = os.path.join(download_location,file)
img = cv2.imread(path,1)
result = (pytesseract.image_to_pdf_or_hocr(img, lang="eng",config=tessdata_dir_config))
# Save result as PDF
f = open(os.path.join(path_out,getfilename.findall(file)[0])+".pdf","w+b")
f.write(bytearray(result))
f.close()
这对单个页面来说效果很好,从这里我可以合并每个页面并将它们保存为一个文档,例如:
# pdfs is a list of all the single page pdf's
for page in pdfs:
merger.append(page)
merger.write(fr".\output\{FILE}.pdf")
merger.close();
del merger
# Get rid of single page files
for page in pdfs:
os.remove(page)
这会根据需要生成可文本搜索的 PDF,但那些单独的页面文件会破坏我的记忆。我尝试将 result
对象附加到 merger
,这会产生 AttributeError: 'bytearray' object has no attribute 'seek'
错误。我还尝试使用 PyPDF2.PdfFileReader()
将 result
对象读取为 PDF,并得到了类似的结果。有任何想法吗?我的直觉是有一个快速的解决方案需要某种类型的变量 type() 转换,但我很少使用 PDF。
您需要使用BytesIO:
for fileset in filesets:
merger = PdfFileMerger()
page_path = fr".\output\pages"
for file in fileset:
# Load image, read with pytesseract
path = os.path.join(download_location,file)
img = cv2.imread(path,1)
result = pytesseract.image_to_pdf_or_hocr(img, lang="eng",config=tessdata_dir_config)
merger.append(BytesIO(result))
merger.write(fr".\output\{FILE}.pdf")