2012-11-27 5 views
4

필자는이 PDF 표 프로젝트에서 colspan을 수행하는 데 도움이 필요합니다. 여기이 샘플 코드에서 내가하려고하는 것을 설명 할 수 있습니다. "colspan"을 수행하려면 "기본 정보"및 "보조 정보"가있는 행을 만들어야합니다. 나는 또한이 테이블의 섹션을 나누는 선을 만들기 위해 테이블 ​​위로 스트레칭 (colspan) 할 합계 "선"을 만들려고합니다. 어쩌면 이미지를 전달하여 colspan을 시뮬레이트 할 수는 있지만 데이터 문자열을 통해 이미지 코드를 전달하는 방법을 알 수는 없습니다. 나는 도처에 보였고 나는 그것에 대한 해결책을 찾을 수 없다. 어쩌면 여기 누군가가 전에 이것을했기 때문에 나는 그가 어떻게 끝낼 수 있는지 보여줄 수 있었다. 샘플 코드와 도움에 미리 감사드립니다!PDF의 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

http://www.perlmonks.org/?node_id=1005755 – toolic

답변

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', # 
}; 

확실하지 총은 당신이 원하는 정확히하지만 다른 사람들이 조금 부정하더라도, 당신이 원하는 것처럼 보인다.