use Text::PDF::File;
use Text::PDF::Utils;
use Text::PDF::Page;
use Getopt::Std;

$version = "1.002";     # MJPH  10-DEC-1999     Fix page counts for pages objs.
# $version = "1.001";     # MJPH  30-NOV-1999     Original

getopts("b:h:p:qrs:");

if (!defined $ARGV[0])
{
    die <<"EOT";
    PDFADDPG [-b num/size] [-p num] [-q] pdffile

 (c) M. Hosken.     Version: $version

    Inserts a blank page of given or calculated size after the given page. The
new information is appended to pdffile and can be reverted.

  -b num/size    Specifies which page contains the output page size details
            or gives the dimensions of the page in pts (x,y). [inherited or 1]
  -p num    Specifies the page number after which to insert [last page]
  -q        Quiet (no on screen messages)
EOT
}

$p = Text::PDF::File->open($ARGV[0], 1);          # open file for appending
$r = $p->read_obj($p->{'Root'});            # read the page root
$pgs = $p->read_obj($r->{'Pages'});         # Get the pages tree
$pgcount = $pgs->{'Count'}->val;            # how many pages

if ($opt_b =~ m/^([0-9]+)\;([0-9]+)/oi)     # parse $opt_b making @pbox
{
    @pbox = (0, 0, $1, $2);
    $opt_b = 0;
}
else
{ $opt_b = -1 unless defined $opt_b; }

$newpage = Text::PDF::Page->new($p, $pgs, $opt_p);

# now set the page's bounding box if it needs setting
if ($opt_b != -1 || $newpage->find_prop('MediaBox') eq "")
{ $newpage->bbox(@pbox); }

$p->append_file;                            # update appended file