我有一个EOS热敏打印机,但它不能正确打印阿拉伯字符,如下图所示:
正如您所看到的,阿拉伯语文本打印不正确,从左到右(LTR),(它应该是从右到左-RTL)。
如何在flutter中正确打印阿拉伯语文本?
扑动版本:2.5.3(稳定)所用 Package :escpos在运行Android版本(8、9、10)的多台Android设备上进行测试
mv1qrgav1#
我先用了esc_pos包,不起作用,最后用 *printing包 * 打印了一张阿拉伯文发票,效果很好,解释如下这是使用打印包的完整代码。首先,创建一个类,将参数传递给它(您需要打印的参数)在我的case 4 required param中。
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 = """
然后,您需要使用HTML来构建发票的主体(形状)
<!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; '''
创建函数当你需要使用它(例如在按钮中)printDoc(HtmlGeneratorParams帐户参数)异步{
await Printing.layoutPdf( onLayout: (format) async => await Printing.convertHtml( format: format, html: generateHtmlA(params), ), );
}现在我们将使用IconButton中的printDoc函数params是我们在开始时创建的类,我们将传递所需的参数
IconButton( onPressed: () { HtmlGeneratorParamsAccount params= HtmlGeneratorParamsAccount( list: list, payable: payableAmount.toString(), daybet: debitTxt.toString(), balance: balance.toString(), ); printDoc(params); }, icon: Icon( Icons.print, )),
9rygscc12#
你可以查一下这个回收站用了3张支票secreenshot转换小部件到图像和图像库转换到uint8和pos pront打印它,因为你爱显示您可以从here检查它
w6lpcovy3#
如果EOS热敏打印机在使用Flutter框架时无法正确打印阿拉伯字符,您可以尝试:
编码:blue_print_pos
receiptText.addText( '${invoiceCard.name}', alignment: defaultEnLang ? ReceiptAlignment.left : ReceiptAlignment.right, );
或代码:esc_pos_utils
bytes += ticket.textEncoded( encodedCode, styles: PosStyles( align: defaultEnLang ? PosAlign.left : PosAlign.right, bold: true, ), );
这里defaultEnLang保存布尔值,它是使用当前语言获取的。
defaultEnLang
3条答案
按热度按时间mv1qrgav1#
我先用了esc_pos包,不起作用,最后用 *printing包 * 打印了一张阿拉伯文发票,效果很好,解释如下
这是使用打印包的完整代码。首先,创建一个类,将参数传递给它(您需要打印的参数)在我的case 4 required param中。
然后,您需要使用HTML来构建发票的主体(形状)
创建函数
当你需要使用它(例如在按钮中)
printDoc(HtmlGeneratorParams帐户参数)异步{
}现在我们将使用IconButton中的printDoc函数
params是我们在开始时创建的类,我们将传递所需的参数
9rygscc12#
你可以查一下
这个回收站用了3张支票
secreenshot转换小部件到图像和图像库转换到uint8和pos pront打印它,因为你爱显示
您可以从here检查它
w6lpcovy3#
如果EOS热敏打印机在使用Flutter框架时无法正确打印阿拉伯字符,您可以尝试:
编码:blue_print_pos
或
代码:esc_pos_utils
这里
defaultEnLang
保存布尔值,它是使用当前语言获取的。