2017-12-27 365 views
-2

我正在使用Perl来生成带有 PDF::API2模块的PDF文件。重新排列PDF文件中的数据

我很难以所需的格式将数据写入文件。

目前,这是它如何出现在PDF文件中。

Currently looks like this in 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(); 

但我希望它出现这样的:

It should be formatted like this

我知道我必须做出修改@tbl数据,但是如何?

回答

-1

PDF::Tabletable函数采用一个“阵列或多个阵列”作为它的第三个参数。您目前有它strucutred这样的:

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 
} 
+0

谢谢@beasy。 如何打印在不同的表中的数据,而在同一个表中显示它与分离了 - - 。 – vinodk89

+0

在每个循环中创建一个新的“PDF :: Table” – beasy