yii自身不内置pdf解析能力,需借助smalot/pdfparser等第三方库;安装后可直接读取文字型pdf文本,但不支持扫描版,中文乱码时可升级库或指定utf-8编码。

Yii 本身不内置 PDF 解析能力,需借助第三方 PHP 库(如 smalot/pdfparser 或 setasign/fpdi + setasign/tcpdf 的组合),最简可行方案是使用 smalot/pdfparser —— 轻量、纯 PHP、专注文本提取,且与 Yii 兼容良好。
安装 PDF 解析库
在 Yii 项目根目录执行:
composer require smalot/pdfparser
该库无额外依赖,安装后即可直接使用,无需配置 Yii 组件。
在控制器中读取 PDF 文本内容
以下是最简可用代码(以 Yii2 为例),放在任意控制器动作中即可运行:
$parser = new \Smalot\PdfParser\Parser();
$pdf = $parser->parseFile('/path/to/your/document.pdf');
$text = $pdf->getText();
var_dump($text);
?>
说明:
-
/path/to/your/document.pdf 需替换为服务器上真实 PDF 文件路径(如
Yii::getAlias('@app/runtime/uploads/sample.pdf')) - 返回的
$text是去除格式的纯字符串,含换行和空格,适合后续关键词匹配或简单清洗 - 不支持扫描版 PDF(即图片型 PDF),仅解析可选中文本(基于 PDF 内容流)
处理中文乱码或编码问题
若 PDF 含中文但输出为乱码或空字符串,通常因字体未嵌入或编码映射缺失。可尝试:
- 确认 PDF 是文字型(用 Adobe Reader 能正常复制文字)
- 升级库至最新版:
composer update smalot/pdfparser(v1.0+ 对 UTF-8 支持更好) - 手动指定编码(部分场景有效):
$pdf->getText('UTF-8') - 如仍失败,需改用 OCR 方案(如 Tesseract + imagick),但这已超出“最简”范畴
封装为 Yii 工具方法(可选)
为复用方便,可在 @app/components/PdfReader.php 中创建轻量工具类:
namespace app\components;
use Smalot\PdfParser\Parser;
class PdfReader
{
public static function extractText(string $filePath): string
{
if (!is_file($filePath)) {
return '';
}
$parser = new Parser();
try {
$pdf = $parser->parseFile($filePath);
return trim($pdf->getText());
} catch (\Exception $e) {
return '';
}
}
}
调用方式:app\components\PdfReader::extractText($path)











