Ir para conteúdo
  • Cadastre-se

Pesquisar na Comunidade

Showing results for tags 'acbrposprinter'.

  • Search By Tags

    Digite tags separadas por vírgulas
  • Search By Author

Tipo de Conteúdo


Fóruns

  • Fórum Aberto - ACBr
    • Notícias do ACBr
    • Equipamentos testados
    • Base de Conhecimento
    • Dúvidas Gerais sobre o ACBr
    • ACBrSerial
    • ACBrSAT
    • ACBrNFe
    • ACBrDFe
    • Dúvidas sobre TEF
    • Dúvidas sobre PIX
    • ACBrMonitor PLUS
    • ACBrTXT
    • ACBrBoleto
    • ACBrDiversos
    • ACBrTCP
    • ACBrFramework
    • ACBrLIB
  • ACBr Pro
    • Dúvidas gerais
    • ACBrMonitorPLUS
    • NFe/NFCe - Nota Fiscal Eletrônica
    • DFe - Documentos Fiscais Eletrônicos
    • SAT / MFE
    • TEF
    • Boleto
    • ACBrSPED
    • ACBrTXT
    • Paf-ECF
    • Requisitos Fiscais por UF
    • ACBrLIB
  • Outros Assuntos
    • Boteco do ACBr
    • Legislação Fiscal e Tributária
    • Object Pascal - Delphi & Lazarus
    • Banco de Dados
    • Classificados
    • Dúvidas não relacionadas ao ACBr

Categorias

  • ACBr Pro
    • ACBrLib - PRO
    • ACBrMonitorPLUS - PRO
    • Utilitários - PRO
    • Dia do ACBr 1a edição
    • Dia do ACBr 2a edição
  • Download Livre
    • ACBrLib - DEMO
    • ACBrMonitorPLUS - DEMO
    • Demos / Testes / Utilitários
    • Apresentações - Palestras

Calendários

  • Eventos - Palestras - Webinars
  • Prazos SEFAZ
  • Calendário da Comunidade
  • ACBr Papo Pro
  • Feriados Nacionais

Find results in...

Find results that contain...


Data de Criação

  • Início

    End


Data de Atualização

  • Início

    End


Filter by number of...

Data de Registro

  • Início

    End


Grupo


Website URL

  1. Tenho uma duvida a respeito do acbrposprinter em questão da margem, estou tentando imprimir umas informações em uma impressora termica, porém a margem tanto para esquerda como para direita está ficando de certa forma "grande". O componete possui alguma propriedade que faça essas margens diminuir e impressão pegar melhor a largura do papel ? Ja tentei aumentar o numero de colunas, porém não resolveu
  2. Estou desenvolvendo um app de vendas, em impressorar bluetooth, estou imprimindo o condensado normalmente. Na impresso do TecToy D2Mini, a impressão condensada não funciona. Use o Demo do ACBrPOSPrinter e tambem não imprimiu condensado. Alguem saberia como fazer? Usar apenas 32 colunas não fica legal.
  3. Bom dia. Estou realizando testes com o ACBrPOSPrinter com a impressora Diebold IM453HU-002, mas a mesma não imprime QRCode. Vi que no tópico abaixo outra pessoa conseguiu configurando como "ppEscBematech". Já tentei com ppEscBematch e outros, também testando as code page 437 e 850 (no manual é informado suporte para essas páginas de código), mas sem sucesso. Uma coisa que observei é que no manual diz que o suporte para impressão de QRCode é pelo set de comandos padrão (ao que dá a entender, pelo menos no meu entendimento, não sendo esc/pos). Poderiam dizer se essa impressora foi homologada para o ACBr? Estou achando que ela não tem suporte para impressão de QRCode por comandos ESC/POS. Se alguém que já trabalhou com ela puder me informar. Obrigado.
  4. Bom dia. Gostaria de saber se alguém já trabalhou com a impressora GPrinter modelo GP-3120TU usando o ACBrPOSPrinter? Estou realizando testes em uma, com o exemplo fornecido pelo ACBr mas não sai nenhuma impressão. A página de testes pelo Windows funciona, e do mesmo modo se eu tentar imprimir um .txt pelo bloco de notas. No exemplo do ACBrPOSPrinter ele consegue listar a porta USB "USB:Gprinter GP-3120TU" e também a porta RAW "RAW:Gprinter GP-3120TU" e ativa sem indicar nenhum erro, mas ao tentar enviar texto para impressão nada acontece. Tentei também por compartilhamento da impressora, e informando a porta \\127.0.0.1\GP-3120TU no componente, também ativa sem erro, mas ao enviar texto para impressão nada é impresso. Tentei alterar as propriedades da impressora no Windows para usar porta COM, mas quando faço isso, ao tentar ativar a impressora ocorre o erro "First chance exception at $76B87452. Exception class ESynaSerError with message 'Communication error 1: Função incorreta'.". Então mantive a comunicação pela porta USB mesmo, acredito que seja o mais recomendado. Já olhei o log e lá não é indicado nenhum erro. Obs.: A Code Page da impressora é 437 e isso também está configurado de acordo no ACBrPOSPrinter como pc437. Obs.2: Já resetei a impressora para os padrões de fábrica também. Marca: GPrinter Modelo: GP-3120TU Versão: V1.1 (G 2018-06-07) Interface: USB Label Value: 525 506 994 1-14 752 65 Size 80mm, 101mm Chinese GB18030: TSS24.BF2 Se alguém souber se tem alguma configuração específica que tenha que ser realizada nas opções dessa impressora para funcionar com o ACBrPosPrinter eu agradeço.
  5. Pessoal, tem como eu alterar o tamanho da fonte do ACBrPosPrinter? Tem um cliente meu que mostrou um cupom com a letra menor e mais colunas. Teria como eu diminuir o tamanho da fonte? Somente aumentar a quantidade de colunas não resolve.
  6. estou tentando instalar o acbr, quando instalo ACBrSerial, da erro na acbrposprinter (3104) Compiling /home/rsb/fpcupdeluxe/Componentes/01 - ACBr/ACBr-master/Fontes/ACBrSerial/ACBrECF.pas Usar: /usr/bin/windres [opção(ões)] [arquivo-entrada] [arquivo-saída] As opções são: -i --input=<file> Nomeia arquivo de entrada -o --output=<file> Nomeia arquivo de saída -J --input-format=<format> Especifíca formato de entrada -O --output-format=<format> Especifíca formato de saída -F --target=<target> Especifíca alvo COFF --preprocessor=<program> Programa para ser usado para preprocessar arquivo rc --preprocessor-arg=<arg> Argumento adicional de preprocessador -I --include-dir=<dir> Diretório de inclusão para o preprocessamento de arquivo rc -D --define <sym>[=<val>] Define SYM para o preprocessamento de arquivo rc -U --undefine <sym> Indefine SYM para o preprocessamento de arquivo rc -v --verbose Verbose - te diz o que está fazendo -c --codepage=<codepage> Especifica codepage padrão -l --language=<val> Configura linguage para leitura de arquivo rc --use-temp-file Usa arquivo temporário ao invés de popen para ler a saída do preprocessador --no-use-temp-file Usa popen (padrão) -r Para ignorar a compatibilidade com rc @<arquivo> Opções de leitura de<arquivo> -h --help Imprimir mensagem de ajuda -V --version Imprimir informação sobre a versão Somente estes FORMATOS rc, res, ou coff, e a dedução da nome do arquivo se a extensão não for especificada. A partir de um nome arquivo e uma entrada de arquivo. Nenhuma entrada de arquivo é stdin (padrão de entrada), defaul rc (padrão rc). Nenhuma saída de arquivo é stdout (padrão de saída), defaul rc (padrão rc). /usr/bin/windres: destinos suportados: pe-x86-64 pei-x86-64 pe-bigobj-x86-64 elf64-x86-64 elf64-l1om elf64-k1om pe-i386 pei-i386 elf32-i386 elf32-iamcu elf64-little elf64-big elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex plugin (3104) Compiling /home/rsb/fpcupdeluxe/Componentes/01 - ACBr/ACBr-master/Fontes/ACBrSerial/ACBrECFYanco.pas (3104) Compiling /home/rsb/fpcupdeluxe/Componentes/01 - ACBr/ACBr-master/Fontes/ACBrSerial/ACBrPosPrinter.pas (9022) Compiling resource /home/rsb/fpcupdeluxe/Componentes/01 - ACBr/ACBr-master/Fontes/ACBrSerial/ACBrPosCheque.rc /home/rsb/fpcupdeluxe/Componentes/01 - ACBr/ACBr-master/Fontes/ACBrSerial/ACBrPosPrinter.pas(3206,1) Error: (9029) Error while compiling resources /home/rsb/fpcupdeluxe/Componentes/01 - ACBr/ACBr-master/Fontes/ACBrSerial/ACBrPosPrinter.pas(3206,1) Fatal: (10026) There were 1 errors compiling module, stopping Fatal: (1018) Compilation aborted Error: /home/rsb/fpcupdeluxe/Lazarus/fpc/bin/x86_64-linux/ppcx64 returned an error exitcode alguém tem uma dica
  7. Bom dia Existe alguma forma de salvar no formato pdf, antes de imprimir, os dados carregados no ACBrPosPrinter ? Exemplo: ACBrPosPrinter1.Buffer.Add('Pré-venda 00001'); ACBrPosPrinter1.Buffer.Add('Vendedor: Fulano'); ACBrPosPrinter1.Buffer.Add('</linha_simples>'); ACBrPosPrinter1.Buffer.Add('</ae>ITEM 0001'); ACBrPosPrinter1.Buffer.Add('</ae>ITEM 0002'); ACBrPosPrinter1.Buffer.Add('</linha_simples>'); ACBrPosPrinter1.Buffer.Add('Total: R$ xxxx');
  8. Abri o exemplo do ACBrPosPrinter no Delphi 10.3 Firemonkey, preciso imprimir um TBitmap e vi que tinha no próprio exemplo o código que preciso. Minha frustração foi que o próprio demo está dando erro de "Imagem não é BMP Monocromática". Lembrando que a imagem carregada no demo é o logo do "acebrmono.bmp". Se imprimir o arquivo vai de boa, o problema é via stream.
  9. Boa Noite, Após realizar a reinstalação do delphi o meu sistema parou de imprimir corretamente nos clientes. Fui investigar e gerar os arquivos via modo ppTexto e o comportamento está bem estranho. Gerei também via Exemplo e o comportamento é o mesmo. Em anexo segue um txt com o enviado para impressão, antes da reinstalação do delphi saia certinho quebrando com 48 colunas a linha. Já tentei reinstalar o Acbr e nada. teste.txt
  10. O que é o ACBrPosPrinter ? O ACBrPosPrinter permite o envio de comandos em EscPos, direto para a porta da Impressora. Ele é excelente para criação de relatórios complexos em impressoras de bobina, executando tarefas como Impressão de QRCode, Cod.Barras, alinhamento, Expandido, Negrito, Invertido, etc... Você pode baixar uma apresentação mais completa do ACBrPosPrinter, abaixo: Apresentação - ACBr - Elgin - ACBrPosPrinter.pdf Se você usa o ACBr no seu Delphi, poderá encontrar o componente ACBrPosPrinter, na Palheta ACBrSerial... Para quem não usa Delphi, o ACBrPosPrinter pode ser acessado pela ACBrLibPosPrinter , uma biblioteca compartilhada (DLL/SO), compilada em 32 e 64 bits ACBrMonitorPLUS, pelo Objeto ESCPOS... veja nesse link, a tela de configuração. Quais os tipos de portas ? Você deve configurar a Porta da Impressora no componente, e isso é feito através da propriedade "Porta". Dependendo do valor definido nessa propriedade, o ACBrPosPrinter, irá definir a forma de comunicação com a Impressora. Veja abaixo os tipos permitidos e exemplos de uso. Porta Serial, COMxx Útil se a sua impressora tem uma Porta Serial, ou ainda se o Driver USB da Impressora, cria uma COM Virtual no seu Windows. Apenas informa o nome da porta, Exemplos Windows: COM1, COM2, COM17 Exemplos Linux: /dev/ttyS0 /dev/ttyUSB0 Para lista todas as portas Seriais, disponíveis na máquina, use o método abaixo: procedure AcharPortasSeriais(const AStringList: TStrings; UltimaPorta: Integer = 64 ); Exemplo: cbxPorta.Items.Clear; ACBrPosPrinter1.Device.AcharPortasSeriais( cbxPorta.Items ); A porta Serial, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora Porta USB SIM !!! O ACBrPosPrinter, tem suporte Nativo a USB (apenas no Windows), sem precisar da DLLs dos fabricantes, na maioria dos casos, basta definir "USB" na propriedade Porta. saiba mais nesse tópico: Para lista todas as portas USB, disponíveis na máquina, use o método abaixo: procedure AcharPortasUSB(const AStringList: TStrings); Exemplo: ACBrPosPrinter1.Device.AcharPortasUSB( cbxPorta.Items ); A porta USB, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora Porta TCP/IP Se a sua impressora tem uma porta Ethernet, então ela é um Servidor de Impressão, e o ACBrPosPrinter pode se conectar a ela, diretamente usando o protocolo TCP/IP. Ou seja, basta plugar a sua impressora em algum cabo RJ45 da sua Rede, configurar o IP nela, e do ACBrPosPrinter na propriedade Porta, usar a sintaxe: "TCP:IP_MAQUINA:Porta". Geralmente esses equipamentos abrem a porta 9100, então ela pode ser omitida... Exemplos: TCP:192.168.0.20:9100 -> Conecta na Impressora que foi previamente configurada para o IP 192.168.0.20, usando a porta 9100 TCP:192.168.0.20 -> tem o mesmo efeito do comando anterior, pois usa a porta padrão (9100) A porta TCP, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora Impressoras BlueTooth Com a migração dos fontes do ACBr para Android, foi adicionado o suporte a portas BlueTooth, entretanto esse suporte está disponível apenas para Delphi XE8 ou superior, e em Windows ou Android. Os equipamentos devem ser previamente pareados, para que eles sejam listados e acessíveis Nota: Para acessar dispositivos BlueTooth no Android é necessário que a aplicação solicite permissões, BLUETOOTH, BLUETOOTH_ADMIN e BLUETOOTH_PRIVILEGED ao Sistema Operacional... Você deverá usar a sintaxe: "BTH:Nome da Impressora" Exemplos: BTH:RM22 -> Conecta na Impressora chamada RM22, que foi previamente pareada BTH -> Tenta conectar na primeira impressora BlueTooth pareada encontrada Para lista todas as impressoras BlueTooth, disponíveis na máquina/dispositivo, use o método abaixo: procedure AcharPortasBlueTooth(const AStringList: TStrings); Exemplo: {$IfDef HAS_BLUETOOTH} ACBrPosPrinter1.Device.AcharPortasBlueTooth( cbxPorta.Items ); {$EndIf} A porta BTH, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora RAW (Spooler) Se a sua impressora está instalada e é listada no Windows, ou no Linux/CUPS... então o ACBrPosPrinter, pode acessar ela, através do Spool. O método RAW, instrui o Spool a não interpretar os comandos enviados, ou seja, ele usará o Spool apenas para fazer um Túnel até a impressora. Você deverá usar a sintaxe: "RAW:Nome da Impressora" Exemplo Windows RAW:Bematech MP4200 -> Conecta na Impressora previamente instalada no Windows, e listada com o nome "Bematech MP4200" Exemplo Linux RAW:bema1 -> Conecta na Impressora previamente instalada no CUPS, e listada com o nome "bema1" Para listar todas as portas Instaladas no Spool, use o método abaixo: procedure AcharPortasRAW(const AStringList: TStrings); Exemplo: ACBrPosPrinter1.Device.AcharPortasRAW( cbxPorta.Items ); A porta RAW, NÃO permite a leitura de informações Arquivo TXT Pode ser útil para alguma situação, capturar a saída de impressão em um arquivo. Como por exemplo, Debug, estudo do EscPos, ou ainda encaminhar o arquivo para a Impressão por uma rede, através de um Script. Para isso, apenas defina o nome do arquivo que você quer criar, em "Porta" Exemplo Windows c:\temp\printer.txt -> Irá desviar toda a impressão para o arquivo "c:\temp\printer.txt" Exemplo Linux /tmp/printer.txt - A porta Arquivo, obviamente NÃO permite a leitura de informações Porta em Rede (UNC) Se a impressora está Instalado no Windows, e foi compartilhada na Rede, e portanto disponibiliza um Nome de Compartilhamento, então você pode usar a sintaxe "\\Nome_ou_IP_maquina\Compartilhamento". O ACBrPosPrinter usará a mesma classe de impressão em Arquivo (descrita acima), para suportar as portas UNC Exemplo: \\127.0.0.1\EPSON -> Irá acessar a impressora cujo nome de compartilhamento é "EPSON", e está conectada a máquina local \\192.168.0.10\EPSON -> o mesmo que acima, porém acessa a impressora da máquina cujo IP é "192.168.0.10" A conexão por Porta UNC, NÃO permite a leitura de informações Hook, DLLs A Impressão por "hook" foi criada antes do ACBrPosPriniter, ter suporte nativo a USB, portanto hoje está obsoleta. O truque era usar a DLL dos Fabricantes da Impressora, para acessar o equipamento pela USB. Ou seja, o ACBrPosPrinter faz a carga da DLL do Fabricante, e utiliza a mesma, para enviar e ler comandos da USB. A Sintaxe é: "DLL:MARCA"... Você pode saber mais, no tópico abaixo: Disponível apenas no Windows, e apenas implementado para Impressoras da Epson e Elgin... Exemplos: DLL:EPSON DLL:ELGIN Nota: antigamente a sintaxe "USB:MARCA", poderia ser usada para portas Hook, mas atualmente o prefixo "USB", é reservado apenas para as portas de acesso nativo a USB (conforme descrito no inicio do tópico) A porta Hook, DLL, PERMITE a leitura de informações , usando os métodos LerStatusImpressora, e LerInfoImpressora Portas Paralelas (LPT) Uso legado, pois atualmente poucos equipamentos possuem portas Paralelas ou LPT. Internamente, o ACBrPosPrinter usará a mesma classe de impressão em Arquivo (descrita acima), para suportar as portas LPT Exemplo Windows LPT1, LPT2 Exemplo Linux /dev/lp0, /dev/lp1 A porta LPT, NÃO permite a leitura de informações
  11. Olá pessoal, Introduzi no componente ACBrPosPrinter, um novo mecanismo de acesso a Impressora Agora poderemos acessar algumas impressoras, usando a Sintaxe: ACBrPosPrinter1.Porta := 'DLL:MARCA'; Onde MARCA, será o nome da Marca do Fabricante da Impressora... Até o momento, temos suporte para as marcas "ELGIN", e "EPSON" A ideia por traz dessa nova sintaxe de Porta, é permitir usar a DLL/SO do Fabricante, para Imprimir diretamente na Impressora... Ok.. o ACBrPosPrinter, já conseguia acessar impressoras Não Fiscais, pela Porta USB, usando a Sintaxe "RAW:" ACBrPosPrinter1.Porta := 'RAW:Nome da Impressora no Windows'; Mas então porque desenvolvemos essa nova forma de acesso ? A nova sintaxe "DLL:", tem algumas vantagens, em relação a sintaxe "RAW:" Não depende da instalação do Driver de Spool da Impressora.. (note porém, que em alguns casos, o Driver de Spool não pode estar instalado, pois ele bloqueia o acesso a USB) Podemos Ler Informações da Impressora (o que não é possível no modo RAW) Entretanto, como foi dito antes, dependemos de DLL exclusiva do fabricante, para o acesso a Impressora pela USB... Quais são essas DLLs ? Para onde eu devo copiá-las ? Vejamos como foi descrito no ACBrSerial-change-Log.txt Creio que isso responde as duas perguntas, correto ? Você pode encontrar as DLLs no nosso SVN, na pasta: \ACBr\DLLs\PosPrinter, ou ainda pela Web: http://svn.code.sf.net/p/acbr/code/trunk2/DLLs/PosPrinter/ Você pode ainda baixar uma versão do Demo PosPrinterTeste, atualizada, compilado em Lazarus/FPC no link abaixo: Como funciona essa nova técnica ? Quem faz todo acesso as Portas suportadas pelo ACBr, é um subcomponente chamado ACBrDevice, e há um bom tempo, esse componente já possui uma possibilidade de Integração por Hooks O que é Hook ? https://pt.wikipedia.org/wiki/Hooking A ideia por trás dos Hooks, é instalar ganchos, em eventos, que nos permitam interceptar algumas ações e chamadas... Veja esse trecho de código FDevice.HookAtivar := PosPrinterHookAtivar; FDevice.HookDesativar := PosPrinterHookDesativar; FDevice.HookEnviaString := PosPrinterHookEnviaString; FDevice.HookLeString := PosPrinterHookLeString; Aqui instruímos o subcomponente ACBrDevice, a chamar nossos eventos, quando ele precisar "Ativar", "Desativar" uma porta e também quando ele for "EnviarString" e "LeString", de uma determinada porta... Então no interior do componente ACBrPosPrinter, implementamos os eventos indicados acima (PosPrinterHookAtivar, PosPrinterHookDesativar, etc) ... Com isso, o ACBrDevice executará um código nosso, ao invés do que ele normalmente executaria... Veja que dentro dos eventos de ativação e desativação usamos uma Classe de Hook (leia mais abaixo) procedure TACBrPosPrinter.PosPrinterHookAtivar(const APort: String; Params: String); begin if Assigned(FHook) then FHook.Open(APort); end; procedure TACBrPosPrinter.PosPrinterHookDesativar(const APort: String); begin if Assigned(FHook) then FHook.Close; end; FHook por sua vez, é uma variável interna ao ACBrPosPrinter, que contem uma Classe de Hook (TACBrPosPrinterHook), e implementa os comandos necessários, para transmitir essas ações, a DLL do fabricante... Veja o exemplo abaixo, como fica a implementação dos Hooks de Ativar e Desativar, da ELGIN... observe que chamamos métodos Externos, da DLL da Elgin, como: "PrtPortOpenW" e "PrtPortClose" procedure TElginUSBPrinter.Open(const APort: String); var errorNo: Integer; begin if Connected then Exit; inherited Open(APort); try errorNo := xPrtPortOpenW(FPrinter, WideString(fpPort)); // <------- A Q U I ------- if (errorNo <> E_SUCCESS) then raise Exception.CreateFmt(CERROR_OPEN, [fpPort, fpPrinterName]); except fpConnected := False; fpPort := ''; raise; end; end; procedure TElginUSBPrinter.Close; var errorNo: Integer; begin if not Connected then Exit; errorNo := xPrtPortClose(FPrinter); // <------- A Q U I ------- if (errorNo <> E_SUCCESS) then raise Exception.CreateFmt(CERROR_CLOSE, [fpPort, fpPrinterName]); inherited Close; end; Com isso, conseguimos usar a DLL do Fabricante, para estabelecer um túnel entre o ACBrPosPrinter e o equipamento... Como posso implementar um Hook para um novo modelo ? Os Primeiros passos, são verificar: Se o Fabricante disponibiliza uma DLL para acesso direto ao equipamento (sem depender do Spooler) Se há nessa DLL, um método que nos permita Escrever e Ler Dados da Porta USB Ou seja, não precisamos de métodos de alto nível, que façam a formatação de caracteres, ou manipulem a impressora... Pois continua sendo o ACBrPosPrinter, quem montará toda a Sintaxe de comandos a serem enviados para a Impressora, usando a linguagem Esc/Pos... e igualmente, será o ACBrPosPrinter que fará a leitura de respostas, quando for necessário... Na DLL da Elgin, temos um ótimo exemplo de método para isso... function PrtDirectIO(printer:Pointer; // Ponteiro com a Impressora instanciada por PrtPrinterCreatorW writeData:PByte; // Buffer com dados a serem enviados writeNum:integer; // Número de Bytes em "writeData" (tamanho do Buffer) readData:PByte; // Ponteiro com o Retorno a ser Lido (Buffer de saída) readNum:integer; // Numero de bytes disponíveis para escrita em "readData" (tamanho disponível no Buffer de Saída) preadedNum:PInteger // Número de bytes realmente escritos em "readData" ): Integer; cdecl; // Status de retorno E_SUCCESS = 0; Tendo isso em mãos, podemos criar uma cópia de uma das Units já existentes, como por exemplo a Unit ACBrEscPosHookElginDLL.pas, e implementar o suporte usando a nova DLL, e efetuar os ajustes referente a nova Marca
  12. O ACBr suporta impressoras USB ? Durante muito tempo, a resposta a essa pergunta foi: NÃO, você precisa usar a Porta COM, Spool do Windows (RAW), Compartilhamento de Rede ou algum outro método... Porém agora isso mudou... Agora componentes que usam o ACBrDevice, como por exemplo o ACBrPosPrinter (para Impressoras Não Fiscais) e o ACBrETQ (para Impressoras de Etiquetas), possuem suporte a portas USB de maneira nativo do Windows... Ou seja, sem a necessidade de DLLs externas... Isso significa que caso o seu equipamento esteja conectado ao PC, por uma Porta USB... Você poderá conectar os componentes do ACBr, simplesmente definindo na Propriedade Porta algo como "USB" Exemplos de uso: ACBrPosPrinter1.Porta := 'USB' - Tenta descobrir qual é a Primeira Impressora de Bobinas plugada na USB e faz uso dela, se encontrar.. ACBrPosPrinter1.Porta := 'USB:Elgin' - Tenta conexão em alguma Impressora USB, listada como sendo do Fabricante 'Elgin' ACBrPosPrinter1.Porta := 'USB:Sweda, SI-300S' - Tenta conexão na Impressora USB, do Fabricante "Sweda" e do Modelo "SI-300S". ACBrETQ1.Porta := 'USB' - Tenta descobrir qual é a Primeira Impressora de Etiquetas plugada na USB e faz uso dela, se encontrar.. ACBrETQ1.Porta := 'USB:Zebra, GC420t' - Tenta conexão com a Impressora USB do Fabricante "Zebra", e modelo "GC420t" Observe que essa nova implementação é totalmente diferente do método de Hook, onde usávamos a DLL do Fabricante, como túnel USB... Nesse novo cenário a comunicação USB é feita diretamente usando a API do Windows, ou seja, sem necessidade de DLLs externas. Para compreender um pouco mais, sobre esse método veja esse artigo O método de Hook ainda está disponível, usando o prefixo de porta, 'DLL:' Como os Equipamentos são identificados ? Todo Equipamento USB, possui um código de identificação do Fabricante, chamado de Vendor ID (VID), e também do Produto chamado de Product ID (PID). Essa numeração é controlada pela USB.ORG, e você pode encontras uma lista de Todos os "Vendors ID", nesse link A classe TACBrUSBIDDataBase, mantêm um Banco de Dados interno, chamado ACBrUSBID.ini, com o mapeamento dos principais Equipamentos do Mercado Brasileiro.. Esse Banco de Dados é um simples Arquivo do tipo INI, que é compilado como resource e adicionado ao componente... Clique aqui para ver o layout do Banco de Dados no Formato INI, observe os comentários no inicio do arquivo, com algumas instruções de como inserir novos equipamentos nele. Se você distribuir o arquivo ACBrUSBID.ini, na mesma pasta do Executável da sua aplicação, a classe TACBrUSBIDDataBase fará uso desse arquivo, ao invéz de usar o resource interno... Isso pode ser muito útil para atualizar a lista de Dispositivos conhecidos, sem necessitar compilar uma nova versão do programa, apenas atualizando o ACBrUSBID.ini Como posso listar os equipamentos identificados pelo ACBr ? Use a Força, leia os fontes... Vamos ver trechos de código, do Demo PosPrinterTeste {$IfDef MSWINDOWS} // Os métodos abaixo, somente estão disponíveis para compilação em Windows // Carrega a lista de Impressoras detectadas em: ACBrPosPrinter1.Device.WinUSB.DeviceList ACBrPosPrinter1.Device.WinUSB.FindUSBPrinters(); // Varre a lista de Impressoras USB detectadas, e adiciona as mesmas, nas opções de Porta for K := 0 to ACBrPosPrinter1.Device.WinUSB.DeviceList.Count-1 do cbxPorta.Items.Add('USB:'+ACBrPosPrinter1.Device.WinUSB.DeviceList.Items[K].DeviceName); {$EndIf} Como o ACBr nomeia os dispositivos ? O "DeviceName" será calculado, de acordo com as informações disponíveis no banco de Dados... Primeiro o ACBr usa a API do Windows para captura informações do VID (Vendor ID ou Fabricante) e o PID (Product ID ou Modelo), dos Equipamentos listados... Se o ACBr falhar nessa tarefa, o equipamento será ignorado (não será listado) Se for capturado com sucesso a descrição em FriendlyName, então ela será usada.. Caso contrário, o ACBr tentará compor o nome, baseado no VID e PID Se o VID do Fabricante for encontrado na sessão [Vendors] de ACBrUSBID.ini, então o VID será substituído pela Descrição do Fabricante... Observe que na sessão [Vendors], temos vários fabricantes que não são conhecidos no mercado Brasileiro, mas são de equipamentos OEM, de Empresas nacionais... Nós procuramos manter o nome Original do Fabricante, de acordo com a tabelas de VID da OSB.ORG Se o VID não tiver equivalência na relação de [Vendors] de ACBrUSBID.ini, então ele será listado com o próprio número VID, que são 4 algarismos em Hexadecimal... Exemplo: "0b1b" Procuramos pelo PID do Equipamento, na sessão específica do Fabricante. Se não houver uma chave com o PID, então o ACBr usará o próprio número PID, para Nomear o Modelo. O PID também é composto do 4 algarismos em Hexadecimal... Exemplo: "0001" Se encontrar uma entrada com o PID, dentro da sessão do Fabricante, então o ACBr usará a Descrição do Modelo, e poderá desprezar a descrição do Fabricante, se a Descrição do modelo possuir uma vírgula, Exemplo: 7008=Elgin, I9;1;1... Nesse caso será desprezada a descrição do Fabricante "20d1-Dascom" e será usada apenas a descrição do Modelo, "Elgin, I9". Detecção automática de Porta e Protocolo Como agora temos um Banco de Dados, que informa além da Descrição do equipamento, qual é o Tipo do mesmo e qual o protocolo que ele usa, então os componentes ACBrPosPrinter e ACBrETQ, podem fazer uso dessas informações... Ou seja, se o equipamento for detectado com sucesso, no momento da Ativação da Porta (durante a chamada ao método "Ativar"), será usado o Protocolo Definido no Banco de Dados. Se for detectado que o equipamento USB é na verdade uma porta COM virtual, então o ACBr irá preferir fazer uso da Porta COM virtual, chaveando para mesma, de forma transparente... Pois dessa forma ele tem um melhor suporte a leitura de informações do equipamento. Se for detectado que a porta USB possui um equipamento incompatível com o componente em questão, isso também será alertado... Exemplo, você tentar conectar em uma porta 'USB:Zebra, GC420t' no componente TACBrPosPrinter, então um erro será emitido, pois esse equipamento não é uma impressora de Bobinas Como a mágica funciona ? Reparem que foi adicionado ao repositório a Unit ACBrWinUSBDevice.pas, essa Unit implementa chamadas a SetupAPI do Windows, para detectar os Dispositivos USB que estão listados em uma determinada Classe de Equipamentos (Class GUID)... O estudo desse artigo, foi fundamental, para a criação dessa Unit. Uma vez capturada o nome da Interface do Equipamento USB (em TACBrUSBWinDevice.DeviceInterface), podemos acessá-lo usando funções de manipulação Arquivos da API do Windows, como: CreateFile, WriteFile, ReadFile. Nem todos os dispositivos USB implementam suporte aos métodos ReadFile ou WriteFile... ou seja, pode não funcionar em alguns dispositivos.. Se você souber qual é o nome da Interface USB do equipamento, poderá informar ela diretamente na propriedade "Porta" dos componentes... Exemplo: ACBrPosPrinter1.Porta := '\\?\usb#vid_1c8a&pid_3002#0000000000022#{28d78fad-5a12-11d1-ae5b-0000f803a8c2}'; Para dúvidas, suporte ou correções, por favor crie um novo tópico, clicando aqui Para testar, baixe uma nova versão do PosPrinterTeste.exe
  13. Usando o exemplo do posprinter que tem no svn com o acbr, quando envio uma impressão o componente não corta o papel. O checkbox Cortar papel está selecionado. Aqui o log: SetModelo(ppTexto) -------------------------------------------------------------------------------- ATIVAR - 23/04/18 15:37:10:121 - Modelo.: Texto - TimeOut: 3 - Porta..: RAW:ELGIN i9(USB) -------------------------------------------------------------------------------- Imprimir, Copias:1, DecodificarTags:SIM, TraduzirTags:SIM aaaaaaaaaaaaaaaaaaaaaa[CR][LF]aaaaaaaaaaaaaaaaaaaaaa[CR][LF]aaaaaaaaaaaaaaaaaaaaaa EnviarStringDevice - Inicializando: EnviarStringDevice( aaaaaaaaaaaaaaaaaaaaaa[CR][LF]aaaaaaaaaaaaaaaaaaaaaa[CR][LF]aaaaaaaaaaaaaaaaaaaaaa) Como faço para cortar o papel? Já tentei: ACBrPosPrinter1.ImprimirLinha('</corte_total>'); Mas tbm não funcionou.
  14. A Epson está lançando a impressora térmica TM-T20X, e nos enviou as 2 novas versões (Vesão USB/Serial e Versão Ethernet) deste equipamento para homologarmos com os componentes do Projeto ACBr. Assista ao vídeo abaixo para conhecer a nova impressora: Apresentação do equipamento. Download e instalação de drivers. Rápida configuração no SATTeste e impressão. Ambiente Computador Desktop Sistema Operacional Windows 10 64Bit Processador Intel Core 2 Duo E4500 2.20GHz Memória 2GB USB 2.0 Características Técnicas da Impressora Método de impressão Impressão térmica em linhas Velocidade de impressão Aprox. 200 mm/s (Textos e gráficos) Guilhotina Corte parcial ao centro Opções de Comunicação USB 2.0 Full-speed (12 Mbps) Ethernet: 10BASE-T/100BASE-TX Serial: RS-232 Pontos por polegadas 203 × 203 dpi Caixa registradora Suporte a 2 gaveteiros Fonte de alimentação 100-240V 50/60Hz, Corrente nominal: 1.0 A Dimensões W:149 × D:192 × H:140 mm Peso Approx. 1.5 kg Código de barras UPC-A UPC-E JAN 8 (EAN 8 ) JAN 13 (EAN 13) CODE 39 ITF CODABAR (NW-7) CODE 93 CODE 128 GS1-128 GS1 DataBar (Omnidirectional, Truncated, Stacked, Stacked Omnidirectional, Limited, Expanded, Expanded Stacked. Código Bidimensional PDF417 QR CODE, MaxiCode Composite Symbology Vida útil Mecanismo de Impressão 15 milhões de linhas Cabeça térmica de impressão 100 KM Guilhotina 1,5 milhões de cortes Tempo médio antes da falha (MTBF): 360.000 horas Média de ciclos antes da falha(MCBF): 60.000.000 linhas Download de Drivers e manuais No link abaixo você encontra todos os drivers disponíveis para a nova TM-T20X. https://download.epson-biz.com/modules/pos/?page=prod&pcat=3&pid=6073 Drivers utilizados durante os testes: Driver de Spooler do Windows Bibliotecas Epson (.dll .lib e .so) Software Utilitario TM Virtual Port Driver (Emula Porta COM) Driver Linux Impressão de Autoteste O autoteste fornece as configurações atuais da impressora, e por ele também é possível alterar estas configurações. Siga os passos abaixo para realizar a impressão do Autoteste. Com a impressora desligada, mantenha pressionado o botão Avanço de Papel (manter pressionado até o início da impressão) e ligue a impressora Quando a impressora parar de imprimir, a luz Paper ficará piscando; Pressione o botão Avanço de Papel para imprimir a segunda parte do teste e finalizar; Caso queira alterar alguma configuração, no passo 2 descrito acima, pressione o botão Avanço de Papel por 1 segundo, será impresso as opções, selecione a opção que deseja pressionando o botão Avanço de Papel na quantidade de vezes requerido pela opção e em seguida o botão Avanço novamente pressionado por 1 segundo para confirmar. Interfaces de comunicação Com os dois modelos da TM-T20x, foi possível testar todos os tipos de comunicação possíveis, acompanhe na tabela abaixo quais são e como configurá-las. Tipo Configuração (Exemplo) USB/RAW RAW:EPSON TM-T20X USB/Com Emulada COM 4 USB/DLL USB:EPSON saCOM FÍSICA COM 1 Ethernet TCP:192.168.20.27:9100 Configurações de comunicação USB – Spooler do Windows Para instalar o driver em ambiente Windows, basta fazer o download de acordo com Sistema Operacional e executá-lo, ao fim da instalação, será aberto uma janela para adicionar a impressora, escolha o 1- tipo de comunicação e clique em 2- Save Settings, clique em 3- Test Print para imprimir uma página de teste . A impressora aparecerá em “Dispositivos e Impressoras”. Na imagem abaixo é possível verificar os passos descritos: USB – COM Emulada Para comunicação via COM Emulada, após a instalação como mostrado acima, faça o download e execute o instalador do TM Virtual Port Driver. Ao finalizar a instalação, execute o aplicativo Epson TM Virtual Port Assignment Tool Escolha uma porta para vincular a impressora e clique em “Assign Port” Na janela que abrirá, selecione a aba “Command Emulation” e habilite a opção “Enabled ESC/POS Command Emulation”. Selecione OK para salvar, pronto será criada uma porta com virtual e sua impressora estará vinculada a ela. USB/DLL Neste tipo de comunicação não é necessário realizar a instalação de driver, basta fazer o download da DLL e copia-lo para a pasta do componente. No demo PosPrinterTeste por exemplo basta configurar a comunicação como USB:EPSON, observe o exemplo na imagem abaixo: Serial RS-232 A comunicação com porta COM Física também não depende de instalação de driver. Veja em Cabo Serial deste relatório, o cabo correto para a comunicação. Para configurar a porta serial no componente ACBrPosPrinter realize as configurações a seguir. Selecione a Porta COM Selecione a opção de Configurações da Porta Realize os ajustes Baud rate: 38400 – Este é o padrão de fábrica desta impressora. Data Bits: 8 Parity: None Stop Bits: 1 Handshaking: DTR/DSR Buffer de Envio: 3000 Espera de Buffer: 200 Salve as configurações Os ajustes de Buffer são necessários para impressões de extratos com grande quantidades de itens, caso não configurados corretamente a impressão pode não ocorrer por completo. Ethernet A configuração da TM-T20X em rede é muito simples, conecte um cabo de rede na porta Ethernet e ligue a impressora, aguarde por aproximadamente 10 segundos, pois será impresso o IP que a impressora obteve do servidor DHCP. Para fixar um IP, abra o navegador e digite o IP impresso para acessar as configurações da impressora, será solicitado um usuário e senha, o padrão de fábrica é “epson” para ambos. No menu de configuração, selecione a opção TCP/IP. Na opção “Acquiring the IP Address” altere para “Manual” e em seguida, realize as configurações conforme sua rede. Para finalizar clique em SEND e em seguida clique em RESET, para enviar e reiniciar a impressora. Exemplo dos passos citados: No PosPrinter configure a porta de comunicação TCP com o IP fixado na impressora, EX: TCP: 192.168.20.27 Veja o exemplo de configuração na imagem abaixo: Gravação de Logo Esta impressora permite gravar múltiplos logos em sua memória, gravamos então um logo do ACBR para ser utilizado durante os testes de impressões, veja abaixo como gravar um logo utilizando o PosPrinterTeste.exe. Selecione a opção Carregar Imagem e escolha a imagem que deseja gravar (Formato BMP) Selecione a posição onde será gravado. (Os valores utilizados abaixo são um exemplo, é possível definir valores diferentes, onde cada imagem fique em uma posição.) Ex: KC1: 32 KC2: 32 Selecione a opção Gravar Logo Para verificar se gravou com sucesso, selecione IMPRIMIR Acompanhe na imagem abaixo o exemplo dos passos citados: Testes de Impressões Os testes de impressões tem como objetivo verificar se o equipamento pode imprimir todas as “Tags” possíveis. Para a realização destes testes utilizamos os componentes e demos do ACBr. Acompanhe as configurações utilizadas para a realização dos testes de impressão. Configurações utilizadas no demo PosPrinterTeste.exe para os testes de impressão das tags. Modelo: ppEscPosEpson; Porta RAW:EPSON TM-T20X Receipet Colunas: 48; Espaços: 40; Linhas Pular: 5; Pag. codigo: pc860; Logo: KC1: 32; KC2: 32; FatorX: 1; FatorY: 1; Exemplo de configuração no demo PosPrinterTeste: Resultados das impressões Formatação de carácter: Todas as propriedades funcionaram corretamente, exceto a fonte itálico (Já não era suportada na TM-T20). Alinhamento: Os alinhamentos foram impressos corretamente. QRCode: Todos QRCode impressos corretamente. Código de Barras: Os tipos std25, CODE11 e MSI não foram impressos (Mesmo comportamento da TM-T20). Logotipo: Logo impresso corretamente. Page Mode: Como podemos observar o Page Mode é suportado. Testes de Acentuação Utilizando um pantograma da língua portuguesa, realizamos diversas impressões com diferentes páginas de código, usando as fontes do Tipo A e B. Pantograma utilizado: À noite, vovô Kowalsky vê o ímã cair no pé do pingüim queixoso e vovó põe açúcar no chá de tâmaras do jabuti feliz. ÁÉÍÓÚáéíóúçÇãõÃÕÊêÂâÔôÀà Resultados obtidos: pc437: Todos os til foram ignorados; pc850: Todos os acentos foram impressos corretamente; pc852: Alguns acentos circunflexos, todas as crases e o til foram ignorados; pc860: Todos os acentos foram impressos corretamente; pcUTF8: Esta impressora não suporta UTF8; pc1252: Todos os acentos foram impressos corretamente; Impressão de extratos do SAT Utilizando o demo SATTeste, testamos a impressão de extratos de venda com 3 itens, as impressões foram realizadas em Fortes Report e em EscPOS, com as opções Logo Lateral e QRCode Lateral, desativadas e posteriormente ativadas. Tela de configuração de Impressão do SATTeste: Cupom Fortes: Cupom Esc/POS: QRCode e Logo Lateral ativados: Cupom Fortes: Cupom Esc/POS: Leitura de Status Realizamos testes de “Leitura de Status” através das conexões de porta COM Física e COM/Emulada, veja abaixo os resultados das leituras realizadas. Status Porta COM/Emulada Porta COM Física Pronta par uso Nenhum erro Encontrado Nenhum erro Encontrado Tampa Aberta StOffline, stTampaAberta StOffline, stTampaAberta Pouco Papel Nenhum erro Encontrado Nenhum erro Encontrado Sem Papel StSemPapel, stOffline StSemPapel, stOffline Gaveta Aberta stGavetaAberta stGavetaAberta Leitura de Informações O resultado do comando para Leitura de Informações, foi retornado corretamente nos três tipos de conexões testados. COM FÍSICA COM EMULADA ETHERNET Fabricante=EPSON Firmware=10.01 ESC/POS Modelo=TM-T20X Serial=X5Z7000035 Guilhotina=1 Fabricante=EPSON Firmware=10.01 ESC/POS Modelo=TM-T20X Serial=X5Z7000035 Guilhotina=1 Fabricante=EPSON Firmware=13.02 ESC/POS Modelo=TM-T20X Serial=X5Z8000018 Guilhotina=1 TAG de Gaveta Abertura de gaveta funcionou como esperado, através da conexão com RJ11. TAGS ENVIADAS: Abertura da Gaveta padrão </abre_gaveta> Abertura da Gaveta específica <abre_gaveta>1</abre_gaveta> </corte_total> Teste de Desempenho Utilizando o demo SATTeste calculamos o tempo médio que o equipamento leva para imprimir extratos de venda, é cronometrado desde que se inicia a impressão do extrato até o corte final do mesmo, incluímos também neste relatório a quantidade de papel impresso para cada quantidade de itens. ATENÇÃO: Este teste difere dos realizados anteriormente, onde era calculado o tempo de envio da impressão do componente para o equipamento e não o tempo de impressão propriamente. Configuração de impressão do SATTeste: Tipo de conexão: USB/RAW Logo Lateral: Ativo Espaços entre linhas: 40 QRCode Lateral: Ativo Linhas à pulas: 5 Colunas: 48 Logo Lateral: Ativo Espaços entre linhas: 40 QRCode Lateral: Ativo Tabela de Resultados: NOTA: Resultados em milisegundos. Em uma comparação com o modelo TM-T20, imprimindo extratos de 100 e 200 itens, é possível observar o quanto a TM-T20X é mais rápida que sua antecessora. Ambas impressoras com a configuração “Printing Speed” em Level 13 (Fast). A nova TM-T20X foi desenvolvida com foco em performance, elevando sua velocidade de impressão. Em uma comparação com sua antecessora, é possível observar que o novo modelo diminui um pouco a nitidez da impressão, o que não atrapalha a leitura do cupom, esta diferença é perceptível quando ambas são impressas em modo Default (Padrão de Fábrica), porém se este for um fator crucial para sua operação, é possível diminuir o Printing Speed para 5 com uma densidade de impressão para 7, melhorando a nitidez. Veja como realizar esta alteração seguindo as orientações descritas em Autoteste, ou altere direto pelo software Epson TM-T20X Utility. Veja abaixo a alteração da velocidade de impressão e densidade mencionadas acima, no software utilitário Epson. Considerações Esta nova impressora da Epson se diferencia nos seguintes aspectos da TM-T20. Tamanho um pouco menor Mais leve Design moderno e atualizado Velocidade de impressão Porta serial RS-232 O Painel de indicações da impressora saiu da parte superior e foi para a parte frontal, próximo ao botão power, uma vantagem nesta linha de impressoras é a característica da fonte (Bivolt) ser embutida no equipamento, não sendo necessário uma fonte externa. Sua instalação e configuração de drivers é simples em Windows ou Linux, basta apenas instalar o driver fornecido pelo fabricante. (Lembrando que a porta de comunicação pode ser escolhida de acordo com o uso aplicado ao equipamento.) A TM-T20X é compatível com o driver da TM-T20, pois em casos onde a TM-T20 já está instalada, basta trocá-la pela TM-T20X. Tanto a porta COM FÍSICA quanto a EMULADA retornaram os “Status de Impressora” corretamente, é preciso se atentar as configurações de buffer, pois extratos com grande quantidade de itens é necessário configurar o Buffer de Envio e Espera de Buffer, caso contrário a impressão não será completa. Nos testes de impressões a impressora se comportou muito bem, imprimindo várias páginas de código, formatação de carácter, alinhamento, page mode e todos os qrcodes, na impressão de código de barras seu comportamento foi semelhante ao da TM-T20 não imprimindo os tipos std25, CODE11 e MSI. Nas impressões de acentuação foi possível observar que a impressora não suporta UTF8. Analisando os testes de velocidade de impressão, podemos ver que este equipamento se sai muito bem neste quesito levando apenas 4 segundos para imprimir um cupom de 200 itens, diferença de quase 1s se comparada com o modelo TM-T20, é importante também se atentar a quantidade de papel gasto em cada teste aplicado. A impressora TM-T20X será comercializada em 2 modelos, com conexões USB/Serial e outra versão somente Ethernet. Porém a Versão com USB/Serial só contém o cabo USB, o cabo serial não acompanha o equipamento. Outras especificações Fontes de impressão: Fonte A: 12 pts. x 24 pts. | Fonte B: 9 pts. x 17 pts. (largura x altura) Capacidade de colunas: Padrão: largura do papel 80 mm: Fonte A: 48 colunas | Fonte B: 64 colunas; Modo de 42 colunas: largura do papel 80 mm: Fonte A: 42 colunas | Fonte B: 60 colunas Tamanho dos caracteres: Fonte A: 1,25 mm x 3 mm | Fonte B: 1,88 mm x 2,13 mm (largura x altura) Conjunto de caracteres: 95 alfanumérico, 18 conjuntos de caracteres internacionais, 128 x 43 gráficos estendidos. Instalação Linux Testamos também a impressora em ambiente Linux OpenSuse Tumbleweed versão 20190810. Veja abaixo como configurar a impressora neste ambiente: 1- Abra um terminal e digite o comando a seguir: dmesg –follow 2- Conecte a impressora ao computador. É possível observar como será reconhecida a impressora, em nosso exemplo foi reconhecida como “usblp0” 3- Verifique no diretório dev se foi criado o arquivo de comunicação com a impressora. ls /dev/usb/ 4- Para testar envie um teste direcionando para a porta criada. echo “Teste de Impressão Projeto ACBr” > dev/usb/lp0 5- Basta configurar a porta /dev/usb/lp0 no componente. Veja na imagem abaixo o comandos citados acima: Anexos Cabo Serial Para quem deseja utilizar comunicação serial, segue esquema de pinagem para compra ou confecção do cabo, observe que as duas pontas são fêmeas.
  15. Boa Tarde, Nos últimos dias estive trabalhando em cima de formas mais simples para trabalhar com impressão de etiquetas para diversas impressoras como por exemplo Argox, Zebra, Metrologic, Etc... Acabei chegando ao projeto ACBR por acaso e tentei fazer alguma utilização das DLLs disponibilizadas por vocês. Porém tive dificuldades quanto as utilidades. Então vem algumas duvidas para meu melhor compreendimento: 1- É possível utilizar a ACBrPosPrinter.dll para me comunicar com as impressoras que mencionei acima? 2- Estive tendo problemas para melhor verificação das funções da dll, não sei se não procurei direito mas não teria uma documentação com as configurações utilizadas nas funções da DLL? Obs: Atualmente utilizo a linguagem Visual FoxPro e estou implementando ao meu sistema. Qualquer ajuda seria ótima. Obrigado!
  16. Bom dia. Preciso enviar a Logomarca que já está armazenada na memória da Impressora Não Fiscal de marca Bematech, através de um TXT. Utilizei o ACBrPosPrinter para realizar alguns testes, e no mesmo, há o comando de Logotipo: </zera> </ce> <logo_imprimir>1</logo_imprimir> <logo_kc1>32</logo_kc1> <logo_kc2>32</logo_kc2> <logo_fatorx>1</logo_fatorx> <logo_fatory>1</logo_fatory> </logo> </corte_total> Realizei o teste através de várias maneiras, mas não obtive êxito, alguém saberia de outro método?
  17. Boa-tarde, Estamos usando o componente AcBrPosPrinter para geração de cupom não fiscal para nossos clientes, mas surgiu o caso de o diretório onde o mesmo é salvo conter a presença de caracteres especiais e acento (Detalhes na imagem em anexo). Na ocorrência deste problema, o componente retorna erro ao encontrar o arquivo, como se ele não estivesse no diretório indicado. O fato é que o sistema atualmente roda em cerca de 120 clientes e não podemos mudar o nome do diretório tão facilmente para não conter acentos. Pelo que pude averiguar a codificação do diretório é perdida ao passar o parâmetro para a função imprimir() do componente. Existe alguma forma de circunvir este problema, talvez alguma configuração que esteja esquecendo? Obrigado.
  18. Boa tarde pessoal Estou utilizando o ACBrPosPrinter para imprimir em um ticket nao fiscal. Localmente ou compartilhando a impressora funciona, utilizando o programa exemplo. Quando entro em um Remote Desktop, a impressora aparece como redirecionada, drivers instalados em ambos (cliente / Server), tento enviar um teste e nao vai. Se mandar uma pagina de teste do TS nessa impressora redirecionada, funciona normalmente também. Alguém saberia me dizer o que pode ser ou se alguém já passou por isso? Grato.
  19. O que é o ACBrPosPrinter e Esc/Pos ? Para quem ainda não conhece, o ACBrPosPrinter é o nosso componente para acesso a Impressoras de Bobinas, Não fiscais... Essas impressoras, denominadas Impressoras POS (Point of Sale), contemplam uma linguagem de impressão de linha, interna, onde podemos realizar tarefas como: Modificar os atributos de impressão Imprimir códigos de barras 1D e 2D (QRCode) Acionar dispositivos ligados a Impressora, como Gaveta de Dinheiro, Guilhotina Ler status da Impressora (Tampa aberta, pouco ou sem papel, etc) No mercado brasileiro, há vários modelos, que contemplam várias linguagens, como por exemplo: EscPos, EscBema, EscDaruma, etc... As linguagens são chamadas de "Esc", pois os comandos geralmente iniciam com o caractere não imprimível, ESC ou #27... Exemplo: se enviarmos para a Impressora a String: chr(27) + 'E' + chr(01), ligaremos o modo Negrito A grande maioria dos fabricantes, procurou seguir o padrão Epson, que é a marca mundialmente líder nesse segmento, e a sua linguagem Epson Esc/Pos... O componente ACBrPosPrinter suporta a grande maioria das linguagens e modelos existentes no mercado brasileiro... mas nem todos os recursos, estão disponíveis em todas as linguagens... Usar o ACBrPosPrinter é extremamente simples, e não requer o conhecimento de Esc/Pos... Através de suas Tags, você pode construir ricos relatórios, com várias formatações de fontes, alinhamento, Imagens, códigos de barra e QRCode... A título de Exemplo, usamos o próprio componente ACBrPosPrinter, para criar o Extrato do SAT, Unit ACBrSATExtratoESCPOS.pas e o DANFCe, unit ACBrNFeDANFeESCPOS.pas Se você usa o ACBrMonitorPLUS, poderá acessar o ACBrPosPrinter pelo objeto ESCPOS... Veja no manual: https://acbr.sourceforge.io/ACBrMonitor/ESCPOSImprimirTags.html Você pode baixar um Demo compilado do ACBrPosPrinter em: Você pode baixar uma Apresentação sobre o ACBrPosPrinter em: Se você não programa em ObjectPascal (Delphi/Lazarus), pode baixar a biblioteca (DLL) ACBrLibPosPrinter em: https://www.projetoacbr.com.br/forum/files/category/35-acbrlibposprinter/ Sobre a Impressão de Imagens no ACBrPosPrinter A muito tempo eu sentia falta dos seguintes recursos, no componente ACBrPosPrinter Impressão de Imagens Gravação e manipulação de Logos na memória da Impressora... Agora isso já é possível... Após muita pesquisa, e com a ajuda de vários outros artigos que encontrei na Internet (veja referência nos fontes), consegui implementar a Impressão de Imagens no modo "Raster Image"... Devido a característica desses equipamentos, apenas a impressão de Imagens monocromáticas é suportada. Existem vários sites de conversão de Imagem, para BMP Monocromático, on-line, como por exemplo: https://online-converting.com/image/convert2bmp/ Novos métodos no componente ACBrPosPrinter procedure ImprimirImagemStream(ABMPStream: TStream); // Permite Imprimir uma Imagem, no formato BMP Monocromático, de um Stream procedure ImprimirImagemArquivo(ArquivoBMP: String); // Carrega e imprime uma Imagem de um Arquivo. Em aplicações visuais (não console) será usado o Objeto TPicture, que permite carregar vários formatos de Imagem, podendo ser Colorida ou em Escala de cinza. A Imagem será convertida para BMP Monocromática. Entretanto, procure sempre usar Imagens BMP Moncromáticas, para evitar processamento desnecessário procedure ImprimirImagemRasterStr(const ARasterStr: AnsiString; AWidth, AHeight: Integer); // Imprime uma Imagem a partir de uma String no formato "Raster Image" (veja abaixo) procedure ImprimirLogo(AKC1: Integer = -1; AKC2: Integer = -1; AFatorX: Integer = -1; AFatorY: Integer = -1); // Imprime um Logo préviamente gravado na memória da Impressora. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure GravarLogoStream(ABMPStream: TStream; AKC1: Integer = -1; AKC2: Integer = -1); // Grava uma Imagem de Logo, no formato BMP Monocromático, a partir de um Stream, nas posições informadas. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure GravarLogoArquivo(ArquivoBMP: String; AKC1: Integer = -1; AKC2: Integer = -1); // Grava uma Imagem de Logo, a partir de um arquivo em Disco, nas posições informadas. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo procedure ApagarLogo(AKC1: Integer = -1; AKC2: Integer = -1); // Remove um Logo da memória da Impressora. Se os parâmetros não foram informados, serão usados os valores de ACBrPosPrinter.ConfigLogo Nova Tag de Bloco <bmp> - Imprime Imagem BMP monocromática. Conteúdo pode ser: Path da Imagem, Stream em Base64 ou AscII Art (0 e 1) Veja alguns exemplos de uso: Inicializa </zera>, define o alinhamento no centro </ce>, e efetua a impressão da Imagem em disco, no Path "C:\temp\acbrmono.bmp" </zera></ce><bmp>C:\temp\acbrmono.bmp</bmp> Imprimir uma Imagem de BMP Mono, codificada em Base64 <bmp> Qk3eDQAAAAAAAD4AAAAoAAAA+gAAAG0AAAABAAEAAAAAAKANAAAAAAAAAAAAAAIAAAAAAAAAAAAAAP///wD/////////////////////////////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D/////////////////////////////////////////wP4AAAAAAAAAAAAAAA8A8AAAAAAAAAAAAAAAAAAAAD/A/AAAAAAAAAAAAAAADwD4AAAAAAAAAAAAAAAAAAAAD8D4AAAAAAAAAAAAAAAPAHwAAAAAAAAAAAAAAAAAAAAHwOAAAAAAAAAAAAAAAA8APgAAAAAAAAAgAAAAAAAAAAHAwAAAAAAAAAAAAAAADwAfAAAAAAAAAcAAAAAAAAAAAcDAAAAAAAAAAAAAAAAPAA+AAAAAAAAfgAAAAAAAAAAAwIAAAAAAAAAAAAADgAQAB8AAAAAAAH+AAAAAAAAAAABAgAAAAAAAAAAAAACAAAABAAAAAAAAAAAAAAAAAAAAAEAAAAAADDvjnnNn489ngHw4zM+cPM/MD8w7PO4AAAAAAAAAAAAMN+e/c2fn7+/A/nzMz9x+z8wP7Hd27gAAAAAAAAAAAA/2ZnNzZ2YO7ODGxszf3ODOzAxsdx7uAAAAAAAAAAAABmZmc3Nj7gfs4cDGzN/c4MfMDO4ffu4AAAAAAAAAAAAH5mYzd2BmYOzBwObuzNzmxMwPzgdg7gAAAAAAAAAAAAfGb55+5+fHx4HAfP/Pn3zHzAzvvz7uAAAAAAAAAAAAA8AGAAAAAAAAAO4AAAAAAAAMDOAAAA4AAAAAAIAAAAADwAIAAAAAB4AA/AAAMAAAwAwPwAAA7gAAAABAgAAAAAAAAAAAAAAADwA4A+H/4AADwAAAAAAAAAAAAEDAAAAAAAAAAAAAAAAPAAAB//4AAAfAAAAAAAAAAAAAwOAAAAAAAAAAAAAAAA8AAAD/8AAAB4AAAAAAAAAAAAHA8AAAAAAAAAAAAAAADwAAAH/AAAAHAAAAAAAAAAAAA8D4AAAAAAAAAAAAAAAPAAAAPAAAAA4AAAAAAAAAAAAHwP4AAAAAAAAAAAAAAA8AAAAAAAAAHgAAAAAAAAAAAB/A/////////////////////////////////////////8D/////////////////////////////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D///////gAP///Af////gA//////+Af//4B///////wP///+AAeAB4AB4D+AAB/ADwAAAAf+B4AHgH///////A////4AA4AHgAHgfgAAB+APAAAAAH8HgAeAf//////8D////wADgAeAAeD4AAAB8A8AAAAAHweAB4B///////wP////AAPABwABw+AAAAB4DwAAAAAHx4AHgH///////A////+AA///AAPD4AAAAHwPAAAAAAPHgAeAf//////8D////4AB//8AA4eAAAAAHg8AAAAAAeeAB4B///////wP////wAH//wAHj4AAAAAeDwAAAAAB54AHgH///////A/////AAf/+AAePAAAAAA8PAAAAAADngAeAf//////8D////8AAAAAADx4AAAAAD48AAAAAAPeAB4D///////wP////wAAAAAAPHAAAAAAHjwAAAAAA94AHgP///////A/////gAAAAAA48AAP8AAOPAAP/gAB3gAeA///////8D////+AAAAAADjwAB/4AA48AA//AAH+AB4D///////wP////8AAAAAAe+AAP/wADzwAD/+AAf4AHgf///////A/////wAAAAAB/4AB8PgAPPAAOf4AB/gAeB///////8D/////AAAAAAP/AAHgfAAc8AA7zgAH+AB4H///////wP////+AAAAAA/8AA8A8AP7wAD/+AAd4AHg////////A/////4AAAAAD5wADgBwH/vAAP/4AD3gAeD///////8D/////wAH/AAePAAOAHB/+8AA//AAPeAA4P///////wP/////AAf8ABw8AA4Af/8DwAD/gAA54ADg////////A/////8AB/gAPDwAHgB//APAAAAAAHngAPH///////8D/////4AH+AA8PAAeAD+AA8AAAAAA+eAAf////////wP/////gAf4ADw8AB4APgADwAAAAAHx4AB/////////A/////+AA/gAf7wAHgAwAAPAAAAAA+HgAH////////8D/////8AD8AB//AAeAAAAA8AAAAAfweAAHP///////wP/////wAHwAH/8AB4AAAADwAAAAB+B4AAAf///////A//////gAfAA8fwAHgA4AAPAAAAAB8HgAAA///////8D/////+AB4ADwPAAOAH+AA8AAAAADweAAAD///////wP/////4ADgAeA8AA4Af/gDwAAAAAHh4AAAP///////A//////wAMAB4BwADgB//+PAAP/AAPHgAgAf//////8D//////AAwAHAHAAPAHP/+8AA/+AA8eACAB///////wP/////+ADAA8AcAAfx8A/7wAD/4ADx4AMAD///////A//////4AEADgB4AB//gAPPAAODgAHHgA4AP//////8D//////gAQAOAHgAD/+AA88AA8+AAeeADwB///////wP//////AAAB4AOAAH/gADjwAD/4AB5////////////A//////8AAAHgA8AAP8AAOPAAP/gAHn///////////8D//////wAAA8ABwAAAAAB48AA/wAAef///////////wP//////gAADwAHgAAAAAPDwAAAAABwAAH/////////A//////+AAAOAAOAAAAAA8PAAAAAAPAAAf////////8D//////8AAB4AA+AAAAAHg8AAAAAA8AAD/////////wP//////wAAHgAB4AAAAA8DwAAAAADgAAf/////////A///////AAA8AAD4AAAAHwPAAAAAA/AAD/////////8D//////8AADwAAPgAAAA+A8AAAAAD+AAP/////////wP//////4AAPAAAfgAAAHwDwAAAAAf4AB//////////A///////gAA4AAAfgAAB+APAAAAAHzwAP/////////8D///////AAHgAAA/gAAfwA8AAAAD/PgA//////////wP/////////8AAAB////8AD//////wfAH//////////A//////////wAAAB////gAP//////88A//////////8D//////////gAAAB///4AB////////4H//////////wP//////////AAAAAP/wAAHgAAAAB//w///////////A//////////+AAAAAAHAAA8AAAAAAf/n//////////8D//////////8AAAAAAcAAHwAAAAAAB////////////wP//////////4AAAAABwAAeAAAAAAAAf///////////A///////////wAAAAAHAADwAAAAAAAA///////////8D///////////gAAAAAcAAeAAAAAAAAH///////////wP///////////AAAAABwAD4AAAAAAAA////////////A////////////AAAAAHAAeAAAAAAAAH///////////8D///////////8AAAAAeAD4AAAAAAAA////////////wP///////////4AAAAB4APAAAAAAAAH////////////A////////////4AAAAHgB4AAAAAAAB////////////8D////////////wAAAAeAPAAAAAAAAP////////////wP////////////wAAAB4B8AAAAAAAD/////////////A/////////////gAAAHgHgAAAAAAAf////////////8D/////////////AAAAOA8AAAAAAAD/////////////wP/////////////AAAA4HwAAAAAAA//////////////A//////////////AAADgeAAAAAAAP/////////////8D//////////////AAAPHwAAAAAAD//////////////wP//////////////AAA8eAAAAAAA///////////////A///////////////AADz4AAAAAAH//////////////8D///////////////AAPeAAAAAAD///////////////wP///////////////gA/4AAAAAA////////////////A////////////////wD/AAAAAA////////////////8D////////////////wH4AAAAAP////////////////wP////////////////4fAAAAAH/////////////////A//////////////////8AAAAP/////////////////8D//////////////////8AAA///////////////////wP/////////////////////////////////////////A/////////////////////////////////////////8D/////////////////////////////////////////wA== </bmp> Imprimir uma Imagem, baseado em ASCII ART Na Unit ACBrImage.pas, do pacote ACBrComum, é onde a mágica acontece... essa Unit implementa os seguintes métodos function IsPCX(S: TStream; CheckIsMono: Boolean = True): Boolean; // Retorna True se o Stream contém uma Imagem em PCX function IsBMP(S: TStream; CheckIsMono: Boolean = True): Boolean; // Retorna True se o Stream contém uma Imagem em BMP procedure RasterStrToAscII(const ARasterStr: AnsiString; AWidth: Integer; InvertImg: Boolean; AscIIArtLines: TStrings); // Converte uma String codificada em "Raster Image", para ASCII ART procedure AscIIToRasterStr(AscIIArtLines: TStrings; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString); // Converte uma String codificada em ASCII ART para "Raster Image" procedure BMPMonoToRasterStr(ABMPStream: TStream; InvertImg: Boolean; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString); // Converte uma Imagem no formato BMP Monocromático, gravada em um Stream, para uma String codificada em "Raster Image" procedure RasterStrToBMPMono(ARasterStr: AnsiString; AWidth: Integer; InvertImg: Boolean; ABMPStream: TStream); // Converte uma String codificada e "Raster Image", para uma Imagem no formato BMP Monocromático, gravando-a em um Stream {$IfNDef NOGUI} procedure BitmapToRasterStr(ABmpSrc: TBitmap; InvertImg: Boolean; out AWidth: Integer; out AHeight: Integer; out ARasterStr: AnsiString; LuminosityThreshold: Byte = C_LUMINOSITY_THRESHOLD); // Apenas disponível se a aplicação não for console. converte uma Imagem de um TBitMap, para uma String codificada e "Raster Image" {$EndIf} Use a força, leia os fontes Não deixe de estudar os fontes do Projeto Demo, PosPrinterTeste, na pasta: \ACBr\Exemplos\ACBrSerial\ACBrPosPrinter\Delphi Nesse projeto há vários exemplos de como Imprimir Imagens, e manipular Logotipos, usando as Tags e Métodos do componente ACBrPosPrinter O que é o modo "Raster Image" ? O Modo Raster é um fluxo de Bytes que representam os Pixels da Imagem... https://pt.wikipedia.org/wiki/Raster Exemplo: Imagine a Seguinte imagem, de 16 x 16 Pixels... Se fôssemos representá-la em ASCII ART, teríamos: 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 1010101010101010 Para transformá-la em Raster, agrupamos os Bits, em Bytes (8 bits)... portanto a primeira linha ficaria: Em Binário: 10101010 + 10101010 Em Hexa: AA + AA Em Decimal: 170 + 170 Então a String em Raster Image, da Imagem acima seria o equivalente a: #170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170+#170 Para imprimir uma String em Raster, é fundamental sabermos qual a largura em Pixels, da imagem A Epson disponibiliza utilitário, para converter imagens para o formato Raster: Epson BmpToRaster (o estudo do conteúdo do arquivo gerado por esse Utilitário, foi essencial na implementação dos métodos de ACBrImage)
  20. Quando definimos o número de linhas no Buffer para 10 e o número de cópias para 2, por exemplo, no comando ACBrPosPrinter.Imprimir() ele não imprime o cupom completo e depois a 2a via completa novamente. ACBrPosPrinter.LinhasBuffer := 10; E ACBrPosPrinter.Imprimir( '', False, True, True, 2 ); LOG: Observem que no 1o esvaziamento não respeitou o número de cópias, somente no 2o.
  21. olá Pessoal! boa Tarde. Tudo bem? espero que Sim. após A revision: 16475 surgiu alguns erros no exemplo ACBrPosPrinter. não sei se aconteceu com mais alguém. aqui os erros foram: Undeclared identifier: 'TACBrPosPrinterModelo' Undeclared identifier: 'TACBrPosPaginaCodigo'
  22. Estou tendo problemas no seguinte caso: Eu tento imprimir algo com a impressora desligada e gera um erro, até ai tudo bem, normal, mas quando eu ligo ela e mando imprimir denovo, a impressão não sai, o componente retorna erros de timeout e acesso negado, mesmo a impressora já ligada e pronto pra uso, o erro é resolvido se eu desconectar e conectar o USB novamente, nem preciso reiniciar a impressora, apenas removendo e colocando denovo o cabo USB. Lembrando que se eu não desligar a impressora, as impressões saem normalmente. Meu objetivo é fazer com que o meu programa consiga tratar erros e tomar decisões baseadas em certos casos, por exemplo, se eu desligar a impressora e tentar mandar uma impressão eu quero que tente 4 vezes e depois mude a porta do componente (apenas um exemplo).
  23. Boa tarde estou utilzando o exemplo que vem junto do ACBR e ao mandar imprimir na Elgin i7 quando pede negrito ela não vem, e ainda come letras. Alguém sabe me dizer algo sobre isso ?
  24. Bom dia pessoal, Temos um cliente que possui a impressora POS Bematech MP4200. A mais de uma semana que está dando problema em ambos os caixas do cliente de transmissão. O cliente efetua a venda de alguns cupons e acontece erro na impressora. Olhando os logs do nosso sistema, temos: ---------------------------------------------------------------------------------------- [17/08/2018 18:16:54] [VALIDARATIVOSAT] A impressora não está em operação. ---------------------------------------------------------------------------------------- Analisando o log do componente ACBrPOSPrinter, foi verificado que em todos os momentos que recebemos este erro, é logado: -- 17/08 18:16:19:811 - TraduzirTag(</corte_total>) -> [LF] [LF] [LF] [LF] [LF] [LF] [LF][ESC]w -- 17/08 18:16:19:826 - EnviarStringDevice( [ESC]@[GS][249] [NUL][ESC]2[ESC]a[SOH][FS]p[SOH][NUL][LF][ESC]************[ESC]F[LF][ESC][15]**************[LF][ESC]a[SOH][ESC][15]RE Informatica Ltda[LF][ESC]a[SOH][ESC][15]www.iws.com.br[LF][ESC]@[GS][249] [NUL][ESC]2[LF] [LF] [LF] [LF] [LF] [LF] [LF] [LF][ESC]w[LF]) -- 17/08 18:16:24:818 - TX -> [GS][248]1 -- 17/08 18:16:25:832 - TX -> [GS][248]1 -- 17/08 18:16:26:846 - TX -> [GS][248]1 -- 17/08 18:16:27:860 - TX -> [GS][248]1 -- 17/08 18:16:28:874 - TX -> [GS][248]1 -- 17/08 18:16:29:888 - TX -> [GS][248]1 -- 17/08 18:16:30:902 - TX -> [GS][248]1 -- 17/08 18:16:31:916 - TX -> [GS][248]1 -- 17/08 18:16:32:930 - TX -> [GS][248]1 -- 17/08 18:16:33:944 - TX -> [GS][248]1 -- 17/08 18:16:34:958 - TX -> [GS][248]1 -- 17/08 18:16:35:972 - TX -> [GS][248]1 -- 17/08 18:16:36:986 - TX -> [GS][248]1 -- 17/08 18:16:38:000 - TX -> [GS][248]1 -- 17/08 18:16:39:014 - TX -> [GS][248]1 -- 17/08 18:16:40:028 - TX -> [GS][248]1 -- 17/08 18:16:41:042 - TX -> [GS][248]1 -- 17/08 18:16:42:056 - TX -> [GS][248]1 -- 17/08 18:16:43:070 - TX -> [GS][248]1 -- 17/08 18:16:44:084 - TX -> [GS][248]1 -- 17/08 18:16:45:098 - TX -> [GS][248]1 -- 17/08 18:16:46:112 - TX -> [GS][248]1 -- 17/08 18:16:47:126 - TX -> [GS][248]1 -- 17/08 18:16:48:140 - TX -> [GS][248]1 -- 17/08 18:16:49:154 - TX -> [GS][248]1 -- 17/08 18:16:50:168 - TX -> [GS][248]1 -- 17/08 18:16:51:182 - TX -> [GS][248]1 -- 17/08 18:16:52:196 - TX -> [GS][248]1 -- 17/08 18:16:53:210 - TX -> [GS][248]1 Observei que ao efetuar a ativação do equipamento são utilizados estes parâmetros: -------------------------------------------------------------------------------- ATIVAR - 17/08/18 18:24:58:995 - Modelo.: EscBematech - TimeOut: 3 - Serial.: COM7 - BAUD=9600 DATA=8 PARITY=N STOP=1 HANDSHAKE= MAXBANDWIDTH=0 SENDBYTESCOUNT=0 SENDBYTESINTERVAL=0 -------------------------------------------------------------------------------- Gostaria da opinião de vocês sobre este assunto. Desde já agradeço.
  25. Boa noite pessoal, fiquei na dúvida em qual área do fórum postar essa dúvida! Estou finalizando meu sistema para emissão de NFC-e com ACBrSAT e ACBrPosPrinter e está correndo tudo muito bem, mas sempre temos que testar vários caminhos onde temos que simular erros. Então estou tentando verificar o status da minha impressora Epson TM T20 (USB), caso ocorram situações em que a impressora não esteja ligada, quando usava a "InterfaceEpsonNF.dll" existia um método onde controlava com uma exception esse status e avisava o usuário do problema, mas com o componente ACBrPosPrinter não consigo nem gerar uma exception. Desligo a impressora e mando imprimir, mas não gera nenhum tipo de erro, existe a possibilidade de capturar esse status com o ACBrPosPrinter?
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.