Jump to content

Search the Community

Showing results for tags 'acbrposprinter'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

There are no results to display.

Forums

  • Fórum Aberto - ACBr
    • ACBr News
    • Equipamentos testados
    • Base de Conhecimento
    • Dúvidas Gerais sobre o ACBr
    • ACBrSerial
    • ACBrSAT
    • ACBrNFe
    • ACBrMonitor PLUS
    • ACBrDFe
    • ACBrTEFD e Dúvidas sobre TEF
    • ACBrTXT
    • ACBrBoleto
    • ACBrDiversos
    • ACBrTCP
    • ACBrFramework
    • ACBrLIB
    • Dia do ACBr
  • Suporte Pago - SAC
    • 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
    • ACBr's Pub
    • Legislação Fiscal e Tributária
    • Object Pascal - Delphi & Lazarus
    • Data Base
    • Classificados
    • Dúvidas não relacionadas ao ACBr

Categories

  • Suporte Pago - SAC
    • ACBrMonitorPLUS - SAC
    • Utilitários - SAC
    • ACBrLib - SAC
    • Dia do ACBr 1a edição
  • Free Download
    • ACBrMonitorPLUS
    • Demos / Testes / Utilitários
    • ACBrLIB
    • Apresentações - Palestras

Calendars

  • Eventos - Palestras - Webinars
  • Prazos SEFAZ
  • Community Calendar
  • Feriados Nacionais

Blogs

  • Daniel Simoes' Blog
  • André Ferreira de Moraes
  • Moderadores ACBr
  • Teste de Blog
  • Notícias do ACBr

Categories

  • Suporte Pago - SAC
    • Webinars
    • Video Aulas
    • Palestras - Dia do ACBr 1a Ediçao
  • Vídeos Abertos
    • Video Aulas
    • Comunicados
    • Palestras - Dia do ACBr 1a Ediçao
  • Campanhas promocionais

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website URL


Skype


Localização


Interesses


CNPJ da Empresa


CPF

Found 33 results

  1. 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.
  2. 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'
  3. Olá pessoal, Introduzi no componente ACBrPosPrinter, um novo mecanismo de acesso a Impressora Agora poderemos acessar algumas impressoras, usando a Sintaxe: ACBrPosPrinter1.Porta := 'USB: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 "USB:", 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
  4. 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.
  5. 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)
  6. 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).
  7. 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 ?
  8. 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.
  9. Version 20190212

    80 downloads

    Arquivo contendo o Demo e a classe de Alto nível em Java.
  10. Version 20190212

    142 downloads

    Arquivo contendo o Demo e a classe de Alto nivel em C#. Para compilar o mesmo basta baixar a versão CDECL da lib e colocar em Import\ACBrLibPosPrinter\Resources.
  11. Bom dia!!! Estive tentando utilizar o exemplo ACBrPosPrinter, porém essa impressora ao instalar o drive dela ela cria uma porta virtual onde ela me define com COM2. Só que o cabo dela é USB. Alguém pode me dar um auxilio de como corrigir isso?
  12. Utilizei o ACBrPosPrinter para imprimir em uma impressora térmica da Epson TM-T20. A princípio está funcionando bem, uso para imprimir comanda para restaurante, é impresso o Logo do cliente (armazenado na impressora), número da comanda e o código de barras do número da comanda. No entanto o nosso cliente deseja que o número da comanda seja impresso em tamanho maior, mas já estou mandando ele como expandido. Existe uma forma de aumentar mais o tamanho do texto? Se eu utilizar outra forma de impressão como usando o fortes consigo aumentar o texto, porém, não consigo a impressão do logo da memória da impressora. Se alguém tiver uma ideia agradeço.
  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. Version 20190212

    106 downloads

    Arquivo contendo o Demo e a classe de Alto nivel em VB6. Obs.: O VB6 usa apenas dll StdCall em x86(32 Bits).
  15. Version 2019.1.7.1

    280 downloads

    Biblioteca para utilização do Componente ACBrPosPrinter em outras linguagens de programação.
  16. Boa tarde! Estou implementando a NFC-e no sistema aqui da empresa e estou utilizando o componente acbrnfe para envio junto com o Fortes REport. No momento a NFC-e esta sendo mostrado em Preview,mas gostaria que fosse impresso numa impressora não fiscal MP-4000 da Bematech. Gostaria de saber se tem como do preview ja mandar a impressão para uma impressora termina ( MP-4000 da Bematech.) ou qualquer outro modelo e marca? E também se existe a necessidade de usar algum componente do Acbr para configuração de impressoras etc,como por exemplo o ACBrNFeDANFeESCPOS e o ACBrPosPrinter? Atenciosamente, Tatiane Peixoto.
  17. Bom dia Gostaria de saber em qual arquivo .pas se encontra a montagem da impressão da NFC-e quando enviamos o comando AcbrNFce.NotasFiscais.imprimir; O motivo é que quero comparar os fontes que atualizei essa semana com os fontes das versões anteriores, pois estou recebendo reclamações de alguns clientes que alegam estar faltando informações e até mesmo impressão pela metade, durante a impressão das NFC-e. OBS: Peço desculpas se a dúvida tiver sido de certa forma ofensiva. Desde já agradeço a atenção.
  18. Estou imprimindo via ACBrExtratoESCPOS um extrato de venda SAT, na impressora Epson TM-T20 e o cliente reclamou que as linhas estavam sendo impressas muito "juntas". Alterei a propriedade espacoentrelinhas , tanto em ExtratoESCPOS.PosPrinter.EspacoEntreLinhas=5 como diretamente em .PosPrinter.EspacoEntreLinhas=5 e continuou. Alterei para 6, 10, 50, 200 e nada. Verificando o LOG (anexo) de impressão do ACBrPOSPRINTER, verifiquei que o comando de alteração de Espacamento entre linhas não era enviado. Como proceder para resolver esse caso ? impescpos.log
  19. Ola grandes mestres To imprimindo um SAT na impressora TANCA TP-650 e na função TACBrSATExtratoESCPOS.GerarCabecalho tem o FBuffer.Add('</zera></ce></logo>'); Notei q o </logo> faz imprimir OE no cabeçalho, antes do nome fantasia (Conforme imagem). A impressora é nova, não fiz nenhuma configuração nela de logo.... comprei junto com o SDK-1000. No componente ACBrPosPrinter1 propertie PictureLogo está (None) O q estou fazendo de errado?
  20. Tenho uma dúvida com relação ao uso da propriedade Controle Porta do componente ACBRPosPrinter. Normalmente eu uso ATIVAR e DESATIVAR quando vou usar o componente para imprimir (cupom de venda, recibos, extratos, etc...) e a propriedade ControlePorta fica com False. Experimentei colocar como True, mas não notei nenhuma diferença. Pelo que entendi dessa propriedade, se estiver True ela "abre" (e depois "fecha") a comunicação com a porta. Isso seria o equivalente ao ATIVAR/DESATIVAR do componente ? Qual a situação indicada para usar ControlePorta=True e ControlePorta=False. Obrigado.
  21. Tenho um aplicativo paf e utilizo ACBrECFVirtualNFCe para emitir NFCe. Estou implementando tef e quando executo o comando "ACBrPosPrinter.LerStatusImpressora" para verificar o status da impressora antes de imprimir o TEF, da erro de comunicação. --------------------------- Debugger Exception Notification --------------------------- Project PAFMIDAS.exe raised exception class ESynaSerError with message 'Communication error 9997: Timeout during operation'. --------------------------- Break Continue Help --------------------------- O erro é porquê o componente ACBrECF esta utilizando a impressora na porta COM. Qual a melhor forma para fazer esta verificação da impressora?
  22. Bom dia, Estou tendo um problema na impressão de código de barras com a impressora Bematech MP 4200 TH. Na Impressora Elgin I9 (Configurada como EPSON) imprime normal. Estou com ambas impressoras conectadas no mesmo pc só mudando a porta serial. Atualizei o firmware da MP 4200 para a versão 1.7 mas também sem solução. O Problema persiste tanto na minha aplicação quanto nos exemplos ACBrSAT e ACBrPosPrinter. Segue algumas Fotos e Prints. Obrigado.
  23. Boa Tarde a todos, Estou tentando usar o componente AcbrPosPrinter para comunicar com uma impressora não fiscal Daruma DR700. O meu objetivo é conseguir monitorar se a gaveta está aberta ou não, essa é uma exigência de um cliente nosso para a utilização do nosso aplicativo de ponto de venda para a tecnologia NFCE. Pra fazer o teste estou usando o aplicativo de exemplo PosPrinterTeste.exe, já consegui fazer o teste com a impressora bematech e consegui ler o status da impressora de maneira correta, mas quando tento na impressora Daruma do nosso cliente ele está apresentando o erro Communication error 1 função incorreta. A impressora está ligada a máquina por um cabo USB e tem uma porta Serial emulada. Quando eu tento ativar a conexão com essa porta emulada o sistema está me retornando a mensagem: Communication error 1 função incorreta. Se eu tento ativar a conexão com todas as outras portas COM o sistema não mostra esse erro, só mostra pra porta emulada. Já entrei em contato com o pessoal da Daruma e eles não souberam me falar se existe alguma outra configuração para que esse erro pare de acontecer, vocês tem ideia do que posso fazer?
  24. ACBRPosPrinter depois da Atualização não se conecta mais na bematech mp 4200 th pela LPT. A versão que eu tinha era do dia 21/05/2016, depois que eu atualizei a minha versão, não conecta mais.
  25. Ola estou com uma Epson TM-T20 serial com conversor Comtac, ela imprime no meu sistema via Spooler mas é muito lenta, por isso estou migrando para o ACBrPosPrinter. Porem, no ACBrPosPrinter não consigo se quer conectar a impressora, sempre recebendo a mensagem de erro "communication error 5: Acesso negado.", segue a baixo imgs da configuração da impressora no próprio sistema da Epson e um print da configuração no ACBrPosPrinter. Gostaria de saber qual a configuração correta para usar a TM-T20 no ACBrPosPrinter. Obrigado.
×
×
  • Create New...