我不知道如何pdftotext
通过shell_exec()
语句为整个目录构建循环。
就像是 :
$pdfs = glob("*.pdf");
foreach($pdfs as $pdfs) {
shell_exec('pdftotext '.$pdfs.' '.$pdfs'.txt');
}
但我不确定如何在第二次调用$pdfs
我的shell_exec()
声明时删除 .pdf 扩展名并将其替换为.txt
也不确定这个循环是否正确......
$pdfs = glob("*.pdf");
$fmt='/path/to/pdftotext "%s" "%s.txt"';
foreach($pdfs as $thispdf) {
shell_exec(sprintf($fmt, $thispdf, basename($thispdf, ".pdf")));
}
尝试
foreach(glob("*.pdf") as $src) {
// Manually remove file extension because glob() may return a dir path component
$parts = explode('.', $src);
$parts[count($parts) - 1] = 'txt';
$dest = implode('.', $parts);
// Escape shell arguments, just in case
shell_exec('pdftotext '.escapeshellarg($src).' '.escapeshellarg($dest));
}
基本上,循环目录中的 PDF 文件并为每个文件执行命令,仅使用文件名的名称部分(用 提取查看输出文件的编辑(因此pathinfo()
)test.pdf
变为test.txt
)。
glob()
直接使用 in的结果可以foreach
轻松避免上面代码中的变量命名冲突。
编辑
我已更改上述代码以在生成输出文件名时手动删除文件扩展名。这是因为glob()
可能会返回路径字符串的目录组件,以及文件名。使用pathinfo()
orbasename()
将删除它,并且由于我们知道.
文件名中将出现 a (传递给的规则glob()
规定了这一点),我们可以安全地删除最后一个之后的所有内容。我还添加escapeshellarg()
了一个很好的措施 - 已经存在的文件名极不可能(如果不是不可能的话)会违反这一点,但最好是安全的。