Ir para conteúdo
ammazzo

Gerar Carteirinha em PDF

Recommended Posts

Olá galera, 

 

Estou com problemas pra gerar Carteirinha de membros em PDF. 

Eu utilizo o Phpjasperxml em todos os relatórios e consigo um resultado quase excelente, a não ser por algumas limitações como o não funcionamento de subrelatórios e gráficos mas não me fez falta. 

 

O meu problema na geração de carteiras é que a imagem dinâmica das fotos dos membros , vindo do BD,  faz com que o pdf não seja gerado.

 

Gostaria de saber se alguém tem uma solução pra este problema do Phpjasperxml ou se tem uma maneira mais prática pra fazer carteirinha em PDF usando mPdf, Tcpdf e etc... Pois já tenho o layout das carteira e tá bem complexo ajustar os campos que serão preenchidos na mão. Obrigado. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta quebrar as responsabilidades.

 

Ex:

 

Você faz 2 rotinas:

 

1 - Gerar Imagem a partir do DB,

2 - Pegar essa imagem já feita e simplesmente juntar no Phpjasperxml.

 

--------

Se possível detalhe mais...

 

Ex

"faz com que o pdf não seja gerado."

 

Não gera pq?

Da erro?

Fica em branco?

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela atenção Gabriel. 

 

Dá erro 500 no browser. 

 

Pra gerar uma carteira individual, sem problemas,  porque eu passo o caminho da foto por parâmetro. Eu busco a foto no banco pelo id do membro e envio o caminho completo por parâmetro. 

 

Meu problema está na geração de todas as carteirinhas ou de um grupo determinado (ex: da 50 a 100). O problema acontece  na field da foto em Text Expression 

 

Ex: "localhost/sgc/membros/fotos/" +$F{foto}

 

Essa field  $F{foto}  se eu colocar pra exibir como texto, traz o nome da imagem corretamente. Mas se ela estiver na Text Expression da imagem da ruim.

 

Só reforçando que sem foto o PDF com todas as carteirinhas é gerado tranquilamente. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Mykel, obrigado pela atenção. 

 

O log não tem erro. 

 

Criei até pra testar,  um código simples, procedural, só chamando o jxml pra gerar o PDF. Inclusive usando outra conexão de banco e uma tabela simples. É o problema persiste. 

 

Tô começando a acreditar que seja bug no phpjasperxml. Por isso peço que se alguém o utilize, faça esse teste pra de imagens dinâmica pra sanar qualquer dúvida. 

 

Obrigado mais uma vez. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

[RESOLVIDO] 

 

Gabriel e Mykel, 

 

Meu muito obrigado pela atenção. 

Consegui resolver. 

 

Após várias tentativas, como suspeitava era uma limitação do phpjasperxml. Lembre que há uns 3 anos atrás tive um problema com o logotipo de um relatório. E descobri em um fórum tailandês que imagens. png não são processadas pelo phpjasperxml. 

 

Esse era o problema! Agora vou excluir a extensão png da regra de permitidas para upload de fotos de membros e readaptar onde for necessário. 

 

Muito obrigado mais uma vez! 

 

Solução : imagens com extensão png não são suportadas pelo phpjasperxml. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal q deu certo.

 

Sobre restringir png, acho meio zoado...

 

Uma opção seria você converter:

https://stackoverflow.com/questions/1201798/use-php-to-convert-png-to-jpg-with-compression

 

Lembrando q perde a transparência (camada alpha).

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Gabriel, vou seguir a dica sim. Melhor que restringir. Mas como são só as fotos do rosto dos membros a camada alpha não vai importar. 

 

Valeu, grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por freitaz
      Bom Quando tento alterar o formulário ele me trás a resposta "Atualizado com sucesso" mas não é atualizado no banco de dados se alguém poder me ajudar agradeço !
       
      código de cadastro
       
      <div class="card-body"> <?php $executivo = new Exe(); if ($_SERVER["REQUEST_METHOD"] == "GET") { //Using GET $id = $_GET['id']; $titulo = $_GET['titulo']; $categoria = $_GET['categoria']; $action = $_GET['action']; $file = $_GET['arquivo']; } if (isset($_POST["btnPublicar"])) { $id = $_POST['id']; $titulo = $_POST['titulo']; $categoria = $_POST['categoria']; $action = $_POST['action']; $file = $_POST['filetext']; if ($_SERVER["REQUEST_METHOD"] == "POST") { // Check if file was uploaded without errors $filename = $_FILES["file"]["name"]; $filetype = $_FILES["file"]["type"]; $filesize = $_FILES["file"]["size"]; // Verify file extension $ext = pathinfo($filename, PATHINFO_EXTENSION); // Verify file size - 5MB maximum $maxsize = 5 * 1024 * 1024; if ($filesize > $maxsize) { die("ERRO: Tamanho máximo de arquivo igual a 5MB."); } // Check whether file exists before uploading it if (file_exists("uploads/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " já existe na pasta."; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]); } } #fim do Arquivo print_r($fmsg); $executivo->setID($id); $executivo->setTitulo($titulo); $executivo->setCategoria($categoria); $executivo->setArquivo($filename); try { if ($action == "alterar") { if ($filename == "") { $executivo->setArquivo($file); } else { if (file_exists("uploads/" . $file)) { $path = 'uploads/' . $file; unlink($path); } } $executivo->update($executivo->getID(), $executivo->getTitulo(), $executivo->getCategoria(), $executivo->getArquivo()); $texto = "Atualizado com sucesso"; } else { $executivo->insert($executivo->getTitulo(), $executivo->getCategoria(), $executivo->getArquivo()); $texto = "Inserido com sucesso"; } } catch (PDOException $e) { echo 'ERRO: ' . $e->getMessage(); } } ?> <h4 class="header-title">Cadastro Downloads Executivos</h4> <form method="POST" enctype="multipart/form-data"> <div class="form-group"> <input type="text" id="action" name="action" hidden="true" value="<?php echo $action; ?>" > <label class="col-form-label">Título</label> <input class="form-control" type="text" name="titulo" value="<?php echo $titulo; ?>" > </div> <div class="form-group"> <label class="col-form-label">Categoria</label> <select class="form-control" name="categoria"> <option >Select</option> <option value="Executivo">Executivo</option> <option value="Legislativo">Legislativo</option> <option value="Judiciario">Judiciário</option> </select> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">Arquivo</span> </div> <div class="custom-file"> <input type="file" name="file"/> <a href="<?php echo "uploads/" . $file; ?>"><?php echo $file; ?></a> <input type="text" id="filetext" name="filetext" hidden="true" value="<?php echo $file; ?>" > </div> </div> <button class="btnPublicar" name="btnPublicar"><span>Publicar </span></button> </form> <?php echo $texto; ?> </div>  
      Essa e a codigo da classe
       
      <?php require_once 'Crud.php'; class Exe extends Crud { protected $table = 'exe'; private $arquivo; private $categoria; private $id; private $titulo; public function setArquivo($arquivo) { $this->arquivo = $arquivo; } public function getArquivo() { return $this->arquivo; } public function setCategoria($categoria) { $this->categoria = $categoria; } public function getCategoria() { return $this->categoria; } public function setID($id) { $this->id = $id; } public function getID() { return $this->id; } public function setTitulo($titulo) { $this->titulo = $titulo; } public function getTitulo() { return $this->titulo; } public function insert($titulo, $categoria, $arquivo) { try { $sql = "INSERT INTO $this->table (titulo, categoria, arquivo) VALUES (:titulo, :categoria, :arquivo)"; $stmt = DB::prepare($sql); $stmt->execute(array('titulo' => $titulo, 'categoria' => $categoria, 'arquivo' => $arquivo)); } catch (PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } } public function update($id, $categoria, $titulo, $arquivo) { try { $sql = "UPDATE $this->table SET categoria = :categoria, titulo = :titulo, arquivo= :arquivo WHERE id = :id"; $stmt = DB::prepare($sql); $stmt->execute(array('id' => $id, 'titulo' => $titulo, 'categoria' => $categoria, 'arquivo' => $arquivo)); } catch (PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } } } ?>  
      Se alguem poder me orientar como ajustar agradeço!
    • Por rogarfil
      <div class="video-sec">
        <h4 class="heading-small">Mídias</h4>
        <div class="video-block">
        <ul class="nav nav-pills justify-content-center mb-4" id="pills-nav" role="tablist">      
        <?php
        // Atribui uma conexão PDO
        $conexao = Connection::getInstance();
        $controle_ativo = 2;
        //$controle_num_slide = 1;
        $sql = "SELECT * FROM db_post WHERE status=1 AND category='Mídia' ORDER BY created DESC LIMIT 3";
        $stm = $conexao->prepare($sql);
        $stm->execute();
        while($post = $stm->fetch(PDO::FETCH_OBJ)) {
          if($controle_ativo == 2) { ?>
            <li class="nav-item">
              <a class="nav-link active" id="nav-pills-01" data-toggle="pill" href="#<?=$post->post_id?>"><?=$post->title?></a>
            </li>
          <?php
            $controle_ativo = 1;
          } else {
          ?>
            <li class="nav-item">
              <a class="nav-link" id="nav-pills-02" data-toggle="pill" href="#<?=$post->post_id?>"><?=$post->title?></a>
            </li>
          <?php
            //$controle_num_slide++;
          }
        }
        ?>
      </ul>
      <div class="tab-content" id="nav-pills-content">      
        <?php
        // Atribui uma conexão PDO
        $conexao = Connection::getInstance();
        $controle_ativo = 2;
        $sql = "SELECT * FROM db_post WHERE status=1 AND category='Mídia' ORDER BY created DESC LIMIT 3";
        $stm = $conexao->prepare($sql);
        $stm->execute();
        while($post = $stm->fetch(PDO::FETCH_OBJ)) {
          if($controle_ativo == 2) { ?>
        <div class="tab-pane fade show active" id="<?=$post->post_id?>" role="tabpanel">
          <div class="row">
            <div class="col-sm-6">
              <div class="embed-responsive embed-responsive-16by9"> <!-- 21by9, 16by9, 4by3, 1by1 -->
                <iframe class="embed-responsive-item" src="<?=$post->url?>"></iframe>
              </div>
            </div>
            <div class="col-sm-6">
              <p class="display-5"><?=$post->content?></p>
              <p class="card-text">
                <small class="text-time">
                  <em>Publicado em <?=date('M,d',strtotime($post->created))?></em>
                </small>
              </p>
            </div>
          </div>
        </div>
          <?php
            $controle_ativo = 1;
          } else {
          ?>
        <div class="tab-pane fade" id="<?=$post->post_id?>a" role="tabpanel">
          <div class="row">
            <div class="col-sm-6">
              <div class="embed-responsive embed-responsive-16by9"> <!-- 21by9, 16by9, 4by3, 1by1 -->
                <iframe class="embed-responsive-item" src="<?=$post->url?>"></iframe>
              </div>
            </div>
            <div class="col-sm-6">
              <p class="display-5"><?=$post->content?></p>
              <p class="card-text">
                <small class="text-time">
                  <em>Publicado em <?=date('M,d',strtotime($post->created))?></em>
                </small>
              </p>
            </div>
          </div>
        </div>
          <?php
          }
        }
        ?>
      </div>
      Há aba ativa está perfeita quando clico na segunda ou terceira aba nada acontece (não abre), tenho que deixar dinâmico. Ainda pergunto existe uma maneira com javascript para ativar a aba e seu conteúdo.

    • Por kadu silva
      Boa Noite
       
      Estou Criando Um Site Para Um Cliente E Ele Deseja Colocar Um Sistema De Buscar.
      Já Criei Os Códigos Em Php E O Banco De Dados No Phpmyadmin. Porém, Agora Necessito De Ajuda Para Como Colocar Ele Dentro Do Site Funcionando.
      O Sistema De Pesquisa Durante A Fase De Teste, Estar Dando Tudo Certo, Faz A Pesquisa Certinho, Eu Só Não Sei Como Colocar Dentro Do Site Funcionando, Necessito De Muita Ajuda.
    • Por AllysonSouza
      Boa noite, to precisando de ajuda, eu to listando os dados direto do banco de dados em um tabela, so que ela faz isso linha por linha como é feito, eu queria que ele listasse duas tabelas na mesma pagina, só que dando continuidade da busca do banco de dados, exemplo. ele busca 50 resultados no banco, ai ele pega o maximo de linhas possivel em uma tabela, e do outro lado da tela ele lista o restante dos dados...enfim, eis meu codigo, exibindo tudo em uma tabela só
      <?php $categoria = $_GET['categoria']; $sql = "SELECT p.id AS idProd, p.nome AS produto, p.largura, p.comprimento, p.estilo, p.valor, p.valorCompra, p.estoque, p.imagem, c.id AS idCat, c.nome AS categoria, p.vendidos, p.tipo, p.detalhe FROM produtos p INNER JOIN categorias c ON p.categorias_id=c.id WHERE c.id=$categoria ORDER BY p.nome, p.largura ASC"; $res = mysqli_query($con, $sql); $dados = mysqli_fetch_array($res); ?> <div class="panel-footer"> <table class="table table-bordered table-hover text-center"> <thead > <tr ><td colspan="5" style="text-align: center;"> <?php echo $dados['categoria']?></td></tr> </thead> <thead > <tr > <th width="250" class="text-center" >Nome</th> <th width="10" class="text-center">Tamanho</th> <th width="100" class="text-center">Valor</th> </tr> </thead> <tbody> <?php while($linha = mysqli_fetch_array($res)){ ?> <tr > <td > <?php echo $linha['produto']; echo " "; echo $linha['largura'] ; echo " "; echo $linha['detalhe']; echo" "; if($linha['estilo']==0){ echo ''; }else if($linha['estilo']==1){ echo '(Bruta)'; }else if($linha['estilo']==2){ echo '(Plainada)';}?> <label class='label label-danger'><?php if($linha['tipo'] == 0 ){ echo 'ML';}; ?></label> <label class='label label-primary'><?php if($linha['tipo'] == 1 ){ echo 'M²';}; ?></label> <label class='label label-warning'><?php if($linha['tipo'] == 2 ){ echo 'Peça';}; ?></label> <label class='label label-info'><?php if($linha['tipo'] == 3 ){ echo 'Duzia';}; ?></label> <label class='label label-success'><?php if($linha['tipo'] == 4 ){ echo 'KG';}; ?></label> </td> <td><?php if($linha['comprimento']==0){ echo '1 M '; }else if($linha['comprimento']==1){ echo '3 M'; }else if($linha['comprimento']==2){ echo '4 M'; }else if($linha['comprimento']==3){ echo '5 M'; }else if($linha['comprimento']==4){ echo '6 M'; }else if($linha['comprimento']==5){ echo ''; } ?></td> <td> <?php echo Conversor::realBancoParaUsuario($linha['valor']); ?> </td> </tr> <?php } ?> </tbody> </table> </div>  
×

Informação importante

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