Há muitas maneiras de fazer isso. Estou mostrando aqui como um engenheiro abordaria o problema. O objetivo é mostrar que a abordagem é de muitas maneiras análoga a muitos outros campos. Enumerá-lo em voz alta parece chato e, em casos simples como esse, é feito silenciosamente na cabeça. Isso apenas ilustra o método.
Atenção explicação longa.
Etapa 1: Definir solução
- Obter largura da string.
- Usando fonte específica.
- De preferência de uma maneira tecnicamente utilizável, para uma intervenção humana mínima.
- Usando codificação de fonte: desconhecido, solicite esclarecimentos, afeta a solução
- Objetivo: Desconhecer pedir esclarecimentos, afeta a solução
- Quantas vezes a ferramenta é necessária: Desconhecidos solicitam esclarecimentos, afetam a solução, se frequentemente
- precisa de processamento em lote: desconhecido, solicite esclarecimentos, afeta a solução, se necessário
- entrada do usuário: string mais fonte? Desambiguar
- saída: para um processo automatizado ou para uso manual?
- ambiente de uso: qual sistema operacional? Esclarecimento de solicitação desconhecido , afeta fortemente a solução
- unidade: pixels, pt, polegadas ou mm? Esclarecimento de solicitação desconhecido , afeta solução
Como você pode ver, muitas incógnitas precisam ser respondidas. Especialmente se alguém quiser ter uma boa solução que possa ser enviada ao cliente. Sempre se esforce para entender o problema.
Etapa 2: procure métodos na literatura (ou faça brainstorming)
O primeiro estágio é listar aplicativos e métodos que poderiam gerar respostas:
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)
A lista é suficiente para testar
Etapa 3: Protótipo (esboço)
usando postscript
O postscript é um método conhecido, o problema com o postscript é o mecanismo que você usa para fazer isso, pois eles têm efeitos ligeiramente diferentes. Usando o gohostscript, o seguinte arquivo em lote funciona:
:: 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%
Funciona no Windows, retorna a largura do ponto, provavelmente também funciona no Linux com algumas alterações. Restrições de borda desconhecidas. Peça esclarecimentos. Problemas: é necessário corrigir a codificação de caracteres ou usar o arquivo ps intermediário. Caso contrário, nenhuma string espaçada funcionará. Problemas de codificação desagradáveis, gerenciáveis se estiver usando idiomas ocidentais.
Usando Illustrator e javascipt
usando o ilustrador manualmente: Se você esboçar o caminho, poderá ler a largura do texto na caixa de largura da GUI. Depois que isso for entendido, ele poderá ser roteirizado.
Isso pode ser codificado em 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")
Funciona, mas precisa do Illustrator pode ou não ser um problema. O resultado pode ser refinado para alguns aspectos técnicos, se necessário. O mesmo pode ser feito no VB ou no AppleScript, ou usando COM com C, C ++, python, perl, ruby etc. Também pode ser usado através da linha de comando, se necessário.
E depois que alguns dos itens acima forem testados, escolha um para refinamento.
PS: O op poderia esclarecer?