忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP TCPDFのテキストデータの段組みの方法について

段組み とは1ページの中で複数の列に分けて、テキストを左の列から右方向へ順次出力することを言います。

以下の画像は 段組み のテストとして、ワードで作成した3段組のものです。
この様な段組みが TCPDF では簡単にできますので、この説明を行っていきます。

TCPDF での 段組みAddPage メソッドを実行後に、「カラム定義の設定」「開始カラムの指定」を行い、 テキストの文字列を Write メソッドを実行すれば実現します。

取敢えず 段組み に必要な各種のメソッドに付いて以下に記します。

//
// 同一幅の段組み設定
public function setEqualColumns($numcols=0, $width=0, $y=null)
// $numcols   : カラム数(「0」設定で段組みを不可指定)
// $width     : カラム幅
// $y         : カラム開始Y座標(「null」であれば現在位置から出力)


// 段組みのカラムを削除
public function resetColumns()


// カラム定義を配列で設定
public function setColumnsArray($columns)
// $columns   : カラム定義配列
//              $columns[]['w'] : カラム幅
//              $columns[]['s'] : カラムの空白幅
//              $columns[]['y'] : カラムの先頭位置


// 開始カラムの選択
public function selectColumn($col=null) 
// $col       : カラム番号(番号は「0」から始まる、「null」の場合は現在のカラム)


// 現在カラムの取得
public function getColumn()


// 現在のカラム数の取得
public function getNumberOfColumns()
//






■段組みでのテキストデータ表示

表示を行うテキストデータは「test-mul-col.txt」として同一ディレクトリ内に設定しておきます。

AddPage メソッドを実行後に、resetColumns メソッドでカラムをリセットし、「カラム定義の設定」を setEqualColumns メソッドで カラム数は「3」で幅は「60mm」を指定します。

その後「開始カラムの指定」を selectColumn メソッドで「0」カラムから出力する様に指定します。

テキスト文字列の出力は file_get_contents メソッドでテキストファイルの内容を読込んで Write メソッドを実行します。

<?php
require_once('../tcpdf/tcpdf.php');

// TCPDFクラス生成
$pdf = new TCPDF();

// デフォルトで用意されている日本語フォント[小塚ゴシックPro M]
$strFont = "kozgopromedium";
// ヘッダ・フッタ出力設定
$pdf->setPrintHeader(true);
$pdf->setPrintFooter(true);
// 本文の日本語フォント[小塚ゴシックPro M]
$pdf->SetFont($strFont, "", 12);

// 新規ページの追加
$pdf->AddPage();
// カラム制御をリセット
$pdf->resetColumns();
// カラム定義の設定(3カラムで、幅は60mm)
$pdf->setEqualColumns(3, 60);
// カラム定義の指定
$pdf->selectColumn(0);
// 外部テキストファイルの読込
$content = file_get_contents('test-mul-col.txt', false);
// テキスト色
$pdf->setTextColor(50, 50, 50);
// 内容を出力
$pdf->Write(0, $content, '', 0, 'J', true, 0, false, true, 0);

// pdf表示設定
$pdf->Output('pdf-mul-col-1-1.pdf', 'I');
?>

これの実行結果は以下の通りです。(ワードの出力とはフォントの違いなどから若干の表示が異なります。)




上記のソースで setEqualColumns メソッドでは同じカラム幅なのでこのメソッドを用いましたが、 その部分を以下の様に setColumnsArray メソッドで置き換えができます。

// カラム定義の設定(3カラムで、幅は60mm)
//$pdf->setEqualColumns(3, 60);

// [setColumnsArray]に置き換え
$columns = [
    ['w' => 60, 's' => 0, 'y' => 10],
    ['w' => 60, 's' => 0, 'y' => 10],
    ['w' => 60, 's' => 0, 'y' => 10]
];
$pdf->setColumnsArray($columns);
//

この方式で、3カラムの幅が異なる例をテストしてみます。

<?php
require_once('../tcpdf/tcpdf.php');

// TCPDFクラス生成
$pdf = new TCPDF();

// デフォルトで用意されている日本語フォント[小塚ゴシックPro M]
$strFont = "kozgopromedium";
// ヘッダ・フッタ出力設定
$pdf->setPrintHeader(true);
$pdf->setPrintFooter(true);
// 本文の日本語フォント[小塚ゴシックPro M]
$pdf->SetFont($strFont, "", 12);

// 新規ページの追加
$pdf->AddPage();
// カラム制御をリセット
$pdf->resetColumns();
// カラム定義の設定
$columns = [
    ['w' => 30, 's' => 0, 'y' => 10],
    ['w' => 60, 's' => 0, 'y' => 10],
    ['w' => 90, 's' => 0, 'y' => 10]
];
$pdf->setColumnsArray($columns);
// カラム定義の指定
$pdf->selectColumn(0);
// 外部テキストファイルの読込
$content = file_get_contents('test-mul-col.txt', false);
// テキスト色
$pdf->setTextColor(50, 50, 50);
// 内容を出力
$pdf->Write(0, $content, '', 0, 'J', true, 0, false, true, 0);

// pdf表示設定
$pdf->Output('pdf-mul-col-1-1.pdf', 'I');
?>

これの実行結果は以下の通りです。(カラム幅が異なっていることが確認できます。)












PR

コメント

コメントを書く