質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.55%

【PHP】TCPDFで文字列を渡してPDF化するclassを作りたい

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 519
退会済みユーザー

退会済みユーザー

前提・実現したいこと

TCPDFを使ってユーザーがテキストエリアに入れた文字列(HTML)をPDFで表示またはDLできるようにしたいです。
その際、表示用とDL用の関数を持つclassを作ってぞれぞれに対象の文字列(HTML)を渡したいと考えています。

データベースにある文字列をPDF化して表示するところまではできたので、下記はそのコードになります。
これをどのように改変すれば関数を使って汎用的に利用できるかで行き詰っています。

PHPの基礎をやり始めたばかりでまだclassやfunctionなどの関数の知識が乏しく、書いてみてもエラーばかりで正しい書き方がわかりません。
しっかり勉強するべきなのは重々承知です。
しかし急ぎ対応したい事案でして、身勝手ではありますが皆さまのお知恵をお借りできればと思っております。

渡す文字列はinput type textareaでjsを使って値を取り出す想定です。
(ここも間違っていたらご指摘いただけると助かります)

何卒、ご教示のほどお願い申し上げます。

該当のソースコード

<?php

~データベースから文字列(HTML)を取得($contentsとする)~

include("./TCPDF/tcpdf.php");

    define("MY_PDF_PAGE_ORIENTATION"   , "P");
    define("MY_PDF_FONT_NAME"          , "kozgopromedium");
    define("MY_PDF_FONT_SIZE"          , 15);
    define("MY_PDF_UNIT"               , "mm");
    define("MY_PDF_PAGE_FORMAT"        , "A4");
    define("MY_PDF_IMAGE_SCALE_RATIO"  , 1);
    define("MY_PDF_MARGIN_HEADER"      , 0);
    define("MY_PDF_MARGIN_FOOTER"      , 0);
    define("MY_PDF_MARGIN_TOP"         , 20);
    define("MY_PDF_MARGIN_LEFT"        , 20);
    define("MY_PDF_MARGIN_RIGHT"       , 20);
    define("MY_PDF_MARGIN_BOTTOM"      , 20);

class MYPDF extends TCPDF {
    public function Header(){
        $this->SetAutoPageBreak(false, 0);
    }
}

$pdf = new MYPDF(MY_PDF_PAGE_ORIENTATION, MY_PDF_UNIT, MY_PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetTitle("hogehoge");
$pdf->SetMargins(MY_PDF_MARGIN_LEFT, MY_PDF_MARGIN_TOP, MY_PDF_MARGIN_RIGHT);
$pdf->SetAutoPageBreak(TRUE, MY_PDF_MARGIN_BOTTOM);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(true);
$pdf->setImageScale(MY_PDF_IMAGE_SCALE_RATIO);
$pdf->SetFont(MY_PDF_FONT_NAME, "", MY_PDF_FONT_SIZE);

// ここからclassを作る?

$pdf->AddPage();
$html =<<<_EOF

<style>
.title {
    font-weight: bold;
    text-align: center;
}
table {
    border-spacing:0;
    border-collapse: collapse;
}
table tr td {
    border: 1px solid black;
    font-weight: normal;
}
</style>

{$contents}

_EOF;

$pdf->writeHTML($html, true, false, true, false, '');
$pdf->lastPage();
$pdf_output = null;
$fileName = "hogehoge.pdf";
$fileName = mb_convert_encoding( $fileName, 'SJIS-WIN', 'UTF-8' );
$pdf_output = $pdf->Output(null,'S');

if ($pdf_output != null) {
    header( "Pragma: public" );
    header( "Expires: 0 ");
    header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
    header( "Content-Transfer-Encoding: binary" );
    // ブラウザ
    header( "Content-Type: application/pdf" );
    header( "Content-Disposition: inline; filename=\"{$fileName}\"" );
    // ダウンロード
    //header( "Content-Type: application/octet-streams" );
    //header( "Content-Disposition: attachment; filename=\"{$fileName}\"" );
    echo $pdf_output;
    exit;
}

?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • 退会済みユーザー

    2019/05/21 12:20

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • namda

    2019/05/21 16:18

    何を書いてどう失敗してるか書いてください。でないと丸投げと言われます。
    classにしたいと言ってますがコードからはそれどころではない様子が伺えます。
    何しようとして何ができないのか具体的に記述し、失敗するソースコードも添えてください。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.55%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる