开发Python程序:批量检测PDF尺寸转换错误并定位高亮
批量PDF尺寸单位转换错误检测工具实现方案
功能需求
- 批量扫描多份PDF文件,识别格式如「12 In. (304.8 mm)」的尺寸内容
- 自动检测英寸与毫米的单位转换是否存在错误
- 记录错误内容所在的页码,便于定位修正
改进后的完整代码
import PyPDF4 import re import os # 单位转换常量:1英寸 = 25.4毫米 INCH_TO_MM = 25.4 # 允许的误差范围(避免浮点计算精度问题) ERROR_TOLERANCE = 0.1 def check_unit_conversion(inch_val, mm_val): """检查英寸转毫米的数值是否正确""" calculated_mm = round(inch_val * INCH_TO_MM, 1) return abs(calculated_mm - mm_val) <= ERROR_TOLERANCE def scan_pdf(file_path): """扫描单个PDF文件,检测单位转换错误""" errors = [] try: with open(file_path, mode='rb') as f: reader = PyPDF4.PdfFileReader(f) total_pages = reader.numPages for page_num in range(total_pages): page = reader.getPage(page_num) text = page.extractText() # 匹配「X In. (Y mm)」格式的内容 pattern = re.compile(r'(\d+\.?\d*) In\. \((\d+\.?\d*) mm\)') matches = pattern.findall(text) for match in matches: try: inch_val = float(match[0]) mm_val = float(match[1]) if not check_unit_conversion(inch_val, mm_val): correct_mm = round(inch_val * INCH_TO_MM, 1) errors.append({ 'file': file_path, 'page': page_num + 1, # 页码从1开始计数 'original': f"{match[0]} In. ({match[1]} mm)", 'correct': f"{match[0]} In. ({correct_mm} mm)" }) except ValueError: # 处理无法转换为浮点数的异常情况 errors.append({ 'file': file_path, 'page': page_num + 1, 'original': f"{match[0]} In. ({match[1]} mm)", 'error': "数值格式无效" }) return errors except Exception as e: print(f"处理文件 {file_path} 时出错: {str(e)}") return [] def batch_scan_pdfs(folder_path): """批量扫描指定文件夹下的所有PDF文件""" all_errors = [] for filename in os.listdir(folder_path): if filename.lower().endswith('.pdf'): file_path = os.path.join(folder_path, filename) print(f"正在扫描文件: {file_path}") file_errors = scan_pdf(file_path) all_errors.extend(file_errors) return all_errors if __name__ == "__main__": # 替换为你的PDF文件夹路径 TARGET_FOLDER = r'C:\你的PDF文件夹路径' errors = batch_scan_pdfs(TARGET_FOLDER) if errors: print("\n=== 检测到单位转换错误 ===") for idx, error in enumerate(errors, 1): print(f"\n错误 {idx}:") print(f"文件: {error['file']}") print(f"页码: {error['page']}") print(f"原始内容: {error['original']}") if 'correct' in error: print(f"正确转换: {error['correct']}") else: print(f"问题: {error['error']}") else: print("\n未检测到任何单位转换错误")
代码功能说明
- 批量处理:通过
batch_scan_pdfs函数遍历指定文件夹下的所有PDF文件,自动处理每个文件 - 格式识别:使用正则表达式精准匹配「数值 In. (数值 mm)」的格式,支持整数和小数数值
- 错误检测:基于1英寸=25.4毫米的标准转换公式,计算理论值并与PDF中的数值对比,设置误差阈值避免浮点精度问题
- 错误定位:记录错误所在的文件名、页码、原始错误内容及正确转换结果,便于快速修正
注意事项
- 确保已安装依赖库:执行
pip install PyPDF4安装PyPDF4 - 部分PDF可能因加密或格式问题无法提取文本,代码中已添加异常处理
- 如果需要高亮PDF中的错误内容,可以结合PyPDF2或ReportLab库实现文本高亮(需额外处理PDF的写入操作)
内容的提问来源于stack exchange,提问作者surendra prasanth
相关产品推荐
相关产品推荐

