PDF-TableX
view release on metacpan or search on metacpan
lib/PDF/TableX.pm view on Meta::CPAN
package PDF::TableX;
use Moose;
use MooseX::Types;
use MooseX::Types::Moose qw/Int/;
use Carp;
use PDF::API2;
use PDF::TableX::Row;
use PDF::TableX::Column;
use PDF::TableX::Cell;
with 'PDF::TableX::Stylable';
our $VERSION = '0.015';
# public attrs
has width => (is => 'rw', isa => 'Num', default => 0);
has start_x => (is => 'rw', isa => 'Num', default => 0);
has start_y => (is => 'rw', isa => 'Num', default => 0);
has rows => (is => 'ro', isa => 'Int', default => 0);
has cols => (is => 'ro', isa => 'Int', default => 0);
has repeat_header => (is => 'rw', isa => 'Bool', default => 0);
# private attrs
has _cols => (is => 'ro', init_arg => undef, isa => 'ArrayRef[ Object ]', default => sub {[]});
# some sugar
use overload '@{}' => sub { return $_[0]->{_children}; }, fallback => 1;
# make some methods
for my $attr (qw/width repeat_header/) {
around $attr => sub {
my $orig = shift;
my $self = shift;
return $self->$orig() unless @_;
$self->$orig(@_);
return $self;
}
}
# overridden methods
override BUILDARGS => sub {
my $class = shift;
if (@_ == 2 and Int->check($_[0]) and Int->check($_[1])) {
return {
cols => $_[0],
rows => $_[1],
width => 190 / 25.4 *72,
start_x => 10 / 25.4 *72,
start_y => 287 / 25.4 *72,
};
}
return super;
};
sub BUILD {
my ($self) = @_;
$self->_create_initial_struct;
};
# private methods
sub _create_initial_struct {
my ($self) = @_;
if ( my $rows = $self->rows ) {
$self->{rows} = 0;
for (0..$rows-1) {
$self->add_row( PDF::TableX::Row->new(
cols => $self->cols,
width => $self->width,
_row_idx => $_,
_parent => $self,
$self->properties,
)
);
}
}
}
sub properties {
my ($self, @attrs) = @_;
@attrs = scalar(@attrs) ? @attrs : $self->attributes;
return (map { $_ => $self->$_ } @attrs);
}
sub add_row {
( run in 1.226 second using v1.01-cache-2.11-cpan-39bf76dae61 )