wordpress

WordPress管理画面から TCPDF でPDFを画面表示する方法

,

wordpress

WordPress管理画面から データベースから参照した値を既存のPDFに重ねて出力したかったので「 TCPDF 」+「 FPDI 」の組み合わせを試してみました。
ファイルを保存することは簡単にできましたが、画面表示がなかなか思うようにいかなかったので参考までに。

やろうとしたこと

色々方法があると思いますが、今回は

  1. 管理画面のフォーム内の値を取得。
  2. 取得した値をURLパラメータで渡し、リダイレクト。

のような方法で実装してみました。
ただ、そのまま渡すだけでは、ファイル出力は出来ましたが、画面表示が出来ませんでした。

use setasign\Fpdi\TcpdfFpdi;
include locate_template( 'tcpdf/tcpdf.php' );
include locate_template( 'fpdi/src/autoload.php' );
$upload_dir = wp_upload_dir();
$folderPath = $upload_dir['path'];

$tcpdf = new TcpdfFpdi('L', 'mm', 'A4');

// -- 省略 -- //

$tcpdf->AddPage();

// -- 省略 -- //

$tcpdf->Output($folderPath . 'sample.pdf', 'F'); // こっちはうまく出力できる
$tcpdf->Output('sample.pdf', 'I'); // うまく表示されない

URLパラメータで「 noheader=true 」を追加する

画面にうまく表示されない原因は、WordPress管理画面のヘッダーが先に読み込まれているためのようです。「 noheader=true 」を追記すると、WordPressのヘッダーを読み込まずにリダイレクトします。

// 例
...admin.php?page=sample&date=20201229&num=1234&action=pdfmake&noheader=true

空白や半角スペースにも注意

テスト環境では「 noheader=true 」を追加することで正常にPDFが画面表示されるようになりましたが、本番環境に移行すると、「 TCPDF ERROR: Some data has already been output to browser, can’t send PDF file 」のエラーメッセージが表示されました。
原因は「 <?php 」の前に半角スペースが入力されていたため。(双方の細かい設定の確認はしていませんが、PHPの設定等によるものと思います。)テスト環境で正常に表示されたため、なかなか原因の特定が出来ませんでした。同じエラーで原因がつかめない場合は1度確認してみてください。(特に、半角スペースは、画面を見てチェックしているだけだと気づかない場合があります。)

自己紹介

松田 大と申しますm(_ _)m
インディーズでミュージシャンをやっていたのですがいつのまにか…

とある企業でショップのアルバイトスタッフから正社員、支店長を経てシステム部門に異動するという、開発担当としては変わった経緯を持っている方だと思います。

「Excel VBA」からスタートして、Yamaha RTX シリーズで VPN環境構築、Hyper-V環境構築、Windowsアプリ開発などを経験した後、「 WordPress 」に出会い、どっぷりハマっています。

現在勤めているETBS合同会社では、「 WordPress 」を活用したWEBサイト、業務用WEBアプリケーション開発を中心に、記事の執筆代行や掲載に必要な情報のリサーチ、映像のテロップ入れや切りはりなどの簡単な動画編集なども、まとめて行なっています。

現在、代表兼二児のパパ。子育てを通じて、こどもたちにもプログラミングの楽しさに触れてほしいと思うようになり、「 こどもICTかつしか教室 」を開講中。最近は童心に帰り、簡単なゲーム制作なんかも楽しんでいます(^_^)。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ビジュアルプログラミング オンライン無料体験レッスン モニター大募集
こどもICTかつしか教室 | 幼稚園年長 小学生 中学生 スクラッチ ビジュアルプログラミング
WordPress で困ったら? | 必要なときに必要な分だけ、お助けサポート
WordPress / PHP なんでも相談OK