Clipper On Line • Ver Tópico - Criar arquivo.txt no Javascript e Imprimir...
Página 1 de 1

Criar arquivo.txt no Javascript e Imprimir...

MensagemEnviado: 20 Jan 2011 14:20
por ANDRIL
Pessoal, já procurei muito na net e os exemplos que achei não funcionaram. O problema é que tenho que imprimir uma O.S através de um sistema Web feito em PHP. Não sei se estou enganado mais o PHP é muito ruim para impressão Matricial, pois a impressora usada é uma de 40 colunas PARALELA. Se fosse usar outro formato, poderia imprimir atraves do próprio browse, mais isso não vem ao caso.

Ai pensei, gero o TXT da O.S, outro obstáculo do PHP, não consegui salvar o TXT no computador, grava somente no servidor web.

Então pensei, vou usar o JAVASCRIPT já que é client-side, porem, também não consigo gravar nada na máquina local usando IE nem o CHROME.

Alguém tem uma saída ai. Ja tentei usar em php a PHP_PRINTER.DLL, porem no meu servidor web não reconhece esta dll, embora rode a versao acima da 5.0 e pelo que vi esta foi inclusa apartir da versao 4.x

PS: acho que nestas linguagens Webs faltam principalmente a facilidade de impressão que nosso Clipper tem e sinto muito a falta disso.

Abraços

Re: Criar arquivo.txt no Javascript e Imprimir...

MensagemEnviado: 20 Jan 2011 16:02
por Toledo
Andril, dê uma olhada neste código que encontrei num outro fórum:

George Carvalho escreveu:Em um script PHP imprimo direto para a impressora na porta Lpt1 usando as linhas abaixo:

// NOME E LOCAL DO ARQUIVO TEXTO
$caminho = "C:\imprimir.txt";

// CRIA/ABRE O ARQUIVO IMPRIMIR.TXT E APAGA OS DADOS EXISTENTE
$fp = fopen($caminho, "w+");

$linha1 = "\r $valor_imp $data_validade $numero_ch_comp";
$linha2 = "\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n";
$linha3 = "\r\nImpresso por [var_nome_usuário]";
$linha5 = "\r\n [nome_filiado]";
$linha6 = "\r\n $matricula_imp $cpf";
$linha7 = "\r\n\r\n\r\n";
$salva = fwrite($fp, $linha1);
$salva = fwrite($fp, $linha2);
$salva = fwrite($fp, $linha3);
$salva = fwrite($fp, $linha4);
$salva = fwrite($fp, $linha5);
$salva = fwrite($fp, $linha6);
$salva = fwrite($fp, $linha7);

// FECHA O ARQUIVO IMPRIMIR.TXT
fclose($fp);

// ENVIA O ARQUIVO PARA PORTA LPT1
exec("copy " . $caminho . " lpt1:");

Fonte: ScriptBrasil - Imprimir arquivo texto usando PHP...

Abraços,

Re: Criar arquivo.txt no Javascript e Imprimir...

MensagemEnviado: 20 Jan 2011 16:53
por ANDRIL
Toledo obrigado pela resposta.

Infelizmente já havia tentado código semelhante ao seu post, sempre retorna:

Warning: exec() has been disabled for security reasons in /home/rrbrasil/public_html/site/impressao/imprime3.php on line 25

Vou entrar em contato com o suporte do provedor para ver se tem como habilitar esta função para que faça os testes. Já vi também em um forum, uma programadora que solicitou esse desbloqueio/permissão e o suporte do provedor negou dizendo que se liberasse o impresso seria encaminhado à impressora do servidor web.

Bom, continuo tentando se tiverem mais dicas, agradeço.
Abraços

Re: Criar arquivo.txt no Javascript e Imprimir...

MensagemEnviado: 05 Fev 2011 09:59
por Dudu_XBase
Bom dia.

No Asp net...nós demos um jeito aki...

Como o Microsoft .NET Framework não permite acesso diretamente à porta paralela (LPT1, LPT2), uso duas funções da API do Windows que permitem a abertura e fechamento da porta, sendo elas: CreateFileA() e CloseHandle(), que serão declaradas em um classe...

using System.Runtime.InteropServices;

...

...

[DllImport("kernel32.dll",EntryPoint="CreateFileA")]

static extern int CreateFileA(string lpFileName,int dwDesiredAccess, int dwShareMode,

int lpSecurityAttributes,

int dwCreationDisposition, int dwFlagsAndAttributes,

int hTemplateFile);



[DllImport("kernel32.dll",EntryPoint="CloseHandle")]

...

Eu não sei se no php vc tem algum comando que consegue fazer acesso a API...se tiver...já era...
Antes era tão fácil SET PRINTER TO LPT1....migramos o sistema em clipper para C#...mas a matricial véia de guerra ainda é util...

Re: Criar arquivo.txt no Javascript e Imprimir...

MensagemEnviado: 05 Fev 2011 17:10
por ANDRIL
Olá Dudu, quanto tempo heimmm!

Já fiz alguns projetos em ASP.NET e lembro que tive problemas semelhantes com relação a impressão. Se possível, voce teria como anexar o fonte que voce usa ou declara a classe. Vou tentar ver se dá certo.

Embora ache que em ASP.NET seja mais "fácil" do que em PHP por ser um ambiente Windows. Voce pode me dizer se o seu sistema em ASP fica em um SERVIDOR WEB ou voce usa ele na Intranet com ISS na rede local.

Agradeço sua ajuda.
Abraços

Re: Criar arquivo.txt no Javascript e Imprimir...

MensagemEnviado: 09 Fev 2011 14:38
por Dudu_XBase
Tarde...
Desculpe pela demora...
Segue o Fonte...

/***
*
* Componente: ImprimeTexto *   
*        Data: 21/07/2004
*   Objetivo: Imprime texto diretamente na porta da impressora.
*
***/
using System;
using System.Runtime.InteropServices;
using System.IO;

namespace LibWebDudu
{

   /// <summary>
   /// Classe para impressão de textos diretamente para a porta da impressora.
   /// </summary>
    ///

    public class ImprimeTexto
   {

      private int GENERIC_WRITE = 0x40000000; // indica a operação de gravação
      private int OPEN_EXISTING = 3; // abre mesmo existindo o arquivo
               private int FILE_SHARE_WRITE = 0x2; // define como escrita em modo compartilhado
               private string sPorta; // armazena a porta que está sendo usada
      private int hPort; // handle para a porta
      private FileStream outFile; // objeto que indica a porta
      private StreamWriter fileWriter; // objeto usado para escrever na porta
      private IntPtr hPortP; // usado como identificador da porta no Windows
      private bool lOK = false; // indica se conseguiu abrir a porta da impressora

        /// <summary>
        /// Retorna o caracter ASC indicado.
        /// </summary>
        /// <param name="asc">número do caracter na tabela ASCII</param>
        /// <returns></returns>
      private string Chr(int asc)
      {
         string ret = "";
         ret += (char)asc;
         return ret;
      }

      [DllImport("kernel32.dll",EntryPoint="CreateFileA")]
      static extern int CreateFileA(string lpFileName,int dwDesiredAccess, int dwShareMode,
         int lpSecurityAttributes,
         int dwCreationDisposition, int dwFlagsAndAttributes,
         int hTemplateFile);

      [DllImport("kernel32.dll",EntryPoint="CloseHandle")]
      static extern int CloseHandle(int hObject);

      /// <summary>
      /// Configura a impressora para impressão normal.
      /// </summary>
      public string Normal
      {
         get
         {
               return Chr(18);
         }
      }

      /// <summary>
      /// Configura a impressora para impressão em modo condensado.
      /// </summary>
      public string Comprimido
      {
         get
         {
            return Chr(15);
         }
      }

        /// <summary>
        /// Configura impressão 8 linhas por Polegada
        /// </summary>
        public string perinch8
        {
            get
            {
                return Chr(27)+"0";
            }
        }

      /// <summary>
      /// Configura a impressora para impressão em modo expandido.
      /// </summary>
      public string Expandido
      {
         get
         {
            return Chr(14);
         }
      }

      /// <summary>
      /// Configura a impressora para impressão em modo expandido normal.
      /// </summary>
      public string ExpandidoNormal
      {
         get
         {
            return Chr(20);
         }
      }

      /// <summary>
      /// Ativa o modo negrito da impressora.
      /// </summary>
      public string NegritoOn
      {
         get
         {
            return Chr(27)+Chr(69);
         }
      }

      /// <summary>
      /// Desativa o modo negrito da impressora.
      /// </summary>
      public string NegritoOff
      {
         get
         {
            return Chr(27)+Chr(70);
         }
      }

      
      /// <summary>
      /// Inicia a impressão em modo texto.
      /// </summary>
      /// <param name="sPortaInicio">Especifica a porta da impressora (LPT1,LPT2,LPT3,LPT4,...)</param>
      /// <returns>Retorna true se inciar a impressora e false caso contrário</returns>
      public bool Inicio(string sPortaInicio)
      {
         sPortaInicio.ToUpper();
            /* if(sPortaInicio.Substring(0,3) != "LPT")
         {
             lOK = false;
            throw new Exception("Porta LPT inválida.");
         }*/
             
         sPorta = sPortaInicio;
         hPort = CreateFileA(sPorta, GENERIC_WRITE, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
         if(hPort != -1)
         {
            hPortP = new IntPtr(hPort);
            outFile = new FileStream(hPortP, FileAccess.Write, false);
            fileWriter = new StreamWriter(outFile);
            lOK = true;
         }
         else
         {
            lOK = false;
         }
         return lOK;
      }

        /// <summary>
      /// Finaliza a Impressao.
      /// </summary>
      public void Fim()
      {
         if(lOK)
         {
            fileWriter.Close();
            outFile.Close();
            CloseHandle(hPort);
            lOK = false;
         }
      }

      /// <summary>
      /// Imprime uma string.
      /// </summary>
      /// <param name="sLinha">String a ser impressa</param>
      public void Imp(string sLinha)
      {
         if(lOK)
         {
            fileWriter.Write(sLinha);
            fileWriter.Flush();
         }
      } 
      


Eu tenho 4 servidores Web Intranet Servidores Virtualizados num Dell com 2 Processador SixCore com bastante de RAM e com Hds SAs....bixim voa baixo...