我需要一些帮助来尝试在我拥有的这个PDF表项目上做一个colspan。在这个示例代码中,我可以解释我想要做什么。我需要使用“主要信息”和“辅助信息”来创建“colspan”。我也试图使总数“线”在表上拉伸(colspan)以创建一条线来划分该表上的部分。也许我可以传递图像来模拟colspan,但无法弄清楚如何通过数据字符串传递图像代码。我到处寻找,我找不到任何解决方案,也许这里有人这样做过,可以告诉我如何完成它。 以下是示例代码,并提前感谢您的帮助!
#!/usr/bin/perl
use warnings;
use strict;
use PDF::API2;
use PDF::Table;
use Data::Dumper;
my $pdftable = new PDF::Table;
my $pdf = new PDF::API2(-file => "report.pdf");
my $page = $pdf->page();
$pdf->mediabox('A4');
# some data to layout
my $some_data =[
['Name', 'Address', 'Account', 'Amount',],
['','','','',],
['Primary Info','','','',],
['','','','',],
['1 - Charles Dawrwin', '1 - Boston, MA', '1 - 123456789', '150.00'],
['2 - Arnold Shuwerts', '2 - San Rose, CA', '2 - 844756485' , '250.00'],
['3 - Joe Doe', '3 - Revere, MA', '3 - 000034559', '100.00'],
['4 - Mary Loo', '4 - New York, NY', '4 - 333449687', '125.00'],
['','','','',],
['','','','___________',],
['','Primary Sub Total','','550.00',],
['','','','',],
['1a - Mary Dawrwin', '1a - Cambrigde, MA', '1a - 123452789', '550.00'],
['2a - Joe Doark', '2a - Miami, FL', '2a - 844726485' , '350.00'],
['','','','',],
['Secondary Info','','','',],
['','','','',],
['5 - John Dell', '5 - Portland, ME', '5 - 111000384', '55.00'],
['6 - Mary Loumain', '6 - Cambridge, MA','6 - 000034569','1,000.00'],
['7 - Charles Town', '7 - New Port, NH', '7 - 222299944', '200.00'],
['8 - Jasmin Deen', '8 - San Jose, CL', '8 - 000000122', '255.00'],
['','','','___________',],
['','','Total:','$3,450.00',],
];
my $cell_props;
my $j = 0;
foreach my $row ( @{$some_data} )
{
my $k = 0;
foreach my $cell ( @{$row} )
{
if ( ($cell eq 'Name') || ( $cell eq 'Address') || ( $cell eq 'Account') || ( $cell eq 'Amount') ) {
$cell_props->[$j]->[$k] ={
background_color => '#808080', #
font_color => '#FF0000', #
justify => "center",
};
}elsif ( ($cell eq 'Primary Info') || ($cell eq 'Secondary Info') ){
$cell_props->[$j]->[$k] = {
font => $pdf->corefont("Helvetica", -encoding => "utf8"),
font_size => 15,
background_color => '#FFCA00', #
font_color => '#4D4D4D', #
justify => "left",
};
}elsif ( ($cell eq 'Total:') ){
$cell_props->[$j]->[$k] = {
background_color => '#FFCA00', #
font_color => '#4D4D4D', #
justify => "center",
};
}else {
$cell_props->[$j]->[$k] = {
font => $pdf->corefont("Helvetica", -encoding => "utf8"),
font_size => 8,
background_color => '#ffffff', #
font_color => '#000000', #
justify => "center",
};
}
$k++;
}
$j++;
}
# build the table layout
$pdftable->table(
# required params
$pdf,
$page,
$some_data, # 2D arrayref of text strings
x => 50, #left_edge_of_table,
-w => 495, # width of table. technically optional, but almost always a good idea to use
start_y => 820, # baseline_of_first_line_on_first_page,
next_y => 800, # baseline_of_first_line_on_succeeding_pages,
-start_h => 800, # height_on_first_page,
next_h => 500, # height_on_succeeding_pages,
# some optional params
-padding => 3, # cell padding
padding_right => 10, #right cell padding, overides -pad
border => 0, # border width 0 for no border
background_color_odd => '',
background_color_even => '', #cell background color for even rows
header_props =>
{
min_w => 250,
bg_color => "#808080",
font => $pdf->corefont("Helvetica", -encoding => "utf8"),
font_size => 13,
font_color => "#000000",
repeat => 1,
},
column_props => [ map{{justify => 'center' }}1..4, ],
cell_props =>
$cell_props,
);
$pdf->saveas();
答案 0 :(得分:0)
在找到合适的解决方案之前,也许会有粗暴的黑客行为。
更改
['Primary Info','','','',],
到
['Primary Info','col$span','col$span','col$span',],
并且类似于您想要“修复”的其他行。 [显然,你可以在'col $ span'的地方使用任何其他字符串,只要它不会自然出现。]
然后为'col $ span'制定新规则,使文本与背景颜色相同:
} elsif ($cell eq 'col$span') { $cell_props->[$j]->[$k] = { font => $pdf->corefont("Helvetica", -encoding => "utf8"), font_size => 1, background_color => '#FFCA00', # font_color => '#FFCA00', # };
不确定道达尔是你想要的,但其他人看起来就像你想要的那样,即使它有点作弊。