#!/usr/bin/perl use strict; use warnings; use CAM::PDF; use PDF::API2; #Define initial directory my $dir = "C:\\Users\\user name\\Desktop\\fpb uluro\\"; #Open data folder in directory, pull file names into an array, then close directory opendir(my $dh, $dir."data2") || die "can't opendir $dir"."data2: $!"; my @files = grep {!/^\./ && -f "$dir"."data2/$_" } readdir($dh); closedir $dh; #Create the group files to be used for sorting and appending create_pdf_files(); my $pdf = ""; my $prev_group = ""; my $count = 0; while (@files) { #Increment counter and keep cleaner window for in progress display $count++; system $^O eq 'MSWin32' ? 'cls' : 'clear'; print "Processing Record #$count. $files[0]\n"; #Grab the next file in the directory and get page count my $append_pdf = shift(@files); my $group = get_page_cnt($append_pdf); #Load initial group file if just starting $pdf = CAM::PDF->new($dir."finished\\".$group) if $count == 1; #Check to see if page count is the same as previous for sorting #If not update current group file and load new one if ($group ne $prev_group && $prev_group ne "") { $pdf->cleanoutput($dir."finished\\".$prev_group); $pdf = CAM::PDF->new($dir."finished\\".$group); } #Update group file for sorting $prev_group = $group; #Load pdf from directory and append to group file my $otherpdf = CAM::PDF->new($dir."data2\\".$append_pdf); $pdf->appendPDF($otherpdf); #After the last file is appended make sure to output since there #wont be a next group to trigger the output above $pdf->cleanoutput($dir."finished\\".$prev_group) if not @files; } delete_blank_page(); sub get_page_cnt { #Open the pdf to be added to the base pdf my $pdf_pages = PDF::API2->open($dir."data2\\".$_[0]); #Get a page count from the pdf my $pdf_page_cnt = $pdf_pages->pages; #Close the pdf to remove the structure from memory $pdf_pages->end(); #Use the page count of the pdf to determine which base pdf to use my $s = $pdf_page_cnt == 1 ? "one_page.pdf" : $pdf_page_cnt < 4 ? "two_page.pdf" : $pdf_page_cnt < 8 ? "three_to_four_page.pdf" : $pdf_page_cnt < 15 ? "five_to_eight_page.pdf" : "nine_plus_page.pdf"; # default... return $s; } sub create_pdf_files { #Create blank pdf files for sorting pdfs based on page count my $create_pdf = PDF::API2->new(-file => $dir."finished\\".'one_page.pdf'); $create_pdf->page(); $create_pdf->saveas(); $create_pdf = PDF::API2->new(-file => $dir."finished\\".'two_page.pdf'); $create_pdf->page(); $create_pdf->saveas(); $create_pdf = PDF::API2->new(-file => $dir."finished\\".'three_to_four_page.pdf'); $create_pdf->page(); $create_pdf->saveas(); $create_pdf = PDF::API2->new(-file => $dir."finished\\".'five_to_eight_page.pdf'); $create_pdf->page(); $create_pdf->saveas(); $create_pdf = PDF::API2->new(-file => $dir."finished\\".'nine_plus_page.pdf'); $create_pdf->page(); $create_pdf->saveas(); return 1; } sub delete_blank_page { #my $del_pdf = CAM::PDF->new($dir."finished\\one_page.pdf"); #$del_pdf->deletePage(1); #$del_pdf->cleanoutput($dir."finished\\one_page.pdf"); #$del_pdf = CAM::PDF->new($dir."finished\\two_page.pdf"); #$del_pdf->deletePage(1); #$del_pdf = CAM::PDF->new($dir."finished\\three_to_four_page.pdf"); #$del_pdf->deletePage(1); #$del_pdf = CAM::PDF->new($dir."finished\\five_to_eight_page.pdf"); #$del_pdf->deletePage(1); #$del_pdf = CAM::PDF->new($dir."finished\\nine_plus_page.pdf"); #$del_pdf->deletePage(1); return 1; }