跳转到主要内容

导入简单的PDF供应商发票

项目描述

Beta License: AGPL-3 OCA/edi Translate me on Weblate Try me on Runboat

此模块是模块 account_invoice_import 的扩展:它增加了对简单PDF发票的支持,即没有嵌入XML文件的PDF发票。此模块开发出来是为了解决OCA模块 account_invoice_import_invoice2data 的缺点;其优点如下

  • 可以添加对新的供应商的支持,无需开发者技能:会计可以做到!

  • 添加对新供应商的支持更快。

  • 对供应商发票布局变化的容忍度更高。

  • 更容易安装。

使用此模块,您可以导入所有能够使用模块 account_invoice_import_invoice2data 导入的发票。实际上,当导入PDF供应商发票时,此模块使用了相同的设计

  1. 从PDF文件中提取原始文本

  2. 使用增值税号码(如果原始文本提取中包含增值税号码)或一些关键字来识别合作伙伴

  3. 使用正则表达式(regex)提取在Odoo中创建供应商发票所需的数据(单行配置)

与OCA模块 account_invoice_import_invoice2data 的主要区别在于,正则表达式是由用户在Odoo中进行的配置自动生成的。不需要是正则表达式专家!但是,您仍然可以编写正则表达式来提取一些特定需要的字段。

模块可以提取以下字段

  • 含税总额

  • 不含税总额

  • 税额总额

  • 发票日期

  • 到期日

  • 开始日期

  • 结束日期

  • 发票号码

  • 描述(对于该字段,您必须编写正则表达式)

在此列表中,只需3个字段是必需的

  • 发票日期

  • 3个金额字段中有2个是必需的(第3个可以从其他2个中扣除:总金额 = 未税总额 + 税总额)

要利用《开始日期》和《结束日期》字段,您需要来自account-closing项目的OCA模块account_invoice_start_end_dates

想了解此模块开发背后的全部故事,请阅读Akretion的博客文章

目录

安装

此模块最重要的技术组件是将PDF转换为文本的工具。将PDF转换为文本并非易事。如本文博客文章中所述,不同的工具可以给出相当不同的结果。通常,基于PDF查看器的工具可以获得最佳结果,这排除了纯Python工具。但纯Python工具比基于PDF查看器的工具更容易安装。重要的是要理解,如果您更改PDF到文本工具,您肯定会得到略微不同的文本输出,这可能会迫使您更新字段提取规则,如果您已经配置了多个供应商,这可能是一项耗时的任务。

该模块支持5种不同的提取方法

  1. PyMuPDF,这是MuPDF的Python绑定,MuPDF是一个轻量级的PDF工具包/查看器/渲染器,由Artifex Software公司以AGPL许可证发布。

  2. pdftotext python库,这是pdftotext工具的Python绑定。

  3. pdftotext命令行工具,该工具基于poppler,poppler是xpdfEvince(Gnome的PDF阅读器)使用的PDF渲染库。

  4. pypdf,这是最常用的Python PDF库之一。pypdf是纯Python解决方案,因此它非常容易在所有操作系统上安装。

PyMuPDF和pdftotext都提供了非常好的文本输出。到目前为止,我无法说哪个最好。pypdf通常提供较低质量的文本输出,但其优点是它是一个纯Python库,因此您将始终能够安装它,无论您的技术环境如何。

您可以选择一种提取方法,并仅安装该方法的工具/库。

安装PyMuPDF

通过pip安装

pip3 install --upgrade pymupdf

请注意,PyMuPDF不是一个纯Python库:它使用MuPDF,这是一种用C语言编写的。如果您的操作系统、CPU架构和Python版本在pypi上可用的python wheel(请检查pypi上的PyMuPDF wheel列表),则安装将顺利。否则,通过pip进行的安装需要MuPDF及其所有开发库来编译绑定。

安装pdftotext python库

要安装pdftotext python库,运行

sudo apt install build-essential libpoppler-cpp-dev pkg-config python3-dev

然后通过pip安装库

pip3 install --upgrade pdftotext

在Debian/Ubuntu以外的操作系统上,请遵循项目页面上的说明。

安装pdftotext命令行

要安装pdftotext命令行,运行

sudo apt install poppler-utils

安装pypdf

要安装pypdf python库,运行

pip3 install --upgrade pypdf

其他要求

此模块还需要以下Python库

  • regex与Python标准库中的re模块向后兼容,但具有附加功能。

  • dateparser 是一个功能强大的日期解析库。

dateparser 库自身依赖于正则表达式。因此,您可以使用以下命令通过 pip 安装这些 Python 库:

pip3 install --upgrade dateparser

dateparser 库与所有正则表达式库版本不兼容。截至 2024 年 2 月,dateparser 声明对正则表达式的版本要求为 !=2019.02.19, !=2021.8.27。因此,dateparser 的最新版本目前与最新版本的 regex 兼容。要了解您的环境中 regex 的版本,请运行:

pip3 show regex

配置

默认情况下,对于 PDF 到文本的转换,模块将按照 INSTALL 部分中提到的顺序尝试不同的方法:它将首先尝试使用 PyMuPDF;如果失败(例如,因为库没有正确安装),则将尝试使用 pdftotext python 库;如果这也失败,则将尝试使用 pdftotext 命令行;如果它也失败,最终将尝试使用 pypdf。如果这 4 种方法都不起作用,Odoo 将显示错误消息。

如果您想强制 Odoo 使用特定的文本提取方法,请转到菜单 配置 > 技术 > 参数 > 系统参数 并创建一个新的系统参数

  • : invoice_import_simple_pdf.pdf2txt

  • : 选择您想使用的方法的正确值

    1. pymupdf

    2. pdftotext.lib

    3. pdftotext.cmd

    4. pypdf

在此配置中,Odoo 将仅使用选定的文本提取方法,如果它失败,则将显示错误消息。

您可以在以下 屏幕录像 中找到有关如何配置每个供应商以及导入 PDF 发票的完整演示。

错误跟踪器

错误在 GitHub 问题 上跟踪。如果遇到问题,请检查您的错误是否已经报告。如果您是第一个发现它的人,请通过提供详细和受欢迎的 反馈 来帮助我们解决问题。

请勿直接联系贡献者以获取支持或帮助解决技术问题。

鸣谢

作者

  • Akretion

贡献者

维护者

此模块由 OCA 维护。

Odoo Community Association

OCA,即 Odoo 社区协会,是一个非营利组织,其使命是支持 Odoo 功能的协作开发并促进其广泛使用。

当前 维护者

alexis-via

此模块是 GitHub 上 OCA/edi 项目的组成部分。

欢迎您贡献力量。要了解更多信息,请访问 https://odoo-community.org/page/Contribute

项目详情


下载文件

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

源分布

此版本没有可用的源分布文件。请参阅生成分布存档的教程。

构建分布

由以下支持