PHP通过PDFParser解析PDF文件
之前一直找到的资料都是教你怎么生成pdf文档,比如:TCPDF、FPDF、wkhtmltopdf。而我碰到的项目里需要验证从远程获取的pdf文件是否受损、文件内容是否一致这些问题,这些都不能直接提供给我读取pdf的功能,碰巧找到了一个可以读取并解析PDF文档的第三方类库PDFParser,该类库非常简单好用,可以直奔官网了解。
一、安装步骤
我这里用的是CI框架,但都可用composer包管理方式安装到项目中,进行开发调用
- 将PDFParser加入composer.json文件中

- 项目根目录下打开命令行并执行:
composer update smalot/pdfparser
如果发现update不下来,可以修改当前项目的 composer.json 配置文件,打开命令行窗口(windows用户)或控制台(Linux、Mac 用户),进入你的项目的根目录(也就是 composer.json 文件所在目录),执行如下命令:
composer config repo.packagist composer https://packagist.phpcomposer.com,再重试。当然,如果本地没安装composer,请前往composer官网自行安装。
二、示例代码
- 读取pdf文件内容、获取文件详情
//引入pdf解析第三方类库
$vendorAutoloadFile = APPPATH.'..'.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
require_once($vendorAutoloadFile);
$pdfFile = '/temp/label/HnEms/LS955518275CN.pdf';
//读取pdf,验证跟踪号是否一致
// Parse pdf file and build necessary objects.
$parser = new \Smalot\PdfParser\Parser();
$pdfPath = $_SERVER['DOCUMENT_ROOT'].$pdfFile;
$pdf = $parser->parseFile($pdfPath);
$text = $pdf->getText();
echo $text;
echo '<hr>';
// Retrieve all details from the pdf file.
$details = $pdf->getDetails();
var_dump($details);
die;
执行结果展示:

三、实践应用
这里验证pdf文档中跟踪号是否和提供的一致,不一致返回假,若pdf是损坏的则返回false。函数也提供了返回异常消息。
$trackingNumber = 'LS955518275CN';
$pdfFile = '/temp/label/Chukou1/3559675.pdf';
//仅验证pdf文件是否有效
//$result = verifyValidLabelPdf($trackingNumber, $pdfFile);
//验证pdf是否有效,无效则返回无效的原因
$result = verifyValidLabelPdf($trackingNumber, $pdfFile, true);
var_dump($result);
/**
* 验证面单pdf文件是否完整(文件不存在、损坏和跟踪号不一致等情况)
* @param string $trackingNumber 跟踪号
* eg. $trackingNumber = 'LS955518275CN';
* @param string $pdfFile pdf文件路径
* @param bool $showExceptionMessage 默认为false,不返回异常消息,为true时,出现异常会返回异常消息
* @return bool true pdf有效,false pdf无效
*
* Attention please : 该方法异常处理千万不要去掉,第三方类库PdfParser解析PDF出错时会抛异常,
* 这里的异常处理也可以接收PdfParser抛出来的异常信息,进行友好提示
*/
function verifyValidLabelPdf($trackingNumber, $pdfFile, $showExceptionMessage = false)
{
try{
$pdfPath = $_SERVER['DOCUMENT_ROOT'].$pdfFile;
//验证文件是否存在
if (!file_exists($pdfPath) || !is_file($pdfPath)){
throw new Exception('pdf文件不存在');
}
//引入PdfParser第三方类库
$vendorAutoloadFile = APPPATH.'..'.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
require_once($vendorAutoloadFile);
//读取pdf,验证跟踪号是否一致
// Parse pdf file and build necessary objects.
$parser = new \Smalot\PdfParser\Parser();
$pdf = $parser->parseFile($pdfPath);
$text = $pdf->getText();
//验证跟踪号是否一致
if (strpos($text, $trackingNumber) === false){
throw new Exception('跟踪号不一致');
}
return true;
}catch (Exception $ex){
//获取错误类型 pdf文件可能不存在、损坏等无法加载
if ($showExceptionMessage === true){
//接收异常提示消息并返回
$message = $ex->getMessage();
return $message;
}
return false;
}
}
四、参考资料
PHP通过PDFParser解析PDF文件的更多相关文章
- C#仪器数据文件解析-PDF文件
不少仪器工作站输出的数据报告文件为PDF格式,PDF格式用于排版打印,但不易于数据解析,因此解析PDF数据需要首先读取到PDF文件中的文本内容,然后根据内容规则解析有意义的数据信息. C#解析PDF文 ...
- python3使用pdfminer3k解析pdf文件
安装pdfminer模块 pip3 install pdfminer3k 代码如下 #!/usr/bin/env python # coding:utf8 # author:Z time:2018/7 ...
- Java仪器数据文件解析-PDF文件
一.概述 使用pdfbox可生成Pdf文件,同样可以解析PDF文本内容. pdfbox链接:https://pdfbox.apache.org/ 二.PDF文本内容解析 File file = new ...
- pdfBox 解析 pdf文件
Spting boot 项目 1.添加依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifa ...
- C# PDFBox 解析PDF文件
下载 PDFBox-0.7.3.zip PDFBox-0.7.3.dlllucene-demos-2.0.0.dlllucene-core-2.0.0.dllbcmail-jdk14-132.dllb ...
- 深入学习python解析并读取PDF文件内容的方法
这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...
- C# Parsing 类实现的 PDF 文件分析器
下载示例 下载源代码 1. 介绍 这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adob ...
- pdfminer批量处理PDF文件
from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceMana ...
- WPF解析PDF为图片
偶遇需要解析PDF文件为单张图,此做, http://git.oschina.net/jiailiuyan/OfficeDecoder using System; using System.Colle ...
随机推荐
- android 使用get和post将数据提交到服务器
1.activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android& ...
- Linux之常识小结[版本]
1 linux内核版本 major.minor.patchlevel 主版本号.次版本号.修补次数 次版本号的意义:偶数稳定版,奇数不稳定版 注意:查看系统版本信息 方法1.uname -a 方法2. ...
- 第15月第29天 ffmpeg AVERROR_EOF
1. 在直播时返回AVERROR_EOF代表流结束吗?但对方还在直播,没有结束. int ret = av_read_frame(mContext, pkt); if (ret == AVERROR_ ...
- Python装饰器实现异步回调
def callback(func): def inner(obj, *args, **kwargs): res = func(obj, *args, **kwargs) if kwargs.get( ...
- mongodb系列~ mongodb慢语句(3)
简介: 关于mongodb慢日志是如何收集 一 mongodb慢日志的开启 1 直接设置参数,不重启服务:db.setProfilingLevel(1) 2 添加启动参数,重启服务:添加profile ...
- 实用技能之Python打包制作成EXE可执行程序
制作环境:Andconda3,python3.6 一.安装pyInstaller 方式一): 在命令行输入:pip install pyinstaller 方式二): ① 下载pyInstalle ...
- Web下文件上传下载的路径问题
工程结构
- CSS如何进行图文并茂布局怎么破
上下结构 左右结构 右边左边的结构
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- caffe中使用python定义新的层
转载链接:http://withwsf.github.io/2016/04/14/Caffe-with-Python-Layer/ Caffe通过Boost中的Boost.Python模块来支持使用P ...