我一直在尝试在 Android 8.1.0 上使用 Brother Print SDK 3.5.1 进行打印。我不断得到ERROR_WRONG_LABEL
。
这是我使用的代码
void printPdf() {
// Specify printer
final Printer printer = new Printer();
PrinterInfo settings = printer.getPrinterInfo();
settings.printerModel = PrinterInfo.Model.QL_810W;
settings.port = PrinterInfo.Port.NET;
settings.ipAddress = "192.168.1.73";
settings.workPath = "storage/emulated/0/Download/";
// Print Settings
settings.labelNameIndex = LabelInfo.QL700.W62RB.ordinal();
settings.printMode = PrinterInfo.PrintMode.FIT_TO_PAGE;
settings.orientation = PrinterInfo.Orientation.PORTRAIT;
settings.isAutoCut = true;
printer.setPrinterInfo(settings);
// Connect, then print
new Thread(new Runnable() {
@Override
public void run() {
if (printer.startCommunication()) {
PrinterStatus result = printer.printPdfFile("/storage/emulated/0/Download/hello world red.pdf", 1);
if (result.errorCode != PrinterInfo.ErrorCode.ERROR_NONE) {
Log.d("TAG", "ERROR - " + result.errorCode);
}
printer.endCommunication();
}
}
}).start();
}
我的打印机型号是 QL-810W,我使用黑色和红色的 W62 卷筒。
- 我已经尝试过Sample Application
W62RB
,其中的设置labelNameIndex
打印效果很好。 - 更换不同宽度的卷筒并没有帮助。
- 我也尝试过迭代数字 0 到 50 并将它们用作
labelNameIndex
. - 基于这个线程,我认为问题可能在于指定
workPath
属性。设置workPath
为getContext().getCacheDir().getPath()
结果ERROR_OUT_OF_MEMORY
而不是ERROR_WRONG_LABEL
. 未指定workPath
并添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
到AndroidManifest.xml
结果中ERROR_WRONG_LABEL
编辑
我已经修改了 Brother Sample 应用程序并将其上传到GitHub。该应用程序现在Activity_PrintPdf.java
默认启动,我在onCreate
方法开头插入带有硬编码值的打印代码 - 这工作正常并按预期打印 PDF 文件。
然后我在 Android Studio 中创建了一个新的 Empty Activity 项目,复制粘贴库,添加导入build.gradle
并将权限复制粘贴到AndroidManifest.xml
. 然后我将打印代码复制粘贴onCreate
在MainActivity.java
. 运行应用程序会导致ERROR_WRONG_LABEL
.
这是修改后的工作示例应用程序,这是导致错误的应用程序。我想将代码用作从我的 React Native 应用程序调用的本机模块,因此我设法从头开始设置打印代码而不是修改现有的示例应用程序非常重要。
编辑 2
我用调试器检查了库:在执行printer.setPrinterInfo(mPrinterInfo)
库内部调用对象private boolean createWorkPath(String dirPath)
时。Printer
从该方法返回时,调试器显示Source code doesn't match the bytecode
并且似乎忘记了创建的目录。这也在内部设置mResult.errorCode = ErrorCode.ERROR_WORKPATH_NOT_SET
. 然而,这里的代码并没有出现任何错误,而是默默地继续进行,这稍后会在ERROR_WRONG_LABEL
尝试打印时导致。在修改后的示例应用程序中运行相同的代码片段可以正常工作。
如果您能提供帮助或建议下一步尝试什么,我将不胜感激。
谢谢!