我无法通过 Brother QL-810W 打印机使用 another_brother 库打印 62mm x 29mm 标签

问题描述 投票:0回答:1

我正在与 another_brother 开发一个可以打印产品标签的应用程序。所需的标签尺寸为 62mm x 29mm。经过一番研究,我认为该问题与 PrinterInfo 中的“labelNameIndex”有关。当我将 labelNameIndex 设置为 17 时,它可以工作,但不会将标签长度固定为 29mm。长度取决于内容。我还发现,当 labelNameIndex 设置为 8(应对应尺寸为 62mm x 29mm)时,它会返回以下错误:

{labelType:-1,maxOfBatteryResidualQuantityLevel:-1,labelId:-1,isACConnected:{id:-1,名称:未知},batteryResidualQuantityLevel:-1,isBatteryMounted:{id:-1,名称:未知},batteryLevel: -1,错误代码:{名称:ERROR_WRONG_LABEL,id:-1}}

void printResult(
 BuildContext context, {
 required PrintModel model,
}) async {
 if (selectedPrinter.value == null) {
   ToastUtils.show(StringStyles.printerNotReady.tr);
 }
 EasyLoading.show(status: StringStyles.printing.tr);
 var printer = Printer();
 var printInfo = PrinterInfo();
 printInfo.printerModel = Model.QL_810W;
 printInfo.printMode = PrintMode.FIT_TO_PAGE;
 printInfo.isAutoCut = false;
 printInfo.port = Port.NET;
 printInfo.paperSize = PaperSize.CUSTOM;
 // printInfo.customPaperLength = 29;
 // printInfo.customPaperWidth = 62;
 printInfo.printQuality = PrintQuality.HIGH_RESOLUTION;
 printInfo.labelNameIndex = 8;


 // Set the printer info so we can use the SDK to get the printers.
 await printer.setPrinterInfo(printInfo);


 // Get a list of printers with my model available in the network.
 List<NetPrinter> printers =
     await printer.getNetPrinters([Model.QL_810W.getName()]);


 if (printers.indexWhere((element) =>
         element.macAddress == selectedPrinter.value?.macAddress) ==
     -1) {
   EasyLoading.dismiss();
   ToastUtils.show(StringStyles.printerDisconnected.tr);
   getMyNetworkPrinters();


   return;
 }
 // Get the IP Address from the first printer found.
 printInfo.ipAddress = printers.single.ipAddress;


 printer.setPrinterInfo(printInfo);


 var totalNum = 0;
 for (var element in model.products) {
   var num = int.parse(element.num);
   totalNum += num;
 }


 var index = 1;


 for (var element in model.products) {
   var num = int.parse(element.num);
   for (int i = 0; i < num; i++) {
     final ui.ParagraphBuilder paragraphBuilder = ui.ParagraphBuilder(
       ui.ParagraphStyle(
         textAlign: TextAlign.left,
         fontSize: 20,
         textDirection: TextDirection.ltr,
       ),
     )
       ..pushStyle(ui.TextStyle(color: Colors.black, fontSize: 16))
       ..addText('James ${model.phoneNumber}\n')
       ..pushStyle(ui.TextStyle(color: Colors.black, fontSize: 16))
       ..addText('App Order\n')
       ..pushStyle(ui.TextStyle(color: Colors.black, fontSize: 20))
       ..addText('To-Go #${model.orderNumber} ($index of $totalNum)\n')
       ..pushStyle(ui.TextStyle(color: Colors.black, fontSize: 20))
       ..addText('${element.title}\n')
       ..pushStyle(ui.TextStyle(color: Colors.black, fontSize: 16))
       ..addText(element.tag);


     final ui.Paragraph paragraph = paragraphBuilder.build()
       ..layout(ui.ParagraphConstraints(
           width: MediaQuery.of(context).size.width - 8));


     await printer.printText(paragraph);
     index++;
   }
 }
 EasyLoading.dismiss();
}

这里,我显示了labelNameIndex和相应的尺寸。

class QL700 implements ALabelName {
 final int _id;
 final String _name;
 static const String _model = "QL700";


 const QL700._internal(this._id, this._name);


 static const W17H54 = const QL700._internal(1, "W17H54");
 static const W17H87 = const QL700._internal(2, "W17H87");
 static const W23H23 = const QL700._internal(3, "W23H23");
 static const W29H42 = const QL700._internal(4, "W29H42");
 static const W29H90 = const QL700._internal(5, "W29H90");
 static const W38H90 = const QL700._internal(6, "W38H90");
 static const W39H48 = const QL700._internal(7, "W39H48");
 static const W52H29 = const QL700._internal(8, "W52H29");
 static const W62H29 = const QL700._internal(9, "W62H29");
 static const W62H100 = const QL700._internal(10, "W62H100");
 static const W12 = const QL700._internal(11, "W12");
 static const W29 = const QL700._internal(12, "W29");
 static const W38 = const QL700._internal(13, "W38");
 static const W50 = const QL700._internal(14, "W50");
 static const W54 = const QL700._internal(15, "W54");
 static const W62 = const QL700._internal(16, "W62");
 static const W60H86 = const QL700._internal(17, "W60H86");
 static const W62RB = const QL700._internal(38, "W62RB");
 static const W54H29 = const QL700._internal(39, "W54H29");
 static const UNSUPPORT = const QL700._internal(255, "UNSUPPORT");


 static final _values = [
   W17H54,
   W17H87,
   W23H23,
   W29H42,
   W29H90,
   W38H90,
   W39H48,
   W52H29,
   W62H29,
   W62H100,
   W12,
   W29,
   W38,
   W50,
   W54,
   W62,
   W60H86,
   W62RB,
   W54H29,
   UNSUPPORT,
 ];


 int getId() {
   return _id;
 }


 @override
 String getName() {
   return _name;
 }


 static int getItemId(index) {
   if (index < 0 || index > _values.length) {
     return UNSUPPORT.getId();
   }


   return _values[index].getId();
 }


 static QL700 valueFromID(int id) {
   for (int i = 0; i < _values.length; ++i) {
     QL700 num = _values[i];
     if (num.getId() == id) {
       return num;
     }
   }
   return UNSUPPORT;
 }


 static List<QL700> getValues() => List.from(_values);


 static int ordinalFromID(int id) {
   for (int i = 0; i < _values.length; ++i) {
     QL700 num = _values[i];
     if (num.getId() == id) {
       return i;
     }
   }
   return -1;
 }


 static QL700 fromMap(Map<dynamic, dynamic> map) {
   int id = map["id"];
   return QL700.valueFromID(id);
 }


 static QL700 fromIndex (int index) {
   if (index < 0 ||index >= _values.length ) {
     return UNSUPPORT;
   }
   return _values[index];
 }


 Map<String, dynamic> toMap() {
   return {"id": _id,
     "name": _name,
     "model": _model
   };
 }
}
flutter printers brother-print-sdk
1个回答
0
投票

经过研究和各种测试,我发现“labelNameIndex”设置取决于所使用的标签的具体类型。之前,我在使用 62mmx5m 标签时错误地将“labelNameIndex”设置为 8,这不是正确的配置。该标签的正确“labelNameIndex”实际上是 17。

目前,我使用的是62mmx29mm的标签,这需要将“labelNameIndex”设置为8。通过此调整,一切正常。因此,我认为不存在任何问题;只需为您正在使用的特定标签使用正确的“labelNameIndex”即可。

© www.soinside.com 2019 - 2024. All rights reserved.