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 Studio导入系统 jar包,编译时优先于查找系统SDK
https://www.cnblogs.com/bluestorm/p/6744140.html
- struts2在配置文件与JSP中用OGNL获取Action属性
参考:Struts与OGNL结合 struts2在配置文件中可以调用Action的属性,在JSP页面也可以取出Action的属性值(前提是属性有get,set方法). 第一个例子: 1.Action中 ...
- Sql Server 2008 数据库18456错误怎么解决?
可以windows连接,以前都可以,昨天突然就不可以用SQL连接,报18456错误. 1.以windows验证模式进入数据库管理器. 2.右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码( ...
- linux 同步IO: sync、fsync与fdatasync、sys_sync【转】
本文转自:http://blog.csdn.net/cywosp/article/details/8767327 和 http://www.2cto.com/os/201204/126687.html ...
- Python3学习笔记15-迭代器与生成器
生成器 如果创建一个有很多元素的列表,但是只需要访问前几个元素,后面的元素占着的空间就白白浪费了 在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间. 在Pytho ...
- 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- TYpeScript接口的使用
1.接口中的属性值的使用: // 作用是强制类型检查 interface Iperson { name: string; age: string; } class Person { construct ...
- 如何把JS对象转成数组
1. 前言 首先,当JS对象是键值对的情况时(Json对象),因为数组时以数字为索引的,所以只能把JS对象中的Key或者Value组成数组使用. 2. 样例如下: var obj={"one ...
- vue系列之过渡效果
参考地址:http://cn.vuejs.org/v2/guide/transitions.html vue2.0,要想实现过渡效果,要用transition组件 代码: <div id=&qu ...
- Java基础97 json插件的使用(java对象和json字符串对象之间的转换)
1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...