You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用smalot/pdfparser提取PDF文本返回空结果问题求助

使用smalot/pdfparser提取PDF文本时部分无密码PDF返回空结果的问题排查

我尝试使用smalot/pdfparser提取PDF文件文本,但部分无密码、可在Chrome正常打开的PDF返回空结果,其他PDF可正常提取。

我的代码

$parser = new \Smalot\PdfParser\Parser(); // Parse pdf file using Parser library 
$pdf = $parser->parseFile($file);
$metaData = $pdf->getDetails();
print_r($metaData); 
$pages  = $pdf->getPages();
foreach ($pages as $page) {
            $text = $page->getText();
            echo "<div>".$text."</div>";
}
echo $file;

执行结果

仅能获取元数据,文本内容为空:

Array
(
    [Producer] => cairo 1.17.4 (https://cairographics.org
    [Pages] => 1
)
<div></div>D:\web\D\public\pdf_po/123.pdf

问题原因分析

从元数据能看到该PDF由cairo 1.17.4生成,这类PDF很可能将文本以矢量图形路径的形式绘制,而非存储为PDF标准的可提取文本流对象。smalot/pdfparser的核心逻辑是解析PDF中的文本流节点,无法识别这种图形化的文本,因此返回空结果。

解决方案

  • 若PDF文本是图形化的,需使用OCR工具提取:搭配Tesseract OCR引擎,先将PDF页面转为图片,再通过PHP的tesseract-ocr扩展识别文本。
  • 更换PDF解析库:使用spatie/pdf-to-text(依赖Poppler工具),Poppler支持渲染PDF并提取文本,对图形化文本的处理能力优于smalot/pdfparser。
  • 先验证PDF文本属性:用Chrome的“选择文本”功能测试,若无法选中文本,即可确认文本是图形化形式,必须用OCR或渲染类工具处理。

内容的提问来源于stack exchange,提问作者Awan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:13:16