分割特定的PDF文件并将结果存储在自定义目录布局中
项目描述
将大PDF文件分割成多个部分。
许可证
这是一个免费软件(GPLv3),有关许可信息请参阅LICENCE.txt。
它做什么
提供一个包含所有工资表的PDF文件(或其他类型)。在每一页上,您提供一个安码和一个名称(员工的“名称”和特定的“安码”)。此程序将PDF分割成单独的工资表。
它允许负责工资表分发的人员从他们的会计软件生成文件,并获得具有结构化目录结构的输出。
enDI通过其界面匹配该目录结构以通过其界面分发工资表。
通过扩展,可以配置对多种类型数据的分割。
如何
原始文件命名为 <filetype>_<year>_<month>.pdf(例如:salaire_2020_11.pdf)。
使用文件类型获取适当的解析配置。
生成的PDF文件放置在名为 <filetype>/<year>/<month>/ 的目录下。
使用配置,工具在PDF页面中搜索“安码”和“名称”。它生成文件形式为 <ancode>_<name>.pdf,包含关联的关键词页面,并在适当的目录中。
安装
发行版依赖项
安装pdftotext命令行工具。
基于Debian的发行版
apt-get install poppler-utils virtualenvwrapper
从PyPI安装
mkvirtualenv splitpdf
pip install endi-split-pdf
从源安装
设置Python虚拟环境
mkvirtualenv splitpdf
pip install -r requirements.txt
pip install -e
开发模式
pip install -e .[dev]
配置
- 主要配置文件
默认为 ~/.endi_split_pdf_config.yaml 可通过使用 -c <configfile> 指定
格式为yaml。
配置
文件类型
对于每种文件类型,一个解析策略,描述要提取的数据类型,提取方式以及要生成的文件名。(可以提供多个解析器,这里我们有三个解析器用于安码和两个用于名称)
示例
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输出)中查找数据
正则表达式
用于匹配我们正在寻找的数据(代码或名称)的正则表达式。
严格(默认为False)
如果为True,则只有一项与正则表达式匹配时才返回结果
from_line / to_line(可选)
指定一个行数范围以限制查看的数据量。查找器将仅在from_line和to_line行号之间(从1开始)查找。
regex_group_name(可选)
如果正则表达式使用分组,请指定匹配数据的分组
CoordinateDataFinder
使用坐标在页面的字符串表示形式(pdftotext输出)中查找数据
行
查找数据的行
列
在行中开始的位置
前缀(可选)
在它之后我们应该找到数据的前缀
日志记录
此程序支持以下选项的高级日志记录配置。
verbosity: DEBUG
可用选项为DEBUG/INFO/WARNING/ERROR/CRITICAL
系统日志记录
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,则记录到邮件中。
示例
完整运行
endi-split-pdf-run -c myconfig.yaml playground/salaires_2013_07.pdf
测试文件的前5页是否可解析
endi-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”。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。