2

I am using ZPL printer to print the base64 decoded string.

For small decoded string it is printing the receipt, for multiline base64 decoded string I am getting error.

Delegate Method :

 func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
          if error != nil {
            print(error?.localizedDescription)
        }
    }

I am getting following error when print(error?.localizedDescription)

Error :
The prepare queue is full

Thanks in advance.

ketaki Damale
  • 634
  • 7
  • 25

1 Answers1

2

If anybody is looking for an answer.

When print data is large it is should be first divided into chunks and then pass each chunk separately for printing.

Below is the code for creating data chunks

 func createChunks(data: Data) -> ([Data]) {
          var chunks : [Data] = []
          let length = data.count
            let chunkSize = 80
            var offset = 0
            repeat {
              let thisChunkSize = ((length - offset) > chunkSize) ? chunkSize : (length - offset);
              let chunk = data.subdata(in: offset..<offset + thisChunkSize )
              chunks.append(chunk)
              offset += thisChunkSize;
            } while (offset < length);
            return chunks
        }

Call this method before sending data to printing.

Below is the method, this is called when a user hit for printing option.

func printReciept(text: String) {
        let zpl =  text +  ("\r\n")
        if let payload = zpl.data(using: .utf8) {
            chunksToBeSent = chunks.count
            chunksIsAlreadySent = 0
            chunks = createChunks(data: payload)
            chunks.forEach { (chunk) in
                 writeChucks(chunk: chunk)
            }
        }
    }

Also below thread is from their official demo Github question.

Issue Link

ketaki Damale
  • 634
  • 7
  • 25