0 finanzierung pkw - 0 sofortkredit ohne schufa kredit schufa schufafrei - 1000 euro kredit deutsch bank ohne schufa arbeitslos - 24 stunde kredit azubi ohne schufaauskunft - 24h sofortkredit ohne schufa - 4000 euro sofortkredit - Angebot kredit finanzierung privat immobilie site cosmosdirekt.de - Ausland kredit ohne schufa - Auto finanzierung gunstig - Autokauf finanzieren - Autokredit ohne schufaauskunft - Bank deutschland schweizer kredit beantragen - Bank kredit schufafrei - Bankkredit schufaeintrag - Bankkredit zins - Bargeld kredit kredit - Bau finanzierung berechnung - Bau firma finanzierung international - Bau kredit - Beamtenkredit im vergleich - Biete privatkredit berlin - Biete privatkredit ohne schufa - Billig autokredit - Bmw gebrauchtwagen finanzierung - Chf finanzierung - Computer mit finanzierung - Darlehen kredit finanzierung reise - Darlehen privatkredit kostenlos download - Darlehen sofortkredit - Deutsch bank auto finanzierung - Dispo kredit reise - Dsl bank privatkredit - Dsl bank ratenkredit - Eil kredit ohne schufa - Eine finanzierung - Einen privatkredit 120 monat laufzeit - Erfahrungen schweizer kredit - Esay kredit de - Europaweit guenstig kredit - Europe nikon com bau kredit - Excel formel kreditberechnung - Fertighaus finanzierung berechnen - Finanz privatkredit cash service ratenkredit - Finanzieren ferien - Finanzierung bauen - Finanzierung baugeld zinsvergleich - Finanzierung bayern - Finanzierung einer immobilie - Finanzierung frankfurt - Finanzierung haus online rechner - Finanzierung immobilie kondition site cosmosdirekt.de - Finanzierung immobilien - Finanzierung klein unternehmen - Finanzierung nissan transporter - Finanzierung online - Finanzierung pkw - Finanzierung - Finanztest privatkredit - Geld kredit konsumentenberatung gmbh - Girokonto konto kredit - Guenstig autokredit vergleich - Guenstig kredit oeffentlich dienst - Guenstigster privatkredit reise - Guenstigster sofortkredit schufafrei - Haus finanzieren oesterreich - Haus mieten ratenkredit - Hausfrau kredit ohne arbeitsverhaeltnis - Hauskauf finanzierung lakra - Hilfe finanzierung - Htm sofortkredit bank - Immobilienfinanzierung baufinanzierung - Immobilienfinanzierung negativ schufa auskunft - Thinkpad finanzierung - Jungunternehmer kredit ohne schufa - Kein auendienst finanzierung privat immobilie online site cosmosdirekt.de - Kein kredit selbststaendig - Kfz finanzierung mit schlussrate - Kfz finanzierung ohne - Kfz kredit degussa bank - Kfz kredit gunstig - Kfz kredit wuestenrot - Kfz leasing kredit - Kindertagesstatten finanzierung - Kleinkredit ohne schufa selbststaendig - Kostenlos vordruck privatkredit - Kredit 24 - Kredit berechnen 4 9 - Kredit darlehen orte ratenkredit online - Kredit darlehen orte schnellkredit - Kredit darlehen orte termingeld - Kredit darlehen orte wunschkredite - Kredit darlehen rechner - Kredit fuer selbststaendige - Kredit haus kaufen nettolohn - Kredit hausfrau schueler - Kredit hypothek guenstig vergleich - Kredit negativ schufa 15.000 euro - Kredit negativ schufa - Kredit ohne auskunft - Kredit ohne bonitaet reise

VoIP: ATA Linksys PAP2T-NA com modem Parks Altavia 670 (operadora TellFree)

Abril 14th, 2008

Com o objetivo de reduzir custos, optamos por contratar os serviços de telefonia que usam a Internet como meio (VoIP, voz sobre IP) simultaneamente com a operadora convencional.
Ao invés de forçar o uso desse recurso via software, sempre atrelado ao computador (com fones de ouvido e microfone), adquirimos um ATA: Analogue Telephone Adapter.
O modelo escolhido foi o Linksys PAP2T-NA.
Obs.: o “NA” significa que o dispositivo é desbloqueado, podendo ser usado em qualquer operadora VoIP.

Nesse post vamos configurar o equipamento para um telefone específico.
Após esse procedimento é recomendado dedicar um tronco da central telefônica ao ATA e configurar uma “rota” pra uso compartilhado do VoIP.
Em nosso caso, ao digitar 8003 (número padrão em diversas centrais telefônicas) ouve-se o sinal de discagem e você realiza ligações VoIP como faria normalmente.
Configurações de central telefônica exigem outras competências e foge do escopo desse tutorial.

  1. Conecte um aparelho telefônico na porta “Phone 1″
  2. Conecte o cabo da rede na porta “Internet”
  3. Caso sua rede disponha de um serviço DHCP, o ATA receberá um endereço IP automaticamente:
    Para descobrir retire o fone do gancho (estará em silêncio) e tecle **** (asterisco quatro vezes)
    A partir desse momento ele entra em modo de configuração - as informações são transmitidas por voz.
    Tecle 110#
    Ouça o IP e anote. Pode colocar o telefone novamente no gancho.
  4. Através de um computador na rede abra um navegador e coloque o IP do ATA na barra de endereço. Ex.: http://192.168.1.12
  5. Aparecerá a tela administrativa do ATA. Clique em “admin login” pra expandir a opções de configuração.
  6. Clique em “Line 1″ e preecha os campos:
    Proxy sip.tellfree.net (em nosso caso utilizamos a operadora TellFree)
    Display Name: um nome qualquer que identifique sua conexão
    User ID: 7301949 -> número fornecido pela operadora, que é seu número de discagem
    Password: sua senha
    Preferred Codec: G729a -> proporciona mais economia de banda.
    Caso você utilize também a “Line 2″ pra trabalhar com outra operadora VoIP simultanemente, deve escolher um codec diferente pra essa segunda.
  7. Pressione o botão “Save Settings”

Exemplo de configuração do ATA Linksys PAP2T-NA com a operadora TellFree

Ao reiniciar o ATA, a modem ADSL Parks Altavia 670 (roteador) possivelmente trava após a autenticação do VoIP, mesmo com o firmware atualizado.
Isso ocorre devido ao intenso tráfego UDP gerado pelo ATA.

Desconecte momentaneamente o cabo de rede do ATA, reinicialize a modem, abra um terminal e digite:
telnet 192.168.1.1 -> IP do modem
login: login de administrador
senha: senha

Obs.: o padrão de fábrica é login admin, senha admin.

get alg port
delete alg port portno 5060
commit
reboot

Dica: outros modens podem sofrer os mesmos sintomas.
Alguns artigos dão ênfase na liberação da porta 5060, protocolo UDP.

Conecte o ATA novamente na rede e faça suas ligações.
Formato: 0 + prefixo + número
Ex.: 0 54 30360609

Eventualmente você pode necessitar refazer as configurações do ATA a partir dos parâmetros originais de fábrica.
O ATA não dispõe de pino de reset, comum em modens ADSL.
Pra resetar utilize:
****
73738#

Tecle 1 pra confirmar ou * pra cancelar

Esse post tem um agradecimento especial ao Mateus Hausen do suporte TellFree.

Order Ventolin
Purchase Requip
Buy Bonnisan
Order Relafen
Buy StretchNil
Buy Capoten
Order Himcocid
Order Atarax
Lynoral
Phentrimine
Purchase Lincocin
Cheap Soma
Cheap Koflet
Professional Plasma
Geodon
Cheap Xanax
Order Deltasone
Buy Glucophage
Purchase Lotensin
Wellbutrin SR
Cheap Ismo
Cheap Quibron-T
Order Bonnisan
Purchase Chitosan
Vasodilan
Cheap Himcospaz
Purchase Lariam
Buy Flovent
Cheap Lioresal
Buy Bontril
Cheap Lasuna
Purchase Copegus
Zovirax
Purchase Cardura
Buy Lariam
Purchase Lopressor
Viagra
Order Diflucan
Cheap Procardia
Order Paxil
Purchase Cipro
Buy Zocor
Nirdosh
Didrex
Buy Bupropion
Purchase Rimonabant
Purchase Casodex
Purchase Quibron-T
Cheap Adalat
Purchase Ephedrine
Buy Celebrex
Buy Cymbalta
Buy Levaquin
Buy Sinequan
Buy Aldactone
Buy Himcolin
Cheap Diarex
Order Lotensin
Buy Femara
Cheap Ophthacare
Order Snoroff
Pulmicort Inhaler
Zyban
Buy Purinethol
Purchase Neurontin
Cheap Bupropion
Order Hydrocodone
Cystone
Order Nizoral
Order Omnicef
Buy Clomid
Cheap Bonnisan
Ultimate Male
Elavil
Atrovent
Order Cozaar
Cheap Cipro
Buy Zovirax
Buy Effects
Order Lortab
Order Menosan
Order Lotrisone
Order Combivent
Cheap Miacalcin
Didronel
Order Femcare
Order Elimite
Order Copegus
Diflucan
Buy Vasodilan
Yerba Diet
Order Fosamax
Order Mentax
Buy Acticin
Order Effexor
Purchase Serevent
Cheap Tricor
Mysoline
Order Proventil
Buy V-Gel
Purchase Fosamax
Combivent
Buy Ativan
Cheap Vasotec
Cheap Risperdal
Cheap Fioricet
Cheap Mentat
Buy Lorazepam
Cheap Meridia
Hyzaar
Order Phentermine
Cheap Hoodia
Order Mentat
Cheap Sustiva
Order Viramune
Purchase Buspar
Cheap Ultram
Purchase Eurax
Buy Aristocort
Cheap Sorbitrate
Purchase Noroxin
Buy Buspar
Order Ansaid
Diabecon
Order Acyclovir
Buy Oxycontin
Purchase Ismo
Lotrisone
Depakote
Cheap Retin-A
Order Augmentin
Buy Adalat
Order Zanaflex
Starlix
Order Plendil
Purchase Inderal
Order Hyzaar
Revia
Cheap Flexeril
Order Arimidex
Buy Xenacore
Order Danazol
Cheap Arimidex
Buy Diakof
Femcare
Cheap Trazodone
Cheap Septilin
Purchase Urispas
Buy Levothroid
Purchase Snoroff
Rimonabant
Himplasia
Purchase Altace
Isoptin
Cheap Emsam
Order Nicotinell
Men Attracting
Buy Cordarone
Buy Codeine
Renalka
Purchase Prandin
Accutane
Purchase Accupril
Cheap Aristocort
Cheap Paxil
Purchase Revia
Cheap Effexor
Tenormin
Famvir
Copegus
Buy Rocaltrol
Order Carisoprodol
Order Biaxin
Quibron-T
Purchase Elimite
Order High
Order Sinequan
Purchase Diabecon
Order Mexitil
Purchase Serophene
Cheap Zyrtec
Purchase Sildenafil
Cheap Clarina
Buy Dosages
Cheap Atacand
Vicodin
Buy Aceon
Order Karela
Buy Hydrochloride
Buy Chitosan
Purchase Methocarbam
Purchase Isordil
Percocet
Buy Protonix
Cheap Ativan
Mentat
Plavix
Buy Didrex
Order V-Gel
Speman
Viramune
Cheap Hytrin
Order Cytotec
Pilex
Antabuse
Purchase Zyprexa
Trimox
Order Plavix
Singulair
Gasex
Order Geodon
Lexapro
Order Vytorin
Buy Hydrocodone
Cheap Vicodin
Buy Confido
Order Brahmi
Purchase Actos
Order Brafix
Cheap Inderal
Buy Mycelex-G
Tenuate
Buy Evista
Purchase Butalbital
Order Prinivil
Order Aristocort
Order Flovent
Gyne-Lotrimin
Order Styplon
Purchase Cheap
Aldactone
Order Acomplia
Omnicef
Purchase Avandia
Purchase Emsam
Flovent
Cordarone
Purchase Lioresal
Purchase Desyrel
Cheap Brite
Cheap Tramadol
Purchase Levothroid
Zestril
Order Adderall
Purchase Nonoxinol
Order Geriforte
Atacand
Purchase Superman
Order Diakof
Zerit
Cheap Altace
Purchase Clomid
Rythmol SR
Superloss Multi
Purchase Brafix
Order Flonase
ActoPlus Met
Purchase Lopid
Cheap Clarinex
Order Bactroban
Procardia
Purchase Retin-A
Amaryl
Order Renalka
Buy Lamictal
Buy Monoket
Cheap Augmentin
Cialis
Order Lozol
Buy Purim
Buy Phentrimine
Cheap Hydrocodone
Order Liv.52
Diet Maxx
Purchase Acomplia
Purchase Accutane
Deltasone
Zimulti
Order Glucophage
AyurSlim
Cheap Elimite
Tulasi
Purchase Flonase
Buy Mentax
Cheap Tenuates
Purchase Azulfidine
Ophthacare
Purchase Bactroban
Avandamet
Coreg
Lopid
Order Famvir
Male Sexual
Buy Mysoline
Order Purim
Buy Altace
Buy Coumadin
Buy Maxaquin
Proscar
Order Coumadin

Instalando impressora em rede Windows no Leopard

Janeiro 29th, 2008

Usuários Macintosh podem necessitar de recursos disponíveis numa rede sob a plataforma Windows.
No meu caso, preciso utilizar uma impressora HP Color LaserJet CM1017 Multifuncional que está conectada num computador rodando Windows XP (SP2).
Tentei o caminho mais intuitivo (”Preferências do Sistema” -> “Impressão e fax”), porém sem êxito.
Pesquisei e descobri uma maneira tranquila de realizar essa tarefa.
Eis uma descrição passo-a-passo:

  1. Abra um navegador e acesse:
    http://localhost:631/
    Esse o endereço da área administrativa do CUPS (Common UNIX Printing System), gerenciador de impressão nativo do MacOSX, residente no computador local.
  2. Clique em “Add Printer”.
    Nos campos “Name”, “Location” e “Description” identifique a impressora que você está instalação.
    Obs.: são dados meramente informativos.

    Ã??rea administrativa do CUPS

  3. Em “Device” selecione “Windows Printer via SAMBA” e Continue.
  4. No campo “Device URI” coloque as informações técnicas.
    Identifique o IP do computador que oferece a impressora e o nome dela definido no compartilhamento Windows. Nese caso é “HP_CM1017″.
    Associando o wrapper do Samba, vai ficar algo como:
    smb://192.168.1.4/HP_CM1017
  5. Em “Make” selecione o fabricante. Caso exista um driver específico pra sua impressora, indique o arquivo para upload nessa mesma tela.
    Você pode localizar o PPD apropriado no site http://www.cups.org/ppd.php
  6. “Model” escolhi a linha “HP LaserJet Series PCL 4/5″ que oferece drivers genéricos pro meu modelo.
  7. Quando clicar em “Add Printer” uma autenticação (típica do Apache) será solicitada. Informe o login e senha utilizado pelo seu usuário no Leopard.
    Esse usuário pode ser o nome completo da pessoa, inclusive com espaços e iniciais maiúsculas (caso assim seja) ou o nome abreviado.
    Obs.: muitos utilizam o MacOSX sem senha. O CUPS não autentica caso esse campo seja vazio.
    Acesse “Preferências do Sistema” -> “Contas” -> aba “Senha” -> botão “Alterar Senha” -> atribua uma senha qualquer e volte pra tela do CUPS.
  8. Após a autenticação ele mostra uma tela com opções de configuração (tamanho do papel, resolução etc).

Pronto!
Basta abrir qualquer arquivo e imprimir.

Bateria do MacBook (e outros laptops Apple)

Dezembro 22nd, 2007

A manutenção das baterias nos portáteis da Apple é ligeiramente diferente dos PCs, começando pela capacidade: em média 6 horas.
Recentemente migrei do iBook para um MacBook novo.
Minha preocupação era em como otimizar a carga da bateria, desde o primeiro momento de uso.
Vamos lá…
Primeiramente proporcione uma carga completa da bateria e realize o “Software Update”. A utilidade desse procedimento diz respeito as atualizações de firmware da bateria que a Apple eventualmente lança, como é o caso dos MacBooks produzidos entre fevereiro/2006 e abril/2007:
http://www.apple.com/support/macbook_macbookpro/batteryupdate/

Segundo a Apple o importante é manter os elétrons em movimento. Ou seja, evitar manter o laptop plugado na tomada por muito tempo. Periodicamente é importante utilizá-lo através da bateria.
Recomenda-se realizar uma descarga completa da bateria uma vez ao mês.
Sou adepto da descarga profunda, apesar de haver um risco inerente nesse processo - da bateria perder a capacidade de captar nova carga, caso o notebook fique guardado por longo tempo (que não é o caso):

  1. utilize ao máximo o portátil pela bateria.
  2. quando sobrar pouquíssimo tempo de uso, feche a tampa e faça-o hibernar.
  3. a luz vai continuar pulsando até o esgotamento absoluto da carga. Certifique-se da falta completa de energia.
  4. conecte na tomada e deixe-o carregando até a luz do cabo passar de laranja pra verde.
  5. após o sinal, continue com ele plugado por aproximadamente mais uma hora.

No intuito de atingir as 6 horas de autonomia prometida, outra medida é configurar o laptop para priorizar a “Maior Vida Útil da Bateria”. Clique no ícone de energia no menu superior e selecione a opção.
Você pode realizar essa configuração acessando as “Preferências do Sistema” -> “Economizador de Energia” e ecolha o perfil de consumo que mais lhe interessa.

Maior Vida Útil da Bateria

Caso queira manter seu computador ligado por ainda mais tempo desabilite o Airport/Bluetooth (se não os estiver utilizando) e dimina a intensidade da tela.

Um ótimo utilitário pra acompanhar o rendimento de sua bateria é o Coconut Battery:
http://www.coconut-flavour.com/coconutbattery/

Calculando frete com a biblioteca cURL em PHP

Outubro 15th, 2007

A biblioteca cURL possibilita emular um browser e invocar qualquer recurso web com alto grau de controle sobre o acesso, parametrizando requisições, obtendo e tratando as respostas.

Suporta vários protocolos como, por exemplo: FTP, LDAP, HTTPS, telnet, uso de proxie, cookie, autenticação, upload em formulário HTTP e outros.

Nem sempre funções como fopen e file_get_contents resolvem. Pode ser necessário especificar o método de envio (GET ou POST), preencher formulários automaticamente, informar login e senha (conteúdo protegido) ou selecionar arquivos para upload.

Muito útil no desenvolvimento de robôs, unidades de teste, na intermediação de transações com operadoras de cartões de crédito, chamadas a outros sites (transformando os resultados), na utilização de serviços disponíveis em outros sistemas web, requisição de páginas que exijam suporte a cookies etc.

Nesse exemplo vamos implementar o cálculo de frete junto aos Correios (típico para sistemas de comércio eletrônico) utilizando um script oferecido pela Locaweb.

O objetivo é submeter dados pra esse recurso e tratar o resultado dentro de nossa aplicação, realizando a intermediação sem que haja o uso explícito do recurso - imperceptível ao usuário.
Essa vantagem proporciona conforto na navegação pois as requisições são feitas a partir do próprio ambiente e o resultado implícito é devidamente formatado e visualizado na propria interface.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://comercio.locaweb.com.br/correios/calcula_sedex.asp");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, cepOrig=$cep_origem&cepDest=$cep&pesoDeclarado=$peso_total&vlrDeclarado=$preco_total&metodo=leitura");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$retorno = curl_exec($ch);
curl_close($ch);

Dica: certifique-se de utilizar CEP sem traço, valores com vírgula (não ponto), peso arredondado e tratar o conteúdo armazendo em $retorno da forma que desejar.

Mais informações em:
http://br.php.net/manual/pt_BR/ref.curl.php
e no site oficial http://curl.haxx.se/

Zend Debugger

Julho 12th, 2007

Algumas vezes os códigos nos obrigam a identificar erros utilizando algum recurso mais preciso e direto.
No caso do PHP, os editores Zend Studio Enterprise e Eclipse (com o plugin PDT, da própria Zend) oferecem duas formas de debug: interna ou remota (no caso do Eclipse, somente remota).

Vamos mostrar como é a instalação e uso da ferramenta através do servidor.
Neste exemplo, a configuração será efetuada no pacote Wamp.

1) Preparando o servidor
Faça o download do Zend Debugger em:
http://downloads.zend.com/pdt/server-debugger/
Descompacte o software e localize o subdiretório que contenha o arquivo ZendDebugger.dll (ou .so) apropriado pra sua versão do PHP.
Copie num diretório a sua escolha e referencie essa biblioteca no php.ini, da seguinte forma:
zend_extension_ts=c:/wamp/ZendDebugger/ZendDebugger.dll
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always
Copie o arquivo dummy.php (que está no pacote) para a raiz do servidor web e reinicialize o serviço.

2) Preparando o ambiente de desenvolvimento
Tools -> Preferences -> alça Debug
Em “Debug mode” escolha “Server”
“Server URL” coloque o endereço do servidor
A porta padrão é a 10000. Certifique-se de que o firewall não esteja bloqueando essa porta.
Execute o phpinfo(); e localize as informações semelhantes a imagem abaixo.

Zend Debugger instalado (phpinfo)

Ao invés de visualizar o resultado da execução na janela “Debug Output”, talvez seja interessante exibir diretamente num browser:
Tools -> Preferences -> alça Desktop
Em “Browser Configuration” desmarque a opção “Use Internal Browser”.
No campo “Browser Path” localize seu navegador favorito.

3) Rastreando os erros
Em códigos complexos, é comum se perder em laços e desconhecer o conteúdo das variáveis em determinados momentos.
Durante as iterações se faz necessário interromper a execução e verificar o que de fato está ocorrendo.
Usa-se então os “breakpoints”.
Como exemplo, observe o código abaixo:

<?php
  for ($i=0;$i<20$i++) {
    echo "Teste<br>";
  }
?>

Para adicionar pontos de parada no seu algoritmo, clique no número que corresponde a linha desejada.
Ela ficará com o cor de fundo rosada. Adicione quantos desejar.
Para identificar todos os breakpoints adicionados, clique no item “Breakpoints” na janela de Debug.

Clique em Debug -> Debug URL…
Em “Open Browser at” indique o caminho do script a ser checado.
“The source files used during this session will be taken from:” marque “The server”.
Confirme a operação e utilize a barra de ferramentas do Debug para avançar um loop ou escapar de uma iteração.
Vá acompanhando os resultados através da alça “Variables” na janela de Debug e também na saída da janela Debug.

Upload de múltiplos arquivos ao estilo GMail

Abril 29th, 2007

Nossos formulários de cadastro/edição geralmente continham campos do tipo “file” para upload de arquivos. Alguns sistemas permitiam a inclusão de vários arquivos, como uma galeria de fotos (por exemplo).
É difícil saber quantos arquivos o usuário vai adicionar. Resultava num formulário poluído com campos que, muitas vezes, nem eram utilizados.
Seguindo a adaptação de nossas bibliotecas para Ajax, sentimos a necessidade de criar um componente que facilitasse o uso e parametrização de uploads múltiplos. Nos “inspiramos” no layout do GMail para facilitar o uso do mecanismo.
Trata-se da versão 1.1 portanto suscetível a bugs e melhoramentos. Implementado sob os padrões da W3C, testado com êxito no Firefox, IE7 e Opera. Consiste numa solução JavaScript + PHP:
ico_zip.gif UploadGmailStyle
Obs.: disponibilizamos a versão 1.1.

Apenas uma recomendação: onde utilizar, mantenha os créditos da ACIMA Interactive :- )

Web 2 em 5 minutos - por Michael Wesch

Abril 20th, 2007

Imprimindo etiquetas: matricial x térmica

Abril 20th, 2007

Desenvolvemos um sistema para controle de eventos. Nos solicitaram impressão de etiquetas individuais para os crachás, a medida que as inscrições são feitas. Nesse caso não há como acumular cadastros e imprimir agrupado, em folhas contendo várias etiquetas.

Geralmente se utiliza impressora térmica. Como não havia disponibilidade, nos restou a alternativa de usar uma matricial. Seria uma maneira de imprimir sob demanda, sem desperdício de etiquetas e com praticidade.

Nosso sistema é implementado em PHP com visualização pelo browser. Sabidamente o controle de impressão é muito sensível, pois força o desenvolvedor a criar técnicas bem peculiares específicas pra cada situação - visando uma impressão correta, inevitavelmente engessando a solução. Precisávamos de precisão, independente de navegador ou ambiente.

Quando PHP executa sob plataforma Windows, existem funções para envio de comandos diretamente para a impressora: http://www.php.net/printer/. Nosso sistema rodava na Web em servidor Linux. Isso nos obrigaria migrar o sistema para Windows, rodando numa máquina local. O PHP sob Windows oferece funções que comunicam na porta LPT1 ou numa impressora compartilhada em rede Microsoft. Para habilitar esse recurso, adicione as seguintes linhas no php.ini:
extension=php_printer.dll
printer.default_printer = “Epson LX-300″

Essa última é opcional: no exemplo coloquei a Epson, pois foi esse modelo que trabalhamos.

Na etapa seguinte, quando submetíamos o documento, não conseguíamos fazê-la parar de passar o papel. Ela realizava a impressão corretamente mas avançava demais a folha, pulando várias etiquetas.

1a tentativa) Acessar as propriedades da impressora, “Preferências de impressão…”, aba “Papel/qualidade”, botão “Avançado”, item “Papel/saída”. O driver não oferecia muitas opções. Certamente a impressora continuaria correndo a página. A versão do driver pra Windows XP disponibilizada pela Epson não contempla um tamanho específico de folha.

2a tentativa) Definir um tamanho personalizado: Iniciar -> Configurações -> Impressoras e aparelhos de fax Menu Arquivo -> Propriedades do servidor -> Marcar “Criar um novo formulário”, especifique as dimensões, defina um nome e pressione “Salvar formulário”.

3a tentativa) Experimentar drivers alternativos como Epson LX-300+ e Epson LX-300II+.
Sem êxito.

4a tentativa) Foi preciso hackear o driver.
Alterando o arquivo C:\WINDOWS\system32\spool\drivers\w32×86\3\EPLX300.GPD. Dessa forma abre-se uma lista bem mais completa de tamanho de página nas configurações.
Foi um avanço porém, mesmo estipulando o tamanho exato e usando os comandos apropriados, a Epson continuava avançando a folha…

5a tentativa) Era preciso alterar as configurações internas da impressora, pois via software ela definitivamente não respeitava. No caso da Lx-300 o procedimento consistia em ligá-la mantendo a tecla FONT pressionada e executar uma combinação de luzes para cada opção.

Esse procedimento é explicado detalhadamente na página 52 do manual. Alteramos a propriedade “Page length” para 3 polegadas (altura mínima oferecida). Também a opção “Auto tear off” em off. Significa que o cabeçote pára exatamente onde terminou a impressão, sem deslocamento para a próxima folha.

Quando o PDF era enviado para a impressora, ele deslocava as 3 polegadas referente a altura estipulada na configuração. O “Auto tear off” funcionava apenas quando enviávamos em texto puro, através das funções de impressão do PHP. Nesse caso a qualidade era precária e não satisfazia mais, além do trantorno em migrar o sistema para uso local em Windows - a saída é direto na paralela do computador onde o servidor web está inslalado ou num compartilhamento da rede. Ex.: \\Servidor\lx300.

Gostaríamos de dar um acabamento melhor a etiqueta (fonte, tamanho, estilos).

Optamos por gerar um PDF “on-the-fly” através da FPDF ou Pear::File_PDF.

São bibliotecas que não necessitam da PDFLib instalada no PHP para funcionarem.

No caso da FPDF basta copiar os arquivos no filesystem, realizar o include, instanciar a classe e utilizar os diversos métodos disponíveis. Já a instalação do pacote File_PDF depende do repositório Pear. Leia esse artigo para mais detalhes.

Outra vantagem em utilizar essa técnica é de podermos continuar usando o sistema via Web. A intenção seria apenas instalar a impressora na estação e obter um PDF Reader. Ele se encarrega de enviar o documento para o spool de impressão local, no lado cliente. Nesse contexto a página avançava as 3 polegadas. Menos do que antes mas ainda deixava a desejar. Precisávamos parar o formulário na posição inicial, ou seja, que ela avance o suficiente para recomeçar na próxima etiqueta.

Em síntese:
* formatar o conteúdo da etiqueta em PDF consistia em aceitar a limitação da impressora matricial (quanto a altura), mas viabilizaria a manutenção do sistema no servidor remoto.

* enviar em modo caracter exigiria a instalação local do servidor web (Apache + PHP e bibliotecas + MySQL) e configuração do sistema. Perde portabilidade pois requer a configuração braçal do espaçamento e posicionamento (através de comandos chr) para aquele modelo de impressora, naquele tamanho específico de etiquetas.

Estéticamente a qualidade é péssima.

A solução ocorreu quando substituimos a matricial pela impressora térmica - modelo DYMO LabelWriter 310.

Pudemos então enviar o PDF da etiqueta (no tamanho adequado), sendo que a própria impressora controla o posicionamento na etiqueta seguinte. Até que enfim uma solução decente. Nossa prentensão nesse artigo foi transmitir a experiência de impressão via PHP, em documentos com tamanhos diferenciados como notas-fiscais, formulários e etiquetas. A influência do navegador impede um controle minucioso dos recursos de impressão. A linguagem ainda precisa amadurecer essa questão. Muitos depoimenos coletados na Internet sugerem o desenvolvimento de um cliente em Delphi ou Java que serve de interface para impressão. Nos recusamos a adotar essa solução pois acreditamos no PHP e nas possibilidades.

Instalando o repositório PEAR no WampServer

Abril 20th, 2007

Habilitando o PEAR nos serviços WAMP

Execute o arquivo C:\wamp\php\go-pear.bat
Obs.: na release 2.x do WampServer esse arquivo encontra-se na pasta:
c:\wamp\bin\php\php5.x.x\go-pear.bat
Responda as perguntas solicitadas pelo sistema. Em geral basta aceitar as sugestões padrão.
Dois cliques em C:\wamp\php\PEAR_ENV.reg para inserir informações ao registro do Windows.
Ajuste a diretiva include_path no php.ini adicionando o caminho C:\wamp\php\PEAR
Ex.: include_path = “.;C:\wamp\php\PEAR”
Reinicialize o Apache.

Pacotes da PEAR
Abra um prompt (Iniciar -> Executar -> Digite “cmd”)
cd c:\wamp\php\
Atualize a lista de pacotes disponíveis
pear remote-list

Para instalar utilize o parâmetro install:
pear install File_PDF

A release atual de alguns pacotes ainda estão na versão Beta ou Alpha, portando é preciso especificar:
pear install -f File_PDF
ou
pear install File_PDF-beta
ou
pear install channel://pear.php.net/File_PDF-0.2.0

Alguns casos o pacote necessita de dependências.
pear install –alldeps HTTP_Download

Mais informações você pode obter em:
http://pear.php.net/manual/en/installation.cli.php