Smalot PDF 解析器无法与 preg_match_all 一起使用

问题描述 投票:0回答:1

我使用 https://github.com/smalot/pdfparser 及其 getText() 方法来解析包含文本(不是文本图像)的 PDF 文件的页面,但是当我尝试将正则表达式应用于这段文字不起作用。

我已经回显了包含提取文本的变量,一切似乎都正常,我复制了浏览器中显示的文本并将其存储在变量中,但是当我将这个新变量与包含原始文本的变量进行比较时,它们并不相同。有线索吗?

$parser = new Parser();
$pdf = $parser->parseFile($pdfFile);
$pages = $pdf->getPages();

foreach ($pages as $page) {
  $fullPageText = $page->getText();
  echo $fullPageText; 
  echo gettype($fullPageText); //Prints string

  $copiedTextFromFullPageTextEcho = "...";
  echo $fullPageText === $copiedTextFromFullPageTextEcho ? "Yes" : "No"; //Prints No
  preg_match_all("/CANT\.\s+\S+\s+(.+?)\/.+\/(.+)-(.+)\s+(\d+)(\s+TOT AIS)?/", $fullPageText, $matches, PREG_SET_ORDER);
  print_r($matches); //Prints Array ()
}
php string pdf pdfparser
1个回答
0
投票

不确定 PDFParser 以哪种编码返回页面文本,今天遇到了同样的问题。 事实上,PDFParser 返回的字符串将与您从浏览器或文本文件打印和复制的字符串不同。

您必须在模式末尾添加 /u 标志才能兼容 UTF。 并且您必须将匹配模式括在方括号 [] 中,如下所示: $pattern = "/[付款 ID: .* 付款类型]/u";

它对我有用。

在你的代码中似乎是这样的 preg_match_all("/[CANT.\s+\S+\s+(.+?)/.+/(.+)-(.+)\s+(\d+)(\s+TOT AIS)?]/", $ fullPageText, $matches, PREG_SET_ORDER);

© www.soinside.com 2019 - 2024. All rights reserved.