之前一直找到的资料都是教你怎么生成pdf文档,比如:TCPDFFPDFwkhtmltopdf。而我碰到的项目里需要验证从远程获取的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文件的更多相关文章

  1. C#仪器数据文件解析-PDF文件

    不少仪器工作站输出的数据报告文件为PDF格式,PDF格式用于排版打印,但不易于数据解析,因此解析PDF数据需要首先读取到PDF文件中的文本内容,然后根据内容规则解析有意义的数据信息. C#解析PDF文 ...

  2. python3使用pdfminer3k解析pdf文件

    安装pdfminer模块 pip3 install pdfminer3k 代码如下 #!/usr/bin/env python # coding:utf8 # author:Z time:2018/7 ...

  3. Java仪器数据文件解析-PDF文件

    一.概述 使用pdfbox可生成Pdf文件,同样可以解析PDF文本内容. pdfbox链接:https://pdfbox.apache.org/ 二.PDF文本内容解析 File file = new ...

  4. pdfBox 解析 pdf文件

    Spting boot 项目 1.添加依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifa ...

  5. 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 ...

  6. 深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  7. C# Parsing 类实现的 PDF 文件分析器

    下载示例 下载源代码 1. 介绍 这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adob ...

  8. pdfminer批量处理PDF文件

    from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceMana ...

  9. WPF解析PDF为图片

    偶遇需要解析PDF文件为单张图,此做, http://git.oschina.net/jiailiuyan/OfficeDecoder using System; using System.Colle ...

随机推荐

  1. 永久修改MySQL字符集(适用Mysql5.5、Mysql5.6、Mysql5.7以上)

    在my.ini文件里添加三个参数: 1.在[client]下添加 default-character-set=utf8 2.在[mysqld]下添加 character-set-server=utf8 ...

  2. NOIP2016 D2-T3 愤怒的小鸟

    看了题解之后知道,是状压dp. 一.首先预处理一个$2^n$次方的fpow[]数组 fpow[]=; ;i<=;i++)fpow[i]=(fpow[i-]<<); 二.然后预处理一个 ...

  3. spring boot + es

    用Elasticsearch构建电商搜索平台 refs: http://www.sojson.com/blog/176.html

  4. B - Internship (网络流关键割边)

    题目链接:https://cn.vjudge.net/contest/281961#problem/B 题目大意:给你n个城市,中间有一些中转站,然后给你终点,再给你l条轨道以及流量,问你增加哪几条轨 ...

  5. oracle怎么给表和列加注释

    oracle添加注释的语法为: comment on column 字段名 is  '注释名' 举例: 创建表: CREATE TABLE t1{ id varchar2(32) primary ke ...

  6. Debian ifconfig 命令找不到

    如何配置让 Debian 非特权用户也可以使用 ifconfig . ifconfig 在 /sbin 目录下,新建一个用户时, Debian 默认从 /etc/skel/ 复制配置文件, /sbin ...

  7. Linux的7个运行级别

    0:关机 1:单用户(找回丢失密码)此模式下所有用户不需要密码即可登录,可用于重置密码 2:多用户状态没有网络服务 3:多用户状态有网络服务 ★ 4:系统未使用保留给用户 5:图形界面 ★ 6:系统重 ...

  8. unbuntu中如何像Windows一样顺畅的切换中英文输入法

    1.首先在unbuntu安装搜狗拼音输入法(这个不用教了) 2.点击右上角的搜狗拼音的图标点击设置进入设置页面 3.选择高级 4.选择Fcitx设置 5.添加输入法英语(美国) 6.在设置中选择按键, ...

  9. freeradius 错误: error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate

    在进行802.1x 测试时遇到如下问题: Waking up in 4.6 seconds.(156) Received Access-Request Id 82 from 192.168.1.126 ...

  10. 故障 -> nginx启动失败

    描述:在用saltstack给 minion 安装 nginx 服务 时 提示 nginx 服务下载成功,但是启动失败. ---------- ID: nginx-systemctl Function ...