Prima
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
Prima/PS/PDF.pm view on Meta::CPAN
$self-> add_xref($xid);
my $length = length($stream);
$self-> emit("$xid 0 obj\n<<\n/Length ".length($stream));
$self-> emit( $text ) if defined $text;
$self-> emit(">>\nstream");
$self-> emit($stream);
$self-> emit("endstream\nendobj\n");
return $xid;
}
sub emit_file_obj
{
my ( $self, $obj, $text ) = @_;
$self-> add_xref($obj->{__xid});
my $compress = $obj-> is_deflated;
$obj-> reset;
$self-> emit("$obj->{__xid} 0 obj\n<<\n/Length ".$obj->{size});
$self-> emit("/Filter /FlateDecode") if $compress;
$self-> emit( $text ) if defined $text;
$self-> emit(">>\nstream");
$obj-> evacuate( sub { $self->emit( $_[0], 1 ) } );
$self-> emit("\nendstream\nendobj\n");
}
sub add_xref
{
my ($self, $xid) = @_;
$self->{xref}->[ $xid ] = $self->{content_size};
}
sub emit_new_object
{
my ($self, $xid, $emit) = @_;
$self-> add_xref($xid);
$self-> emit("$xid 0 obj");
$self-> emit($emit) if defined $emit;
}
sub emit_new_dummy_object
{
my ($self, $emit) = @_;
my $xid = $self-> new_dummy_obj;
$self-> add_xref($xid);
$self-> emit("$xid 0 obj\n<<");
$self-> emit($emit) if defined $emit;
$self-> emit(">>\nendobj\n");
return $xid;
}
sub begin_doc
{
my ( $self, $docName) = @_;
return 0 if $self-> get_paint_state;
$self-> {ps_data} = '';
$self-> {can_draw} = 1;
$self-> {content_size} = 0;
$docName = $::application ? $::application-> name : "Prima::PS::PDF"
unless defined $docName;
$docName = Encode::encode('UTF-16', $docName)
if Encode::is_utf8($docName);
$self-> {fp_hash} = {};
$self-> {xref} = [];
my ($sec,$min,$hour,$mday,$mon,$year) = localtime;
my $date = sprintf("%04d%02d%02d%02d%02d%02d", $year + 1900, $mon, $mday, $hour, $min, $sec);
my $four = pack('C*', 0xde, 0xad, 0xbe, 0xef);
$self-> emit( <<PDFHEADER);
%PDF-1.4
%$four
PDFHEADER
$self-> emit_new_object(1, <<PDFINFO);
<<
/CreationDate (D:$date+00'00)
/Creator (Prima::PS::PDF)
/Title ($docName)
>>
endobj
PDFINFO
$self-> emit_new_object(2, <<ROOT);
<<
/Type /Catalog
/Pages 3 0 R
>>
endobj
ROOT
$self-> {objects} = [(undef) x 4];
$self-> {page_object} = $self->new_dummy_obj;
$self-> {pages} = [$self->{page_object} ];
$self-> {page_refs} = [];
$self-> {page_patterns} = {};
$self-> {color_patterns}= {};
$self-> {page_images} = [];
$self-> {page_fonts} = {};
$self-> {page_rops} = {};
$self-> {page_alphas} = {};
$self-> {all_rops} = {};
$self-> {all_fonts} = {};
$self-> {all_alphas} = {};
unless ($self-> {page_content} = $self->new_file_obj) {
$self-> abort_doc;
return 0;
}
$self-> {changed} = { map { $_ => 0 } qw(
fill lineEnd linePattern lineWidth lineJoin miterLimit font)};
$self-> SUPER::begin_paint;
$self-> save_state;
$self-> {delay} = 1;
$self-> restore_state;
$self-> {delay} = 0;
$self-> change_transform( 1);
$self-> {changed}-> {linePattern} = 0;
return 1;
}
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.763 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )