Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有HTML元素的JavaScript中基于像素宽度截断文本_Javascript_String_Rhino_Truncate - Fatal编程技术网

在没有HTML元素的JavaScript中基于像素宽度截断文本

在没有HTML元素的JavaScript中基于像素宽度截断文本,javascript,string,rhino,truncate,Javascript,String,Rhino,Truncate,我们有一个与Rhino JavaScript引擎集成的系统。 我们可以上传JavaScript文件来处理某些数据集 我需要根据像素宽度截断字符串,以避免它扩展有限大小的框。 但是不可能硬编码字符长度,因为长度取决于字符 如果这是一个普通的基于浏览器的HTML应用程序,我可以使用SPAN或DIV width来编写函数。但是在我的例子中,我不能使用任何HTML元素。所以我计划写一个函数,保持每个字符的像素宽度数组。 (在我的情况下,我只需要Arial Normal 10px) 但是我找不到资源来获取

我们有一个与Rhino JavaScript引擎集成的系统。 我们可以上传JavaScript文件来处理某些数据集

我需要根据像素宽度截断字符串,以避免它扩展有限大小的框。 但是不可能硬编码字符长度,因为长度取决于字符

如果这是一个普通的基于浏览器的HTML应用程序,我可以使用SPAN或DIV width来编写函数。但是在我的例子中,我不能使用任何HTML元素。所以我计划写一个函数,保持每个字符的像素宽度数组。 (在我的情况下,我只需要Arial Normal 10px)

但是我找不到资源来获取Arial的像素宽度。 谁能分享一个好的链接

如果您知道更好或更简单的解决方案,请让我知道

找到了解决方案:-) 我以编程方式编写了宽度数组

在C中,我使用了
MeasureString()
方法

    Font stringFont = new Font("Arial", 10);
        String s="";
        for (int i = 1; i < 256; i++) {
            Char c = (char)i;
            s = s + "widths[" + i + "]=" + CreateGraphics().MeasureString(c.ToString(), stringFont).Width.ToString() + ";\n";
        }
        MessageBox.Show(s);
最后,这是我的JavaScript函数

function smartTruncate(str,maxLen){
var widths = new Array();
widths[1]=19.54427;
//Assigning all above values

var len = 0;
for ( i =0; i < str.length ; i++){
var ascii = str.charCodeAt(i);
    len = len + widths[ascii];
    if (len>maxLen) {
        if(i==0) {
            i=1;
        }
        str = str.substring(0, i-1);
        break;
    }
}
    return str;
}
函数smartTruncate(str,maxLen){
变量宽度=新数组();
宽度[1]=19.54427;
//分配所有上述值
var-len=0;
对于(i=0;imaxLen){
如果(i==0){
i=1;
}
str=str.substring(0,i-1);
打破
}
}
返回str;
}
function smartTruncate(str,maxLen){
var widths = new Array();
widths[1]=19.54427;
//Assigning all above values

var len = 0;
for ( i =0; i < str.length ; i++){
var ascii = str.charCodeAt(i);
    len = len + widths[ascii];
    if (len>maxLen) {
        if(i==0) {
            i=1;
        }
        str = str.substring(0, i-1);
        break;
    }
}
    return str;
}