重新排列PDF文件中的数据

问题描述 投票:-2回答:1

我使用Perl生成带有PDF::API2模块的PDF文件。

我在以所需格式将数据写入文件时遇到困难。

目前这是它在PDF文件中的显示方式。

这是我的剧本

my %data = (
    '1' => {
        'SEQUENCE' => '1',
        'NAME'     => 'John',
        'ADDR1'    => 'Road 1',
        'GRADE'    => '5'
    },
    '2' => {
        'SEQUENCE' => '2',
        'NAME'     => 'Smith',
        'ADDR1'    => 'Road 2',
        'GRADE'    => '6'
    }
);

...
...

my @rows = qw( NAME ADDR1 GRADE );

for my $id (sort keys %data){
    push @tbl, [ @{$data{$id}}{@rows} ];
    ($name, $addr, $grade) = ($data{$id}{'NAME'}, $data{$id}{'ADDR1'}, $data{$id}{'GRADE'});
} 

...
...

my $pdftable = new PDF::Table;
$pdftable->table(
     $pdf,
     $page,
     \@tbl,
     x => 50,
     w => 400,
     start_y => 630,
     start_h => 630,
     next_y  => 630,
     next_h  => 630,
     padding => 5,
     border => 1,
     padding_right => 10,
);
$pdf->saveas();

但我希望它看起来像这样:

我知道我必须对@tbl数据进行修改,但是如何?

perl pdf formattable dynamicpdf-table2
1个回答
-1
投票

PDF::Table table函数将“数组或数组”作为其第三个参数。您目前的结构如下:

my @tbl = ( [$name,$addr,$grade], [...] )

每个嵌套数组([]括号内的内容)是表的新行,该数组的元素是该行的单元格。所以相反,你想要它结构化:

my @tbl = ( ['NAME',$name], ['ADDR1',$addr], ['GRADE',$grade], [...] ) 

使用%data结构构建它:

for my $id (sort keys %data) {
    push @tbl, [$_, $data{$id}->{$_}] for qw/NAME ADDR1 GRADE/;
    push @tbl, [qw/- -/]; # to add a blank row as a separator
}
© www.soinside.com 2019 - 2024. All rights reserved.