使用PHP提取PDF元数据字段

使用PHP提取PDF元数据字段,php,pdf,metadata,Php,Pdf,Metadata,我的共享托管Web服务器上有一系列PDF文件,我正在为其编写一个PHP脚本,以便在屏幕上对它们进行分类。我已经在PDF文件中添加了元数据—文档标题、作者和主题。文件名由作者和标题组成,因此我可以从中构造目录文本。但是,我也想显示“Subject”元数据字段的内容 因为我使用的是共享主机,所以无法安装任何额外的PHP扩展。他们有PDFLib的免费版本,但这不包括任何加载PDF文件或提取元数据的功能 function catalogue($folder){ $files = preg_grep(

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

因为我使用的是共享主机,所以无法安装任何额外的PHP扩展。他们有PDFLib的免费版本,但这不包括任何加载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>');
  }
}
/
这是目前为止只显示文件名列表的脚本

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

pdf_pcos_get_string(): supplied resource is not a valid pdf object resource
…我在网上找不到关于这个功能的任何帮助。真的没什么


我在共享主机上运行PHP7.4。

元数据不像PDF那样加密,所以你可以使用file\u get\u内容,找到主题的模式(元数据不像PDF那样加密,所以你可以使用file\u get\u内容,找到主题的模式(谢谢@drdlp。我使用了
file\u get\u内容()
加载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>');
  }
}
/
console.log(details);
向控制台输出一个对象。从那里我根本不知道如何提取任何数据。因此
document.getElementById(id)。innerHTML=details;
不显示任何内容

这是输出到控制台的对象


谢谢@drdlp。我使用了
文件获取内容()
加载到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>');
  }
}
/
console.log(details);
向控制台输出一个对象。从那里我根本不知道如何提取任何数据。因此
document.getElementById(id)。innerHTML=details;
不显示任何内容

这是输出到控制台的对象


好的-比我想象的要简单得多!谢谢-这很有效。但是,在一个目录中加载40个pdf文件有点慢。是的。存储结果应该比每次使用gile_get_内容效果更好。这是个好主意-谢谢。我可以做到。你对我在下面评论的pdf.js有经验吗?好的-这比我想象的要简单得多!谢谢你-这很有效。但是,在一个目录中加载40个pdf文件有点慢。是的。存储结果应该比每次使用gile_get_内容效果更好。这是个好主意-谢谢。我可以做到。你对我在下面评论的pdf.js有经验吗?