我需要一些帮助来尝试对我拥有的这个 PDF 表格项目进行 colspan。在此示例代码中,我可以解释我正在尝试做什么。我需要用“主要信息”和“次要信息”制作行来做一个“colspan”。我还试图使总计“线”在表格上拉伸(stretch)(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();
最佳答案
在找到合适的解决方案之前,粗略的黑客攻击可能会奏效。
改变
至
同样对于您希望“修复”的其他行。 [显然,您可以使用任何其他字符串代替 'col$span',只要它不会自然出现。]
然后为 'col$span' 制定一个新规则,使文本与背景颜色相同:
不确定 Total 是否正是您想要的,但其他的看起来像您想要的,即使它有点作弊。
关于perl - PDF::Table 中的 Colspan,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13576052/