有没有人可以根据每个PDF文件的页数对如何对文件夹中的n个PDF文件进行排序,并在文本文件中写出已分类的PDF文件列表?
例如
file1.pdf - 50 pages
file2.pdf - 30 pages
file3.pdf - 75 pages
file4.pdf - 20 pages
.
.
file34.pdf - 7 pages
file35.pdf - 75 pages
每个文件与其余文件和排序的比较不是最佳解决方案。 我的另一个想法是重命名文件的页数,并以某种方式将其排序以按排序顺序写出。
请建议是否有任何图书馆执行此操作。我正在寻找基于Perl的解决方案。
答案 0 :(得分:1)
使用ImageMagick' identify
命令
identify -format "%n %f\n" *.pdf | sort -n
<强>输出强>
16 a.pdf
29 b.pdf
或者使用可能更快的pdfinfo
:
for f in *.pdf; do
pages=$(pdfinfo "$f" | awk '/Pages:/{print $2}')
echo $pages $f
done | sort -n
答案 1 :(得分:1)
我不明白为什么这是一个问题 - 这是一个非常微不足道的任务。你知道任何Perl吗?除非您有数万亿的PDF文件,否则无需担心效率,我不明白你的意思“每个文件与其余文件的比较和排序不是最佳解决方案”
我建议您安装PDF::API2
以提取每个文档中的页数。然后,这只是建立一个哈希并对其进行排序的问题。是否“最佳”是否无关紧要,因为它只需要片刻。
这个示例程序显示了这个想法。我使用了我的一个Windows系统上的文档目录。
use strict;
use warnings;
use 5.010;
use autodie;
use PDF::API2;
use List::Util 'max';
chdir '\\\\SAMURAI\C\ProgramData\Altova\SharedBetweenVersions\Apache FOP 1.1 JDK 1.4\docs\1.0';
my @files = glob '*.pdf';
my $width = max map length, @files;
my %page_counts;
for my $file (@files) {
my $pdf = PDF::API2->open($file);
$page_counts{$file} = $pdf->pages;
}
for my $file (sort { $page_counts{$a} <=> $page_counts{$b} } keys %page_counts) {
printf "%-*s - %d pages\n", $width, $file, $page_counts{$file};
}
<强>输出强>
index.pdf - 2 pages
accessibility.pdf - 3 pages
compiling.pdf - 3 pages
releaseNotes_1.0.pdf - 3 pages
pdfa.pdf - 3 pages
pdfx.pdf - 3 pages
upgrading.pdf - 3 pages
anttask.pdf - 4 pages
pdfencryption.pdf - 4 pages
metadata.pdf - 4 pages
hyphenation.pdf - 5 pages
knownissues_overview.pdf - 5 pages
servlets.pdf - 6 pages
running.pdf - 6 pages
extensions.pdf - 6 pages
intermediate.pdf - 7 pages
events.pdf - 8 pages
graphics.pdf - 8 pages
configuration.pdf - 9 pages
fonts.pdf - 9 pages
changes_1.0.pdf - 10 pages
embedding.pdf - 11 pages
output.pdf - 21 pages