EOS 열 프린터가 Flutter 프레임워크를 사용할 때 아랍어 문자를 제대로 인쇄하지 않음
상황:
EOS 열 프린터를 가지고 있지만 아래 이미지와 같이 아랍 문자를 제대로 인쇄하지 않습니다.
보시다시피 아랍어 텍스트가 잘못 인쇄되어 왼쪽에서 오른쪽(LTR)으로 표시됩니다(오른쪽에서 왼쪽(RTL).
: 당신은 그 페이지의 끝에 영어 텍스트가 완벽하게 인쇄되어 있는 것을 분명히 볼 수 있다.
질문:.
어떻게 하면 아랍어 텍스트를 정확하게 펄럭이는 방식으로 인쇄할 수 있을까요?
추가 정보:
플러터 버전: 2.5.3(안정적)
사용된 패키지:
Android 버전(8, 9, 10)을 실행하는 여러 Android 장치에서 테스트됨
먼저 esc_pos 패키지를 사용해봤지만 작동하지 않았습니다. 결국, 나는 아랍어 인보이스를 인쇄하기 위해 를 사용했고 그것은 잘 작동하고, 아래 설명은.
인쇄 패키지를 사용하기 위한 전체 코드입니다. 먼저 클래스를 만들어 매개 변수(인쇄해야 하는 매개 변수)를 클래스에 전달합니다.
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(HtmlGeneratorParamsAccountParams) 비동기 {
await Printing.layoutPdf(
onLayout: (format) async => await Printing.convertHtml(
format: format,
html: generateHtmlA(params),
),
);
} 이제 우리는 아이콘 버튼 안에 있는 printDoc 기능을 사용할 것이다.
매개 변수는 우리가 처음에 만든 클래스이며, 우리는 필수 매개 변수를 전달할 것이다.
IconButton(
onPressed: () {
HtmlGeneratorParamsAccount params=
HtmlGeneratorParamsAccount(
list: list,
payable: payableAmount.toString(),
daybet: debitTxt.toString(),
balance: balance.toString(),
);
printDoc(params);
},
icon: Icon(
Icons.print,
)),
당신은 이것을 확인할 수 있습니다.
이 성명서는 3권이다.
위젯을 이미지 및 이미지 라이브러리로 변환하여 unint8로 변환하고 보여주고 싶은 것으로 인쇄하는 비밀샷
에서 확인할 수 있다.
Flooter 프레임워크를 사용할 때 EOS 열 프린터가 아랍 문자를 제대로 인쇄하지 않는 경우 시도할 수 있습니다.
- 스타일 구성 요소에 대한 유효성 검사/확인 추가:
코드:
receiptText.addText( '${invoiceCard.name}', alignment: defaultEnLang ? ReceiptAlignment.left : ReceiptAlignment.right, );
또는
코드:
bytes += ticket.textEncoded( encodedCode, styles: PosStyles( align: defaultEnLang ? PosAlign.left : PosAlign.right, bold: true, ), );
출력: 그리고 저는 단지 스타일링으로 관리합니다.
여기에는 현재 언어를 사용하여 가져온 부울이 있습니다.
'개발하자' 카테고리의 다른 글
| pm2를 사용하여 tsconfig-paths로 typescript 빌드 실행 (0) | 2022.12.31 |
|---|---|
| 테라폼이 "이미 존재하는" 모든 리소스를 자동으로 가져오도록 하는 방법은 무엇입니까? (0) | 2022.12.30 |
| 웹용 Flatter Build - "응용 프로그램을 컴파일하지 못했습니다." (0) | 2022.12.29 |
| 테두리 반지름이 있는 둥근 단추/단추를 Flott에 작성합니다. (0) | 2022.12.29 |
| 테라폼 0.12로 지도를 다른 지도로 변환하려면 어떻게 해야 하나요? (0) | 2022.12.28 |
