使用 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;
什么都不显示。
这是输出到控制台的对象。
我的共享托管网络服务器上有一系列 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
...
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;
什么都不显示。
这是输出到控制台的对象。