Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

400
Visualizações
La impresora térmica EOS no imprime correctamente los caracteres árabes cuando se usa el marco Flutter

Contexto:

Tengo una impresora térmica EOS, pero no imprime correctamente los caracteres árabes como en esta imagen a continuación:

Codificación árabe incorrecta

Como puede ver, el texto en árabe se imprime incorrectamente y de izquierda a derecha (LTR), (debería ser de derecha a izquierda - RTL).

Nota : Puede ver claramente que el texto en inglés se imprime perfectamente al final de la página.

Pregunta:

¿Cómo puedo imprimir texto en árabe de la manera correcta en flutter?

Información adicional:

Versión Flutter: 2.5.3 (Estable)

Paquete utilizado: escpos

Probado en varios dispositivos Android con la versión de Android (8, 9, 10)

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

primero he usado el paquete esc_pos y no funcionó. Al final, utilicé el paquete de impresión para imprimir una factura en árabe y funciona bien, y la explicación a continuación

Este es el código completo para usar el paquete de impresión. primero, cree una clase para pasarle los parámetros (los parámetros que necesita imprimir) en mi caso, 4 param requerido.

 class HtmlGeneratorParamsAccount { final String daybet, payable, balance; final List<AccountStatmentModel> list; HtmlGeneratorParamsAccount({ required this.daybet, required this.payable, required this.balance, required this.list, }); } String generateHtmlA(HtmlGeneratorParamsAccount p) { String items = ''' '''; for (var i = 0; i < p.list.length; i++) { DateFormat datee = DateFormat('yyyy/MM/dd', 'en'); DateTime forFormat = p.list[i].date; final String formatted = datee.format(forFormat); double amount = p.list[i].debitAmount + p.list[i].payableAmount; items += '''<tr class = "item">'''; items += '''<td>${p.list[i].description}</td>'''; items += '''<td>${formatted}</td>'''; items += '''<td>${p.list[i].opName}</td>'''; items += '''<td>${double.parse(amount.toStringAsFixed(1))}</td>'''; items += '''</tr>'''; } var pay = double.parse(p.payable).toStringAsFixed(1); var day = double.parse(p.daybet).toStringAsFixed(1); var html = """

entonces necesita usar HTML para construir el cuerpo de su factura (forma)

 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href= "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" /> <style> .invoice-box { max-width:1000px; margin: auto; padding: 8px; border: 1px solid #eee; box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); font-size: 8px; line-height: 24px; font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif; color: #555; } .invoice-box table { width: 100%; line-height: inherit; text-align: center; } .invoice-box table td { padding: 10px; vertical-align: top; } .invoice-box table tr.top table td { padding-bottom: 5px; } * { box-sizing: border-box; } .column { float: right; width:23%; padding: 16px; } .header{ text-align:center; } .row:after { content: ""; display: table; clear: both; } </style> </head> <body> <h2 class="header">كشف حساب</h2> <h3 class="header">بيانات الزبون</h3> <table> <tr> <div class="row"> <div class="column" > <h4>المبلغ</h4> <p></p> </div> <div class="column" > <h4>نوع العملية</h4> </div> <div class="column" > <h4>تاريخ</h4> </div> <div class="column" > <h4>وصف</h4> </div> </div> </tr> $items </table> <div> <p class="header">------------------------</p> <p class="header">:مجموع ${day}</p> <p class="header">:مجموع $pay</p> <p class="header">:المبلغ ${p.balance}</p> <p>---</p> <p>--</p> <p>-</p> </div> </body> </html>"""; return html; '''

crear una función

cuando necesite usarlo (en el botón, por ejemplo)

printDoc(HtmlGeneratorParamsAccount params) asíncrono {

 await Printing.layoutPdf( onLayout: (format) async => await Printing.convertHtml( format: format, html: generateHtmlA(params), ), );

} ahora usaremos la función printDoc dentro de IconButton

los parámetros son la clase que creamos al principio, y pasaremos los parámetros requeridos

 IconButton( onPressed: () { HtmlGeneratorParamsAccount params= HtmlGeneratorParamsAccount( list: list, payable: payableAmount.toString(), daybet: debitTxt.toString(), balance: balance.toString(), ); printDoc(params); }, icon: Icon( Icons.print, )),
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda