TCPDFで日本語テキストと画像を出力する場合の文字化けについて
Unityで作成したWindows PCアプリから、PDF生成を行うPHPスクリプトに対して日本語テキストと100KB未満の画像(バイナリデータ)をpostし、PDF出力を行っています。
日本語テキストのみpostした場合は、文字化けなく正常に出力されます。
日本語テキストと画像1点をpostした場合は、画像は正常に出力されますが、日本語テキストの文字化けが発生します。
PHPスクリプトの画像出力箇所をコメントアウトして、日本語テキストと画像1点をpostした場合も、日本語テキストの文字化けが発生します。
メモリ不足が問題ではないかと思い、ini_set関数やphp.iniなどでmemory_limitを128M、256M、512Mと変えてみましたが、結果は変わりませんでした。
もし、上記の現象や原因に関する情報やヒントがございましたら、ご教示よろしくお願い致します。
環境は次のとおりです。
Windows 10 Pro 64bit
XAMPP 5.6.15 (PHP 5.6.15)
TCPDF 6.2.12
Unity 5.2.3f1
※Windows PCアプリとXAMPP環境は同一PC内に共存
送信側サンプルコード
private IEnumerator PostWithBinary2(byte[] byteData, System.Action<WWW> callback)
{
string url = "http://localhost/report/sample.php";
WWWForm form = new WWWForm();
form.AddField("title", "日本語タイトル");
form.AddField("date", "2016-01-01");
form.AddField("copyright", "Copyright (C) 2016 日本語著作者. All Rights Reserved");
form.AddBinaryData("picture", byteData, "picture.png", "image/png");
WWW www = new WWW(url, form);
yield return www;
if (callback != null)
{
callback(www);
}
}
受信側サンプルコード
<?php
ini_set('memory_limit','128M');
require_once('./tcpdf/tcpdf.php');
// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF
{
private $hTitle='';
private $hDate='';
private $fCopyright='';
//Constructor
function __construct($orientation,$unit,$format,$unicode,$encoding,$diskcache,$pdfa,$title,$date,$copyright)
{
parent::__construct($orientation,$unit,$format,$unicode,$encoding,$diskcache,$pdfa);
$this->hTitle=$title;
$this->hDate=$date;
$this->fCopyright=$copyright;
}
//Page header
public function Header() {
// Logo
$imageFile=dirname(__FILE__).'/logo.jpg';
if(file_exists($imageFile))
{
$this->Image($imageFile,10,15,32,0,'JPG','','T',false,150,'',false,false,0,false,false,false);
}
// Title
$this->SetXY(50,22.5);
$this->SetFont('cid0jp','B',16);
$this->Cell(110,20,$this->hTitle,0,false,'C',0,'',0,false,'L','M');
// Date
$this->SetX(190);
$this->SetFont('cid0jp','',14);
$this->Cell(0,20,$this->hDate,0,false,'R',0,'',0,false,'L','M');
}
// Page footer
public function Footer() {
// Copyright
$this->SetY(-15);
$this->SetFont('cid0jp','',10);
$this->Cell(0,10,$this->fCopyright,0,false,'C',0,'',0,false,'T','M');
}
}
// check Image
function checkImage($file)
{
if($file['type']!='image/png')
{
return false;
}
if($file['error']>0)
{
return false;
}
if(!move_uploaded_file($file['tmp_name'],dirname(__FILE__).'/images/'.$file['name']))
{
return false;
}
return true;
}
// create new PDF document
$pdf=new MYPDF(PDF_PAGE_ORIENTATION,PDF_UNIT,PDF_PAGE_FORMAT,true,'UTF-8',false,false,$_POST['title'],$_POST['date'],$_POST['copyright']);
$pdf->setHeaderData(PDF_HEADER_LOGO,PDF_HEADER_LOGO_WIDTH,PDF_HEADER_TITLE,PDF_HEADER_STRING);
$pdf->setHeaderFont(Array('cid0jp','',14));
$pdf->AddPage();
$pdf->SetFont('cid0jp','',14);
$pdf->SetFillColor(230);
// output Image
if(array_key_exists('picture',$_FILES))
{
$file=$_FILES['picture'];
if (checkImage($file))
{
$x=10;
$y=125;
$pdf->Image(dirname(__FILE__).'/images/'.$file['name'],$x,$y,92,0,'PNG','','',true,200,'',false,false,1,false,false,false);
}
}
// save PDF
$reportFile=dirname(__FILE__).'/report.pdf';
if(file_exists($reportFile))
{
unlink($reportFile);
}
$pdf->Output($reportFile,'F');
// return JSON
$json = array(
'resultReportFile'=>(empty($_SERVER['HTTPS'])?'http://':'https://').$_SERVER['HTTP_HOST'].(dirname($_SERVER['SCRIPT_NAME']).'/report.pdf'),
'error'=>'',
);
header('Content-Type: application/json');
echo json_encode($json);
?>