4

私が持っているこの 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();
4

1 に答える 1

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

合計がまさにあなたが望んでいたものかどうかはわかりませんが、他のものは、たとえそれが少しごまかしていても、あなたが望むもののように見えます.

于 2013-02-12T20:50:25.237 に答える