Hey there! I got some good news for you in this matter and I wish I could share with you the result that I obtained from your html, but the zpl code is too large to paste here.
You don't need to use any online service/API, but yours. You just need your own backend server to expose an endpoint which will be called from your frontend (where coding is needed too to make the call to your endpoint) in order to generate the zpl code and send the data to the printer IP.
1- You will generate the bill with its own data (client, amounts, etc) in an html document (as you actually do),
2- The html document will make a post to your endpoint in your web server,
3- The server will generate the zpl code for exactly what you have in the html "printable-area".
To keep in mind: Only B/W. No colors.