Có nhiều cách điều này có thể được thực hiện. Tôi đang chỉ ra cách một kỹ sư sẽ tiếp cận vấn đề. Vấn đề là chỉ ra rằng cách tiếp cận này theo nhiều cách tương tự với nhiều lĩnh vực khác. Việc liệt kê nó có vẻ nhàm chán và trong những trường hợp đơn giản như thế này, nó được thực hiện một cách âm thầm trong đầu. Điều này chỉ minh họa phương pháp.
Cảnh báo giải thích dài.
Giai đoạn 1: Xác định giải pháp
- Lấy chiều rộng của chuỗi.
- Sử dụng phông chữ cụ thể.
- Tốt nhất là theo cách có thể sử dụng về mặt kỹ thuật để sự can thiệp tối thiểu của con người.
- Sử dụng mã hóa phông chữ: Không rõ yêu cầu làm rõ, ảnh hưởng đến giải pháp
- Mục đích: Không biết làm rõ, ảnh hưởng đến giải pháp
- Mức độ thường xuyên của công cụ cần thiết: Không biết yêu cầu làm rõ, ảnh hưởng đến giải pháp nếu thường xuyên
- cần xử lý hàng loạt: Không rõ yêu cầu làm rõ, ảnh hưởng đến giải pháp nếu cần
- đầu vào của người dùng: chuỗi cộng với phông chữ? Định hướng
- đầu ra: cho một quá trình tự động hoặc sử dụng thủ công?
- Sử dụng môi trường: Hệ điều hành nào? Không biết hỏi làm rõ, ảnh hưởng mạnh đến giải pháp
- đơn vị: Pixels, pt, inch hay mm? Không biết hỏi làm rõ, ảnh hưởng đến giải pháp
Như bạn có thể thấy có rất nhiều điều chưa biết cần phải trả lời. Đặc biệt nếu một người muốn có một giải pháp tốt có thể được chuyển đến khách hàng. Luôn luôn phấn đấu để hiểu vấn đề.
Giai đoạn 2: Tìm kiếm các phương pháp trong văn học (hoặc động não)
Giai đoạn đầu tiên là liệt kê các ứng dụng và phương pháp có thể mang lại câu trả lời:
Graphics applications (adobe has scripting api OK)
Page setters (TEX solution above)
Operating system (windows has methods for font metrics)
Manually parse fontfile (Infeasible, many formats in one need to implement a lot of routines)
postscript interpretters (solution known)
GUI toolkits (QT can do this)
Other Tookints (Graphing tools like Scipy have this info)
Danh sách này là đủ để đi kiểm tra
Giai đoạn 3: Nguyên mẫu (phác họa)
sử dụng bài viết
Postcript là một phương pháp đã biết, vấn đề với postcript là công cụ nào bạn sử dụng để làm điều này vì chúng có hiệu ứng hơi khác nhau. Sử dụng gohostscript tập tin lô sau đây hoạt động:
:: usage stringWidth string systemfont
set "ps=(%1) /%2 findfont 12 scalefont setfont 0 0 moveto true charpath pathbbox pop exch pop exch sub pstack"
gswin64c -dQUIET -dBATCH -r1200 -dNODISPLAY -sFONTPATH=%windir%\fonts -c %ps%
Hoạt động trên windows, trả về độ rộng điểm, có thể cũng hoạt động linux với một vài thay đổi. Hạn chế biên giới không rõ. Hỏi làm rõ. Sự cố: cần sửa mã hóa char hoặc sử dụng tệp ps trung gian. Mặt khác, không có chuỗi khoảng cách hoạt động. Các vấn đề mã hóa khó chịu, có thể quản lý nếu sử dụng các ngôn ngữ phương Tây.
Sử dụng Illustrator và javascipt
sử dụng vẽ minh họa bằng tay: Nếu bạn phác thảo đường dẫn, bạn có thể đọc chiều rộng của văn bản trong hộp chiều rộng trong gui. Một khi điều này được hiểu nó có thể được viết kịch bản.
Điều này có thể được mã hóa trong javascript:
#target illustrator
var doc = app.documents.add();
var text = doc.textFrames.add();
text.contents = "test";
text.textRange.characterAttributes.size = 12;
text.textRange.characterAttributes.textFont = textFonts.getByName("Onyx");
var outline = text.createOutline();
var bounds = outline.geometricBounds
var width = bounds[1]-bounds[3]
alert(width+" pt")
Hoạt động, nhưng cần Illustrator có thể hoặc không thể là một vấn đề. Kết quả có thể được tinh chỉnh cho một số khía cạnh kỹ thuật nếu cần thiết. Điều tương tự có thể được thực hiện trong VB hoặc applescript, hoặc sử dụng COM với C, C ++, python, perl, ruby, v.v. Cũng có thể được sử dụng dòng lệnh máng nếu cần thiết.
Và sau khi một số trong những người ở trên được thử nghiệm, chọn một để sàng lọc.
PS: Có thể làm rõ?