首先我使用了 esc_pos 包,但它不起作用。\n最后,我使用打印包打印阿拉伯发票,它工作正常,下面的解释
\n\n\n这是使用打印包的完整代码。\n首先,创建一个类来将参数传递给它(您需要打印的参数),在我的案例 4 中需要参数。
\n
class HtmlGeneratorParamsAccount {\n final String daybet, payable, balance;\n final List<AccountStatmentModel> list;\n\n HtmlGeneratorParamsAccount({\n required this.daybet,\n required this.payable,\n required this.balance,\n required this.list,\n });\n}\n\nString generateHtmlA(HtmlGeneratorParamsAccount p) {\n String items = '''\n ''';\n\n for (var i = 0; i < p.list.length; i++) {\n DateFormat datee = DateFormat('yyyy/MM/dd', 'en');\n DateTime forFormat = p.list[i].date;\n final String formatted = datee.format(forFormat);\n double amount = p.list[i].debitAmount + p.list[i].payableAmount;\n items += '''<tr class = "item">''';\n\n items += '''<td>${p.list[i].description}</td>''';\n items += '''<td>${formatted}</td>''';\n items += '''<td>${p.list[i].opName}</td>''';\n items += '''<td>${double.parse(amount.toStringAsFixed(1))}</td>''';\n items += '''</tr>''';\n }\n var pay = double.parse(p.payable).toStringAsFixed(1);\n var day = double.parse(p.daybet).toStringAsFixed(1);\n var html = """ \n
Run Code Online (Sandbox Code Playgroud)\n\n\n那么您需要使用 HTML 来构建发票正文(形状)
\n
<!DOCTYPE html>\n<html>\n<head>\n<meta name="viewport" content="width=device-width, initial-scale=1">\n<link rel="stylesheet" href=\n"https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />\n <style>\n\n .invoice-box {\n max-width:1000px;\n margin: auto;\n padding: 8px;\n border: 1px solid #eee;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);\n font-size: 8px;\n line-height: 24px;\n font-family: 'Helvetica Neue', 'Helvetica', Helvetica, Arial, sans-serif;\n color: #555;\n }\n .invoice-box table {\n width: 100%;\n line-height: inherit;\n text-align: center;\n }\n\n .invoice-box table td {\n padding: 10px;\n vertical-align: top;\n }\n \n .invoice-box table tr.top table td {\n padding-bottom: 5px;\n }\n\n* {\n box-sizing: border-box;\n}\n\n\n.column {\n float: right;\n width:23%;\n \n padding: 16px;\n \n}\n.header{\ntext-align:center;\n}\n\n\n.row:after {\n content: "";\n display: table;\n clear: both;\n}\n \n</style>\n</head>\n<body>\n<h2 class="header">\xd9\x83\xd8\xb4\xd9\x81 \xd8\xad\xd8\xb3\xd8\xa7\xd8\xa8</h2>\n<h3 class="header">\xd8\xa8\xd9\x8a\xd8\xa7\xd9\x86\xd8\xa7\xd8\xaa \xd8\xa7\xd9\x84\xd8\xb2\xd8\xa8\xd9\x88\xd9\x86</h3>\n<table>\n<tr>\n<div class="row">\n <div class="column" >\n <h4>\xd8\xa7\xd9\x84\xd9\x85\xd8\xa8\xd9\x84\xd8\xba</h4>\n <p></p>\n </div>\n \n <div class="column" >\n\n <h4>\xd9\x86\xd9\x88\xd8\xb9 \xd8\xa7\xd9\x84\xd8\xb9\xd9\x85\xd9\x84\xd9\x8a\xd8\xa9</h4>\n \n </div>\n\n <div class="column" >\n <h4>\xd8\xaa\xd8\xa7\xd8\xb1\xd9\x8a\xd8\xae</h4>\n \n </div>\n <div class="column" >\n <h4>\xd9\x88\xd8\xb5\xd9\x81</h4>\n \n </div>\n</div>\n</tr>\n$items\n</table>\n<div>\n<p class="header">------------------------</p>\n<p class="header">:\xd9\x85\xd8\xac\xd9\x85\xd9\x88\xd8\xb9 ${day}</p>\n<p class="header">:\xd9\x85\xd8\xac\xd9\x85\xd9\x88\xd8\xb9 $pay</p>\n<p class="header">:\xd8\xa7\xd9\x84\xd9\x85\xd8\xa8\xd9\x84\xd8\xba ${p.balance}</p>\n<p>---</p>\n<p>--</p>\n<p>-</p>\n</div>\n</body>\n</html>""";\n return html;\n\n'''\n
Run Code Online (Sandbox Code Playgroud)\n创建一个函数
\n\n\n当你需要使用它时(例如在按钮中)
\n
printDoc(HtmlGeneratorParamsAccount params) 异步 {
\nawait Printing.layoutPdf(\n onLayout: (format) async => await Printing.convertHtml(\n format: format,\n html: generateHtmlA(params),\n ),\n);\n
Run Code Online (Sandbox Code Playgroud)\n}\n现在我们将在 IconButton 中使用 printDoc 函数
\n\n\nparams是我们一开始制作的类,我们将传递所需的参数
\n
IconButton(\n onPressed: () {\n HtmlGeneratorParamsAccount params=\n HtmlGeneratorParamsAccount(\n list: list,\n payable: payableAmount.toString(),\n daybet: debitTxt.toString(),\n balance: balance.toString(),\n );\n printDoc(params);\n },\n icon: Icon(\n Icons.print,\n )),\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
2863 次 |
最近记录: |