string - 特定字体中字符串的长度

标签 string perl fonts

我正在尝试计算字体中字符串的长度。目标是创建如下文本:

DD  Qui n'a pu l'obtenir ne le méritait pas.
LC  Ne le méritait pas! Moi?    
DD                           Vous!  
LC                                 Ton impudence    
    Téméraire vieillard, aura sa récompense

使用固定字体(如上所述),这很容易。对于比例字体,我可以使用以下方法对前一行长度进行可接受的近似:

use Tk;
use Tk::Font;

my $mw = MainWindow->new();
my $font = $mw->fontCreate( 'TimesNew Roman' );

sub timesspace {
    (my $text)=@_;
    my $retval= $font->measure( $text );
    return int($retval);
}

(合理的估计,因为 Tk 字体与输出处理器的字体不完全相同)。

然而,这需要图形环境(因为我创建了一个 Tk 窗口),即使所有脚本都只是 CLI。这导致:

couldn't connect to display "localhost:11.0" at /usr/local/lib64/perl5/Tk/MainWindow.pm line 53.
MainWindow->new() at /usr/local/bin/xml3roff line 10.

是否有一种可靠且简单的方法可以在 Times/Helvetica/... 中查找字符串的长度,而不需要这样的环境?

最佳答案

看起来像Font::AFM可能就是您想要的,但它依赖于 Adob​​e Font Metrics (AFM) 文件,而您的系统上可能未安装该文件。

或者,您可以尝试将其近似为 this answer .

关于string - 特定字体中字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64926097/

相关文章:

regex - 如何为 Makefile 编写 Perl 单行,以便我可以将文字\n 转换为换行符?

html - Google(静态)字体网址会更改吗?

c# - 如何在 .net 中获取字体字距调整对

java - 使用 Open XML 更改文档的字体

java - 将字母数字字符串转换为数字和字符串映射时生成的空映射

pragma - 什么是 perl 实验特性,postderef?

c# - 如何在 LINQ 创建的字符串之前插入一个字符串?

当包装在 perl DBI 中时,MySQL 查询似乎给出了不同的结果

c++ - 通过套接字将数据作为字符串发送的好方法是什么?

java - 字符串替换函数