Hallo,
oft möchte man Seiten in einer pdf-Datei umgruppieren.
pdftk kann zunächst eine pdf-Datei in ihre einzelnen Seiten aufspalten:
Jetzt hat man für jede Seite eine eigene pdf-Datei im Verzeichnis. Diese Dateien heißen "pg_0001.pdf", "pg_0002.pdf", .... "pg_0150.pdf", usw..
Wenn man umgruppieren will, möchte man z.B., daß diese Dateien erst mit "pg_0005.pdf" anfangen (und dann mit "pg_0006.pdf", .... "pg_0154.pdf" fortgesetzt werden).
Mag sein, daß pdftk das irgendwie selbst kann (pdfchain kann das wohl), aber da ich das nicht gefunden hab', hab' ich halt ein Perl-Skript dazu geschrieben.
Man gibt ihm einfach eine einzelne Zahl mit (die auch negativ sein kann), daraufhin kopiert es die Dateien in ein Verzeichnis "results" im aktuellen Verzeichnis und benenne die Dateien dort entsprechend um. Hier ist es:
Am Ende fügt man die vielen "pg_0...pdf"-Dateien mit folgendem Befehl zu einer Datei "combined.pdf" wieder zusammen:
Viel Spaß!
oft möchte man Seiten in einer pdf-Datei umgruppieren.
pdftk kann zunächst eine pdf-Datei in ihre einzelnen Seiten aufspalten:
Code:
pdftk file.pdf burst
Wenn man umgruppieren will, möchte man z.B., daß diese Dateien erst mit "pg_0005.pdf" anfangen (und dann mit "pg_0006.pdf", .... "pg_0154.pdf" fortgesetzt werden).
Mag sein, daß pdftk das irgendwie selbst kann (pdfchain kann das wohl), aber da ich das nicht gefunden hab', hab' ich halt ein Perl-Skript dazu geschrieben.
Man gibt ihm einfach eine einzelne Zahl mit (die auch negativ sein kann), daraufhin kopiert es die Dateien in ein Verzeichnis "results" im aktuellen Verzeichnis und benenne die Dateien dort entsprechend um. Hier ist es:
Code:
#!/usr/bin/perl
use warnings;
use strict;
# addtopdf.pl, abgdf@gmx.net, (C) 2016, GNU GPL V2.
use File::Copy;
my $resdir = "results";
if ($#ARGV < 0 || $#ARGV >= 1) {
print "\nThis script needs exactly one argument. Aborting.\n\n";
exit();
}
my $neg = 0;
my $num = $ARGV[0];
if ($num =~ /^\-/) {
$neg = 1;
$num = substr($num, 1);
}
if($num =~ /\D/ || $num eq "") {
print "\nThe argument must be a number. Aborting.\n\n";
exit();
}
my @a = <"pg*pdf">;
if($#a < 0) {
print "\nThere aren't any suitable files, like for example 'pg_0001.pdf', in this directroy. Aborting.\n\n";
exit();
}
my $i;
my %h;
my @b;
my $c;
foreach $i (@a) {
@b = split("_", $i);
$c = $b[1];
@b = split(/\./, $c);
$c = $b[0];
if ($neg == 1) {
if ($num >= $c) {
print "\nError: Argument '-$num' is too low for file '$i'. Nothing done.\n\n";
exit;
}
$c -= $num;
} else {
$c += $num;
}
$c = sprintf("%04d", $c);
$h{$i} = "pg_$c.pdf";
}
if (-e $resdir) {
print "\nPrevious version of '$resdir' exists. Nothing done.\n\n";
exit;
} else {
mkdir($resdir);
}
print "\nRenaming and copying to directory '$resdir':\n";
for $i (sort(keys(%h))) {
print "$i -> ./$resdir/$h{$i}\n";
copy($i, "./$resdir/$h{$i}");
}
print "\nFinished.\n\n";
Code:
pdftk pg*.pdf cat output combined.pdf