You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:46:10