전통문화대전망 - 전통 미덕 - uniapp은 블루투스 영수증 인쇄 기능을 구현합니다.

uniapp은 블루투스 영수증 인쇄 기능을 구현합니다.

최근 프로젝트에 영수증의 블루투스 인쇄 기능이 추가되었습니다. 이전에는 블루투스 프린터에 대해 잘 몰랐기 때문에 블루투스 연결 및 인쇄 모듈을 캡슐화하는 데 시간이 걸렸습니다. 범용 구성 요소이며, 잊어버린 경우를 대비해 여기에 인쇄 예제를 작성했습니다.

구성 요소: 구성 요소 예

프로젝트에서 구현해야 하는 것은 앱을 블루투스 프린터에 연결하는 것입니다. 인쇄된 콘텐츠에는 다음이 포함됩니다.

1. 회사 로고 (로컬 사진)

2. 지정된 형식과 조판이 포함된 텍스트 데이터(선형, 중국어 및 영어)

3. 서명 이미지 데이터(인터페이스에서 반환된 네트워크 이미지 주소)

p>

우선 인쇄를 하려면 블루투스가 연결되어 있어야 개발하기 전에 저전력 블루투스 연결 작업 과정을 이해해야 합니다.

API를 따라 진행하세요. 연결부터 인쇄까지의 과정:

여기서는 Bluetooth 연결 및 인쇄 프로세스를 구성 요소에 캡슐화하고, 상위 구성 요소에서는 onPrint 메서드의 명령을 연결하고 연결한 명령만 전달하면 됩니다. onPrintSuccess 및 onPrintFail은 각각 인쇄 성공 및 실패에 대한 콜백입니다.

구성 요소의 내부 구현은 다음과 같습니다.

1. 인쇄 버튼을 클릭하고 블루투스 어댑터(openBluetoothAdapter)를 열고 연결된 장치를 가져옵니다(getConnectedBluetoothDevices). 연결된 장치가 없으면 장치 검색 팝업 상자를 열어 장치를 검색합니다(2단계). 장치가 연결되면 인쇄 방법을 실행합니다(4단계)

여기서 blesdk는 편의를 위한 것입니다. uniapp Bluetooth 관련 API를 하나의 파일로 통합하고 메서드를 비동기식으로 변환합니다. 여기에는 문자 추가도 포함됩니다. CPCL 명령어의 접합 방법. gbk는 데이터를 프린터에서 허용되는 데이터 형식으로 변환하는 데 사용되는 모듈입니다.

2. 검색 장치 팝업 상자를 엽니다(isShowSearch는 팝업 상자의 표시 및 숨기기를 제어합니다)

검색을 시작(startBluetoothDevicesDiscovery)하고, 검색된 새 장치를 모니터링(onfindBlueDevices)하려면 클릭하세요. 블루투스 검색 작업은 시스템 리소스를 소모하므로 장치가 연결되고 페이지가 종료되면 검색을 닫는 것을 권장합니다. 여기서는 검색 스위치를 제어하기 위한 버튼 2개를 추가했습니다.

필터링 조건(rssi, 장치 이름, 장치 ID)이 추가되었으므로 onfindBlueDevices에서 모니터링하는 장치 목록을 필터링해야 합니다. /p>

3. 장치 목록을 클릭하여 연결된 장치를 선택합니다.

① 장치 목록의 각 항목은 연결 시 장치의 이름, 장치 ID 및 기타 정보를 얻을 수 있습니다. 블루투스 연결(createBLEConnection)을 생성하기 위해서는 deviceId가 필요합니다. 그 전에는 onBLEConnectionStateChange를 통해 연결 상태를 모니터링할 수 있습니다.

② 연결이 성공하면 검색 장치 스위치를 끕니다. 연결이 성공한 후에는 deviceId를 통해 장치 서비스(getBLEDeviceServices)를 얻어야 합니다. 여기에서 얻을 때 메소드에 대한 지연을 설정해야 합니다. 그렇지 않으면 얻은 serviceId가 비어 있게 됩니다.

③성공한 후 장치 서비스를 얻으면 servicesId 배열이 반환됩니다. 그런 다음 deviceId 및 serviceId를 사용하여 특성 값을 가져와야 합니다(getDeviceCharacteristics)

④특성 값을 얻은 후 임시 저장할 변수를 찾아야 합니다. 특성 값은 나중에 프린터로 데이터를 보낼 때 사용되기 때문입니다. 검색 팝업창 닫기

4. 장치를 연결한 후 인쇄 버튼을 클릭하면 데이터 접속 및 인쇄가 시작됩니다. 1 단계에서는 연결된 장치가 있으면 데이터 접합 및 인쇄를 시작한다고 판단했습니다. 여기서 접합 작업은 접합이 완료된 후 상위 페이지(onPrint)로 전달됩니다. bufferData 데이터가 업데이트된 후 데이터가 장치로 전송되기 시작합니다. 필수 매개변수는 opt의 매개변수입니다. serviceId는 서비스 ID입니다. GBK 형식으로 변환해야 하는 data; lastSuccess는 모든 데이터가 성공적으로 전송되었을 때의 콜백입니다. ;onceLength는 하위 패키지로 전송되는 각 데이터 패킷의 길이이므로 판단이 추가됩니다. sendDataToDevice는 패킷 전송 방법을 캡슐화합니다.

5. 상위 페이지의 onPrint에 bufferData 데이터를 splice하고, bluetoolth.js(@/comComponents/kk-printer/utils/bluetoolth.js)에 CPCL 명령어를 추가하는 메소드를 추가합니다. 는 구성 요소의 예입니다. 일반적으로 사용되는 명령어 접합 방법의 경우 프로젝트의 @/comComponents/kk-printer/utils/bluetoolth.js 파일을 보고 명령어 캡슐화 방법의 특정 구현에 대해 알아볼 수 있습니다.

6. 실제 프로젝트에서 사용:

①페이지의 구성요소 폴더에 kk-printer 구성요소를 소개하고 사용합니다.

②구성요소를 사용합니다

데이터 접합, 다양한 인쇄 요구 사항을 다양한 방식으로 접합

p>

로고 이미지나 서명 이미지를 인쇄할 때 canvasGetImageData 전에 지연을 추가하거나 draw()가 완료될 때까지 기다려야 합니다. 그렇지 않으면 이미지 획득된 픽셀 데이터는 모두 0이 됩니다.

addCPCLImageCmd를 사용할 때 회색 값 임계값 조정에 주의하세요. 회색 값이 너무 높거나 너무 낮으면 회색 값보다 낮은 이미지 픽셀이 메서드에서 필터링되어 0이 됩니다.

addBaseInfo : 기본 정보 인쇄

addTicketsInfo: 선하 증권 정보 인쇄

둘 다 텍스트 인쇄 및 조판용이므로 어려움이 없습니다

마지막으로 이야기합시다. 데이터(bufferData) 스플라이싱 관련 참고 사항:

① 인쇄를 위해 블루투스 프린터로 데이터를 보낼 때 전송되는 모든 내용은 바이너리 데이터로 변환되어야 하며, 블루투스 인쇄를 위한 텍스트 인코딩은 중국어로 보낼 때 GBK입니다. GBK 인코딩으로 변환한 후 프린터 명령 전송을 포함한 바이너리 데이터 전송으로 전송을 위해 바이너리 데이터로 변환해야 합니다.

② 블루투스 프린터가 할 수 있는 2차 데이터에는 제한이 있습니다. 시스템과 블루투스 장치에 따라 제한 사항이 다를 수 있습니다. 한 번에 20바이트씩 재귀적으로 하위 패키징하여 전송하는 것이 좋습니다.

③인쇄할 콘텐츠를 전송한 후 성공적으로 인쇄하려면 인쇄 명령을 보내야 합니다(일부 명령은 필요하지 않음)

④하위에서 패키지를 보낼 때 장치 연결이 불안정하여 10007이 자주 ​​발생하고 특성 값을 찾을 수 없습니다. 실패 콜백에 중단점을 기록하고 후속 패키지를 계속 보내려면 필요합니다.