PHPでPDF出力(tcpdf) 10 (ついに完成)

10.ExcelからTCPDF定義ファイル作成

Excelで帳票設計して、TCPDFでPDF帳票出力するためのジェネレーターが完成した。

完成したジェネレーターの実行画面である。

  ジェネレーター

帳票設計のExcelPHPで実行したTCPDF定義ファイルと出力されたPDFである。

   Excelレイアウト

 

   出力PDF帳票

 出力されたTCPDF定義を少々長くなる(899行)が載せておく。

<?php
Class tcpDefine extends tcpdfEditer {

public function setHeader() {
//ヘッダー・フッター印刷しない
$this->setPrintHeader(false);

$this->setPrintFooter(0);
$this->setHeaderMargin(0);
$this->setFooterMargin(0);
//余白
$this->SetMargins(1.5,3.6,-1,true);

}

public function newPage() {
//ページ追加
$this->AddPage('L','A4');

}

public function setPage() {
//自動改ページ オフ
$this->SetAutoPageBreak(False, 0);

$a = $this->GetX();
$b = $this->GetY();
$wd=21;
$vPos=3.6;
$hPos=3.8;
$this->SetFont('kozgopromedium', '',11);
$this->SetTextColor(0,0,0);
$source ='受 注 日';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,7, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=59;
$vPos=3.6;
$hPos=24.5;
$source ='図 番';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',11);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,7, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=12;
$vPos=3.6;
$hPos=83;
$source ='個数';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',11);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,7, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=20;
$vPos=3.6;
$hPos=94.7;
$source ='単 価';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',11);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,7, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=18;
$vPos=3.6;
$hPos=114.9;
$source ='納 期';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,7, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=12;
$vPos=3.6;
$hPos=133.1;
$source ='回数';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,7, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=84;
$vPos=3.6;
$hPos=169.5;
$this->SetFont('kozgopromedium', '',22);
$source ='製 造 指 示 書';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,14, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=13;
$vPos=3.6;
$hPos=274.5;
$this->SetFont('kozgopromedium', '',12);
$source ='No.1';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,7, $source, 0, 0,'L',0,'',0,0,'T','M');
$wd=9;
$vPos=10.6;
$hPos=3.8;
$this->SetFont('kozgopromedium', '',11);
$source =$this->_pdf_vars['day'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,13, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=12;
$vPos=10.6;
$hPos=12.8;
$this->SetFont('kozgopromedium', '',22);
$this->SetTextColor(255,0,0);
$source ='Ⅹ';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,13, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=47;
$vPos=10.6;
$hPos=24.5;
$this->SetFont('kozgopromedium', '',18);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['seizou'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,13, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=12;
$vPos=10.6;
$hPos=83;
$source =$this->_pdf_vars['kosuu'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,13, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=20;
$vPos=10.6;
$hPos=94.7;
$source =$this->_pdf_vars['tanka'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,13, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=18;
$vPos=10.6;
$hPos=114.9;
$source =$this->_pdf_vars['nouki'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,13, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=12;
$vPos=10.6;
$hPos=133.1;
$source =$this->_pdf_vars['kai'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,13, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=24;
$hPos=169.5;
$this->SetFont('kozgopromedium', '',12);
$source ='検査部';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,8, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=24;
$hPos=197.5;
$source ='製造部';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,8, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=24;
$hPos=225.5;
$source ='設計部';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,8, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=9;
$vPos=27.4;
$hPos=3.8;
$this->SetFont('kozgopromedium', '',14);
$source ='正';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=12;
$wd=12;

// 列の幅
// 行高さ
$hi = 4;
// 列の開始位置
$col = 3;
$maxCol = 10;
$hPos=12.8;
$vPos=27.4;
foreach ($this->_pdf_vars['hstday'] as $key) {
$source = $key['day'];
$this->SetTextColor(0,0,0);
$this->SetXY($hPos, $vPos);
$info = $this->adjustToWidth($source, $wd,'kozgopromedium,'11);
$this->SetFont('kozgopromedium', '',$info);
$this->Cell( $wd, $hi, $source, 0, 0,'C',0,'',0,0,'T','M');
$hPos += $wd;
$col++;
}
$wd=39;
$vPos=27.4;
$hPos=106.4;
$this->SetFont('kozgopromedium', '',11);
$source ='年間予定数';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,4, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=12;
$wd=12;

// 列の幅
// 行高さ
$hi = 7;
// 列の開始位置
$col = 3;
$maxCol = 10;
$hPos=12.8;
$vPos=31.9;
foreach ($this->_pdf_vars['hstsuu'] as $key) {
$source = $key['su'];
$this->SetTextColor(0,0,0);
$this->SetXY($hPos, $vPos);
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->Cell( $wd, $hi, $source, 0, 0,'C',0,'',0,0,'T','M');
$hPos += $wd;
$col++;
}
$wd=8;
$vPos=31.9;
$hPos=106.4;
$this->SetFont('kozgopromedium', '',14);
$source ='正';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=9;
$vPos=39.2;
$hPos=3.8;
$source ='反';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=8;
$vPos=43.7;
$hPos=106.4;
$source ='反';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=9;
$vPos=51;
$hPos=3.8;
$source ='正';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=8;
$vPos=55.5;
$hPos=106.4;
$this->SetFont('kozgopromedium', '',18);
$source ='MC';
$pos = $vPos;
$chrcnt=0;
for ($k= 0; $k != -1; ) {
$info = $this->adjustToHeight($source, $k,8,7,7.3,'kozgopromedium',18,$chrcnt);
$k = $info['length'];
$text = $info['text'];
$this->SetXY($hPos, $pos);
$this->Cell(8, $info['height'], $text, 0, 0,'C',0,'',0,0,'T','T');
$pos += $info['height'];
$chrcnt = $info['count'];
}
$wd=31;
$vPos=55.5;
$hPos=114.9;
$source ='1';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,19, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=9;
$vPos=62.8;
$hPos=3.8;
$this->SetFont('kozgopromedium', '',14);
$source ='反';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=78;
$hPos=3.8;
$this->SetFont('kozgopromedium', '',12);
$source ='材  料';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=121;
$vPos=78;
$hPos=24.5;
$source ='寸   法';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium,'12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=89;
$hPos=3.8;
$this->SetFont('kozgopromedium', '',18);
$source =$this->_pdf_vars['zairyo'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=109;
$vPos=89;
$hPos=36.2;
$source =$this->_pdf_vars['size'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'L',0,'',0,0,'T','M');
$wd=9;

// 行の高さ
$hi = 11;
// 行の開始位置
$vPos = 100;
$row = 16;
$maxRow = 19;
foreach ($this->_pdf_vars['lpdata'] as $key) {
$hPos=3.8;
$wd = 9;
$this->SetTextColor(0,0,0);
$source = $key['num'];
$this->SetXY($hPos, $vPos);
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->Cell( $wd, $hi, $source, 0, 0,'C',0,'',0,0,'T','M');
$hPos=12.8;
$wd = 102;
$this->SetTextColor(0,0,0);
$source = $key['zai'];
$this->SetXY($hPos, $vPos);
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->Cell( $wd, $hi, $source, 0, 0,'L',0,'',0,0,'T','M');
$vPos += $hi;
$row++;
}
$wd=31;
$vPos=100;
$hPos=114.9;
$this->SetFont('kozgopromedium', '',14);
$source ='注文';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=31;
$vPos=111;
$hPos=114.9;
$this->SetFont('kozgopromedium', '',24);
$source =$this->_pdf_vars['chumon'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',24);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','T');
$wd=28;
$vPos=111;
$hPos=148.5;
$this->SetFont('kozgopromedium', '',18);
$this->SetTextColor(0,102,255);
$source ='1F棚№';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'L',0,'',0,0,'T','M');
$wd=35;
$vPos=111;
$hPos=176.5;
$this->SetFont('kozgopromedium', '',16);
$source =$this->_pdf_vars['tana1f'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=7;
$vPos=111;
$hPos=218.5;
$this->SetFont('kozgopromedium', '',18);
$source ='㋐ ㋒冶具方式';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'L',0,'',0,0,'T','M');
$wd=7;
$vPos=122;
$hPos=114.9;
$this->SetFont('kozgopromedium', '',10);
$this->SetTextColor(0,0,0);
$source ='加工予定日';
$pos = $vPos;
$chrcnt=0;
for ($k= 0; $k != -1; ) {
$info = $this->adjustToHeight($source, $k,7,6,11,'kozgopromedium',10,$chrcnt);
$k = $info['length'];
$text = $info['text'];
$this->SetXY($hPos, $pos);
$this->Cell(7, $info['height'], $text, 0, 0,'C',0,'',0,0,'T','M');
$pos += $info['height'];
$chrcnt = $info['count'];
}
$wd=28;
$vPos=122;
$hPos=148.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(0,102,255);
$source ='在庫(正)';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=122;
$hPos=176.5;
$this->SetFont('kozgopromedium', '',12);
$source =$this->_pdf_vars['zaiko1f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=122;
$hPos=197.5;
$this->SetFont('kozgopromedium', '',14);
$source ='キ ズ';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=122;
$hPos=225.5;
$this->SetFont('kozgopromedium', '',12);
$source =$this->_pdf_vars['kizu1f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=122;
$hPos=246.5;
$this->SetFont('kozgopromedium', '',14);
$source ='材 料';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=18;
$vPos=122;
$hPos=274.5;
$this->SetFont('kozgopromedium', '',12);
$source =$this->_pdf_vars['zai1f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=9;

$wd=28;
$vPos=133;
$hPos=148.5;
$this->SetFont('kozgopromedium', '',14);
$source ='在庫(反)';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=133;
$hPos=176.5;
$this->SetFont('kozgopromedium', '',11);
$source =$this->_pdf_vars['zaiko01f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium,'11);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=133;
$hPos=197.5;
$this->SetFont('kozgopromedium', '',14);
$source ='二次加工';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=133;
$hPos=225.5;
$this->SetFont('kozgopromedium', '',11);
$source =$this->_pdf_vars['niji1f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',11);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=133;
$hPos=246.5;
$this->SetFont('kozgopromedium', '',14);
$source ='その他';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=18;
$vPos=133;
$hPos=274.5;
$this->SetFont('kozgopromedium', '',12);
$source =$this->_pdf_vars['etc1f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,12, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=44;
$vPos=144.9;
$hPos=3.8;
$this->SetFont('kozgopromedium', '',16);
$this->SetTextColor(0,0,0);
$source ='1回 - 4本';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',16);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=47;
$vPos=144.9;
$hPos=47.9;
$source ='1本 - 8個';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',16);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=51;
$vPos=144.9;
$hPos=94.7;
$source ='4本 - 32個';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium,'16);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=144.9;
$hPos=148.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(0,102,255);
$source ='バリ・サビ';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=144.9;
$hPos=176.5;
$this->SetFont('kozgopromedium', '',12);
$source =$this->_pdf_vars['bari1f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'R',0,'',0,0,'T','M');
$wd=28;
$vPos=144.9;
$hPos=197.5;
$this->SetFont('kozgopromedium', '',14);
$source ='溶 接';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=144.9;
$hPos=225.5;
$this->SetFont('kozgopromedium', '',12);
$source =$this->_pdf_vars['yousetu1f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=164.1;
$hPos=148.5;
$this->SetFont('kozgopromedium', '',18);
$this->SetTextColor(255,0,0);
$source ='2F棚№';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'L',0,'',0,0,'T','M');
$wd=35;
$vPos=164.1;
$hPos=176.5;
$this->SetFont('kozgopromedium', '',16);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['tana2f'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=7;
$vPos=164.1;
$hPos=218.5;
$this->SetFont('kozgopromedium', '',18);
$this->SetTextColor(255,0,0);
$source ='㋐ ㋒';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'L',0,'',0,0,'T','M');
$wd=28;
$vPos=175.1;
$hPos=148.5;
$this->SetFont('kozgopromedium', '',14);
$source ='在庫(正)';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=175.1;
$hPos=176.5;
$this->SetFont('kozgopromedium', '',12);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['zaiko2f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=175.1;
$hPos=197.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(255,0,0);
$source ='キ ズ';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=175.1;
$hPos=225.5;
$this->SetFont('kozgopromedium', '',12);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['kizui2f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=175.1;
$hPos=246.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(255,0,0);
$source ='材 料';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=18;
$vPos=175.1;
$hPos=274.5;
$this->SetFont('kozgopromedium', '',12);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['zai2f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=186.1;
$hPos=148.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(255,0,0);
$source ='在庫(反)';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=186.1;
$hPos=176.5;
$this->SetFont('kozgopromedium', '',12);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['zaiko02f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=186.1;
$hPos=197.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(255,0,0);
$source ='二次加工';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=186.1;
$hPos=225.5;
$this->SetFont('kozgopromedium', '',12);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['niji2f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=186.1;
$hPos=246.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(255,0,0);
$source ='その他';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=18;
$vPos=186.1;
$hPos=274.5;
$this->SetFont('kozgopromedium', '',12);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['etc2f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=197.1;
$hPos=148.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(255,0,0);
$source ='バリ・サビ';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=197.1;
$hPos=176.5;
$this->SetFont('kozgopromedium', '',12);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['bari2f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=28;
$vPos=197.1;
$hPos=197.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(255,0,0);
$source ='溶 接';
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'C',0,'',0,0,'T','M');
$wd=21;
$vPos=197.1;
$hPos=225.5;
$this->SetFont('kozgopromedium', '',12);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['yousetui2f'];
$pos = $vPos;
$info = $this->adjustToWidth($source, $wd,'kozgopromedium',12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell($wd,11, $source, 0, 0,'R',0,'',0,0,'T','M');

//罫線設定
$this->Line(3.8, 3.6, 145.5, 3.6, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 10.6, 145.5, 10.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(12.8, 10.6, 12.8, 24, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(24.5, 3.6, 24.5, 24, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(83, 3.6, 83, 24, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(94.7, 3.6, 94.7, 24, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(114.9, 3.6, 114.9, 24, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(133.1, 3.6, 133.1, 24, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 24, 145.5, 24, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(169.5, 24, 253.5, 24, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 27.4, 145.5, 27.4, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(12.8, 31.9, 145.5, 31.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(169.5, 31.9, 253.5, 31.9, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 39.2, 106.4, 39.2, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(12.8, 43.7, 145.5, 43.7, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(169.5, 24, 169.5, 43.7, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(197.5, 24, 197.5, 43.7, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(225.5, 24, 225.5, 43.7, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(253.5, 24, 253.5, 43.7, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(169.5, 43.7, 253.5, 43.7, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 51, 106.4, 51, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(12.8, 55.5, 106.4, 55.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(106.4, 55.5, 145.5, 55.5, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 62.8, 106.4, 62.8, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(12.8, 67.3, 106.4, 67.3, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(12.8, 27.4, 12.8, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(24.5, 27.4, 24.5, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(36.2, 27.4, 36.2, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(47.9, 27.4, 47.9, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(59.6, 27.4, 59.6, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(71.3, 27.4, 71.3, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(83, 27.4, 83, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(94.7, 27.4, 94.7, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(106.4, 27.4, 106.4, 74.6, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(114.9, 31.9, 114.9, 74.6, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 74.6, 145.5, 74.6, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 78, 145.5, 78, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 89, 145.5, 89, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(24.5, 78, 24.5, 100, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 100, 145.5, 100, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 111, 114.9, 111, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 1, 'color' => array(0,0,0)));
$this->Line(114.9, 110.3, 145.5, 110.3, array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(114.9, 111, 145.5, 111, array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(148.5, 111, 211.5, 111, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(3.8, 122, 114.9, 122, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 1, 'color' => array(0,0,0)));
$this->Line(114.9, 122, 145.5, 122, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(176.5, 111, 176.5, 122, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(211.5, 111, 211.5, 122, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(148.5, 122, 292.8, 122, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(3.8, 133, 114.9, 133, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 1, 'color' => array(0,0,0)));
$this->Line(148.5, 133, 292.8, 133, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(114.9, 100, 114.9, 144.9, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(122.1, 122, 122.1, 144.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 144.9, 145.5, 144.9, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(148.5, 144.9, 292.8, 144.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(47.9, 144.9, 47.9, 155.9, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(94.7, 144.9, 94.7, 155.9, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 155.9, 145.5, 155.9, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(148.5, 111, 148.5, 155.9, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(176.5, 122, 176.5, 155.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(197.5, 122, 197.5, 155.9, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(225.5, 122, 225.5, 155.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(246.5, 122, 246.5, 155.9, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(274.5, 122, 274.5, 155.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(292.8, 122, 292.8, 155.9, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(148.5, 155.9, 292.8, 155.9, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(148.5, 164.1, 211.5, 164.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(176.5, 164.1, 176.5, 175.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(211.5, 164.1, 211.5, 175.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(148.5, 175.1, 292.8, 175.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(148.5, 186.1, 292.8, 186.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(148.5, 197.1, 292.8, 197.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(3.8, 3.6, 3.8, 208.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(145.5, 3.6, 145.5, 208.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(3.8, 208.1, 145.5, 208.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(148.5, 164.1, 148.5, 208.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(176.5, 175.1, 176.5, 208.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(197.5, 175.1, 197.5, 208.1, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(225.5, 175.1, 225.5, 208.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(246.5, 175.1, 246.5, 208.1, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(274.5, 175.1, 274.5, 208.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(292.8, 175.1, 292.8, 208.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(148.5, 208.1, 292.8, 208.1, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
}
}

?>

 

画像の取り込みやプロポーショナルの対応などまだ課題は残るが、PHPでPDF帳票を出力するには、まあまあ満足できる出来栄えは自画自賛か。

 

【謝辞】

最後に、ジェネレーターの作成に当たり、次のサイトを参考にさせて頂きました。

各サイト作成の皆様ありがとうございました。

TCPDFマニュアル(勝手訳)

TCPDFの部屋

Examples · TCPDF

 

PHPでPDF出力(tcpdf) 9 (列の繰り返しと折り返して全体表示)

9.列の繰り返しと折り返して全体表示

ほぼ満足のいく結果が得られたが、「列の繰り返し」と「折り返しての全体表示」に課題が残った。

まず、取り掛かったのが「列の繰り返し」である。

Excelでの変数定義は、行と同様に「{$配列名変数名]}」とした。

TCPDF定義ファイルの出力は下記の通り、簡単に作成でき結果も良好である。

 // 列の幅
$wd = 16.4;
// 行高さ
$hi = 6.2;
// 列の開始位置
$col = 2;
$maxCol = 13;
$hPos=8.8;
$vPos=28.4;
foreach ($this->_pdf_vars['lp'] as $key) {
$source = $key['mon'];
$this->Rect($hPos, $vPos,$wd, $hi,'F','',array(226,239,218));
$this->SetTextColor(0,0,0);
$pos=$vPos;
$this->SetFont('kozgopromedium', '',11);
for ($k= 0; $k != -1;  ) {
$info = $this->adjustToHeight($source, $k,16.4,15.4,6.2,kozgopromedium,11);
$k = $info['length'];
$text = $info['text'];
$this->SetXY($hPos, $pos);
$this->Cell(16.4, $info['height'],  $text, 0, 0,'R',0,'',0,0,'T','M');
$pos += $info['height'];
}
$hPos += $wd;
$col++; 
}

 pdf列の繰り返し

1行での列の繰り返しであり、行の繰り返しの中で列の繰り返しもある。

これだと対応できない。

行の繰り返しと列の繰り返しをどう融合させるか?

二次元配列で実装することにした。

Excelでの変数定義は、「{$配列名配列名1][変数名]}」で配列名1は列の配列で使用することにした。

Excelの定義と出力定義ファイルとindex.phpは次のようになる。

  excel二次元定義

tcpdf定義ファイル
// 行の高さ
$hi = 6.5;
// 行の開始位置
$vPos = 19.4;
$row = 2;
$maxRow = 5;
foreach ($this->_pdf_vars['lp1'] as $key) {
// 列の幅
$wd = 31.7;
// 行高さ
$hi = 6.5;
// 列の開始位置
$col = 2;
$maxCol = 7;
foreach($key as $key1) {
foreach($key1 as $key2) {
$hPos=9.8;
for ($ix= 0;$ix < count($key2['kin']); $ix++) {
$source = $key2['kin'][$ix];
$this->Rect($hPos, $vPos,$wd, $hi,'F','',array(226,239,218));
$this->SetTextColor(0,0,0);
$this->SetXY($hPos, $vPos);
$this->Cell( $wd, $hi, $source, 0, 0,'R',0,'',0,0,'T','M');
$hPos += $wd;
$col++; 
}
$vPos += $hi;
$row++;
}
}
index.php
$lp = array();
for ($iy= 1; $iy < 5;$iy++) {
$lpdata=array();
for($ix=1; $ix< 7; $ix++){
//列の代入   $lpdata['kin'][] = $iy.-$ix; }
//行の代入 $lp['mon'][] = $lpdata; } $pdf->append("lp1",$lp);

 果たして、tcpdfで出力結果は

  f:id:sesjk:20200514162514p:plain

背景色が先頭行と同じになってしまうが、これは先頭行の繰り返しであるので、仕様(仕方ない)と考え妥協する。

 

折り返して全体表示

 ジェネレーターでは対応できないので、PHPでPDFを出力時に処理する必要がある。 

これは、PHPでPDF出力 5(縮小・折り返しで全体表示)で作成した関数「adjustToHeight」を修正した。

 

/*******************************************************************

折り返して表示

 $source:文字列, $pos:開始文字位置, $maxwidth:表示エリア幅,

    $width:表示する幅, $height:行の高さ

   $font:使用するフォント名, $fontsize:使用するフォントサイズ

  $count:セルに収まる1行当たりの文字数

********************************************************************/

public function adjustToHeight($source, $pos, $maxwidth, $width, $height, $font, $fontsize,$count) {

$info = array();

$text = mb_substr($source,$pos, null,"UTF-8");

$size = $fontsize;

$info["text"] = $text;
$info["height"] = $hei;
$info["length"] = -1;

if ($pos == 0) {
$info["height"] = $height;

//セルに収まるフォントサイズを算出
$limt = $maxwidth * $height;
while(1) {
//文字高さを取得
$hei = $this->getStringHeight(0,mb_substr($text,0,1,"UTF-8"));
//文字列幅を取得
$wid = $this->getStringWidth($text,$font,"",$size);
// 必要セル数
$needWidth = ceil*1 {
//フォントサイズを下げる
$size -= 1;
if ($size < 7) break;
$this->SetFont($font, '',$size);
} else {
break;
}
}
} else {
$hei = $this->getStringHeight(0,mb_substr($text,0,1,"UTF-8"));
}

$arrlen = $this->GetStringWidth($text,"","","",true);

if ($count == 1 && $pos > 0) {
// 1行1文字
$info["text"] = mb_substr($text,0,1,"UTF-8");
$info["height"] = $hei;
$info["length"] = 1 + $pos;
$info["count"] = 1;
if (count($arrlen) == 1) {
$info["length"] = -1;
}
return $info;
}

$len = 0;
//文字列がセルに収まるかのチェック
if ($this->GetStringWidth($text) > $maxwidth) {
$blktxt = $text;
$text="";
for ($j =0; $j < count($arrlen); $j++) {
$len += $arrlen[$j];
if ($len > $width) {
$info["text"] = $text;
$info["height"] = $hei;
$info["length"] = $j + $pos;
$info["count"] = $j;
break;
}
$text .= mb_substr($blktxt,$j,1,"UTF-8");
}
if ($j == count($arrlen)) {
$info["length"] = -1;
}
}

return $info;
}

 

*1:$wid+0.5) / $maxwidth);

if ($limt <= ($hei * $wid

PHPでPDF出力(tcpdf) 8 (実行そして課題)

8.ジェネレーターの実行そして課題

 ほぼ形は整ったので、実行してみた。

ジェネレーターで出力した定義ソースと実行結果

<?php 
Class tcpDefine extends tcpdfEditer {

public function setHeader() {
//ヘッダー・フッター印刷しない
$this->setPrintHeader(false);

$this->setPrintFooter(0);
$this->setHeaderMargin(0);
$this->setFooterMargin(0);
//余白
$this->SetMargins(4,2,-1,true);

}

public function newPage() {
//ページ追加
$this->AddPage('L','A4');

}
public function setPage() {
//自動改ページ オフ
$this->SetAutoPageBreak(False, 0);

$a = $this->GetX();
$b = $this->GetY();
$vPos=2;
$hPos=5.1;
$this->SetFont('kozgopromedium', '',11);
$this->SetTextColor(0,0,0);
$source ='受 注 日';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(19,8, $source, 0, 0,'C',0,'',0,0,'T','M');
////
$vPos=2;
$hPos=24;
$source ='図        番';
$pos = $vPos;
$info = $this->adjustToWidth($source, 54,kozgopromedium,11);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(54,8, $source, 0, 0,'C',0,'',0,0,'T','M');
////
$vPos=2;
$hPos=77.5;
$source ='個数';
$pos = $vPos;
$info = $this->adjustToWidth($source, 11,kozgopromedium,11);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(11,8, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=2;
$hPos=88.2;
$source ='単  価';
$pos = $vPos;
$info = $this->adjustToWidth($source, 18,kozgopromedium,11);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(18,8, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=2;
$hPos=106.1;
$source ='納  期';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(22,8, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=2;
$hPos=128;
$source ='回数';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(13,8, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=2;
$hPos=163;
$this->SetFont('kozgopromedium', '',24);
$source ='製 造 指 示 書';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(76,14, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=2;
$hPos=246;
$this->SetFont('kozgopromedium', '',11);
$source =$this->_pdf_vars['No'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(13,8, $source, 0, 0,'R',0,'',0,0,'T','M');
//
$vPos=9.5;
$hPos=5.1;
$source =$this->_pdf_vars['day'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(8,13, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=9.5;
$hPos=13.3;
$this->SetFont('kozgopromedium', '',22);
$this->SetTextColor(255,0,0);
$source ='Ⅹ';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(11,13, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=9.5;
$hPos=24;
$this->SetFont('kozgopromedium', '',18);
$this->SetTextColor(0,0,0);
$source =$this->_pdf_vars['zuban'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 43,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(43,13, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=9.5;
$hPos=77.5;
$source =$this->_pdf_vars['kosuu'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(11,13, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=9.5;
$hPos=88.2;
$source =$this->_pdf_vars['tanka'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 18,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(18,13, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=9.5;
$hPos=106.1;
$source =$this->_pdf_vars['nouki'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(22,13, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=9.5;
$hPos=128;
$source =$this->_pdf_vars['kaisuu'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(13,13, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=22.9;
$hPos=163;
$this->SetFont('kozgopromedium', '',12);
$source ='検査部';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(26,8, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=22.9;
$hPos=189;
$source ='製造部';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(26,8, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=22.9;
$hPos=215;
$source ='設計部';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(24,8, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=25.9;
$hPos=5.1;
$this->SetFont('kozgopromedium', '',14);
$source ='正';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(8,12, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=25.9;
$hPos=13.3;
$this->SetFont('kozgopromedium', '',11);
$source =$this->_pdf_vars['oldday1'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(11,4, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=25.9;
$hPos=24;
$source =$this->_pdf_vars['oldday2'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(11,4, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=25.9;
$hPos=34.7;
$source =$this->_pdf_vars['oldday3'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(11,4, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=25.9;
$hPos=45.4;
$source =$this->_pdf_vars['oldday4'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(11,4, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=25.9;
$hPos=98.9;
$source ='年間予定数';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(42,4, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=30.4;
$hPos=13.3;
$this->SetFont('kozgopromedium', '',14);
$source =$this->_pdf_vars['oldsuu1'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 11,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(11,7, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=30.4;
$hPos=24;
$source =$this->_pdf_vars['oldsuu2'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 11,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(11,7, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=30.4;
$hPos=34.7;
$source =$this->_pdf_vars['oldsuu3'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 11,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(11,7, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=30.4;
$hPos=45.4;
$source =$this->_pdf_vars['oldsuu4'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 11,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(11,7, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=30.4;
$hPos=98.9;
$source ='正';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(7,12, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=37.7;
$hPos=5.1;
$source ='反';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(8,12, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=42.2;
$hPos=98.9;
$source ='反';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(7,12, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=49.5;
$hPos=5.1;
$source ='正';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(8,12, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=54;
$hPos=98.9;
$source ='MC';
$pos = $vPos;
$info = $this->adjustToWidth($source, 7,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(7,19, $source, 0, 0,'L',0,'',0,0,'T','M');
//
$vPos=54;
$hPos=106.1;
$this->SetFont('kozgopromedium', '',18);
$source =$this->_pdf_vars['MC'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(35,19, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=61.3;
$hPos=5.1;
$this->SetFont('kozgopromedium', '',14);
$source ='反';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(8,12, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=76.5;
$hPos=5.1;
$this->SetFont('kozgopromedium', '',12);
$source ='材  料';
$pos = $vPos;
$info = $this->adjustToWidth($source, 19,kozgopromedium,12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(19,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=76.5;
$hPos=24;
$source ='寸   法';
$pos = $vPos;
$info = $this->adjustToWidth($source, 117,kozgopromedium,12);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(117,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=87.5;
$hPos=5.1;
$this->SetFont('kozgopromedium', '',18);
$source =$this->_pdf_vars['zairyo'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 19,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(19,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=87.5;
$hPos=34.7;
$source =$this->_pdf_vars['sunpou'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(11,11, $source, 0, 0,'L',0,'',0,0,'T','M');
//
$vPos=98.5;
$hPos=5.1;
$source =$this->_pdf_vars['num1'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 8,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(8,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=98.5;
$hPos=13.3;
$source =$this->_pdf_vars['sunpou1'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 86,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(86,11, $source, 0, 0,'L',0,'',0,0,'T','M');
//
$vPos=98.5;
$hPos=106.1;
$this->SetFont('kozgopromedium', '',16);
$bgcolor='242,242,242';
$rgb = explode(',', $bgcolor);
$this->SetFillColor($rgb[0],$rgb[1],$rgb[2]);
$source ='注文';
$pos = $vPos;
$info = $this->adjustToWidth($source, 35,kozgopromedium,16);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(35,11, $source, 0, 0,'C',1,'',0,0,'T','M');
//
$vPos=109.5;
$hPos=5.1;
$this->SetFont('kozgopromedium', '',18);
$source =$this->_pdf_vars['num2'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 8,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(8,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=109.5;
$hPos=13.3;
$source =$this->_pdf_vars['sunpou2'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 86,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(86,11, $source, 0, 0,'L',0,'',0,0,'T','M');
//
$vPos=109.5;
$hPos=106.1;
$this->SetFont('kozgopromedium', '',26);
$source =$this->_pdf_vars['chumon'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 35,kozgopromedium,26);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(35,11, $source, 0, 0,'C',0,'',0,0,'T','T');
//
$vPos=109.5;
$hPos=143.5;
$this->SetFont('kozgopromedium', '',18);
$this->SetTextColor(0,102,255);
$source ='1F棚№';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'L',0,'',0,0,'T','M');
//
$vPos=109.5;
$hPos=169.5;
$this->SetFont('kozgopromedium', '',16);
$source =$this->_pdf_vars['1Ftana'];
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(32,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=109.5;
$hPos=208.5;
$this->SetFont('kozgopromedium', '',18);
$source ='㋐ ㋒冶具方式';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(6,11, $source, 0, 0,'L',0,'',0,0,'T','M');
//
$vPos=120.5;
$hPos=5.1;
$this->SetTextColor(0,0,0);
$source ='③';
$pos = $vPos;
$info = $this->adjustToWidth($source, 8,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(8,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=120.5;
$hPos=106.1;
$this->SetFont('kozgopromedium', '',12);
$source ='加工予定日';
$pos = $vPos;
for ($k= 0; $k != -1;  ) {
$info = $this->adjustToHeight($source, $k,7,6,11);
$k = $info['length'];
$text = $info['text'];
$this->SetXY($hPos, $pos);
$this->Cell(7, $info['height'],  $text, 0, 0,'L',0,'',0,0,'T','M');
$pos += $info['height'];
}
//
$vPos=120.5;
$hPos=143.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(0,102,255);
$source ='在庫(正)';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=120.5;
$hPos=169.5;
$source =$this->_pdf_vars['1Fzaiko'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 20,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(20,11, $source, 0, 0,'R',0,'',0,0,'T','M');
//
$vPos=120.5;
$hPos=189;
$source ='キ ズ';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=120.5;
$hPos=233;
$source ='材 料';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=120.5;
$hPos=259;
$source =$this->_pdf_vars['1Fzairyo'];
$pos = $vPos;
$info = $this->adjustToWidth($source, 18,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(18,11, $source, 0, 0,'R',0,'',0,0,'T','M');
//
$vPos=131.5;
$hPos=5.1;
$this->SetFont('kozgopromedium', '',18);
$this->SetTextColor(0,0,0);
$source ='④';
$pos = $vPos;
$info = $this->adjustToWidth($source, 8,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(8,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=131.5;
$hPos=143.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(0,102,255);
$source ='在庫(反)';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=131.5;
$hPos=189;
$source ='二次加工';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=131.5;
$hPos=233;
$source ='その他';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=142.5;
$hPos=5.1;
$this->SetFont('kozgopromedium', '',16);
$this->SetTextColor(0,0,0);
$source ='1回  - 4本';
$pos = $vPos;
$info = $this->adjustToWidth($source, 40,kozgopromedium,16);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(40,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=142.5;
$hPos=45.4;
$source ='1本  - 8個';
$pos = $vPos;
$info = $this->adjustToWidth($source, 43,kozgopromedium,16);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(43,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=142.5;
$hPos=88.2;
$source ='4本  - 32個';
$pos = $vPos;
$info = $this->adjustToWidth($source, 53,kozgopromedium,16);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(53,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=142.5;
$hPos=143.5;
$this->SetFont('kozgopromedium', '',14);
$this->SetTextColor(0,102,255);
$source ='バリ・サビ';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=142.5;
$hPos=189;
$source ='溶 接';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=158.3;
$hPos=143.5;
$this->SetFont('kozgopromedium', '',18);
$this->SetTextColor(255,0,0);
$source ='2F棚№';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,18);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'L',0,'',0,0,'T','M');
//
$vPos=158.3;
$hPos=208.5;
$source ='㋐ ㋒';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(6,11, $source, 0, 0,'L',0,'',0,0,'T','M');
//
$vPos=169.3;
$hPos=143.5;
$this->SetFont('kozgopromedium', '',14);
$source ='在庫(正)';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=169.3;
$hPos=189;
$source ='キ ズ';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=169.3;
$hPos=233;
$source ='材 料';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=180.3;
$hPos=143.5;
$source ='在庫(反)';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=180.3;
$hPos=189;
$source ='二次加工';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=180.3;
$hPos=233;
$source ='その他';
$pos = $vPos;
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=191.3;
$hPos=143.5;
$source ='バリ・サビ';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//
$vPos=191.3;
$hPos=189;
$source ='溶 接';
$pos = $vPos;
$info = $this->adjustToWidth($source, 26,kozgopromedium,14);
$this->SetFont('kozgopromedium', '',$info);
$this->SetXY($hPos, $pos);
$this->Cell(26,11, $source, 0, 0,'C',0,'',0,0,'T','M');
//

//罫線設定
$this->Line(5.1, 2, 140.7, 2, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 9.5, 140.7, 9.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(13.3, 9.5, 13.3, 22.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(24, 2, 24, 22.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(77.5, 2, 77.5, 22.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(88.2, 2, 88.2, 22.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(106.1, 2, 106.1, 22.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(128, 2, 128, 22.9, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 22.9, 140.7, 22.9, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(163, 22.9, 239.5, 22.9, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 25.9, 140.7, 25.9, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(13.3, 30.4, 140.7, 30.4, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(163, 30.4, 239.5, 30.4, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 37.7, 98.9, 37.7, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(13.3, 42.2, 140.7, 42.2, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(163, 22.9, 163, 42.2, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(189, 22.9, 189, 42.2, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(215, 22.9, 215, 42.2, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(239.5, 22.9, 239.5, 42.2, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(163, 42.2, 239.5, 42.2, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 49.5, 98.9, 49.5, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(13.3, 54, 98.9, 54, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(98.9, 54, 140.7, 54, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 61.3, 98.9, 61.3, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(13.3, 65.8, 98.9, 65.8, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(13.3, 25.9, 13.3, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(24, 25.9, 24, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(34.7, 25.9, 34.7, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(45.4, 25.9, 45.4, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(56.1, 25.9, 56.1, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(66.8, 25.9, 66.8, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(77.5, 25.9, 77.5, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(88.2, 25.9, 88.2, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(98.9, 25.9, 98.9, 73.1, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(106.1, 30.4, 106.1, 73.1, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 73.1, 140.7, 73.1, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 76.5, 140.7, 76.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 87.5, 140.7, 87.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(24, 76.5, 24, 98.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 98.5, 140.7, 98.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 109.5, 106.1, 109.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 1, 'color' => array(0,0,0)));
$this->Line(106.1, 108.8, 140.7, 108.8, array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(106.1, 109.5, 140.7, 109.5, array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(143.5, 109.5, 202, 109.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
//$this->Line(106.8, 98.5, 106.8, 120.5, array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(106.1, 98.5, 106.1, 120.5, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 120.5, 106.1, 120.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 1, 'color' => array(0,0,0)));
$this->Line(106.1, 120.5, 140.7, 120.5, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(169.5, 109.5, 169.5, 120.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(202, 109.5, 202, 120.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(143.5, 120.5, 277, 120.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(5.1, 131.5, 106.1, 131.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 1, 'color' => array(0,0,0)));
$this->Line(143.5, 131.5, 277, 131.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(106.1, 120.5, 106.1, 142.5, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(113.1, 120.5, 113.1, 142.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 142.5, 140.7, 142.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(143.5, 142.5, 277, 142.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(45.4, 142.5, 45.4, 153.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(88.2, 142.5, 88.2, 153.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 153.5, 140.7, 153.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(143.5, 109.5, 143.5, 153.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(169.5, 120.5, 169.5, 153.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(189, 120.5, 189, 153.5, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(215, 120.5, 215, 153.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(233, 120.5, 233, 153.5, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(259, 120.5, 259, 153.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(277, 120.5, 277, 153.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(143.5, 153.5, 277, 153.5, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$this->Line(143.5, 158.3, 202, 158.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(169.5, 158.3, 169.5, 169.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(202, 158.3, 202, 169.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(143.5, 169.3, 277, 169.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(143.5, 180.3, 277, 180.3, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(143.5, 191.3, 277, 191.3, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(5.1, 2, 5.1, 202.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(140.7, 2, 140.7, 202.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(5.1, 202.3, 140.7, 202.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$this->Line(143.5, 158.3, 143.5, 202.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(169.5, 169.3, 169.5, 202.3, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(189, 169.3, 189, 202.3, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(215, 169.3, 215, 202.3, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(233, 169.3, 233, 202.3, array('width' => 0.4, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(259, 169.3, 259, 202.3, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(277, 169.3, 277, 202.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
$this->Line(143.5, 202.3, 277, 202.3, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(255,0,0)));
}
}

?>

 ジェネレートの処理時間は約1分ほど要した。

ブラウザでのPDF表示は、1~2秒程度で表示された。

PDF実行結果

赤枠が「折り返して全体表示」のセルであるが、はみ出してしまった。
高さによっては、フォントサイズを下げる処理が必要である。Excelで予めフォントサイズを下げておく手もあるが。

また、青枠のように列の繰り返しにはまだ対応できていない。今回はそれぞれの列に変数を定義した。

また、フォント対応が明朝とゴシックのどちらかであるが、今回はExcelのPDF化ではなく、TCPDF実行の定義ファイルの出力が目的であるので、こちらは目をつぶることにした。

因みに、表示するためのPHPのソースは

    <?php
	require_once(dirname(__FILE__)."/../lib/TCPDF-master/tcpdf.php");
	require_once(dirname(__FILE__)."/tcpdfEditer.php");
	require_once(dirname(__FILE__)."/sample1.php");

	$pdf = new tcpDefine();

	$pdf->assign('No','1');
	$pdf->assign('day','8/8');
	$pdf->assign('zuban','HFA-450-091');
	$pdf->assign('kosuu','10');
	$pdf->assign('tanka','12,000');
	$pdf->assign('nouki','9/1');
	$pdf->assign('kaisuu','5');
	$pdf->assign('oldday1','16-11');
	$pdf->assign('oldday2','17-2');
	$pdf->assign('oldday3','3');
	$pdf->assign('oldday4','6');
	$pdf->assign('oldsuu1','10');
	$pdf->assign('oldsuu2','10');
	$pdf->assign('oldsuu3','10');
	$pdf->assign('oldsuu4','10');
	$pdf->assign('MC','1');
	$pdf->assign('zairyo','S45C');
	$pdf->assign('sunpou','12x22x4000=10本');
	$pdf->assign('num1','①')
$pdf->assign('sunpou1','12x22x1130=30本=240ヶ'); $pdf->assign('num2','②')
$pdf->assign('sunpou2','残材 610=10本=40ヶ'); $pdf->assign('chumon','280ヶ'); $pdf->assign('1Ftana','ア-1'); $pdf->assign('1Fzaiko','18'); $pdf->assign('1Fzairyo','4'); //PDF出力 $pdf->setHeader(); $pdf->newPage(); $pdf->out('sample.pdf', 'I'); ?>

 

リテラルで代入しているが、DBからデータを取得して代入すればよい。

イメージ通りのものを、簡単にTCPDFで出力できるようになった。

PHPでPDF出力 7 (繰り返す行の処理)

7.繰り返す行の処理

 

下図のような明細内容を繰り返し出力する処理を追加した。

 Ecel明細出力

 繰返し範囲の設定を「{$loop}」「{$&&}」を考えてみたが、図でA列が空いているので対応できるが、A列から始まっている場合には変数名が設定できなくなる。

そこで、「{$配列名[変数名]}」「$配列名[&&]」とした。

ジェネレーターの出力は、以下の仕様にした。

foreach ($this->_pdf_vars['loop'] as $key) {

$this->Cell(56,7, $key['hinmei'], 0, 0,'L',1,'',0,0,'T','M');

}

 

PHP側の変数代入はSmartyのappend風にしてみた。

index.phpで、

$lpdata = array("hinmei"=>"パソコ","suuryo"=>"2","tanka"=>"65,000",

"tani"=>"台","kingaku"=>"143,000","bikou"=>"");

$pdf->append("loop",$lpdata);

$lpdata = array("hinmei"=>"パソコン","suuryo"=>"2","tanka"=>"65,000",

"tani"=>"台","kingaku"=>"143,000","bikou"=>"");

$pdf->append("loop",$lpdata);

 

代入編集クラスにメソッドを追加

public function append($array_var, $value = null) {
$this->_pdf_vars[$array_var][] = $value;
}

Excelの定義と出力結果は、

pdf繰り返し行

 残念ながら、背景色が全ての行で同じになってしまった。

また、売上金額と内税がおかしいのて、index.phpでの代入の間違いである。

繰り返しは、1行間隔で変わると割り切り1行目と2行目の背景色を予め取得して、奇数偶数行で背景色を設定する仕様にした。

今度は、思い通りに出力された。

 f:id:sesjk:20200503144248p:plain

改ページは、TCPDFに「AddPage(用紙方向(P:縦 L:横)、用紙サイズ)」が用意されている。

ジェネレーターで次のように出力している。

public function newPage() {
//ページ追加
$this->AddPage('L','A4');

}

適宜、newPageを呼び出せば改ページとなる。

大分形が整ってきた。

 

 

PHPでPDF出力 6(PDF出力のクラス化)

6.PDF出力のクラス化

「縮小して全体を表示する」と「折り返して全体を表示する」ための関数をPDF出力側に作成した。

もっと使い勝手を良くするためにクラス化に修正した。

実行していた「index.php」のソースである。

<?php
require_once(dirname(__FILE__)."/../lib/TCPDF-master/tcpdf.php");
$tcpdf = new TCPDF();
【 ここに、ジェネレーター出力定義を貼り付け 】
$tcpdf->Output('samurai.pdf', 'I');
public function adjustToWidth($source, $width, $font, $size) {
global $tcpdf;
}
public function adjustToHeight($source, $pos, $maxwidth, $width, $height) {
global $tcpdf;
}
?>

その前に、Excelの「発注日」「図番」等は入力項目の可変である。

Excelに変数情報を埋め込むことにした。

Excel変数埋め込み

 変数の識別に「{$}」を使うことにし、上記のように変数を設定した。

想定したのは、以下のような処理である。

$day='8/8';
:
$source =$day;
$info = $tcpdf->adjustToWidth($source, 35,kozgopromedium,12);
$tcpdf->SetFont('kozgopromedium', '',$info);
$tcpdf->SetXY($hPos, $pos);
$tcpdf->Cell(35,8, $source, 0, 0,'L',0,'',0,0,'T','M');

 

これで変数が多くなると可読性に問題でてくる。

いっそのこと、TCPDFの定義ファイルも関数にすれば、可読性の問題は解決できる。

代入編集処理をTCPDFの継承クラスにすることにした。また、定義ファイルは代入編集処理の継承クラスで作成した。

Class tcpdfEditer extends TCPDF {
var $pdf;
public function tcpdfEdit() {
$pdf = new TCPDF();
}
//変数に代入するメソッド 
public function assign($var, $value=null) {
}
//PDF出力メソッド 
public function out($pdfname, $dest) {
$this->Output($pdfname, $dest);
}
}
定義ファイルのクラス
Class tcpDefine extends tcpdfEditer {
}

変数を代入するメソッドは、Smartyのassign風にしてみた。

 $this->assign('day','8/8');

修正後のindex.php

<?php
require_once(dirname(__FILE__)."/../lib/TCPDF-master/tcpdf.php");
// tcpdf編集用
require_once(dirname(__FILE__)."/tcpdfEditer.php");
// tcpdf定義ファイル
require_once(dirname(__FILE__)."/smaple.php");
$pdf = new tcpDefine();
$pdf->assign('day','8/8');
$pdf->assign('zuban','JFA-550-081');
$pdf->assign('kosuu','10');
$pdf->assign('tanka','12,000');
$pdf->assign('nouki','9/5');
$pdf->assign('kaisuu','12');
$pdf->out('sample.pdf', 'I');
?>

 結果は上々。

      代入結果PDF

また疑問が。

請求明細書のように明細内容を繰り返しをどうするか? 改ページは?

まだまだクリアすべきことが山積み。

次回は、明細の繰り返しの処理追加

 

  

PHPでPDF出力 5(縮小・折り返しで全体表示)

5.「縮小・折り返して全体を表示する」の処理の追加

文字表示の体裁も罫線もは整ったのだが、Excelのセル書式には、「縮小して全体を表示する」と「折り返して全体を表示する」のオプションがある。

ジェネレーターでは、値が可変の場合に対応できないため、PHP側で出力時に定義することになる。

 

 TCPDFには、文字列を出力する時の幅と高さを取得する関数が用意されている。

getStringWidth(セル幅、文字列)

getStringHeight(文字列、フォント名、フォントスタイル、フォントサイズ、文字単位)

出力するセル幅はと高さはジェネレーターで取得し、Cell関数に引数として渡している。

 

縮小して全体を表示は、

セル幅に出力する文字列が収まるかを判定し、収まらない場合はフォントサイズを下げて再度セル幅をチェックすればいい。

関数化したソースは以下のようになる。

-----------------------------------------------------------------------------

//$source:文字列, $width:表示する幅, $font:フォント名, $size:フォントサイズ

public function adjustToWidth($source, $width, $font, $size) {

global $tcpdf;

$text = mb_substr($source,$pos, null,"UTF-8");

$fontsize = $size;
while(1) {

// $width - 0.5は、二重線対応(0.5ミリずらす)

if ($tcpdf->GetStringWidth($text,$font,"",$fontsize) <= ($width-0.5)) {

break;

} else {

$fontsize = $fontsize - 1;

//フォントサイズの最小は6ポイントに設定

if ($fontsize < 7) break; }


return $fontsize;

}

-----------------------------------------------------------------------------

  

折り返して全体を表示は、

セル幅に出力する文字列が収まるかの判定は、「縮小して全体を表示」と同じであるが、オーバーした文字列を改行して表示する必要がある。

残念ながら、TCPDFにはセル内改行の機能はないので、縦横の座標を変えて表示することとした。

-----------------------------------------------------------------------------

//$source:文字列, $pos:開始文字位置, $maxwidth:表示エリア幅, $width:表示する幅, $height:行の高さ

 public function adjustToHeight($source, $pos, $maxwidth, $width, $height) {

global $tcpdf;
$info = array();     //連想配列で返す
$text = mb_substr($source,$pos, null,"UTF-8");
//文字高さを取得

$hei = $tcpdf->getStringHeight(0,mb_substr($text,0,1,"UTF-8"));

$info["text"] = $text;  //表示する文字列

$info["height"] = $hei;   //高さ

$info["length"] = -1;  //折り返す文字数  -1:折り返しなし

if ($pos == 0 ) {

$info["height"] = $height;

}

//文字列の文字単位で幅を配列で取得
$arrlen  = $tcpdf->GetStringWidth($text,"","","",true);
$len = 0;

if ($tcpdf->GetStringWidth($text) > $maxwidth) {

$blktxt = $text;

$text="";

for ($j =0; $j < count($arrlen); $j++) {

$len += $arrlen[$j];

if ($len > $width) {

$info["text"] = $text;

$info["height"] = $hei;

$info["length"] = $j + $pos;

break;

}

$text .=  mb_substr($blktxt,$j,1,"UTF-8");

}

if ($j == count($arrlen)) {

$info["length"] = -1; }

}
return $info;

}

----------------------------------------------------------------------------- 

ジェネレーターを下記のソース出力に修正する。

$source ='120000';
$info = adjustToWidth($source, 18,kozgopromedium,18);
$tcpdf->SetFont('kozgopromedium', '',$info);
$tdpdf->SetXY($hPos, $pos);
$tcpdf->Cell(18,13, $source, 0, 0,'C',0,'',0,0,'T','M');

 

結果は、サイズが微妙に大きくなるが、ほぼ満足いくものであったが、

折り返して全体を表示するで、後に問題が発生する。

   adjustの結果

 ジェネレーターで出力された定義をコピペで、PHPソースに貼り付けているのを、

ファイル出力で渡すことにした。

また、Excelは項目は固定ではなく可変であることを考慮して、関数はクラスに変更する。

次回は、それらをメモる。

 

 

PHPでPDF出力 4(罫線を引く)

4.罫線の処理の追加

文字表示の体裁は整ったので、罫線の表示を追加する。

 TCPDFで罫線の定義は次の通りである。

Line(開始X座標、開始Y座標、終了X座標、終了Y座標、スタイル)

 スタイル:幅、末端部、結合部、破線パターン、破線パターンの開始位置、色

Excelはセル書式の「Borders」プロパティから取得できる。

下記の線種がどのような値で取得できるのか、上罫線で確認してみた。

   Excl線種の確認

1行目から順に、  -4142、1、1、-1418、5、4、-4155、-4119となった。

3行目の点線は直線と同じ値で区別がつかない。

これでジェネレートする処理を組み込もうとしたが、今度は、

TCPDFに鎖線(5,4)と二重線(-4119)に対応する定義がない。

取り敢えず、鎖線は破線、二重線は太い実線で組み込んだソースと実行結果は、

-------------------------------------------------------------

$tcpdf->Line(9, 6.5, 134.3, 6.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,0,0)));
$tcpdf->Line(9, 11, 134.3, 11, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(0,102,255)));
$tcpdf->Line(9, 15.5, 134.3, 15.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 1, 'color' => array(255,0,0)));
$tcpdf->Line(9, 20, 134.3, 20, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 2, 'color' => array(0,176,80)));
$tcpdf->Line(9, 24.5, 134.3, 24.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 2, 'color' => array(226,107,10)));
$tcpdf->Line(9, 29, 134.3, 29, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => 2, 'color' => array(255,0,255)));
$tcpdf->Line(9, 33.8, 134.3, 33.8, array('width' => 0.6, 'cap' => 'butt', 'join' => 'miter','dash' => 0, 'color' => array(96,73,122)));

-------------------------------------------------------------

    PDF線種の確認

鎖線を単純に破線にすると、メリハリがなくなる。また、二重線も気になる。

破線パターンで線のON-OFFができることが分かり、それぞれ変更してみた。

$tcpdf->Line(9, 20, 134.3, 20, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => '5,2' 'color' => array(0,176,80)));
$tcpdf->Line(9, 24.5, 134.3, 24.5, array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter','dash' => '5,1', 'color' => array(226,107,10)));

また、二重線は実線2つに分解することで対応した。

左右の罫線は、右罫線を表示し、A列の左罫線を有効として実行した。

 ジェネレーターの結果

 

結合セルの扱い

 何やら結合セルに余計な罫線が出力されている。

それも行が結合されているセルを疑い調査する。

Excelはセル書式の「Borders」プロパティの上罫線を取得しているのは前述している。

これだと最終行の下罫線が漏れてしまうので、解析は最終行+1で処理している。

セル(B2)は上罫線ONで、セル(B3)も上罫線ONになる。結合セルは見た目は罫線なしだが、プロパティはしっかりONになっている。

結合セルの2行目以降は無視する必要がある

結合セルは、「MergeCells」プロパティで判定でき、行数と列数はそれぞれ「MergeArea.Rows.Count」と「MergeArea.Columns.Count」で取得できる。

上記処理を追加して出力した結果である。

ジェネレーターの修正結果

満足できる出来栄えで、ひとりニヤつくが、単価が5桁で目一杯に気づき我に返る。

カンマや6桁以上にではどうなる。

文字列はみだし

案の定、罫線に掛かってしまった。

次は、「縮小して全体を表示する」と「折り返して全体を表示する」の処理を追加。

これは、ジェネレーターだけでは対応できず、PHPでの処理になる。