之前一直找到的资料都是教你怎么生成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. springboot项目使用idea开启远程调试

    远程调试是调试服务器的有效手段,远程服务器运行的应用可以在本地代码中打断点调试,能让开发人员准确定位服务器上的问题. 一.开启远程调试前提:本地代码与服务器代码一致, 二.开启远程调试步骤 1.开发工 ...

  2. mysql 架构 ~异地容灾

    一 简介 我们来探讨下多机房下的mysql架构二 目的:    首先要清楚你的目的     1 实现异地机房的容灾备份      2 实现异地机房的双活 三 叙说     1 实现异地机房的容灾备份  ...

  3. session和token

    功能是一样的,都是要与浏览器建立连接,获取与客户端对应的用户数据,只不过完成这个功能的实现方式不太一样. 本质上的区别: session的使用方式是客户端cookie里存id,服务端session存用 ...

  4. 解决Ubuntu的root账号无法登录SSH问题-Permission denied, please try again.

    http://www.cnblogs.com/yixius/articles/6971054.html

  5. SVM实例及Matlab代码

    ******************************************************** ***数据集下载地址 :http://pan.baidu.com/s/1geb8CQf ...

  6. D3开发中的资料整理

    D3开发台阶比较高,需要对html,css,js非常熟练,还要对SVG非常熟悉,SVG不会就不要开发D3了,下面给大家推荐一本资料,为大家未来的开发提供便利. 这个框架产品不支持ie8,是这个产品的特 ...

  7. ARMV8 datasheet学习笔记3:AArch64应用级体系结构

    1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...

  8. 64位Win7系统WMware安装Mac OS

    1.         准备工作 l  VMWare Workstation,我的版本是 l  MAC OS安装光盘镜像文件,种子地址 http://www.kuaipan.cn/file/id_611 ...

  9. 001_TCP/IP TIME_WAIT状态原理及监控实战

    一.原理 <1>TIME_WAIT状态原理---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动 ...

  10. Android JAR包、Library项目

    [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目 (1)项目导入JAR包:1.在项目目录里建立一个libs目录,将外部jar包拷贝在里面.2. ...