Página 1 de 1

Criar arquivo.txt no Javascript e Imprimir...

Enviado: 20 Jan 2011 15: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...

Enviado: 20 Jan 2011 17: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...

Enviado: 20 Jan 2011 17: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...

Enviado: 05 Fev 2011 10: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...

Enviado: 05 Fev 2011 18: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...

Enviado: 09 Fev 2011 15:38
por Dudu_XBase
Tarde...
Desculpe pela demora...
Segue o Fonte...

Código: Selecionar todos

/***
 * 
 * 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...