如何使用Textractor异步方法处理多页PDF文档?
问题
我使用Textractor包处理多页PDF文档时,通过循环将每页转换为图片的同步方法可正常运行,代码如下:
import os from textractor import Textractor from textractor.data.constants import TextractFeatures import pypdfium2 as pdfium pdf = pdfium.PdfDocument("myFile.pdf") extractor = Textractor(region_name="us-east-1") def convert_to_image(pdf, n): page=pdf[n] bitmap = page.render( scale = 1, rotation = 0, extra_flags = 0, grayscale = False, fill_color = (255, 255, 255, 255), color_scheme = None, optimize_mode = None, draw_annots = True, may_draw_forms = True, no_smoothtext = False, no_smoothimage = False, no_smoothpath = False, force_halftone = False, rev_byteorder = False, prefer_bgrx = False, force_bitmap_format = None #extra_flags = 0, #allocator = None, #memory = ) image = bitmap.to_pil() return image doc_words = [] doc_lines = [] for i in range(0, len(pdf)): print('page', i) pdf_page = convert_to_image(pdf, i) document = extractor.analyze_document( file_source=pdf_page, features=[TextractFeatures.FORMS, TextractFeatures.TABLES, TextractFeatures.SIGNATURES ]) doc_words.append(document.words) doc_lines.append(document.lines)
但我不想采用这种逐页转图的方式,希望直接使用异步方法读取多页PDF并输出所有页面文本。尝试执行以下代码:
document = extractor.start_document_analysis( file_source = "myFile.pdf", s3_upload_path="s3uploadpath", features=[TextractFeatures.FORMS, TextractFeatures.TABLES, TextractFeatures.SIGNATURES])
却出现错误:
PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?
解决方案
1. 解决Poppler依赖问题
start_document_analysis异步处理PDF时,Textractor依赖Poppler工具解析PDF页面信息,必须先完成安装和环境配置:
- Windows:下载Poppler预编译包,解压后将包内的
bin目录路径添加到系统环境变量PATH中。 - macOS:通过Homebrew安装,执行命令:
brew install poppler - Linux:使用系统包管理器安装,例如Ubuntu/Debian:
sudo apt-get install poppler-utils
2. 正确使用异步方法处理多页PDF
完成Poppler配置后,即可直接用异步方法处理多页PDF,无需逐页转图。注意异步任务需要等待完成才能获取结果,示例代码如下:
from textractor import Textractor from textractor.data.constants import TextractFeatures extractor = Textractor(region_name="us-east-1") # 启动异步文档分析任务,s3_upload_path需填写有效的S3存储路径 document_job = extractor.start_document_analysis( file_source="myFile.pdf", s3_upload_path="s3://your-bucket/your-folder/", features=[TextractFeatures.FORMS, TextractFeatures.TABLES, TextractFeatures.SIGNATURES] ) # 等待任务完成并获取完整文档结果 document = document_job.wait_for_completion() # 遍历所有页面提取文本内容 doc_words = [] doc_lines = [] for page in document.pages: doc_words.append(page.words) doc_lines.append(page.lines)
注意事项
s3_upload_path必须是有效的AWS S3路径,Textractor会先将本地PDF上传至该路径,再调用AWS Textract的异步API进行处理。- 异步方法更适合处理大体积或多页PDF,相比同步逐页处理效率更高。
内容的提问来源于stack exchange,提问作者mjoy
相关产品推荐
相关产品推荐

