In JavaScript tới máy in nhãn

TRƯỚC KHI TẢI XUỐNG PHẦN MỀM HOẶC NỘI DUNG KHÁC CÓ TRÊN TRANG WEB NÀY, BẠN SẼ CẦN XEM VÀ ĐỒNG Ý VỚI CÁC ĐIỀU KHOẢN VÀ ĐIỀU KIỆN BÊN DƯỚI. PHẢI TUÂN THEO CÁC ĐIỀU KHOẢN VÀ ĐIỀU KIỆN NÀY KHI SỬ DỤNG PHẦN MỀM VÀ NỘI DUNG KHÁC ĐƯỢC CUNG CẤP

  • Vui lòng xem lại và đồng ý với thỏa thuận cấp phép, README và/hoặc các tài liệu khác mà phần mềm và/hoặc nội dung của BIXOLON chứa trước khi cài đặt hoặc sử dụng
  • Bạn đồng ý chỉ sử dụng phần mềm và/hoặc nội dung với các kiểu máy mang nhãn hiệu BIXOLON tương ứng
  • Bạn đồng ý và thừa nhận việc sử dụng phần mềm của BIXOLON và các nội dung khác là rủi ro của riêng bạn
  • PHẦN MỀM và/hoặc NỘI DUNG ĐƯỢC CUNG CẤP "NGUYÊN TRẠNG". BIXOLON, VÀ CÁC ĐỐI TÁC CỦA BIXOLON KHÔNG VÀ SẼ KHÔNG CUNG CẤP HỖ TRỢ CHO HIỆU SUẤT HOẶC KẾT QUẢ BẠN CÓ THỂ ĐẠT ĐƯỢC BẰNG CÁCH SỬ DỤNG PHẦN MỀM Ở BẤT KỲ TRẠNG THÁI NÀO KHÁC TRÊN TRANG WEB NÀY.
  • Bạn đồng ý không sửa đổi, điều chỉnh, thay đổi hoặc dịch phần mềm hoặc nội dung được cung cấp cho bạn thông qua trang web này và cũng đồng ý không đảo ngược kỹ thuật, dịch ngược, phân tách hoặc cố gắng khám phá mã nguồn của phần mềm và/hoặc nội dung
  • Bạn đồng ý rằng phần mềm và/hoặc nội dung sẽ không được vận chuyển, xuất khẩu hoặc chuyển nhượng (kỹ thuật số hoặc vật lý) vào bất kỳ quốc gia nào hoặc sử dụng theo bất kỳ cách nào bị cấm theo luật xuất khẩu, hạn chế hoặc quy định hiện hành của quốc gia đó
Tải xuống

TRƯỚC KHI TẢI XUỐNG PHẦN MỀM HOẶC NỘI DUNG KHÁC CÓ TRÊN TRANG WEB NÀY, BẠN SẼ CẦN XEM VÀ ĐỒNG Ý VỚI CÁC ĐIỀU KHOẢN VÀ ĐIỀU KIỆN BÊN DƯỚI. PHẢI TUÂN THEO CÁC ĐIỀU KHOẢN VÀ ĐIỀU KIỆN NÀY KHI SỬ DỤNG PHẦN MỀM VÀ NỘI DUNG KHÁC ĐƯỢC CUNG CẤP

  • Vui lòng xem lại và đồng ý với thỏa thuận cấp phép, README và/hoặc các tài liệu khác mà phần mềm và/hoặc nội dung của BIXOLON chứa trước khi cài đặt hoặc sử dụng
  • Bạn đồng ý chỉ sử dụng phần mềm và/hoặc nội dung với các kiểu máy mang nhãn hiệu BIXOLON tương ứng
  • Bạn đồng ý và thừa nhận việc sử dụng phần mềm của BIXOLON và các nội dung khác là rủi ro của riêng bạn
  • PHẦN MỀM và/hoặc NỘI DUNG ĐƯỢC CUNG CẤP "NGUYÊN TRẠNG". BIXOLON, VÀ CÁC ĐỐI TÁC CỦA BIXOLON KHÔNG VÀ SẼ KHÔNG CUNG CẤP HỖ TRỢ CHO HIỆU SUẤT HOẶC KẾT QUẢ BẠN CÓ THỂ ĐẠT ĐƯỢC BẰNG CÁCH SỬ DỤNG PHẦN MỀM Ở BẤT KỲ TRẠNG THÁI NÀO KHÁC TRÊN TRANG WEB NÀY.
  • Bạn đồng ý không sửa đổi, điều chỉnh, thay đổi hoặc dịch phần mềm hoặc nội dung được cung cấp cho bạn thông qua trang web này và cũng đồng ý không đảo ngược kỹ thuật, dịch ngược, phân tách hoặc cố gắng khám phá mã nguồn của phần mềm và/hoặc nội dung
  • Bạn đồng ý rằng phần mềm và/hoặc nội dung sẽ không được vận chuyển, xuất khẩu hoặc chuyển nhượng (kỹ thuật số hoặc vật lý) vào bất kỳ quốc gia nào hoặc sử dụng theo bất kỳ cách nào bị cấm theo luật xuất khẩu, hạn chế hoặc quy định hiện hành của quốc gia đó
Tải xuống
Bằng cách sử dụng IDE hoặc Trình soạn thảo văn bản phát triển web yêu thích của bạn, hãy tạo một tệp HTML mới như chỉ mục. html
Sao chép/dán các mã đã cắt sau

Mã HTML


Print Zebra ZPL commands from Javascript


Print to Default printer

or...

Select an installed Printer:



Print Now...

Tài liệu tham khảo kịch bản

  • Tải xuống JSPrintManager. js
  • Sao chép tất cả *. js vào cùng một thư mục chứa trang html của bạn và thêm các tham chiếu tập lệnh sau vào trang của bạn








                            

Mã kịch bản



Tôi đồng ý, viết trình điều khiển máy in bằng JavaScript nghe có vẻ nực cười. Và tôi thực sự không phải kiểu người làm các bài tập mã hóa cấp thấp cho vui. Tôi thường thích thiết kế và xây dựng các sản phẩm hoàn chỉnh bằng các ngôn ngữ cấp cao. Nhưng tôi đã mua chiếc máy in nhãn Polono này trên Amazon với giá ~140 đô la, đây là một món hời so với các mẫu Zebra có giá khoảng 500 đô la. Zebra là tiêu chuẩn công nghiệp và máy in của họ đi kèm với ngôn ngữ lập trình riêng được hỗ trợ bởi phần mềm của hãng vận chuyển lớn như UPS, FedEx, v.v. Ngôn ngữ này, được gọi là ZPL (Ngôn ngữ lập trình Zebra), chỉ đơn giản là các dòng văn bản ASCII được gửi qua kết nối Nối tiếp đưa ra hướng dẫn về cách in nhãn. Braindead đơn giản. Dựa trên những đánh giá tích cực từ các khách hàng khác của Amazon sử dụng nó với phần mềm vận chuyển của họ, tôi rất hy vọng rằng máy in nhãn giá rẻ này cũng sẽ hỗ trợ ZPL

In JavaScript tới máy in nhãn

Đang thử trình điều khiển ra khỏi hộp

Khi máy in đến, tôi cắm nó vào Raspberry Pi dự phòng và. sự thành công. Linux đã nhận ra nó là một máy in và nó hiển thị là /dev/usb/lp0. Nó không hiển thị dưới dạng máy in trong GUI của linux, nhưng không sao - việc in trong Linux luôn hơi phức tạp. Cuối cùng tôi nhớ ra rằng Linux sử dụng một hệ thống in có tên là CUPS và nhận ra rằng hệ thống này chỉ cần được cấu hình trước. Tôi không thấy nó trong danh sách các máy in có sẵn, vì vậy tôi thử cài đặt trình điều khiển Linux cho PL60. Đủ đơn giản, đó là một tarball với một kịch bản install. tôi nhận được một cảnh báo về

strip: Unable to recognize the format of the input file '/usr/lib/cups/filter/raster-tspl'`

nhưng sau đó một vài dòng xuống xem

Install Complete

hoan hô. Bây giờ tôi thấy PL60 được liệt kê trong giao diện quản trị CUPS. Điều này có vẻ hứa hẹn

In JavaScript tới máy in nhãn

Chà, sau khi nhấp qua giao diện CUPS để thêm máy in và thử in một trang thử nghiệm, chúng tôi thấy một công việc không thành công. Máy in hiện có Trạng thái là Idle - "File "/usr/lib/cups/filter/raster-tspl" not available: No such file or directory". Đáng tiếc, có lẽ cảnh báo từ tập lệnh cài đặt không phải là thứ chúng ta có thể bỏ qua

Xin chào TSPL

Tôi đã xem tất cả các tệp trong tarball của trình điều khiển và thấy rằng có một thư mục filterppd. Sau khi tra Google, tôi biết rằng các tệp PPD mô tả khả năng của từng máy in, chẳng hạn như khổ giấy, không gian màu, v.v. Bộ lọc s là các tệp thực thi chuyển đổi định dạng tài liệu này sang định dạng tài liệu khác, ví dụ: chuyển hình ảnh PNG thành tệp ASCII ZPL có thể được gửi tới máy in. Nhưng trong thư mục filter của tarball này chỉ có bộ lọc x64 và x86.

In JavaScript tới máy in nhãn

Tôi thực sự muốn biến Raspberry Pi này thành một trạm vận chuyển lâu dài, vì vậy tại thời điểm này, tôi khá khó chịu khi các "trình điều khiển Linux" này chỉ là các tệp nhị phân x64 và x86 được biên dịch sẵn, vì vậy tôi bắt đầu quy trình trả lại Amazon và hướng tới . Rốt cuộc, tôi phải sớm vận chuyển PiBox của chúng tôi, vì vậy tôi sẽ chỉ cắn viên đạn và tiêu tiền vào Zebra. Nhưng tôi còn 2 ngày nữa cho đến khi Zebra đến, vì vậy sau bữa tối, tâm trí tôi vẫn đang tự hỏi liệu có cách nào để biên dịch các trình điều khiển này cho arm64. Các cụm từ tìm kiếm trên Google như

Install Complete
1 trả lại rất ít giá trị. Tôi thậm chí đã đào qua tệp PPD ở trên, tìm kiếm manh mối

*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"

Có manh mối thực sự. Hóa ra, chiếc máy in này thực sự là một bản sao được đổi thương hiệu của HPRT N41, hoặc thậm chí nó là người anh em của nó HPRT SL42. Nếu bạn đã đọc đến đây, có lẽ bạn đã nhận ra rằng những máy in này không hỗ trợ ZPL. Trang hỗ trợ dành cho máy in HPRT có nhiều chi tiết kỹ thuật hơn trang web của Polono và gợi ý cho tôi nhận ra rằng thay vào đó, những máy in này hỗ trợ TSPL, một ngôn ngữ lập trình máy in giống như ZPL. Chỉ có ngôn ngữ này là của nhà sản xuất máy in có tên là TSC, có trụ sở tại Đài Loan

Cuối cùng tôi tình cờ tìm thấy một số mã PHP để nói chuyện với máy in TSPL, điều này mang lại cho tôi hy vọng. Rất nhiều ngôi sao và một số lưu ý thú vị về việc viết trực tiếp ra máy in, e. g.

Install Complete
2. Điều này đã khiến máy in của tôi phun ra giấy, nhưng các trang lại trống 😢. Nhưng cuối cùng, tôi đã tìm thấy Linux SDK TSPL cho SL42 và thậm chí còn tìm thấy Sổ tay lập trình TSPL/TSPL2

Quyết định viết trình điều khiển của riêng tôi

Mặc dù tôi đã tìm thấy SDK nhưng thư mục

Install Complete
3 bên trong vẫn được biên dịch sẵn cho x86 hoặc x64. SDK này có vẻ rất hứa hẹn, nhưng tại sao không cung cấp mã nguồn đầy đủ?. Được rồi, đã đến lúc tôi phải làm bẩn tay và bắt đầu đọc qua 204 trang Sổ tay lập trình TSPL. Khi tôi bắt đầu đọc, tôi đã nhận ra rằng chỉ có filter có trong trình điều khiển ở trên là
Install Complete
5. Phần "raster" của cái tên đó cho tôi biết rằng họ đã sử dụng lối tắt và chỉ viết trình điều khiển để in ảnh raster, chẳng hạn như ảnh bitmap, PNG, v.v.

Để vận chuyển các PiBox của mình, chúng tôi đã quyết định sử dụng EasyPost, có một API tuyệt vời để so sánh phí vận chuyển giữa các hãng vận chuyển. Khi bạn mua nhãn vận chuyển thông qua họ, họ sẽ cung cấp cho bạn đầu ra ở định dạng PDF, PNG hoặc ZPL. ZPL sẽ là lý tưởng, vì nó chỉ là văn bản ASCII có thể dễ dàng sửa đổi hoặc thậm chí được lưu trữ trong cơ sở dữ liệu cùng với mỗi đơn hàng. Nhưng điều đó sẽ yêu cầu một số loại tập lệnh chuyển đổi ZPL sang TSPL , dường như không tồn tại, theo Google. Ít nhất là chưa - hãy để lại nhận xét hoặc gửi tin nhắn cho tôi nếu bạn muốn giúp viết một cái.

Tôi đã phải lựa chọn liệu tôi có muốn sử dụng cùng một phím tắt "chỉ raster" hay tôi nên thử và viết tập lệnh chuyển đổi này. Điều này sẽ yêu cầu xử lý mọi chức năng ZPL và triển khai ít nhất đủ các chức năng TSPL (như hiển thị mã QR, mã vạch, các phông chữ ASCII khác nhau, v.v.) để in nhãn vận chuyển có thể quét được. Tôi phải điều hành cả một công việc kinh doanh và chúng tôi không làm trong ngành nhãn vận chuyển — rõ ràng là tôi đã chọn lối tắt

Raster sang TSPL trong Javascript

Ok, bây giờ tôi đã có mục tiêu rõ ràng, tôi muốn xem liệu tôi có thể lấy tệp đầu ra TSPL tham chiếu từ tệp đầu vào PNG đã biết không. Rất may, máy Mac cũng sử dụng CUPS (dù sao thì Apple cũng duy trì nó) và tôi đã có thể cài đặt trình điều khiển máy in Polono trên máy Mac của mình (khá hài hước là máy Mac của tôi là chip ARM M1, vì vậy nó mô phỏng trình điều khiển x64 trong Rosetta). CUPS có tiện ích dòng lệnh hữu ích,

Install Complete
6 cho phép bạn chạy tập lệnh bộ lọc và lưu kết quả đầu ra vào một tệp thay vì trực tiếp vào máy in

cupsfilter test.png -p /Library/Printers/PPDs/Contents/Resources/PL60.tspl.ppd -m printer/foo -e > out.tspl

Đáng kinh ngạc. Tôi đã có thể lấy

Install Complete
7 của mình làm thông tin đầu vào và lấy lại tệp
Install Complete
8. Tôi thậm chí đã sao chép tệp này sang Raspberry Pi và thử viết ra qua
Install Complete
9 và trông kìa. nó in hình ảnh. 🎉🎉🎉

Nhìn vào. tspl trong trình soạn thảo văn bản, chúng tôi thấy một tệp chủ yếu là các dòng văn bản, với một dòng nhị phân khổng lồ. Tôi thậm chí đã thử sửa đổi một số thứ, chẳng hạn như thêm một dòng

*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"
0 và có thể làm cho nó in nhanh hơn hoặc chậm hơn một chút, tùy thuộc vào số. Thật đáng kinh ngạc. chúng tôi hiện đang giao tiếp trực tiếp với máy in

SIZE 99.8 mm, 149.9 mm
SET TEAR ON
SET CUTTER OFF
SET PEEL OFF
CLS
BITMAP 0,0,100,1198,1,���...���
PRINT 1,1

câu hỏi duy nhất của tôi bây giờ. làm cách nào để bộ lọc biến hình ảnh PNG thành dòng BITMAP chứa đầy dữ liệu nhị phân? . Tôi đã xem hướng dẫn lập trình TSPL về chức năng "BITMAP" và nó thực sự có vẻ không phức tạp lắm. Đó là một máy in nhiệt, vì vậy mỗi pixel có màu đen hoặc trắng, không có thang độ xám hoặc màu nào phải lo lắng. Và mỗi pixel được biểu thị bằng một bit

In JavaScript tới máy in nhãn

Từ dòng

*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"
1 của chúng tôi ở trên, chúng tôi thấy rằng dữ liệu nhị phân bắt đầu ở tọa độ X
*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"
2, tọa độ Y
*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"
2, chứa
*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"
4 byte dữ liệu và chiều dài
*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"
5 dấu chấm. Điều này phù hợp với những gì chúng ta biết, vì có 8 bit trong một byte với tổng chiều rộng là 800 chấm và trạng thái thông số kỹ thuật là ____6_______6, vì vậy chiều rộng ~4 inch. Tương tự với chiều dài 1196 chấm — hình ảnh này có kích thước 4"x6" hoặc kích thước nhãn vận chuyển tiêu chuẩn. Xuất sắc

Chuyển đổi hình ảnh thành lệnh BITMAP

Tôi không thể tìm thấy bất kỳ tập lệnh nào biến hình ảnh thô thành bitmap TSPL, vì vậy tôi bắt đầu viết tập lệnh của riêng mình. Nó không thể là khó khăn, phải không? . Đây là mã đầy đủ của tôi. Nó chỉ có một phần phụ thuộc, JIMP (Chương trình thao tác hình ảnh JavaScript), là gói có thể tải hình ảnh nguyên bản bằng JavaScript và có một phương pháp để đọc giá trị pixel ở bất kỳ tọa độ X, Y cụ thể nào. Vì vậy, tất cả những gì cần thiết là lặp qua từng pixel trong một hàng (hướng X) và xác định xem pixel đó nên được thêm vào byte dưới dạng 1 (pixel trắng) hay 0 (pixel đen), đảm bảo thêm pixel hiện tại . Sau đó chạy nó trong một vòng lặp cho tất cả các hàng pixel trong ảnh (hướng Y)

Cuối cùng, bạn có một Bộ đệm byte chứa dữ liệu pixel mà bạn có thể thêm vào cuối dòng

*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"
7 của mình. Để xác minh kết quả của mình, tôi đã tạo lại hình ảnh giống như ví dụ từ sách hướng dẫn. Tôi bắt đầu với cùng một hình ảnh 16x16, nhưng vẽ nó trên canvas có kích thước 800x1198, giống với nhãn đầu ra của chúng tôi để chúng tôi có thể ánh xạ 1 đến 1 pixel khi in

In JavaScript tới máy in nhãn

Bây giờ, cho dù chúng tôi chạy hình ảnh này thông qua tập lệnh của mình bằng cách sử dụng

*Manufacturer: "POLONO"
*ModelName: "POLONO PL60"
*ShortNickName: "HPRT N41"
8 hay trình điều khiển của nhà sản xuất bằng cách sử dụng lệnh
Install Complete
6 ở trên, chúng tôi sẽ có cùng một tệp nhị phân để gửi tới máy in. Chúng ta có thể kiểm tra nó bằng trình soạn thảo hex

In JavaScript tới máy in nhãn

Và chắc chắn, chúng tôi nhận được 16 bit (2 byte) số không, (

cupsfilter test.png -p /Library/Printers/PPDs/Contents/Resources/PL60.tspl.ppd -m printer/foo -e > out.tspl
0 ở dạng hex), tiếp theo là 98 byte số một (
cupsfilter test.png -p /Library/Printers/PPDs/Contents/Resources/PL60.tspl.ppd -m printer/foo -e > out.tspl
1). Mỗi vùng được chọn màu xanh lam là điểm bắt đầu của một hàng pixel mới (100 byte). Hãy chuyển đổi một vài hàng hex đầu tiên này trở lại thành nhị phân và xem nó có giống như hình ảnh mà chúng ta mong đợi không

In JavaScript tới máy in nhãn

Nóng chết tiệt, trông giống như hình ảnh thử nghiệm của chúng tôi. Khi kết thúc tập lệnh JS của chúng tôi, chúng tôi thậm chí có thể gửi tệp kết quả trực tiếp tới máy in

và xuất hiện một nhãn. Bây giờ tôi chỉ có một tập lệnh bao bọc yêu cầu EasyPost cung cấp nhãn PNG , lưu hình ảnh vào đĩa và chạy tập lệnh máy in của tôi. Toàn bộ tập lệnh mất ~2 giây trên Raspberry Pi, không nhanh bằng mã được biên dịch, nhưng rất nhanh cho nhu cầu của chúng tôi.

Cái gì tiếp theo?

Với thêm một chút nỗ lực, tôi tin rằng ai đó có thể biến điều này thành một công ty khởi nghiệp khả thi. Sau khi thử Tem. com, Dymo, PirateShip và một số hãng khác, tôi tin chắc rằng không có bộ kết hợp phần cứng và phần mềm vận chuyển nào tốt ngoài kia. Tất cả đều có cảm giác quá độc quyền và không cái nào có thể hack được hoặc giao diện với cơ sở dữ liệu tôi đã có. Tôi rất thích nhìn thấy ai đó bán một bộ với

  • Raspberry Pi $35 để in WiFi ở bất kỳ đâu trong kho
  • Một máy in Polono / HPRT giá rẻ ~$100
  • Máy quét mã vạch không dây trị giá ~$60 để liên kết số sê-ri và tự động in nhãn vận chuyển
  • Giao diện web được cung cấp từ Raspberry Pi để tôi có thể in nhãn từ điện thoại/máy tính xách tay của mình
  • Cách in nhãn vận chuyển nhanh với tính năng tự động điền địa chỉ (đối với đơn đặt hàng một lần)
  • API đơn giản để gửi địa chỉ/nhãn cần được in từ hệ thống đặt hàng của chúng tôi

Đây là trạm vận chuyển của tôi kiểm tra tất cả các hộp đó. Rất nhiều trong số đó là các tập lệnh nội bộ được hack cùng nhau, vì vậy tôi đã không dành thời gian để đánh bóng nó và làm cho nó đủ chung chung để phát hành. Nếu bạn muốn xem thêm chi tiết trong một bài đăng trên blog trong tương lai, vui lòng cho tôi biết

In JavaScript tới máy in nhãn

cắm không biết xấu hổ

Nếu bạn muốn nhãn hiệu của riêng mình được cung cấp bởi trạm vận chuyển này (tốt, cùng với một sản phẩm thực sự tuyệt vời. ), giờ đây bạn có thể đặt trước PiBox. Nó được tải với mọi thứ bạn cần để tự lưu trữ ứng dụng tại nhà. Các đơn đặt hàng mới được ước tính sẽ giao vào tháng 7

Làm cách nào để in mã vạch trong JavaScript?

Các bước để chạy ứng dụng này. .
Tải xuống thư viện Javascript JsBarcode và tải nó lên (như hiện tại, không "làm đẹp") lên phiên bản của bạn dưới dạng UI Script. .
Tạo macro giao diện người dùng (đặt tên là "barcode_label") và sử dụng đoạn mã bên dưới làm điểm bắt đầu. .
Tạo Formatter "Nhãn mã vạch" như hình bên dưới

Máy in của tôi có thể in nhãn không?

Bạn có thể in nhãn vận chuyển bằng máy in thông thường , cho dù bạn có máy in laser hay máy in phun. Điều quan trọng cần lưu ý là những máy này chủ yếu phục vụ thay thế cho máy in truyền thống chỉ để in nhãn vận chuyển.

Bạn có thể in từ điện thoại sang máy in nhãn không?

Có, bạn có thể in nhãn địa chỉ từ điện thoại của mình bằng chính ứng dụng dịch vụ vận chuyển trực tuyến mà bạn sử dụng để in nhãn vận chuyển .