Postado por Ricardo Falasca em PHP | Data: 19/08/2010
2
Precisei há alguns dias converter páginas HTML para PDF em PHP, pesquisei um pouco (sim, só um pouco) e acabei optando pela solução que se mostrou mais relevantes nas pesquisas (google): DOMPDF.
Na verdade a necessidade inicial era gerar PDF’s com conteúdo simples, basicamente textos e algumas imagens. Comecei a ler o manual de PDF do PHP.net e percebi que as funções PDF do PHP (que usam PDFLib) apesar de possibilitar tratamento quase que completo de um PDF, é extremamente braçal, frustrando assim minha idéia de agilidade no desenvolvimento da solução que eu precisava. Enfim, sem mais delongas, baixei a versão atual do DOMPDF (0.6.0 beta1) e com alguns passos simples consegui gerar o PDF.
Ah, uma informação importante, acabei deixando sem imagens por enquanto, pois quando uso a engine CPDF para gerar o PDF, o Adobe Reader não consegue abrir os arquivos (ainda não descobri o motivo) então acabei optando por gerar com PDFLib, no qual tem alguns problemas para adicionar as imagens no PDF. Em breve eu vou solucionar este problema e atualizo este post.
Primeiro passo: Download
baixar os códigos-fonte do DOMPDF (Google Code)
Postado por Ricardo Falasca em PHP | Data: 18/06/2010
1
Sinceramente não sei qual a demanda para uso de WebServices (SOAP) em PHP, mas sei da dificuldade da compatibilidade quando há a necessidade de consumir o WSDL gerado para a aplicação respectiva, afinal a extensão SOAP nativa do PHP não possui tal recurso, visto que o PHP é uma linguagem que não possui definição explícita de tipos. Sem muita enrolação, após algumas pesquisas encontrei um conjunto de classes PHP chamado NuSOAP que possui método para geração do WSDL seguindo as especificações do W3C, inclusive resolvendo uma preocupação que eu tinha, que era o retorno de um array (complexType) ao invés de um simples integer ou string.
Well… here we go! Abaixo um exemplo simples de geração de WSDL com o NuSOAP, a documentação é bem completa, apesar de pouco explicativa, então boa sorte caso queira se aventurar! :D
Obs.: estou considerando que vc tenha baixado o toolkit NuSOAP, com Apache e PHP devidamente configurados e esteja no diretório corrente publicado em “http://localhost/”.
Crie um arquivo “servidor.php” e coloque o conteúdo abaixo:
-
<?php
-
require_once(‘lib/nusoap.php’);
-
// instanciando um servidor SOAP
-
$servidorSoap = new soap_server();
-
// inicializando suporte ao WSDL
-
$servidorSoap->configureWSDL(‘autenticacaowsdl’,
-
‘urn:autenticacaowsdl’);
-
// nome do método a ser chamado
-
$servidorSoap->register(‘autenticacao’,
-
// parâmetros de entrada do método ‘autenticacao’
-
array(‘usuario’ =>
‘xsd:string’,
‘senha’ =>
”xsd:string
),
-
// parâmetros de saída (retorno do método)
-
array(‘return’,
‘xsd:integer’),
-
‘urn:identificacaowsdl’, // nome de ambiente do webservice (<em>tns</em>)
-
‘urn:identificacaowsdl#identificacao’, // URL do serviço
-
‘rpc’, // estilo do WSDL, <em>rpc</em> ou <em>document
-
</em> ‘encoded’, // option SOAP transport
-
‘retorna 0 ou 1.’ // documentação
-
);
-
// definição do método como função PHP
-
function autenticacao($login, $senha){
-
return (($login == "ricardo") && ($senha == "falasca"))?0:1;
-
}
-
// invocando o serviço
-
$servidorSoap->service($HTTP_RAW_POST_DATA);
-
?>
Agora, crie um arquivo “cliente.php” e use o conteúdo abaixo:
-
-
<?php
-
require_once(‘lib/nusoap.php’);
-
// instanciando um cliente SOAP
-
$clienteSoap = new soap_client(‘http://localhost/servidor.php?wsdl’,
-
true);
-
// verificação de erro
-
$erro = $clienteSoap->getError();
-
if ($erro){
-
printf("<pre>%s</pre>",
$erro);
-
-
}
-
$retorno = $clienteSoap->call(‘identificacao’,
-
array(‘usuario’ =>
‘ricardo’,
-
‘senha’ => ‘falasca’));
-
-
?>
Para maiores detalhes você pode acessar pelo navegador o módulo servidor (servidor.php), ele irá gerar informações legíveis para um melhor entendimento da implementação!
Referências:
NuSOAP – SOAP Toolkit for PHP
PHP – WebService (SOAP) (sem suporte a geração de WSDL)
Automatic WSDL Generation (classe PHP para geração de WSDL baseado em documentação do código)
That’s all folks! :D