2012-11-30 19 views
5

Tôi sử dụng ngôn ngữ PPLA để in nhãn trực tiếp tới Argox OS-214.Văn bản Bỏ qua từ trong Argox OS214 - PPLA

Tôi làm cách nào để gửi văn bản dài?

Tôi có phải tính toán hoặc có chức năng nào cho tôi không?

Nếu tôi phải tính toán, bạn có bất kỳ mẹo nào về cách thực hiện không?

Trả lời

3

Trong PPLA language manual không có chức năng để từ bọc dòng văn bản dài, vì vậy bạn phải tính toán vị trí chèn ngắt dòng trước khi gửi lệnh đến máy in.
Cách thực hiện tùy thuộc vào ngôn ngữ lập trình bạn đang sử dụng; ví dụ trong ngôn ngữ PHP có một wordwrap function có thể làm điều đó cho bạn (mã nguồn C của hàm wordwrap là here, tại dòng 803).
Một mô tả đơn giản của một thuật toán từ gói có thể được tìm thấy trên wikipedia:

SpaceLeft := LineWidth 
for each Word in Text 
    if (Width(Word) + SpaceWidth) > SpaceLeft 
     insert line break before Word in Text 
     SpaceLeft := LineWidth - Width(Word) 
    else 
     SpaceLeft := SpaceLeft - (Width(Word) + SpaceWidth) 

Trước hết, bạn phải chia văn bản trong lời nói, nhưng tôi cho rằng đây không phải là một vấn đề cho bạn, vì vậy Tôi sẽ không xây dựng thêm.
LineWidth phải được tính là chiều rộng nhãn trừ chiều rộng lề trái và phải.
Giả sử rằng văn bản bạn đang sử dụng một phông chữ cố định (không tỷ lệ), bạn có thể chuyển đổi LineWidth thành một số ký tự bằng cách chia đơn giản theo chiều rộng ký tự (hoặc đơn giản là in một dòng văn bản dài và sau đó đếm số ký tự được in); theo cách này, mỗi độ dài từ tương ứng với số ký tự của nó.
Nếu không, nếu bạn đang sử dụng phông chữ tỷ lệ, việc tính toán mỗi chiều rộng từ là khó khăn hơn, trừ khi bạn biết từng chiều rộng ký tự.
Ý tưởng có thể là sử dụng hình ảnh có cùng kích thước pixel của nhãn, chỉ để mô phỏng in và tính toán vị trí chèn ngắt dòng, nhưng điều này yêu cầu phải có hàm để tính chiều rộng pixel của mỗi từ ví dụ trong PHP có imagettfbbox function) và cũng có thể sử dụng chính xác cùng một phông chữ trên máy in và PC.
Lưu ý rằng bạn cũng có thể phải xử lý một số từ dài hơn chiều rộng nhãn; trong trường hợp này, bạn chỉ cần tách từ đó tại LineWidth và tiếp tục trên dòng tiếp theo.

Các vấn đề liên quan