package PDF::FromHTML::Template::Container::Font; use strict; BEGIN { use vars qw(@ISA); @ISA = qw(PDF::FromHTML::Template::Container); use PDF::FromHTML::Template::Container; } my @current_font = (); sub new { my $class = shift; my $self = $class->SUPER::new(@_); $self->{EMBED} = 0 unless defined $self->{EMBED}; return $self; } sub render { my $self = shift; my ($context) = @_; my $p = $context->{PDF}; my $size = $context->get($self, 'H') || $context->get($self, 'SIZE') || die "Height not set by the time was rendered", $/; my $face = $context->get($self, 'FACE') || die "Face not set by the time was rendered", $/; my $font = $context->retrieve_font($face); $font == -1 && die "Font not found for '$face' by the time was rendered", $/; $p->font($font, $size); push @current_font, [ $font, $size ]; return 1 unless @{$self->{ELEMENTS}}; my $child_success = $self->iterate_over_children($context); pop @current_font; return $child_success unless @current_font; $p->font(@{$current_font[-1]}); return $child_success; } sub mark_as_rendered {} sub begin_page { my $self = shift; my ($context) = @_; my $face = $context->get($self, 'FACE') || die "Face not set by the time was rendered", $/; unless ($context->retrieve_font($face)) { my $encoding = $context->get($self, 'PDF_ENCODING') || 'host'; my $font = $context->{PDF}->find_font( $face, $encoding, $context->get($self, 'EMBED'), ) or die "Font not found for '$face' by the time was rendered", $/; $context->store_font($face, $font); } return $self->SUPER::begin_page($context); } 1; __END__ =head1 NAME PDF::FromHTML::Template::Container::Font =head1 PURPOSE To specify the font used for TEXTBOX nodes =head1 NODE NAME FONT =head1 INHERITANCE PDF::FromHTML::Template::Container =head1 ATTRIBUTES =over 4 =item * FACE - this is required. It must be a legal font face recognized by PDFLib. (q.v. for more details) =item * H - the point size of the font. =back =head1 CHILDREN None =head1 AFFECTS The font used when rendering a TEXTBOX =head1 DEPENDENCIES None =head1 USAGE ... Children will be rendered in 8-point TimesRoman font ... Please note that not specifying a FONT tag will result in a PDFLib error when the first TEXTBOX attempts to render. Since not all PDF documents involve text, PDF::FromHTML::Template does not require a FONT tag. (I might require a FONT tag if a TEXTBOX tag exists, but only after the non- standard behavior of FONT is fixed. q.v. the NOTE below.) =head1 NOTE For backwards compatability, a stand-alone FONT tag will be treated as if it is the parent for all nodes until the end of the parent node. This behavior is deprecated and will be removed in a future release. ... Children here aren't affected by the FONT tag below ... ... Children here _ARE_ affected by the FONT tag above ... =head1 AUTHOR Rob Kinyon (rkinyon@columbus.rr.com) =head1 SEE ALSO =cut