use PDF::Create; use PDF::Create::Extensions; #### $page->linecolor(RGB => 0.6, 0.2, 0.2); #### $page->linewidth(0.8, 'join' => 'miter'); #### # file PDF/Create/Extensions.pm package PDF::Create::Extensions; package PDF::Create::Page::Extensions; require PDF::Create::Page; push @PDF::Create::Page::ISA, __PACKAGE__; use strict; use Carp; my %color_mode = ( GRAY => [ G => 1 ], RGB => [ RG => 3 ], CMYK => [ K => 4 ], ); foreach(keys %color_mode) { $color_mode{uc $color_mode{$_}[0]} ||= $color_mode{$_}; } $color_mode{GREY} = $color_mode{GRAY}; sub _modecolor { my $mode = uc shift; if(my $info = $color_mode{$mode}) { $#_ = $info->[1] - 1; return @_, $info->[0]; } croak "'$mode' is not a valid color mode"; } sub fillcolor { my $self = shift; my @cmd = _modecolor(@_); $_ = lc for $cmd[-1]; $self->{'pdf'}->page_stream($self); $self->{'pdf'}->add(join ' ', @cmd); } sub linecolor { my $self = shift; my @cmd = _modecolor(@_); $_ = uc for $cmd[-1]; $self->{'pdf'}->page_stream($self); $self->{'pdf'}->add(join ' ', @cmd); } my %line_styles = ( CAP => [ J => { BUTT => 0, ROUND => 1, 'PROJECTING SQUARE' => 2, SQUARE => 2 }], JOIN => [ j => { MITER => 0, ROUND => 1, BEVEL => 2 }], ); sub linewidth { my $self = shift; $self->{'pdf'}->page_stream($self); my @add = (shift, 'w'); while(@_) { my $key = uc shift; my $value = uc shift; if(my $dispatch = $line_styles{$key}) { if($value =~ /^\d+$/) { } elsif(exists $dispatch->[1]{$value}) { $value = $dispatch->[1]{$value}; } else { croak "'$value' is not a valid parameter for line style mode '$key'"; } push @add, $value, $dispatch->[0]; } else { croak "'$key' is not a valid line style key"; } } $self->{'pdf'}->add(join ' ', @add); } 1;