跳转到主要内容

分割特定的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”。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

endi_split_pdf-1.0.10.tar.gz (29.2 kB 查看散列值)

上传时间

构建分发

endi_split_pdf-1.0.10-py3-none-any.whl (31.1 kB 查看散列值)

上传时间 Python 3

由以下支持