CobreGratis / boletophp

Projeto Código-Aberto de Sistema de Boletos bancários em PHP
http://boletophp.com.br/
GNU General Public License v2.0
591 stars 389 forks source link

Códigos de barras imprimindo errado no Chrome #103

Open paulop opened 7 years ago

paulop commented 7 years ago

Olá Pessoal, O Chrome está imprimindo errado os códigos de barras e as tabelas dos boletos, o html do boleto está saindo corretamente, mas quando aperto Crtl+p para imprimir ele fica todo estranho e faltando partes.

imagem do html print html

imagem da caixa de impressão. print caixa de impressao

está acontecendo com meus clientes, por enquanto estou pedindo para usarem a linha digitável. Já estou a algum tempo tentando arrumar, alguém já viu esse erro? isso é só no Chrome, no Mozilla e no IE está correto.

globalwebsites commented 7 years ago

Está acontecendo igual comigo, alguém já conseguiu corrigir? Agradeço.

amarborto commented 7 years ago

Isso provavelmente é alguma falha no Chrome pois ele obtém o html da página em questão para gerar o preview para ser impresso e ao fazer isso deve ocorrer algum error.

ronaldsena commented 7 years ago

Companheiro tenta ver se no script o diretório para as imagens e para os css estão corretos.

Outra coisa notei que vc esta gerando um boleto na modalidade antiga SEM REGISTRO essa modalidade esta depreciada esta sendo extinta so sera possível usar na modalidade REGISTRADA.....

Se precisar de ajudar mim informa ....

paulop commented 7 years ago

Olá Ronald, esse ai é o checkout padrão do repositório, só fiz checkout e abri o boleto de exemplo.

No seu navegador está funcionando corretamente?

ronaldsena commented 7 years ago

Sim no meu navegador esta funcionado perfeitamente porem para cobrança simples estou adaptando o código para fazer a cobrança registrada a qual sera a unica valida quando eu modifiquei para os paramentos da registrada quebrou o código de barras estou nesse momento fazendo testes com a leitura do codigo de barras ...

paulop commented 7 years ago

Eu já fiz a homologação pela CAIXA e o que realmente muda no código de barras

O nosso número passou de 240000000000000000 para 14000000000000000-0 bastou mudar o inicio de 2 para 1 e um traço do dígito

É preciso adicionar uma linha com o endereço do cedente ou no recibo ou na ficha de compensação. Os campos Espécie Doc, Aceite e Carteira são obrigatórios. Local de pagamento deve conter: PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE

E no final das contas a remessa continua sendo opcional.

O problema está sendo a impressão no Chrome mesmo. Acho que está na hora de refazer com html5 esse layout. Quando tiver tempo vou fazer.

Firefox

image

E no Chrome cheio de falhas

image

paulop commented 7 years ago

Encontrei esses tópicos

http://stackoverflow.com/questions/29282488/erroneous-table-border-displays-in-chrome-only-confirmed-bug

http://stackoverflow.com/questions/25591499/chrome-bug-with-colspan-and-border

Vou verificar se as correções funcionam.

ronaldsena commented 7 years ago

Realmente tem um ERRO GRAVE

rafaelpatro commented 7 years ago

Acho que este erro ocorre no visualizador de PDF do Chrome. Ao gerar o boleto pelo IE e Imprimir para PDF, o código de barras se mantem correto (se visualizado no IE). Ao abrir o mesmo arquivo PDF no Chrome, aparece tudo errado.

ronaldsena commented 7 years ago

Exato fiz testes com os 3 principais navegadores

Internet Explore - OK Mozilla Firefox --- OK Chrome -------- Doente

Na hora que abre na tela do Chrome o código de barras e mostrado corretamente após o Crtl+P ou após aperta o botão imprimir que abre uma tela de pré-visualização da impressão já e mostrado nessa tela o código de barras quebrado e analisando um pouco o código ele e baseado em 2 imagens que são uma Barra PRETA e uma Barra BRANCA onde as duas tem o FINO e o LARGO que equivale a LARGURA da imagens com isso e gerado o código de barras. Aparentemente o problema esta na BARRA PRETA com o estilo FINO essa é a barra que não esta sendo impressa .....

Provavelmente deve ser algo que se possa corrigir com CSS especifico para o Chrome....

No momento estou focado no arquivo de remessa que já esta quase pronto quando eu finalizar vou dar uma olhada para tenta resolver.

scorninpc commented 7 years ago

Alguma novidade desse problema? tentei de varias formas, inclusive dando margin ao invés de usar barra branca, mas nada funciona mesmo

scorninpc commented 7 years ago

Sei que foge do projeto, mas se assim como eu, alguém mais precisar de uma solução rápida pra isso, fiz um commit de uma saída rápida para o problema

https://github.com/agenciageneral/codigo_barras_i25_boleto

paulop commented 7 years ago

Parece que a melhor opção é converter em imagem mesmo obrigado @scorninpc

patrickmacedo commented 7 years ago

Alguém conseguiu resolver? Não consegui fazer o código recomendado pelo @scorninpc funcionar. Carreguei o projeto diretamente do Aziz, mas mesmo o demo dele não roda aqui (dá como se a imagem estivesse quebrada). Alguém pode me dar uma mão?

scorninpc commented 7 years ago

@patrickmacedo, no arquivo boleto_barcode.php, remova a ultima linha com a função header(), e veja se está dando algum erro ou algum warning, esses erros podem quebrar a imagem. Se estiver, desative a exibição de error

patrickmacedo commented 7 years ago

Opa, obrigado pela ideia, @scorninpc . Usei o conceito com o código original do rapaz e depois de definir as variáveis (este estava sendo o erro) funcionou tranquilo. Muito obrigado 👍

alexandre890 commented 7 years ago

@scorninpc muito obrigado por sua ajuda e colaboração compartilhando a sua dica de como resolver o problema da visualização do código de barras conforme comentado aqui. Sua solução funcionou perfeitamente e já está me ajudando muito aqui. Obrigado e parabéns!

ghost commented 7 years ago

Opa tudo bem por aí, então eu tava tentando aplicar a correção de emergência do @scorninpc mas não consegui, ele dá erro de ( ! ) Warning: Cannot modify header information - headers already sent. Como eu posso arrumar isso aí gente?

Além disso aparece umas coisas estranhas: �PNG  IHDR2f�iePLTE������ IDAT�c��][�IEND�B

Alguém tem ideia do que seja?

paulop commented 7 years ago

Vc vai precisar debugar o código, deve estar aparecendo algum warning antes.

ghost commented 7 years ago

Então, eu debuggei mas nada, nenhum erro, ou warning e tá tudo ativado @paulop, tava dando erro quando tava com o header, mas eu tirei e só ficam aqueles caracteres lgoi

scorninpc commented 7 years ago

@John-Cena1 se seu site está exibindo Warning, é muito provável que esteja mostrando algum erro antes de montar a imagem. Desative todos os erros do PHP e veja se o problema continua. Entendeu o problema? o php deve estar mostrando algum notice ou warning, alguma coisa irrelevante, e por isso está gerando uma imagem invalida

ghost commented 7 years ago

As únicas coisas que fiz foi mudar a função fbarcode() por echo "<img src=\"boleto_barcode.php?codigo=" . $dadosboleto["codigo_barras"] . "\">"; e dei um include do boleto_barcode no boleto_bradesco.php. Já desativei o erro como recomendado, mas também não resolveu.

Quando eu tiro o ?codigo= ele dá erro no código, undefined index, somente isso que acontece. Tirei o header também header("Content-Type: image/png"); e aí parou o erro Cannot modify header information - headers already sent.

Só uma dúvida para ter certeza, onde eu dou o include, no layout mesmo ou no boleto_bradesco, ou no funções, ou não precisa?

Não funcionou, mas obrigado pela ajuda e atenção de qualquer jeito @scorninpc e @paulop,é um projeto muito legal é uma pena que ficou a imagem quebrada

scorninpc commented 7 years ago

voce não tem que dar include nenhum. Voce só adiciona esse código abaixo no seu projeto

https://github.com/agenciageneral/codigo_barras_i25_boleto/blob/master/boleto_barcode.php

Esse link gera imagens de barcode. Só isso, nada mais

No arquivo de layout do boletophp tem uma função que gera o código de barras. Você vai trocar essa função por uma imagem gerada pelo link acima, somente isso

Como disse, o boleto_barcode.php está gerando algum "lixo" junto com a imagem, por isso ele não ta gerando corretamente. Se você tirou a função header(), deve ver o conteúdo da imagem. Analisando deve conseguir ver qual o "lixo"

naurojunior commented 7 years ago

Muito obrigado @scorninpc , resolveu pra mim.

O problema que o pessoal tá enfrentando é com o "undefined variable $cbresult", quando o PHP está mostrando os erros.

Poderia adicionar na sua biblioteca a correção?

Na função codificar, linha 25:

$cbresult = '';

scorninpc commented 7 years ago

oi @naurojunior

Obrigado pela ajuda

Porem sempre que envia headers, é altamente recomendável limpar o buffer ou remover os erros

Isso por que mesmo que eu arrume esse problema indicado, dependendo do ambiente pode haver algum outro problema. Um simples espaço no começo ou no final pode ocasionar o problema na imagem.

De qualquer forma vou sim fazer a sua recomendação

naurojunior commented 7 years ago

Obrigado pela dica! Só verifica a linha anterior, com essa atualização acho que faltou o final dela

ficou : $cbnumeros = array("NNWWN", "WNNNW", "NWNNW", "WWNNN", "NNWNW", "WNWNN", "NWWNN", "NNNWW", "WNNWN", "NWNWN

ao invés de

$cbnumeros = array("NNWWN", "WNNNW", "NWNNW", "WWNNN", "NNWNW", "WNWNN", "NWWNN", "NNNWW", "WNNWN", "NWNWN");

regisvidals commented 7 years ago

Boa tarde pessoal,

Agradeço ao @scorninpc pelo código para gerar o código de barras. Deu tudo certo aqui.

O @paulop comentou que "E no final das contas a remessa continua sendo opcional."

Isso é verdade?

Porque levei quase um mês para validar o arquivo remessa de teste junto à Caixa Econômica.

paulop commented 7 years ago

@regisvidals ainda é possível receber boletos sem registro se ele não estiver vencido. A diferença vai ser a tarifa que vai ser mais cara. Tenho cliente que esqueceu de registrar os boletos e pagou 7 reais de tarifa sobre o boleto. Acredito que vai continuar assim, pois podem haver problemas no registro dos boletos e o banco não pode impedir do cliente receber esse valor.

Material de referência...veja na página 10 https://cmsportal.febraban.org.br/Arquivos/documentos/PDF/Nova_plataforma_cobranc%CC%A7a.pdf

patrickmacedo commented 7 years ago

@regisvidals a informação do @paulop se confirma comigo. Um cliente teve problemas para registrar alguns boletos e pagou 7,50 de tarifa...

regisvidals commented 7 years ago

Pessoal, quem deve registrar os boletos não é o beneficiário ? Aqui vocês falam que é o cliente que registra.

patrickmacedo commented 7 years ago

Cliente meu = Empresa que emite o boleto para o seu cliente...

leoratzlaff commented 7 years ago

Estou com o mesmo problema que o @ghost. Exatamente o mesmo.

marcosbarbosa031 commented 7 years ago

Olá, eu estou com o mesmo problema no Chrome e tentei a solução apresentada pelo @scorninpc , porém não obtive sucesso em sua implementação. Abrindo o exemplo que ele disponibilizou no Git a imagem exibida está em branco. Fiz algumas alterações(removi a verificação !(strlen($codigo)&1)) ) para conseguir gerar a imagem de um código de barra de um boleto real, porém o código gerado (imagem) difere da versão gerada pela função fbarcode(), e testei usar o leitor do app do Banco do Brasil e não leu essa imagem gerada, leu apenas a gerada pela função fbarcode. Alguém poderia me ajudar a entender a função de decodificação e o porquê das verificações e o porque não geraria a imagem correta. Obrigado

wlpcorp commented 7 years ago

boleto_barcode.php funcionou legal aqui, sicoob. Se gerar o boleto com a classe pdf, não resolveria também?

regisvidals commented 7 years ago

Estou com problema para gerar o arquivo remessa para devolução do boleto. Alguém poderia me informar quais os parâmetros para solicitação da devolução do boleto no arquivo remessa ?

Pessoal, já resolvi.

Desde já agradeço.

lobobruno commented 7 years ago

@scorninpc Deu certo aqui também a sua solução!! Valeu!!

ghost commented 7 years ago

Boa tarde galera,

Eu retirei o cellPadding=0 e funcionou de boas. Meu código ficou assim:

<table cellSpacing=0 width=666 border=0>
    <tbody>
        <tr>
               <td vAlign=bottom align=left height=50>
                <?php fbarcode($dadosboleto["codigo_barras"]); ?> 
            </td>
        </tr>
    </tbody>
</table>
brenodouglas commented 7 years ago

Galera, estou trabalhando em uma outra LIB com uma DSL bem diferente dessa e que já está passando pela homologação da Caixa e BB, e logo que finalizar irei homologar Bradesco e Sicoob. Nela não há esses tipos de problemas e quem quiser colaborar sinta-se a vontade: https://github.com/GOPHP/boleto-bancario

ericrade commented 7 years ago

É so tirar os cellSpacing e cellPadding do que está o barcode que resolve.

regisvidals commented 7 years ago

@ericrade , fiz o teste aqui e não funcionou. Ainda está valendo a solução do @scorninpc .

ericrade commented 7 years ago

Na impressão funciona. Testa com o App f2b. Tenta tirar só cellspacing e deixa o cellpadding

Em 29 de set de 2017 13:33, "regisvidals" notifications@github.com escreveu:

@ericrade https://github.com/ericrade , fiz o teste aqui e não funcionou. Ainda está valendo a solução do @scorninpc https://github.com/scorninpc .

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/CobreGratis/boletophp/issues/103#issuecomment-333174994, or mute the thread https://github.com/notifications/unsubscribe-auth/Ae36ug7wSLXUClbtuhCFoel3k6HfzmL2ks5snRvSgaJpZM4Lf3sM .