Archive for the ‘PHP’ Category

Dompdf – Notificação de erro

abril 18th, 2009, posted in Dompdf, PHP

ErroPdf Dompdf   Notificação de erro

Essa semana mais uma vez andei muito sumido, mais com motivo, estive trabalhando no que diz respeito a cobança bancária, mais específico pelo Banco do Brasil. Na verdade já tinha modificado o modelo a um 1 ano atrás... no modelo normal (carteira 011 ou 017) é gerado um txt para o banco, o banco com esse txt gera os boletos e envia para os seus clientes e cobra uma taxa, a última que lembro foi de R$1.48. o Nosso Cliente sismou que está karo e ele mesmo vai emitir e enviar para o cliente. Não me conformo creio que vai sair mais karo fora a dor de cabeça, Mas como cliente sempre tem razão estou desenvolvendo para (carteira 018), que ele mesmo vai fazer a impressão e entrega dos boletos.

A lógica

Então como tinha que desenvolver pensei em fazer o seguinte:

  • Como a parte de geração já está pronto em um sistema em vb6 dexei a geração por lá mesmo. ;)
  • No que diz respeito a impressão de boleto já tem pronto o boleto na web. Aproveitando o momento vou fazer as merecidas progragandas ao http://www.boletophp.com.br/ existe modelo de praticamente todos os bancos brasileiros.
  • Como no boletophp é feito a impressão de apenas um boleto imaginei fazer o seguinte. criar uma função que faça um loop e vai adicionando cada boleto em uma página de um pdf.

Os Erros encontrados

Com a lógica em mente começamos a procurar ferramentas para fazer para gerar o pdf, o Marcus Junior indicou o tcpdf porém não consegui fazer com que fosse gerado pdf passando como argumento um html completo ou seja:

<html> <html/>

o Mário Santos me indicou o Dompdf, com o dompdf consegui com pequenas alteraçõs no Css (Como colocar em Pixel o tamanho da Tabelas( Width ) tirar o @media screen,print { e mais algo com @ ) gerar o pdf sem problemas.

O meu problema começou quando tive que imprimir mais de um html no pdf, como ele só aceita um dompdf->loadHtml por dompdf->render eu tive que pegar todos os boletos e ir concatenando em uma variavel e essa sim se invocada no dompdf->loadHtml (para fazer usei a função pegar código fonte de sites remotos , fiz os teste no próprio site da Dompdf e para minha alegria percebi que para cada tag html que se cria ele cria uma página, Show!! Foi quando fazendo os últimos ajustes para "sair pra galera" recebi a seguinte mensagem dentro do pdf gerado

Pdf em Inglês:

Wrong operand Type

Pdf em Português

Tipo errado de Operando

fiz os teste no próprio site da Dompdf novamente descobrir que o problema é com imagem, faça este simples teste que vai se constatar o que eu estou falando ( lá no site onde se faz demo substitua por esse html).

HTML:
  1.  
  2.  
  3.  
  4. </style>
  5. </head>
  6.  
  7.  
  8. <img src="http://www.google.com.br/intl/pt-BR_br/images/logo.gif" />
  9.  
  10. </body>
  11. </html>
  12.  
  13.  
  14.  
  15.  
  16. </style>
  17. </head>
  18.  
  19. <img src="http://www.boletophp.com.br/boletophp/imagens/logobb.jpg" />
  20. </body>
  21. </html>

Se tirar as imagens e colocar um outra tag tipo "p" vai perceber que vai funcionar e não vai dá nehum erro.

Se você recebe o mesmo erro que eu recebo, please :( comunique , enfim , tenho uma semana para resolver até gerarem a cobrança por este modelo, na pior das hipóteses dou echo no html concatenado dentro de um a navegador e imprimo pelo navegador (porém como são vários html dentro de um tem que ser de 100 em 100 para não estourar mémoria do navegador).

Como a Dompdf não é mais atualizado estou pensando na hipótese de mexer em seu código e ver se consigo achar o porque ele faz isso e acertar.

Notificado o erro voltaremos ao trabalho. Até a Próx!

Popularity: 8% [?]

Pegar Código Fonte de Sites Remotos

abril 18th, 2009, posted in Funções, JavaScript, PHP

procurando uma maneira de pegar código fonte de um html externo para poder pegar este código e jogar como um template de um Editor TinyMCE eu achei uma função e modifiquei-a para que possa ser aceito passando como variavel tanto em php como em JavaScript. A função é essa:

PHP:
  1. function get_source($url,$caminho,$show_headers=0)
  2. {
  3.     if(preg_match('!^http://!',$url))
  4.         $url=substr($url,7,strlen($url));
  5.  
  6.     if($start=strpos($url,'/'))
  7.         $uri=substr($url,$start,strlen($url));
  8.     else
  9.         $uri='';
  10.  
  11.     $fp=fsockopen($url,80,$errno,$errstr,4);
  12.     if(!$fp)
  13.     {
  14.         echo "<b><font color=\"red\">Unable to connect to: $url</font></b>";
  15.         return false;
  16.     }
  17.     else
  18.     {
  19.         $buffer='';
  20.         $headers='';
  21.  
  22.         fputs($fp,"GET $caminho HTTP/1.0\r\n");
  23.         fputs($fp,"Host: $url\r\n");
  24.         //fputs($fp,"Referer: http://www.plebian.com\r\n");
  25.         fputs($fp,"User-Agent: sourcegetter\r\n");
  26.         //fputs($fp,"Cookie: x=y;a=b\r\n");
  27.         fputs($fp,"Connection: close\r\n");
  28.  
  29.         fputs($fp,"\r\n");
  30.         while(!feof($fp))
  31.         {
  32.             if(!isset($end_of_headers))
  33.             {
  34.                 $header=fgets($fp,4096);
  35.                 if($header=="\r\n")
  36.                     $end_of_headers=1;
  37.                 $headers.=$header;
  38.             }
  39.             else
  40.             {
  41.                 $buffer.=fgets($fp,4096);
  42.             }
  43.         }
  44.  
  45.         fclose($fp);
  46.  
  47.         if($show_headers)
  48.         {
  49.             $headers=htmlentities($headers);
  50.             $headers=nl2br($headers);
  51.  
  52.             echo $headers;
  53.         }
  54.  
  55.         $buffer=htmlentities($buffer);
  56.         $buffer=nl2br($buffer);
  57.         $buffer = str_replace(array("<br />"), " ", $buffer);
  58.         $buffer = str_replace(array("\r\n", "\r\n", "\n"), ' ', $buffer);
  59.         $buffer = html_entity_decode($buffer);
  60.  
  61.         return $buffer;
  62.     }
  63. }

A única coisa que vale comentar é que passo duas caminho, uma da Url principal e outra do caminho alternativo, ou seja, da subpasta até achar o arquivo que quero pegar o código.

com esta função você consegue pegar o código fonte de uma página, para usar a função é só fazer assim:

PHP:
  1. $boleto = get_source('www.boletophp.com.br','/boletophp/boleto_bb.php',false);

para ver o resultado é só usar a função echo e ver o que sua variavel contém

PHP:
  1. echo $boleto;

caso queira colocar um TimyMCE via JavaScript é só fazer isso:

JAVASCRIPT:
  1. function addTemplate(){
  2.  
  3.     try {
  4.  
  5.         tinyMCE.activeEditor.setContent('<? echo $boleto ?>');
  6.     }
  7.     catch(e) {
  8.         alert("Erro: " + e.description);
  9.     }
  10.  
  11.  
  12. }

qualquer dúvida só postar um comentário, ok!


Popularity: 10% [?]

MVC da teoria para a prática

março 15th, 2009, posted in Java, MVC, PHP

Uma coisa muito difícil para quem começa no mundo da programação é entender a Arquitetura MVC e se ele realmente é necessário (já que sem ela funciona e normalmente se aprende bem depois a fazer algo com MVC)

Antes de qualquer coisa leia esses links para entender melhor o que é MVC

Links sobre MVC

http://fragmental.com.br/wiki/index.php?title=MVC_e_Camadas

http://pt.wikipedia.org/wiki/MVC

http://msdevstudio.com/blog/2008/11/06/tutorial-mvc-no-flex-entendendo-a-logica/

Depois dos links acima vamos às minhas conclusões feitas sobre o MVC

Antes de qualquer coisa entenda uma coisa MVC <> programação em Camadas, Dividir em camadas estamos apenas organizando nossos componentes (no nosso caso OO normalmente as classes) e MVC é uma arquitetura ou|e padrões de projeto que mostra como devemos interagir com os nossos componentes para que fiquem menos acoplados e ajude na organização e manutenção dos nossos componentes.

Ok, você continua não entendendo o que é MVC, vamos então simplificar as coisas respondendo algumas Perguntas:

Pergunta 1

Janderson, eu tenho um site em JAVA que acho que está com arquitetura MVC, a arquitetura é a seguinte: tenho a View (JSP), Controller (httpService) e tenho a Model (DAO), isso é MVC?

Depende. Se sua JSP em hipótese nenhuma se comunica com a DAO, se o Httpservice pega informação do JSP e passa para a DAO ou da DAO passar para o HttpService e sua DAO enviar informação para JSP(não recomendado), a reposta é SIM.

View envia dados para Controller

Controller se comunica com View e Model

Model envia dados para Controller e View

Ou seja, se você respeitar o que cada Letra do MVC é responsável você estará usando MVC

Pergunta 2

Janderson, tenho um sistema feito em Java cuja camada de apresentação é em flex, arquitetura é a seguinte: CAMADA DADOS(Arquitetura DAO [JAVA]), CAMADA NEGÓCIO(arquitetura SOA[JAVA]) e CAMADA APRESENTAÇÂO(arquitetura MVC [FLEX]), posso considerar o meu MVC certo mesmo que ele esteja em apenas uma camada do meu projeto?

SIM. São em exemplos um pouco maior como este que entendemos melhor o que é ARQUITETURA MVC, MVC não tem nada haver com camadas, mais sim com um modelo(Design patterns) para mostrar como vamos interagir com os nossos componentes. Neste caso específico nossa model poderia ser uma classe que mapearia ou se comunicaria com um WebService ou RemoteObject para acessar nossa camada de NEGÓCIO ( que por sua vez se comunicaria com a de DADOS), a Controller seria os eventos e ações da tela e a View nosso MXML.

Resumindo

Model <> DAO mesmo que sua DAO seja a Model, ou seja, a DAO é responsável por gravar e ler os dados enquanto a Model é responsável por pedir para alguém para fazer isso, pode pedir para um Objeto remoto, para um WebService ou para própria DAO.

Controller é a responsável por fazer a interseção entre a View e a Model, pegando requisições da view e passando para a Model que por sua vez contendo a informação (não interessa como) pedida pela Controller retorna para a Controller ou para a própria View a informação desejada.

View só vai conter o código necessário para apresentação com o usuário e vai conhecer a controller para solicitar algo que seja necessário para o usuário, ou seja, se precisa de algo pede para Controller fazer e espera resposta do mesmo.

Por mais que tentamos mostrar na prática sempre vamos voltar um pouco para teoria já que MVC é um conceito e não um modelo exato de como você vai fazer. Existe N maneiras de arquitetar um MVC, o importante é que você sempre lembre o objetivo do MVC, assim você estará sempre usando MVC independente de camada, ferramentas,Frameworks ou não, linguagens...

Espero que ajude alguém e até a próx.

Popularity: 17% [?]

o Primeiro Projeto está nascendo

novembro 11th, 2008, posted in Adobe Flex, AmfPHP, Data Service, PHP, Projetos, Pronunciamento

Galera, só para aumentar a curiosidade de vocês, o nosso primeiro projeto está em fase de edição, o que posso adiantar para vocês é que vai ser com PHP + AmfPHP + ActionScript 3.0 + Adobe Flex.

Lembrando que ainda não inaugurei o blog, coloquei no ar mais ainda falta ajustar algumas coisas, se gostar do material que aos poucos vou publicando passem os links dos posts para frente, vamos agradecer a ajuda de todos.

Aceito parcerias em desenvolvimento para a comunidade Flex, essa comunidade que tanto me ajuda ( Amo Vocês :-) ), qualquer coisa é só deixar um comentário que vamos procurar conversar e amadureceer a idéia, também tenho 3 espaços para publicidade 125 x 125, por enquanto para quem falar sobre adobe flex vou estar disponibilizando gratuitamente, mais lembre-se, são só 3 então o quanto antes me procurar eu estarei colocando o seu Banner, ok!

Bem no mais seja bem vindo ao blog saberprogramar.com, em breve estarei inaugurando com o nosso primeiro projeto que vai além do "olá mundo" e vc vai aprender aqui como usar todas as "sopinhas de letras" que envolvem o dia a dia de um programador!

Vlw e até a próx.

Popularity: 4% [?]