使用Perl按递增的页数顺序对多个PDF文件进行排序

时间:2015-02-02 15:30:42

标签: perl

有没有人可以根据每个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的解决方案。

2 个答案:

答案 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