使用 PHP 提取 PDF 元数据字段

Extract PDF metadata field using PHP

我的共享托管网络服务器上有一系列 PDF 文件,我正在编写 PHP 脚本以在屏幕上对它们进行分类。我已将元数据添加到 PDF 文件 - 文档标题、作者和主题。文件名由作者和标题组成,因此我可以从中构建目录文本。但是,我也想显示 'Subject' 元数据字段的内容。

因为我使用的是共享主机,所以我无法安装任何额外的 PHP 扩展。他们有 PDFLib 的免费版本,但这不包括任何加载 PDF 文件或提取元数据的功能。

这是到目前为止的脚本,它只显示文件名列表...

function catalogue($folder){
  $files = preg_grep('/^([^.])/', scandir($folder));
  foreach($files as $file){
    echo($file.'<br/>');
  }
}

所以,我并没有取得太大的进步:(

我试过 PDF_open_pdi_document() 但这不是已安装的 PDFLib 扩展的一部分。我试过 PDF_pcos_get_string() 但我得到的只是...

PDF_pcos_get_string($file,0,'author');

...是...

pdf_pcos_get_string(): supplied resource is not a valid pdf object resource

...我可以在网络上找到有关此功能的零帮助。完全没有!

我在共享主机上 运行 PHP 7.4。

元数据不像 PDF 那样加密,因此您可以使用 file_get_contents,找到主题 (<

谢谢@drdlp。我使用 file_get_contents() 加载 PDF 并提取和显示元数据。

function catalogue($folder){
  $files = preg_grep('/^([^.])/', scandir($folder));
  foreach($files as $file){
    $page = file_get_contents($file);
    $metadata = preg_match_all('/\/[^\(]*\(([^\/\)]*)/',$page,$matches);
    $author = $matches[1][0];
    $subject = $matches[1][4];
    $title = $matches[1][5];
    echo($title.'/'.$subject.'/'.$author.'<br>');
  }
}
/

但是,对于一个文件夹中的 40 多篇 PDF 文章来说,这非常慢。

我怎样才能加快速度?

我已经开始尝试 pdf.js,我可以先从文件(文件名等)加载所有基本细节,然后在页面加载后用 Javascript 更新它们。

但是,我显然对 Javascript 了解不够,无法完成这项工作。这是我到目前为止所拥有的,我很困惑。我从 mozilla.github.io/pdf.js/build/pdf.js...

导入了 pdf.js
function pdf_metadata(file_url,id){
  var pdfjsLib = window['pdfjs-dist/build/pdf'];
  pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
  var loadingTask = pdfjsLib.getDocument(file_url);
  loadingTask.promise.then(function(pdf) {
    pdf.getMetadata().then(function(details) {
      console.log(details);
      document.getElementById(id).innerHTML=details;
    }).catch(function(err) {
       console.log('Error getting meta data');
       console.log(err);
       });
    });
}

console.log(details);输出一个对象到控制台。从那里我根本不知道如何提取任何数据。因此 document.getElementById(id).innerHTML=details; 什么都不显示。

这是输出到控制台的对象。