Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sidney_lima

FPDF - Como fazer impressão automática ao abrir?

Recommended Posts

Bom dia a todos!

 

Depois de apanhar bastante, consegui gerar meus primeiros PDF's usando a classe FPDF. Quero agradecer ao adailton http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif , q me ajudou bastante com os posts aqui publicados! Agora tenho a seguinte dúvida:

 

Faço uma busca no banco de dados e gero uma lista com várias páginas em PDF. Gostaria de imprimir automaticamente o PDF gerado, após o seu carregamento. Em HTML, seria algo como '<body onload="java script:print()";>'. Porém, se coloco isso no PDF, dá erro pq diz q headers já foram enviados. Será q alguém pode me dar uma luz? :blink:

 

Valeu pela ajuda!!!

 

Um abraço,

 

Sidney Lima

Porto Alegre/RS http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que isso seria impossivel utilizando...pdf.....pelo menos não conheço nada na saída Output() para impressão direta..

 

Em todo caso, vou verificar e retorno...

<{POST_SNAPBACK}>

Valeu, Adailton! Espero q você consiga alguma coisa, pq eu já fucei um monte mas não achei nada... http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

 

Um abração!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem sim, é só usar uma classe extendida do FPDF.

 

Passo 1:

Extenda a sua classe FPDF:

 

Ex arquivo: fdpf_extends.php

 

<?php
require('fpdf/fpdf.php');


class FPDF_EXTENDS extends FPDF{

       var $javascript;
       var $n_js;

       function IncludeJS($script) {
               $this->javascript=$script;
       }

       function _putjavascript() {
               $this->_newobj();
               $this->n_js=$this->n;
               $this->_out('<<');
               $this->_out('/Names [(EmbeddedJS) '.($this->n+1).' 0 R ]');
               $this->_out('>>');
               $this->_out('endobj');
               $this->_newobj();
               $this->_out('<<');
               $this->_out('/S /JavaScript');
               $this->_out('/JS '.$this->_textstring($this->javascript));
               $this->_out('>>');
               $this->_out('endobj');
       }

       function _putresources() {
               parent::_putresources();
               if (!empty($this->javascript)) {
                       $this->_putjavascript();
               }
       }

       function _putcatalog() {
               parent::_putcatalog();
               if (isset($this->javascript)) {
                       $this->_out('/Names <</JavaScript '.($this->n_js).' 0 R>>');
               }
       }
}
?>

 

 

depois disto, no arquivo php que vai gerar o pdf você usa assim:

 

...
require_once("fdpf_extends.php");
//class para abrir caixa de print automaticamente
       class PDF extends FPDF_EXTENDS 
       {
               function AutoPrint($dialog=false)
               {
               $param=($dialog ? 'true' : 'false');
               $script="print($param);";
               $this->IncludeJS($script);
               }

               function AutoPrintToPrinter($server, $printer, $dialog=false)
               {
               $script = "var pp = getPrintParams();";
               if($dialog)
                       $script .= "pp.interactive = pp.constants.interactionLevel.full;";
               else
                       $script .= "pp.interactive = pp.constants.interactionLevel.automatic;";
               $script .= "pp.printerName = '\\\\\\\\".$server."\\\\".$printer."';";
               $script .= "print(pp);";
               $this->IncludeJS($script);
               }
       }
       //fim de class extentida

                          //$pdf   =   new FPDF();
                         $pdf=new PDF();     
                          ...
                         $pdf->AutoPrint(true); //carrega janela de impressao
                         $pdf->Output();

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Thiago C. Oliveira, bem vindo ao iMasters.

 

Obrigado por compartilhar seu conhecimento conosco. Continue colaborando em tópicos mais recentes.

 

E, um conselho particular, atente para o código pois, mesmo que esteja direcionado ao PHP 4 (coisa que a própria FPDF o é), possui alguns pequenos vícios de programação que devem ser evitados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tiago:

 

Ótima dica.

 

Teste em uma máquina Windows e funcionou corretamente.

Porém, ao colocar em meu site Linux, de a seguinte mensagem:

FPDF error: Some data has already been output, can't send PDF file (output started at /home/lyder/www/GerCaixas/fpdf_extends.php:1)

 

No Windows não dá.

 

Alguma dica?

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa chance de seu ambiente Windows estar mal configurado, escondendo os erros e alertas de programação.

 

Durante o desenvolvimento, inicia o arquivo com:

ini_set( display_errors', TRUE )';

error_reporting( E_ALL | E_STRICT ); // Para PHP > 5 e < 5.4

error_reporting( E_ALL ); // Para PHP 5.4+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno:

 

Coloquei as duas linhas abaixo no inicio do meu código PHP que imprime o relatório no Windows e não funcionou. Não deu nenhum erro adicional. Continua com o mesmo problema.

Note que se eu uso a classe FPDF normal, funciona. É somente com a classe extendida e assim mesmo no site com Linux.

 

ini_set( 'display_errors', TRUE );
error_reporting( E_ALL );

 

Se tiveres mais alguma luz, agradeço

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.