You are viewing a plain text version of this content. The canonical link for it is here.
Posted to embperl@perl.apache.org by Ben Kim <bk...@coe.tamu.edu> on 2005/02/01 15:31:00 UTC

Re: pdf generation

Many thanks. It'd be helpful. 

Regards,
Ben Kim

On Mon, 31 Jan 2005, Michael Stepanov wrote:

> Ben Kim wrote:
> > Dear list,
> > 
> > 1. pdf generation 
> > I'd like to learn what people use to generate pdf files. I want to
> > create pdf from an epl page, with all data from the database.
> 
> We use Embperl and htmldoc to build PDF files. A fuctionality is 
> implemented into Perl module. There is a possibility to send built PDF
> file in the browser plugin:
> 
> use Embperl;
> use mod_perl;
> use File::Temp qw/ tempfile /;
> 
> my $r = $Embperl::req_rec;
> 
> my $body;
> Embperl::Execute( { inputfile   => <your/Embperl/template>,
>                      param       => [ <some parameters> ],
>                      output      => \$html } );
> 
> my($fh, $fname) = tempfile('file_XXXXXXXX', SUFFIX => '.pdf', DIR => 
> yout/tmp/dir);;
> 
> open(WRITE, "|htmldoc -t pdf14 -f $fname $msg --fontsize 10  --header 
> ... --footer t/D --webpage --size A4 -") or die "Couldn't open htmldoc: 
> $! $?";
> print WRITE $$html;
> close WRITE or warn "Some error was generated in the pipe. Error :$! ";
> 
> # Send PDF file into browser plugin.
> if($mod_perl::VERSION >= 1.99) {
>      $r->content_type('application/pdf');
>      $r->sendfile($fname);
> } else {
>      eval "use Apache::File;";
>      open $fh, $fname or die "Cannot open file $fname: $!!";
>      # Send created file to HTTP response
>      $r->headers_out->set('Accept-Ranges' => 'bytes');
>      $r->content_type('application/pdf');
>      $r->headers_out->set('Content-Disposition', 'inline; 
> filename=report.pdf');
>      $r->headers_out->set('Connection' => 'close');
>      $r->set_content_length(-s $fname);
>      $r->set_etag();
>      $range_req = $r->set_byterange();
>      $r->send_http_header;
>      if( $range_req ) {
>          while( my($offset, $length)=$r->each_byterange) {
>              seek $fh, $offset, 0;
>              $r->send_fd($fh, $length)
>          }
>      } else {
>          $r->send_fd($fh);
>      }
> }
> 
> To produce complicated PDF documents we use a following approach:
> 1) Make document template with some markers in text editor (MS Word, for 
> example);
> 2) Convert the template into PostScript (just print it to the file using 
> PostScript printer);
> 3) Replace markers by real data using Perl regexp;
> 4) Convert PostScript file to PDF using utility ps2pdf.
> 
> > 
> > 2. Teeing the output to browser / filesystem
> > 
> > Related with this, I'd also like to know whether there's a way to print
> > the html results of the database-driven epl page into a static html file.
> 
> If you need to save Embperl output to the file do it using some 
> temporary directory where apache can right to write.
> 
> > 
> > The problem I have is that the epl pages are protected, and I don't want
> > to mess with session id and other auth tokens when I use htmldoc. So it
> > will have to output the result sent to the browser  also to the filesystem.
> > (Tee'd.)
> 
> Hope it will be useful for you.
> 
> > 
> > 
> > Regards,
> > 
> > Ben Kim
> > Systems Administrator/Database Developer
> > College of Education 
> > Texas A&M University
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
> > For additional commands, e-mail: embperl-help@perl.apache.org
> > 
> > 
> 
> 
> -- 
> Best regards,
> Michael Stepanov
> Perl/Linux Developer
> www.stepanoff.org
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
> For additional commands, e-mail: embperl-help@perl.apache.org
> 
> 

Regards,

Ben Kim
Database Developer/Systems Administrator
434E Harrington Tower / College of Education 
Texas A&M University


---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org