分割特定PDF文件并将结果存储在自定义目录布局中
项目描述
将大型PDF文件分割成多个部分。
许可
这是一个免费软件(GPLv3),有关许可信息,请参阅LICENCE.txt。
它做什么
提供一个包含所有工资表的PDF文件(或其他类型)。在每一页上,您提供一个ancode和一个名称(员工的“名称”和一个特定的“ancode”键)。此程序将PDF分割成单独的工资表。
它允许负责工资表分发的人员从他们的会计软件生成文件,并获取一个具有结构化目录结构的输出。
enDI通过其界面将该目录结构与工资表分发相匹配。
通过扩展,可以配置对多种类型数据的分割。
如何
原始文件命名为<filetype>_<year>_<month>.pdf(例如:salaire_2020_11.pdf)。
使用文件类型来获取适当的解析配置。
生成的PDF文件放置在名为<filetype>/<year>/<month>/的目录下。
使用配置,该工具在PDF页面中搜索“ancode”和“名称”。它在适当的目录中生成文件,格式为<ancode>_<name>.pdf,包含相关的关键字页面。
安装
发行版依赖关系
安装pdftotext命令行工具。
基于Debian的发行版
apt-get install poppler-utils virtualenvwrapper
从PyPI安装
mkvirtualenv splitpdf
pip install caerp-split-pdf
从源安装
设置Python虚拟环境
mkvirtualenv splitpdf
pip install -r requirements.txt
pip install -e
开发模式
pip install -e .[dev]
配置
- 主要配置文件
默认为~/.caerp_split_pdf_config.yaml,可以使用 -c <configfile> 指定。
格式为yaml。
配置
文件类型
对于每种文件类型,一个解析策略,描述要提取的数据类型、提取方式以及要生成的文件名。(可以提供多个解析器,这里为 ancode 提供了三个,为 name 提供了两个)
示例
salaire:
filename_template: {data1}_{data2}_{data3}.pdf
datatypes:
data1:
- type: regex
regex: '[\s]{30,80}(?P<ancode>[A-Z]{4,12})\s+'
from_line: 11
to_line: 14
strict: True
regex_group_name: ancode
- type: coordinates
line: 12
column: 40
prefix: " "
- type: coordinates
line: 13
column: 40
prefix: " "
data2:
- type: regex
regex: '\s+(M|Mme|Mlle)\s+(?P<name>[\w\s]+)(\n|$)'
from_line: 6
to_line: 9
regex_group_name: name
strict: True
- type: coordinates
line: 8
column: 50
data3:
- type: coordinates
line: 2
column: 60
prefix: "Section :"
这里我们配置了名为 salaire_<year>_<month>.pdf 的文件的解析。
对于每一页,我们将提取三个数据并将所有页面按照匹配的 data1/data2/data3 三元组进行分组。这些页面将被分组到一个以 filename_template 命名的文件中。
查找器
对于每个数据,你可以累积多个“查找器”来实现数据检索。查找器将按照指定的顺序使用。
有两种类型的查找器。
RegexDataFinder
使用正则表达式在页面的字符串表示形式(pdftotext 输出)中查找数据
regex
用于匹配我们正在寻找的数据(ancode 或 name)的正则表达式。
strict(默认为 False)
如果为 True,则只有当只有一个项目与正则表达式匹配时才返回结果
from_line / to_line(可选)
指定一个行范围以限制查看的数据量。查找器将只在 from_line 和 to_line 行号之间(从 1 开始)查找。
regex_group_name(可选)
如果正则表达式使用组,则指定匹配数据的组
CoordinateDataFinder
使用坐标在页面的字符串表示形式(pdftotext 输出)中查找数据
line
查找数据的行
column
在行中开始的列
prefix(可选)
在数据之后应查找的前缀
日志记录
此程序支持以下选项的高级日志配置。
verbosity: DEBUG
可用选项是 DEBUG/INFO/WARNING/ERROR/CRITICAL
Syslog 日志记录
use_syslog: true
邮件日志记录
log_to_mail: true
mail:
host: localhost
from: admin@host.fr
to: contact@example.net
subject: '[%(hostname)s] Log of the pdf splitter'
该程序足够智能,如果配置指定,则使用 syslog。
如果配置包含 log_to_mail: True,则记录到邮件
示例
完整运行
caerp-split-pdf-run -c myconfig.yaml playground/salaires_2013_07.pdf
测试前 5 页是否可解析
caerp-split-pdf-run -c myconfig.yaml playground/salaires_2013_07.pdf -r 5
使用 -v 以获取调试信息。
使用 -h 获取选项的完整概述。
已知问题
- 针对工资单
无法处理某些 PDF 文件,特别是如果没有目录且字符集为“二进制”时。用此检查
file -i $filename.pdf
已知问题
当日志返回类似以下的消息时
CRITICAL - 没有输出页!
如果最终用户使用 Sage “Édition pilotée” 生成其文件,则问题可能是最终用户使用了“打印到 PDF”导出而不是“保存为 PDF”。