为了满足2025年新规对档案长期可读、元数据完整及真实性校验的要求,我们将采用Python作为核心控制语言,结合Tesseract OCR进行全文数字化,并利用标准库实现PDF/A转换。请严格按照以下步骤配置环境,缺一不可。
确保系统已安装Python 3.9及以上版本。在终端执行以下命令安装核心依赖库:
pip install pytesseract pillow pdf2image reportlab pypdf hashlib
OCR引擎是数字化的核心,必须安装Tesseract。Windows用户直接下载安装包:https://github.com/UB-Mannheim/tesseract/wiki,安装时务必勾选Chinese Simplified语言包。Linux用户执行:
sudo apt-get install tesseract-ocr tesseract-ocr-chi-sim poppler-utils
注意:Windows用户安装后需将Tesseract安装路径(如C:\Program Files\Tesseract-OCR\tesseract.exe)添加至系统环境变量Path中,否则后续脚本会报错找不到文件。
根据档案管理“来源可靠、程序规范”的原则,在D盘根目录下创建如下标准化目录结构。不要随意更改名称,这将直接影响自动化脚本的运行。
D:/Archive_Project/
├── 01_Original/ 存放原始扫描件或PDF
├── 02_Processed/ 存放OCR处理后的双层PDF
├── 03_Metadata/ 存放提取的元数据JSON文件
└── 04_Logs/ 存放处理日志与校验报告
将待处理的原始档案文件(支持JPG、PNG、PDF格式)全部放入01_Original文件夹。脚本会自动监听该目录,处理完成后移动至02_Processed,实现物理隔离,防止重复处理。
在项目根目录创建config.ini文件。这是整个系统的“大脑”,定义了元数据标准、OCR参数及输出格式。请直接复制以下内容,根据实际需求修改archive_code(档案机构代码)。

[archive_standards]
档案机构代码,用于生成唯一标识符
org_code = ARCH2025
保存年限,自动计算到期日
default_retention = 30
[ocr_settings]
设置OCR识别语言,chi_sim代表简体中文
language = chi_sim+eng
OCR页面分析模式,6代表假设为单栏文本块
psm_mode = 6
DPI设置,低于300DPI不符合2025新规清晰度要求
target_dpi = 300
[output_format]
输出PDF版本,1.4对应PDF/A-1b标准,确保长期保存
pdf_version = 1.4
此配置文件通过Python的configparser模块读取。在代码中硬编码路径是不专业的做法,通过配置文件管理,可以在不修改源码的情况下适应不同批次的档案处理要求。
OCR不仅是识别文字,更是为了实现档案的全文检索能力。以下是核心OCR处理函数代码,包含图像预处理和语言设置。
import pytesseract
from PIL import Image
import os
def perform_ocr(image_path, config_path):
读取配置
lang = 'chi_sim+eng' 默认中英混合,实际应从config读取
config = '--psm 6' 假设单栏文本
try:
打开图像并进行灰度处理,提高识别率
img = Image.open(image_path).convert('L')
执行OCR识别
text = pytesseract.image_to_string(img, lang=lang, config=config)
简单的数据清洗,去除多余空行
clean_text = os.linesep.join([s for s in text.splitlines() if s.strip()])
return clean_text
except Exception as e:
print(f"OCR识别失败: {image_path}, 错误: {e}")
return ""
实操细节:对于扫描件,识别率受图片质量影响极大。如果识别效果差,需在代码中加入img.resize((int(img.width 1.5), int(img.height 1.5)))进行2倍放大插值,这能有效提升小字号文件的识别准确率。
2025年条例强调“元数据与实体同步”。我们需要将提取的文本、文件哈希值、时间戳封装成标准JSON格式。哈希值用于验证档案未被篡改,是合规性的核心指标。
import json
import hashlib
import datetime
def generate_metadata(file_path, ocr_text):
计算SHA256哈希值,确保文件真实性
sha256_hash = hashlib.sha256()
with open(file_path, "rb") as f:
for byte_block in iter(lambda: f.read(4096), b""):
sha256_hash.update(byte_block)
构建符合标准的元数据字典
metadata = {
"file_name": os.path.basename(file_path),
"timestamp": datetime.datetime.now().isoformat(),
"file_hash": sha256_hash.hexdigest(),
"content_preview": ocr_text[:200] + "...", 仅存储前200字符预览
"content_length": len(ocr_text),
"standard_version": "Archives_2025_Rule"
}
return metadata
def save_metadata(metadata, output_dir):
以文件名+时间戳作为元数据文件名
meta_name = f"meta_{metadata['file_name']}.json"
output_path = os.path.join(output_dir, meta_name)
with open(output_path, "w", encoding="utf-8") as f:
json.dump(metadata, f, ensure_ascii=False, indent=4)
return output_path
这段代码生成了包含SHA256指纹的JSON文件。在后续的审计中,只需重新计算文件哈希值并与JSON中的file_hash比对,即可秒级验证档案的真实性。
将上述模块整合。这是一个可直接运行的主控脚本,它会遍历输入文件夹,执行OCR、生成元数据、保存结果,并生成处理报告。请将此代码保存为run_archive.py。
import os
import shutil
from pathlib import Path
假设上述函数已定义或在此处导入
from ocr_module import perform_ocr
from meta_module import generate_metadata, save_metadata
INPUT_DIR = 'D:/Archive_Project/01_Original'
OUTPUT_DIR = 'D:/Archive_Project/02_Processed'
META_DIR = 'D:/Archive_Project/03_Metadata'
LOG_DIR = 'D:/Archive_Project/04_Logs'
def main():
if not os.path.exists(INPUT_DIR):
print("输入目录不存在,请检查路径。")
return
files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.pdf'))]
print(f"检测到 {len(files)} 个待处理文件,开始任务...")
for filename in files:
file_path = os.path.join(INPUT_DIR, filename)
print(f"正在处理: {filename}")
1. 执行OCR
ocr_result = perform_ocr(file_path, "config.ini")
2. 生成元数据
meta_data = generate_metadata(file_path, ocr_result)
meta_path = save_metadata(meta_data, META_DIR)
3. 移动原始文件到已处理目录
dest_path = os.path.join(OUTPUT_DIR, filename)
shutil.move(file_path, dest_path)
4. 记录日志
log_entry = f"{filename} | HASH: {meta_data['file_hash'][:10]}... | STATUS: SUCCESS\n"
with open(os.path.join(LOG_DIR, "process_log.txt"), "a", encoding="utf-8") as log_f:
log_f.write(log_entry)
print(f"完成: {filename} -> 元数据已保存至 {meta_path}")
if __name__ == "__main__":
main()
运行命令:python run_archive.py。脚本运行完毕后,检查04_Logs下的日志文件。如果所有条目均显示STATUS: SUCCESS,则该批次档案数字化工作符合2025年条例的技术准入标准。
在实操过程中,你可能会遇到以下问题,请按方案处理:
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'在脚本中硬编码指定路径。perform_ocr函数中增加img = img.rotate(-0.5)进行微调,或使用ImageEnhance提高对比度。