Hi Steve,
not sure if you can gleen anything from this but I recently set myself up to
produce PDFs from basic HTML produced by TT.
I created a view that processes a TT template then converts to PDF using
HTML::Doc and shoves it as a string straight to $c->response->body.
I'm pretty happy with the results and ease of use.. (automatically handles
multi page output amoung other things)
#============================================
package Lecstor7::View::PDF;
use base qw/Catalyst::View/;
use HTML::HTMLDoc;
__PACKAGE__->config->{template_extension} = '.tt';
__PACKAGE__->config->{tmp_dir} = '/tmp';
__PACKAGE__->config->{page_size} = 'a4';
__PACKAGE__->config->{header} = ['t', '.', '/'];
__PACKAGE__->config->{footer} = ['t', '.', '/'];
sub process {
my ( $self, $c ) = @_;
my $template = $c->stash->{template}
|| $c->action . $self->config->{template_extension};
unless (defined $template) {
$c->log->debug('No template specified for rendering') if $c->debug;
return 0;
}
my $output = $c->view('TT')->render($c, $template);
if (UNIVERSAL::isa($output, 'Template::Exception')) {
my $error = qq/Couldn't render template "$output"/;
$c->log->error($error);
$c->error($error);
return 0;
}
my $doc = HTML::HTMLDoc->new( 'mode' => 'file', 'tmpdir' =>
$self->config->{tmp_dir} );
$doc->set_page_size($self->config->{page_size});
$doc->set_header(@{$self->config->{header}});
$doc->set_footer(@{$self->config->{footer}});
$doc->set_html_content($output);
my $pdf = $doc->generate_pdf();
unless ( $c->response->content_type ) {
$c->response->content_type('text/pdf; charset=utf-8');
}
$c->res->header( 'Content-Disposition' =>
'attachment;filename='.$c->stash->{pdf_filename} );
$c->response->body($pdf->to_string());
return 1;
}
1;
#============================================
in my Controller I can then do.. (simplified version of my actual
controller)
sub packing_slip : Local{
my ($self, $c) = @_;
$c->stash(
pdf_filename => 'packingslip.pdf'
);
$c->forward( $c->view('PDF') );
}
cheers,
J
On Wed, Oct 21, 2009 at 8:25 AM, Steve Rippl <[email protected]>wrote:
> Hi,
>
> I'm using TT for my View templates, and I'm experimenting with
> Template::Plugin::Latex for generating pdf reports. Now I'm generating
> pdfs (which is nice!) but not redirecting to them at the end, so I
> suspect I'm using the wrong approach.
>
> Right now I've added OUTPUT_PATH => 'root/tmp' to lib/WsdSis/View/TT.pm
> and when I hit the /report/test it using the following template (without
> a wrapper)
>
> [%
> META no_wrapper = 1;
> META title = 'Latex';
> -%]
> [% USE Latex(output='example.pdf') -%]
> [% FILTER latex %]
> \documentclass[letterpaper]{article}
> \begin{document}
> ...LaTeX document...
> \end{document}
> [% END -%]
>
> which produces root/tmp/example.pdf but leaves me looking at a blank
> page on the screen. I realize my view is supposed to provide the final
> view and I've redirected that way to the pdf file, is there a quick way
> to redirect to that or do I need a different approach (similar to the
> Catalyst::View::Email::Template example in the book?).
>
> Any pointers would be much appreciated...
>
> Thanks,
> Steve
>
>
> --
> Steve Rippl
> Technology Director
> Woodland Public Schools
> 360 225 9451 x326
>
> _______________________________________________
> List: [email protected]
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive:
> http://www.mail-archive.com/[email protected]/
> Dev site: http://dev.catalyst.perl.org/
>
--
Jason Galea
Web Developer
Ph 07 40556926
Mob 04 12345 534
www.eightdegrees.com.au
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/