# Code in the PDF::API2::Basic::PDF namespace was originally copied from the # Text::PDF distribution. # # Copyright Martin Hosken # # Martin Hosken's code may be used under the terms of the MIT license. # Subsequent versions of the code have the same license as PDF::API2. package PDF::API2::Basic::PDF::Page; use base 'PDF::API2::Basic::PDF::Pages'; use strict; use warnings; our $VERSION = '2.043'; # VERSION use PDF::API2::Basic::PDF::Dict; use PDF::API2::Basic::PDF::Utils; =head1 NAME PDF::API2::Basic::PDF::Page - Low-level PDF page object =head1 DESCRIPTION Represents a page of output in PDF. It also keeps track of the content stream, any resources (such as fonts) being switched, etc. Page inherits from Pages due to a number of shared methods. They are really structurally quite different. =head1 INSTANCE VARIABLES A page has various working variables: =over =item curstrm The currently open stream =back =head1 METHODS =head2 PDF::API2::Basic::PDF::Page->new($pdf, $parent, $index) Creates a new page based on a pages object (perhaps the root object). The page is also added to the parent at this point, so pages are ordered in a PDF document in the order in which they are created rather than in the order they are closed. Only the essential elements in the page dictionary are created here, all others are either optional or can be inherited. The optional index value indicates the index in the parent list that this page should be inserted (so that new pages need not be appended) =cut sub new { my ($class, $pdf, $parent, $index) = @_; my $self = {}; $class = ref($class) if ref($class); $self = $class->SUPER::new($pdf, $parent); $self->{'Type'} = PDFName('Page'); delete $self->{'Count'}; delete $self->{'Kids'}; $parent->add_page($self, $index); return $self; } =head2 $p->ship_out($pdf) Ships the page out to the given output file context =cut sub ship_out { my ($self, $pdf) = @_; $pdf->ship_out($self); if (defined $self->{'Contents'}) { $pdf->ship_out($self->{'Contents'}->elements()); } return $self; } 1;