LoginSignup
0

More than 1 year has passed since last update.

mPDFでA4タテヨコ混在状態で出力する

Last updated at Posted at 2022-05-06

はじめに

仕事で帳票を取り扱っているが、繁忙期で忙殺されているときにタテヨコ混在状態で出力できない壁にぶつかったことがあった。Acrobat reader とかで一瞬で回転できるのに、んなアホなって思ったけど当時は押し切った。時間が経って、研究できる時間ができた。仕事場のライブラリとは違うがいちおうできることを確認できた

インストール

compser.json
{
      :
    "require": {
          :
        "mpdf/mpdf": "^8.1",
          :
    },
      :
}

source

てきとーにコントローラから処理実行する(ほんとは libraries に入れたほうがいいね)

app/Config/Routes.php
$routes->get('home/rotate_pdf', 'HomeController::rotatePdf', ['as' => 'home_rotate_pdf']);
app/Controllers/HomeController.php
class HomeController extends BaseController
{
    public function rotatePdf(): string
    {
        // 基本、タテA4の枠組みで出力
        $config = [
            'fontDir' => __DIR__.'/../../public/assets/font/IPA',
            'fontdata' => [
                'ipafont-m' => [  // htmlで指定するフォントファミリ名1(任意名)
                    'R' => 'ipamp.ttf',  // regular
                ],
                'ipafont-g' => [  // htmlで指定するフォントファミリ名2(任意名)
                    'R' => 'ipagp.ttf',  // regular
                ],
            ],
            'mode' => 'ja+aCJK',
            'format' => 'A4-P', // or 'A4-L'
        ];
        $mPdf = new mPDF($config);
        
        $data = [
            'name' => '十文字学園(大坂)'
        ];
        
        // 1ページ目はtemplateからのparse
        $parser = Services::parser();
        $html = $parser->setData($data)->render('home/rotatePdf');
        $mPdf->WriteHTML($html);
        
        // 2ページ目はヨコA4の枠組みで出力
        $mPdf->AddPage('L');
        $mPdf->WriteHTML('Hello page 2');
        
        // pdfとして出力
        $mPdf->Output('estimate.pdf', 'D');
        
        // もとのページに戻る
        return view('home/index');
    }
}

フォントを置く

  • publicフォルダに配置
    image.png

html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    
    <title>Document</title>
</head>
<body style="font-size: 40px;">
<p style="font-family: ipafont-m">卒業証明書 {name}</p>
<p style="font-family: ipafont-g">卒業証明書 {name}</p>
</body>
</html>

確認

出力されたPDF

おー、いいじゃんいいじゃん
image.png
image.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0