Skip to content

Instantly share code, notes, and snippets.

@tomme87
Last active August 29, 2015 14:10
Show Gist options
  • Save tomme87/c13902613553d9ba6615 to your computer and use it in GitHub Desktop.
Save tomme87/c13902613553d9ba6615 to your computer and use it in GitHub Desktop.
Fix scanned book
#!/usr/bin/perl
use strict;
use warnings;
use PDF::API2;
my $pdfs = [
{
file => '20141202141803.pdf',
reorder => 1,
rotate => 0,
type => 'even',
},
{
file => '20141202142035.pdf',
reorder => 1,
rotate => 0,
type => 'even',
},
{
file => '20141202142310.pdf',
reorder => 1,
rotate => 0,
type => 'even',
},
{
file => '20141202142542.pdf',
reorder => 1,
rotate => 0,
type => 'even',
},
{
file => '20141202142645.pdf',
reorder => 1,
rotate => 0,
type => 'even',
},
{
file => '20141202142908.pdf',
reorder => 1,
rotate => 0,
type => 'even',
},
{
file => '20141202143106.pdf',
reorder => 1,
rotate => 0,
type => 'even',
},
{
file => '20141202141646.pdf',
reorder => 0,
rotate => 1,
type => 'odd',
},
{
file => '20141202141857.pdf',
reorder => 0,
rotate => 1,
type => 'odd',
},
{
file => '20141202142155.pdf',
reorder => 0,
rotate => 1,
type => 'odd',
},
{
file => '20141202142417.pdf',
reorder => 0,
rotate => 1,
type => 'odd',
},
{
file => '20141202142804.pdf',
reorder => 0,
rotate => 1,
type => 'odd',
},
{
file => '20141202143017.pdf',
reorder => 0,
rotate => 1,
type => 'odd',
},
{
file => '20141202143157.pdf',
reorder => 0,
rotate => 1,
type => 'odd',
},
];
my $oe = {
odd => PDF::API2->new(),
even => PDF::API2->new(),
};
foreach my $data (@{$pdfs}) {
my $pdf = PDF::API2->open($data->{file});
if ($data->{rotate}) {
$pdf->openpage($_)->rotate(180) for (1 .. $pdf->pages);
# Whyy??
$pdf->update;
$pdf = PDF::API2->open($data->{file});
}
if($data->{reorder}) {
for (my $count = $pdf->pages; $count >= 1; $count--) {
$oe->{$data->{type}}->importpage($pdf, $count);
}
} else {
$oe->{$data->{type}}->importpage($pdf, $_) for 1 .. $pdf->pages;
}
}
die('uneven number') unless $oe->{odd}->pages == $oe->{even}->pages;
# Whyy??
$oe->{odd}->saveas('odd.pdf');
$oe->{even}->saveas('even.pdf');
my $odd = PDF::API2->open('odd.pdf');
my $even = PDF::API2->open('even.pdf');
my $master = PDF::API2->new();
foreach(1 .. $odd->pages) {
$master->importpage($odd, $_);
$master->importpage($even, $_);
}
$master->saveas('master.pdf');
print "done\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment