php-pdf-to-text 无法通过 composer 安装,因其未在 packagist 注册,需手动下载 pdf-to-text.php 并 require_once;它依赖系统 pdftotext 命令,非纯 php 实现;推荐改用 composer require smalot/pdfparser 等可安装、免外部依赖的替代方案。

Composer 安装 php-pdf-to-text 失败或找不到包?
这个库没有在 Packagist 上注册官方 Composer 包,composer require php-pdf-to-text/php-pdf-to-text 会报错 Could not find package php-pdf-to-text/php-pdf-to-text。它本质是 GitHub 上一个轻量脚本(pdf-to-text.php),不是标准 Composer 包,不能直接 require。
手动引入 pdf-to-text.php 并正确调用
从 GitHub 仓库 下载 pdf-to-text.php 文件,放到项目目录(比如 vendor/ 或 lib/),然后 require_once 它即可使用:
require_once 'path/to/pdf-to-text.php';
$pdf = new PdfToText('/path/to/file.pdf');
$text = $pdf->text();
注意几点:
-
PdfToText构造函数传入的是 PDF 文件**绝对路径**,相对路径容易因 CLI/web 工作目录不同而失败 - 该类依赖系统级命令
pdftotext(来自 Poppler 工具集),不是纯 PHP 实现;PHP 进程必须有权限执行该命令 - 确认已安装
pdftotext:which pdftotext(Linux/macOS)或pdftotext.exe在 Windows PATH 中 - 如果
pdftotext不在默认路径,需在构造时指定:new PdfToText($file, '/usr/local/bin/pdftotext')
替代方案:用更可靠、可 Composer 安装的库
如果你需要稳定依赖管理、自动加载和长期维护,推荐改用 smalot/pdfparser(纯 PHP,无需外部命令)或 setasign/fpdi-pdf-parser(兼容性更好)。安装方式:
composer require smalot/pdfparser
基本用法:
$parser = new \Smalot\PdfParser\Parser();
$pdf = $parser->parseFile('/path/to/file.pdf');
$text = $pdf->getText();
注意:
-
smalot/pdfparser对扫描版 PDF(图片型)完全无效,只解析文本型 PDF 的内嵌内容 - 它不依赖系统命令,但解析结果可能比
pdftotext粗略(比如丢失换行、格式混乱) - 若 PDF 含加密或特殊字体,可能抛出异常,需加
try/catch
pdftotext 命令本身出错时怎么排查?
常见错误如 sh: pdftotext: command not found 或 PDF file is damaged,说明问题不在 PHP 代码,而在环境配置:
- Linux/macOS:用
sudo apt install poppler-utils(Ubuntu/Debian)或brew install poppler(macOS) - Windows:下载 poppler binaries,把
bin/加入系统 PATH - Web 服务器(如 Apache/Nginx)运行 PHP 时,PATH 环境变量通常被重置,建议在代码中显式指定
pdftotext路径 - 权限问题:确保 PHP 进程对 PDF 文件有读取权限,对临时目录(
pdftotext可能写临时文件)有写权限
真正卡住的地方往往不是 PHP 语法,而是 pdftotext 是否就位、能否被 PHP 正确调用、以及 PDF 本身是否为可选中文本提取的类型。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











