webmaster

Criar PDF Através do PHP

Olá, Somos criadores de conteúdo apaixonados por web design, programação, criação de websites e tecnologias digitais. O nosso website está online! Explore a nova versão beta, onde terá acesso a novos recursos e melhorias. A sua experiência e feedback são muito importantes para nós! Novos artigos, todas as semanas! Fique atento.
Artigos SEO

Artigos SEO

Search Engine Optimization

Artigos WordPress

Criação de websites.

Tutoriais

Ensino numa série de passos simples

Criar PDF Através do PHP

Uma das perguntas mais procuradas na Internet (e uma das mais temidas) é sobre como criar ficheiros em PDF usando o PHP!

Na prática temos uma grande quantidade de tutoriais, mas até hoje não encontrei nenhum que disponibilizasse uma solução completa disponível para testes.

Hoje falaremos sobre 2 soluções que são as mais usadas e daremos 2 exemplos de seu uso. ok?

No final da matéria você poderá pegar estes ficheiros na íntegra e dar andamento aos seus serviços.

Falando Sobre O FPDF:

O FPDF é a base de vários sistemas existentes para a criação de Ficheiros em PDF.

Apesar de ser mais fácil de mexer, seu conteúdo é mais simples e antigo. Mesmo assim ele ainda é muito usado, pois se você quiser imprimir textos sem grandes formatações, ele poderá fazer!

Caso seja necessário criar algo em HTML ele lhe dará mais trabalho (por isso recomendamos o TCPDF para esta finalidadee).

OBS.: Esse Sistema não dá suporte a versões antigas do PHP (Ex.: Versão PHP 4).

Usando O FPDF:

Conforme falei acima, o uso deste ficheiro é super simples e não lhe exigirá muitos recursos.

Como padrão, você mexerá em 3 ficheiros, que são esses: “ex.php”, “WriteHTML.php” e “fpdf.php”.

Veja abaixo o código fonte do “ex.php”:


AddPage();
$pdf->SetFont('Arial');

$html1 = 'Default Courier Helvetica Times dejavusans Times Helvetica Courier Default';
$html2 = 'small text normal small text normal subscript normal superscript normal';
$html3 = "The quick brown fox jumps over the lazy dog.";

$html = $html1.'
'.$html2.'
'.$html3.'
'.$html3.'
'.$html2;

// output the HTML content
$pdf->writeHTML($html, true, false, true, false, '');
$pdf->Output('materia-PDF.pdf','I');
?>

Obs.: Como padrão o Internet Explorer salva o conteúdo dentro do diretório. Já o Mozilla lhe permite salvar o PDF em seu próprio computador.

Partindo do padrão acima, você pode melhorar a função e criar algo que lhe seja útil.

Quer ver como ficou a impressão em PDF?

Visite na pasta FPDF o ficheiro com nome “materia-PDF.pdf”.

Falando Sobre O TCPDF:

Bem… se você gosta de apresentar qualidade a seu cliente e não se importa em investir tempo no Projeto, o “TCPDF” é para você!

Diferente do FPDF ele é um pouco mais difícil de se usar, mas após descobrir seus segredos, você só vai usar esta solução.

Assim como o FPDF ele também tem seu ficheiro chave (que é o “tcpdf.php”, assim como o tcpdf_config.php).

Configurando esses 2 ficheiros adequadamente, você terá como usá-lo em qualquer Projeto sem qualquer problema.

OBS.: Na Internet e no site oficial você encontra este pacote completo, mas está com erro!

Até para facilitar em sua utilização, efetuei as correções devidas e disponibilizei o pacote completo para download.

Usando O TCPDF:

Abaixo vamos expor o ficheiro “index.php” com as configurações solicitadas em um Projeto.

Até para facilitar, como o ficheiro é um pouco extenso, vou comentar o conteúdo. ok?


SetCreator(PDF_CREATOR);
//$pdf->SetAuthor('');
//$pdf->SetTitle('');
//$pdf->SetSubject('');
//$pdf->SetKeywords('');

// seta o que entrará dentro de Header (em meu caso, disponibilizei uma imagem)
$pdf->SetHeaderData(PDF_HEADER_LOGO);

// seta as fontes usadas no Header e no Rodapé
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// seta as fontes que entraram como monospace
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

//seta as margens
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

//seta o break automático feito na página
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

//set some language-dependent strings
$pdf->setLanguageArray($l);

// ---------------------------------------------------------

// seta a fonte usada no documento (em meu caso, estou usando a Helvetica tamanho 10)
$pdf->SetFont('helvetica', '', 10);

// Adiciona uma página
$pdf->AddPage();

// Texto usado na página
$html = '

WebMaster Criando PDF atraves do PHP

Alguns caracteres especiais: < € € € & è è © > \\slash \\\\double-slash \\\\\\triple-slash

Dicas Interessantes

Alguns desenvolvedores tem dúvidas ao trabalhar com alguns caracteres. Por esse motivo, postamos abaixo alguns exemplos:

  1. Texto com Negrito
  2. Texto com Italico
  3. Texto com Underline
  4. bLoremLorembib
  5. link to http://www.qsasolucoescorporativas.com.br
  6. Lorem ipsum dolor lorem ipsum dolor lorem ipsum dolor, lorem ipsum dolor lorem ipsum dolor lorem ipsum dolor lorem ipsum dolor lorem ipsum dolor lorem ipsum dolor lorem ipsum dolor.
  7. SUBLIST
    1. row one
      • sublist
    2. row two
  8. TEST line through
  9. font + 3
  10. small text normal small text normal subscript normal superscript normal
Carro
Black hot drink
Leite
Branco e Preto
VISUALIZANDO UM MAPA

';

$html2 = utf8_encode($html);

// Imprime o conteúdo do documeto
$pdf->writeHTML($html2, true, false, true, false, '');fpdf, PDF, PHP, tcpdf

// Reseta a partir deste ponto, para partir para a outra página
$pdf->lastPage();

// Fecha o documento e imprime o PDF
$pdf->Output('webmaster.pt.pdf', 'I');

?>

Quer ver como ficou a impressão em PDF?

Visite na pasta TCPDF o ficheiro com nome “webmaster.pt.pdf”.

E aí, gostou da matéria?

Espero que você se adapte bem a estes sistemas…

Na internet você encontra várias dicas específicas sobre sua utilização, mas partindo desses modelos, você conseguirá fazer qualquer impressão. Seja ela de um relatório ou documento.

Faça download do código usado neste tutorial: Criando PDF Através do PHP

pdf

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Deixe o seu comentário, participe!

17 Responses

  1. Valioso tutorial! Estava procurando algo assim mesmo. Boa explicação também.

  2. Cara, tudo certo aqui.
    Teria como você postar, como posso colocar um array de produtos dentro do conteudo.
    No meu caso estou tentando criar um relatório de produtos cadastrados no banco de dados.
    Os dados do cliente como é unico não tem problema, mas não estou conseguindo listar os produtos do pedido dentro do arquivo PDF.

  3. Excelente tutorial. Estava tentando converter html com fpdf mas ele não converte tudo. Esse TCPDF esculacha. Meus Parabéns pela matéria.

  4. Muito bom mesmo o tutorialzinho.

    Foi muito conciso na explicação, ótima.

    E tbem obrigado por disponibilizar já os arquivos.

    Abraço e bons estudos

  5. segue o código q estou usando para gerar o pdf com a tcpdf.

    só q ele cria o pdf mais sem dados algum, qual seria o problema

    // seta a fonte usada no documento (em meu caso, estou usando a Helvetica tamanho 10)

    $pdf->SetFont('helvetica', '', 10);

    // Adiciona uma página

    $pdf->AddPage();

    // Texto usado na página

  6. $html ='<<<EOD
    <link href="../css/visual.css" rel="stylesheet" type="text/css">
    <style rel="stylesheet" type="text/css" media="print">

    #imprimir{display:none}
    #excel{display:none}

    </style>
    <style type="text/css">
    <!–
    body {
    margin-left: 0px;
    margin-top: 0px;
    margin-right: 0px;
    margin-bottom: 0px;
    }
    .style1 {color: #333333}
    .style2 {
    color: #FF3300;
    font-style: italic;
    }
    .style3 {color: #990000}

    .titulo_relatorio{
    background:#747474;
    color:#FFFFFF;
    }

    .dados_oge{
    text-align:center;
    background:#B0B0B0;
    color:#fff;
    font-weight:bold;
    }

    .dados_empresa{
    padding-right:10px;
    text-align:right;
    color:#000;
    font-weight:bold;
    background:#F2F2F2;
    }

    .dados_contrato{
    font-weight:bold;
    text-align:right;
    background:#FFFFFF;
    color:#000000;
    }

    .dados_fatura{
    text-align:center;
    background:#FFFFFF;
    padding-left:10px;
    color:#000000;
    }

    .dados_total_geral{
    text-align:right;
    background:#9D9D9D;
    font-weight:bold;
    color:#000000;
    }

    .dados_total{
    text-align:right;
    background:#FFFFFF;
    font-weight:bold;
    color:#000000;
    }
    –>
    </style>
    EOD;';

    if($_GET["id_moeda_dolar"] == "on"){$cssDolar ='style="padding:10px;"';}else{$cssDolar ='style="display:none"';}
    if($_GET["id_moeda_kwanza"] == "on"){$cssKwanza ='style="padding:10px;"';$cambio_kwanza = $_GET["cambio_kwanza"];}else{$cssKwanza ='style="display:none"';}
    if($_GET["id_moeda_euro"] == "on"){$cssEuro ='style="padding:10px;"';$cambio_euro = $_GET["cambio_euro"];}else{$cssEuro ='style="display:none"';}

  7. $html .='<<<EOD
    <p class="text_titulo">
    <tr>
    <td height="60" colspan="3" class="text_titulo"><img src="'. $logo .'" width="80" height="40"></td>
    </tr>

    <tr class="text10">
    <td height="30" colspan="1" class="text_titulo style3"><font color="#000000"> RELA&Ccedil;&Atilde;O DE OGE – EMPRESA / CONTRATO</font></td>
    </tr>

    <table width="100%" border="1" align="center" cellpadding="0" cellspacing="0">
    <tr class="text10" bgcolor="#99CCFF">
    <td width="100%" class="text10" colspan="3" bgcolor="#CCCCCC">
    <table border="0" width="100%">
    <thead>
    <tr class="text10 titulo_relatorio" align="center">
    <td width="10%" height="15">N.OGE/N.CONTRATO/N.FACTURA</td>
    <td width="30%"> OGE / OBJECTO CONTRATO / DATA FACTURA</td>
    <td width="5%"'.$cssDolar.' > CONTRATO USD</td>

    <td width="5%" '.$cssDolar.' > FACTURADO USD</td>

    <td width="5%" '.$cssDolar.' > PREVISTO USD </td>

    <td width="5%" '.$cssDolar.' > PAGO USD </td>

    <td width="5%" '.$cssDolar.' > SALDO USD </td>

    <td width="5%" '.$cssKwanza.' > CONTRATO AKZ </td>

    <td width="5%"'.$cssKwanza.' > FACTURADO AKZ </td>

    <td width="5%"'.$cssKwanza.' > PREVISTO AKZ </td>

    <td width="5%" '.$cssKwanza.' > PAGO AKZ </td>

    <td width="5%" '.$cssKwanza.' > SALDO AKZ </td>

    </tr>
    </thead>
    ';

    if ($_GET["oge"]){ $filtro .= " id = ".$_GET["oge"]." AND "; }
    if ($_GET["ano"]){ $filtro .= " EXTRACT(YEAR FROM data) = ".$_GET['ano']." AND "; }
    $controladorContratoOGE = new ControladorOrcamentoGeral();
    $listaContratoOGE = $controladorContratoOGE->listarOGEEmpresa($filtro);

    if($listaContratoOGE){
    foreach($listaContratoOGE as $objContratoOGE){
    $html.='
    <tr class="text10 dados_oge">
    <td height="10">'.$objContratoOGE->numero.'</td>

    <td>'.$objContratoOGE->nome.'</td>

    <td colspan="5" style="padding-right:10px;" '.$cssDolar.'>
    '.Valor($objContratoOGE->valor_fe_dolar + $objContratoOGE->valor_rot_dolar).'
    </td>

    <td colspan="5" style="padding-right:10px;" '.$cssKwanza.'>
    '.Valor($objContratoOGE->valor_fe_kwanza + $objContratoOGE->valor_rot_kwanza).'
    </td>

    <td colspan="5" style="padding-right:10px;" '.$cssEuro.'>
    '.Valor($objContratoOGE->valor_fe_euro + $objContratoOGE->valor_rot_euro).'
    </td>

    </tr>
    ';

  8. //lista as empresas
    $controladorFornecedor = new ControladorFornecedor();
    $listaFornecedor = $controladorFornecedor->listarEmpresaPorOGEeContrato($objContratoOGE->id);

    if($listaFornecedor){
    foreach($listaFornecedor as $objFornecedor){

    $filtro = "tb_cont.*";
    $controladorPrevisaoPagamento= new ControladorPrevisaoPagamento();
    $controladorPagamento = new ControladorPagamento();
    $controladorContrato = new ControladorContrato();
    $listaContrato = $controladorContrato->listarOGEPorContratoeEmpresa($objFornecedor->id,$objContratoOGE->id,$filtro);
    $filtro = "";

    if($listaContrato){
    foreach($listaContrato as $objContrato){

    $controladorFatura = new ControladorFatura();

    if ($_GET["ano"]){ $filtro['data'] = " EXTRACT(YEAR FROM data) = ".$_GET['ano']." AND "; }else{ $filtro = "";}

    $totalFatura = $controladorFatura->buscarTotalPorContrato($objContrato->id,$filtro);
    $totalFaturaEmpresa += $totalFatura["total_dolar"];

    $totalPagamento = $controladorPagamento->listarPorContrato($objContrato->id,$filtro);
    $totalPagamentoEmpresa += $totalPagamento["valor_dolar"];

    $totalPrevisto= $controladorPrevisaoPagamento->BuscarTotalContrato($objContrato->id,$filtro);
    $totalPrevistoEmpresa += $totalPrevisto["valor_dolar"];

    $valor_contrato_dolar += $objContrato->valor_dolar;
    $valor_contrato_kwanza += $objContrato->valor_kwanza;
    $valor_contrato_euro += $objContrato->valor_euro;

    $controladorAditivo = new ControladorAditivo();
    $listaAditivo = $controladorAditivo->buscarTotalPorContrato($objContrato->id,NULL);

    $valor_aditivo_dolar += $listaAditivo->valor_dolar;
    $valor_aditivo_kwanza += $listaAditivo->valor_kwanza;
    $valor_aditivo_euro += $listaAditivo->valor_euro;

    }
    $valor_empresa_dolar += $valor_contrato_dolar + $valor_aditivo_dolar;
    $valor_empresa_kwanza += $valor_contrato_kwanza + $valor_aditivo_kwanza;
    $valor_empresa_euro += $valor_contrato_euro + $valor_aditivo_euro;
    }

  9. $html2 = utf8_encode($html);

    // Imprime o conteúdo do documeto

    $pdf->writeHTML($html2, true, false, true, false, '');//fpdf, PDF, PHP, tcpdf

    // Reseta a partir deste ponto, para partir para a outra página

    $pdf->lastPage();

    // Fecha o documento e imprime o PDF

    $pdf->Output('relatorio_oge_print_pdf.pdf', 'D');
    ?>

  10. Vou testar, mas preciso colocar uma marca d'agua na página toda é possível ?

  11. Estou usando o tcpdf mas o código abaixo está levando umas duas horas para gerar o arquivo (700 tabelas de Nota Fiscal). É isso mesmo? Demora tanto assim? Na minha máquina eu posso setar o limit timed out para zero mas no servidor não.

    <?php 
    // create new PDF document
    $tcpdf = new XTCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

    // set document information
    $tcpdf->SetCreator(PDF_CREATOR);
    $tcpdf->SetAuthor('Virtual Telecom');
    $tcpdf->SetTitle('Nota Fiscal de Telecomunicações – PED');
    $tcpdf->SetSubject('Emissão Nota Fiscal de Telecomunicações – PED');
    $tcpdf->SetKeywords('Nota Fiscal de Telecomunicações, PED, emissão');

    // remove default header/footer
    $tcpdf->setPrintHeader(false);
    $tcpdf->setPrintFooter(false);

    // set default monospaced font
    $tcpdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

    //set margins
    $tcpdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

    //set auto page breaks
    $tcpdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

    //set image scale factor
    $tcpdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

    // set font
    $tcpdf->SetFont('freesans', '', 10);

    continua…

  12. Eu configurei o TCPDF numa pasta fora do website que estou a construir e quando o passei para a pasta do restante website ele deu o seguinte erro: 

    TCPDF ERROR: Some data has already been output, can't send PDF file

    O que fasso para o corrigir?
    Desde já muito obrigado

    1. basta comentar a linha 11 do index.php ficando assim:
      //$pdf->SetCreator(PDF_CREATOR);

  13. Parabéns pelo site, ótimas informações no Scriptcase contem algumas informações sobre.

Leave a Reply

Your email address will not be published. Required fields are marked *


Versão Beta

Estamos a mudar

Olá, Somos criadores de conteúdo apaixonados por web design, programação, criação de websites e tecnologias digitais. Ajudamos os nossos clientes a levar o conteúdo certo às pessoas certas, criando artigos e recursos que facilitam a criação e otimização de websites.

Artigos Populares

Guia Prático Sobre Segurança Do Joomla

Dicas para diminuir substancialmente o número de vetores de ataque ao Joomla! Proteja o seu trabalho!

Os Segredos Do Sucesso Na Internet

A responsabilidade. O querer. O erro e a experimentação. O social. A memória da internet. Ser quem você é.

38 Ideias Espetaculares Para Sites De Empresas

Encontre inspiração nestes 45 exemplos de sites de empresas para criar o site da sua empresa.

Criar PDF Através do PHP

É uma matéria muito útil a criação de ficheiros em PDF usando o PHP. Neste tutorial, aprenda como criar PDF através da linguagem de programação PHP.