perl使用prStrWidth计算数组元素的长度

时间:2015-06-30 23:34:01

标签: arrays perl

我不确定我们是否可以通过使用prStrWidth将其中一个与另一个相加来计算数组元素的长度,但这是我的尝试:

my @field = split //, $case_field;

for $cnt (0 .. $#field) {
$field_str .= $field[$cnt];

if($cnt != (scalar @field - 1)) {
$line_pos = (rindex($field_str, "\n") > 0) ? rindex($field_str, "\n") : 0;

my ( $strwidth1 ) = prstrwidth(substr($field_str, $line_pos),'Courier New',5);
my ( $strwidth2 ) = prstrwidth($field[$cnt+1],'Courier New',5);
my ( $totalwidth ) = $strwidth1 + $strwidth2;

$field_str .= ($totalwidth < 70) ? '' : "\n";

那不起作用。基本上我需要使用prStrWidth来计算两个字符串的宽度,而不是使用长度函数。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

来自PDF ::重复使用prStrWidth()

prStrWidth - calculate the string width

prStrWidth($string, $font, $fontSize)
    Returns string width in points. Should be used in conjunction with
    one of these predefined fonts of Acrobat/Reader: Times-Roman,
    Times-Bold, Times-Italic, Times-BoldItalic, Courier, Courier-Bold,
    Courier-Oblique, Courier-BoldOblique, Helvetica, Helvetica-Bold,
    Helvetica-Oblique, Helvetica-BoldOblique or with a TrueType font
    embedded with prTTFont. If some other font is given, Helvetica is
    used, and the returned value will at the best be approximate.

以下作品:

#!/usr/bin/env perl                                                                         

use strict;
use PDF::Reuse;

my $field_str;
# ( "w_0\n", "w_1", "w_2", ... )
my @field = map { "w$_ " . ($_ % 10 ? '' : "\n") } ( 0 .. 50);

for my $cnt (0 .. $#field) {
    $field_str .= $field[$cnt];

    if( $cnt != (scalar @field - 1) ) {
        my $line_pos = (rindex($field_str, "\n") > 0) ?   rindex($field_str, "\n") : 0;

        my ( $strwidth1 ) = prStrWidth(substr($field_str, $line_pos),'Courier New',5);
        my ( $strwidth2 ) = prStrWidth($field[$cnt+1],'Courier New',5);
        my ( $totalwidth ) = $strwidth1 + $strwidth2;

        $field_str .= ($totalwidth < 70) ? '' : "\n";
    }
}

print $field_str;

产生以下内容:

w0
w1 w2 w3 w4 w5 w6 w7 w8
w9 w10
w11 w12 w13 w14 w15 w16
w17 w18 w19 w20
w21 w22 w23 w24 w25 w26
w27 w28 w29 w30
w31 w32 w33 w34 w35 w36
w37 w38 w39 w40
w41 w42 w43 w44 w45 w46
w47 w48 w49 w50