joest8/pdfinterpreter

此类设计用于将多个PDF文件(无论是基于图像还是基于文本)转换为数据数组。该类使用包含正则表达式的用户定义模板来控制数据提取过程,从而允许定制和灵活的输出。

v1.0 2023-11-05 19:04 UTC

This package is auto-updated.

Last update: 2024-09-05 22:13:53 UTC


README

简介

此类设计用于将多个PDF文件(无论是基于图像还是基于文本)转换为数据数组。该类使用包含正则表达式的用户定义模板来控制数据提取过程,从而允许定制和灵活的输出。

目录

本README分为几个部分

安装

composer require joest8/pdfinterpreter

控制台应用程序

要使用此类,您需要安装以下应用程序

  1. Poppler(必需,用于将PDF转换为文本并获取文件中的页数信息)
  2. Tesseract(必需,用于读取和解释png文件)
  3. ImageMagick(必需,用于将pdf转换为png)

请确保您的系统上已安装包管理器。

自动安装

从源文件夹运行以下代码来自动安装所有依赖项和tesseract语言文件

php install/install_dependencies.php

使用Homebrew手动安装

如果已安装homebrew,请运行以下命令安装Homebrew包

brew install poppler tesseract imagemagick

Tesseract语言文件的手动安装

您还需要安装所需的Tesseract语言文件。您可以在以下位置查看可用语言:https://github.com/tesseract-ocr/tessdata_best/

下载必要的语言文件并将它们放置在适当的目录中。要查找目录,请使用

tesseract --list-langs

用法

创建对象

<?php
require_once '../vendor/autoload.php';

use PdfInterpreter\PdfInterpreter;

//get path from terminal: 'echo $PATH'
$path_env = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin:/opt/homebrew/bin";
$pdf = new PdfInterpreter($path_env);

获取示例输出

使用get_sample_output方法,您将能够获取一个文本输出的示例,而无需对模式进行任何解释。

<?php
require_once '../vendor/autoload.php';

use PdfInterpreter\PdfInterpreter;

//get path from terminal: 'echo $PATH'
$path_env = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin:/opt/homebrew/bin";
$pdf = new PdfInterpreter($path_env);

print_r($pdf->get_sample_output());

设置新模板

使用add_new_template方法将帮助您创建新模板。有关所需参数的更多信息,请参阅该方法的DocBloc。

<?php
require_once '../vendor/autoload.php';

use PdfInterpreter\PdfInterpreter;

//get path from terminal: 'echo $PATH'
$path_env = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin:/opt/homebrew/bin";
$pdf = new PdfInterpreter($path_env);

$pdf->add_new_template("sample","Sample","/[Cc]ompany[\W]?[Aa][Bb][Cc]/","1","eng");

向模板添加模式

使用add_pattern_to_template方法将帮助您向现有模板添加新模式。有关所需参数的更多信息,请参阅该方法的DocBloc。

$pdf->add_pattern_to_template("sample","invoice_no","/INVOICE # *([\d]*)/","1");
$pdf->add_pattern_to_template("sample","date","/INVOICE DATE *([\d]{2}.[\d]{2}.[\d]{4})/","1");
$pdf->add_pattern_to_template("sample","positions","/([\d]{1,4}) *(.*?) *([\d]{1,8},[\d]{2}) *([\d]{1,8},[\d]{2})/m","a",true,['pieces','item','price','amount']);

获取模板

使用get_template方法将返回整个模板。有关所需参数的更多信息,请参阅该方法的DocBloc。

print_r($pdf->get_template("sample"));

删除模板

使用delete_template方法将删除整个模板。有关所需参数的更多信息,请参阅该方法的DocBloc。

print_r($pdf->delete_template("sample"));

从文件夹转换文件

使用convert_folder方法将转换文件夹中的所有文件为数组数据。有关所需参数的更多信息,请参阅该方法的DocBloc。

print_r(print_r($pdf->convert_folder("/../docs/",true,false,ocr_lang: "eng")));

转换文件

使用convert_file方法将单个文件转换为数据数组。有关所需参数的更多信息,请参阅该方法的DocBloc。

print_r($pdf->convert_file("/../docs/sample-bill.pdf",true,false));