当サイトには広告が含まれております

wp-mpdfプラグインでWordPressの記事をPDFで出力する!

この記事は最終更新日から10年経過しています。内容が古い可能性があります。

Image

システム開発をするときに、phpのプログラムからPDFを作るためにはmpdfを使っています。mpdfは便利なのでWordPressでも使えないかなと思って探してみたら wp-mpdf というプラグインが見つかったので試してみました。

方法としてプラグインをハックしたりしますのでもし真似する場合は充分に注意して行って、決していきなり本番運用中のサイトでは行わないようにお願いしますm(_ _)m

追記:あたりで色々な問題に直面しましたので、ご利用は慎重に!お願いしますm(_ _)m

記事をざっと見る

wp-mpdfをインストールする

プラグイン>新規追加 から

Image

wp-mpdfを検索します。

Image

このように表示されますので、 いますぐインストール  をクリックします。

インストールの後、プラグインを有効化しておきます。

いきなり問題発生!

プラグインをインストールして有効化しただけでいきなり問題が発生しました。コンテンツを表示させると、

Image

このようにコンテンツの頭に

Notice: format_to_post の使用はバージョン 3.9 から非推奨になりました。代替は用意されておりません。 in

のようなエラーが出てしまっています。format_to_postという関数が非推奨になっているようです(>_<)。うーん、困った…ええぃ!と該当の wp-mpdf\wp-mpdf.php

264行目付近の

     format_to_post('the_content');

コメントアウト

     // format_to_post('the_content');

してしまいました。

Image

エラーが出なくなりました(^^)/。

動作に問題が起こらないかなぁと心配しましたが、特に問題が出てこなかったので結果オーライでこのまま進めます。

PDFボタンを表示する

wp-mpdf installation

wp-mpdfのページにボタンの付け方が載っています。

4.Add to your template "<?php if(function_exists('mpdf_pdfbutton')) mpdf_pdfbutton(); ?>" as a small button or "<?php if(function_exists('mpdf_pdfbutton')) mpdf_pdfbutton(false, 'my link', 'my login text'); ?>" as a textlink. The second text specifies the text which should displayed if you have checked "needs login" and a user isn't logged in. (if you wish to open the pdf print in a new tab you may pass "true" for the first parameter)

この部分がボタンについての説明だと思います。一番最初に書いてある small button を付けてみたいと思います。

templateのどこかにこのコードを貼り付けておけば使えそうなので、投稿のsingleページでPDFボタンを表示してみようと思います。

子テーマの content.php を開き、

     </div><!-- .entry-content -->

の直前に、

          <?php
               if ( is_single() ) :
                    if(function_exists('mpdf_pdfbutton')) mpdf_pdfbutton();
               endif;
          ?>

投稿のsingleページだったらPDFボタンを表示する、みたいな感じでコードを入れて保存します。そうするとコンテンツの下部に、

Image

こんな感じで小さなPDFボタンが表示されました。

デフォルト状態で動作確認をしてみました。エラー発生

この状態で動作確認をしてみます。

Image

Notice: Trying to get property of non-object in /virtual/ryus/ryuscojpblog/wp-content/plugins/wp-mpdf/wp-mpdf.php on line 450

Warning: Cannot modify header information - headers already sent by (output started at /virtual/ryus/ryuscojpblog/wp-content/plugins/wp-mpdf/wp-mpdf.php:450) in/virtual/ryus/ryuscojpblog/wp-content/plugins/wp-mpdf/mpdf/mpdf.php on line 7447

Warning: Cannot modify header information - headers already sent by (output started at /virtual/ryus/ryuscojpblog/wp-content/plugins/wp-mpdf/wp-mpdf.php:450) in/virtual/ryus/ryuscojpblog/wp-content/plugins/wp-mpdf/mpdf/mpdf.php on line 1736
mPDF error: Some data has already been output to browser, can't send PDF file

このようなエラーが表示されました。

これはちょっと解決するのに時間がかかってしまい、あれこれ試したのですが原因がわかれば単純なことでした。

インストールした直後に見たような感じで、PDF出力時にもNoticeが出力されているのでその後のheaderを出すときに既に表示されている、というエラーになっているようです。これが出るか出ないかはエラーレベルの指定によるので、お使いの環境がNoticeを出さない設定であればこれは出ないので以下のハックについてはパスしてください。

出ちゃう場合なのですがちょっと乱暴ですが、Noticeが出ないようにしてみます。

wp-mpdf\wp-mpdf.php の 450行目

     mpdf_output($pdf_output, true, $outputToBrowser, $dsatz->pdfname, $templatePath);

     // notice off
        error_reporting(E_ALL & ~E_NOTICE);
        mpdf_output($pdf_output, true, $outputToBrowser, $dsatz->pdfname, $templatePath);
        // notice on
        error_reporting(E_ALL);

のようにします。noticeが出てしまう行の前で一旦出さないようにしておいて、その行が終わったら出すようにするというものです。ちゃんとやるためには修正前のエラー表示状態をちゃんと把握しておかないといけないかとは思うのですが、自分のサイトでまぁこういう感じでいいかなと思ったら上記のように修正してみてください。

これで、エラーは出なくなりPDFが表示されました。

日本語文字化けを修正する

Image

エラーは出ないようになりましたが、画像以外の日本語が文字化けしています。mpdfを使ったことがあるので日本語が出るようにするには調整が必要と思っていましたのでここではあまり慌てませんでした(^^)/。

このプラグインの場合はどこをなおしたらいいかなと探ってみて、ハックする箇所がわかりました。

wp-mpdf\mpdf\config_cp.php

     switch($lang){
       CASE "en":

の直前に、

     // for japanese
     $lang = 'ja';
     $adobeCJK = true;

     switch($lang){
       CASE "en":

コメントを含め3行追加してこういう感じにします。

wp-mpdfの設定画面の修正してキャッシュをクリアする

これでOKですが、先ほど表示したPDFを再表示する前に、

ダッシュボード>設定>wp-mpdf

からキャッシュを消したいと思います。

Image

こちらもだいぶたくさんnoticeが出てしまっています。該当ソースの該当部分を見るとどうも $path という変数がないのに使っているからエラーが出てしまってるようです。

wp-mpdf\wp-mpdf_admin.php の 479行目の

             if(!is_dir($path.$file) && $file != "." && $file != "..")  {

を

                if(!is_dir(dirname(__FILE__).'/cache/'.$file) && $file != "." && $file != "..")  {

にして 494行目の

         if(!is_dir($path.$file) && $file != "." && $file != "..")  {

を

            if(!is_dir(dirname(__FILE__).'/cache/'.$file) && $file != "." && $file != "..")  {

にします。これで、エラーがなくなるので

Image

Clear Cache をクリックすると、

Image

キャッシュがクリアされます。これをしておかないとキャッシュがあるPDFについては再作成されないようなので注意が必要です。

キャッシュを使わない、という方法もありこの設定画面の

Image

cacheという項目のチェックを外してsaveすればよいようです。

日本語文字化けが直ったことを確認して、修正終了♪

ということでこれで先ほどのPDFを表示してみると

Image

このように日本語も文字化けせずにちゃんと表示されました(^^)/

まとめ:WordPressから簡単にPDFできるこのプラグインは超便利!

コメントアウトした部分がもしかするとそういう作用をしていたのかもしれませんがデザインが適用されていません(例、h2など)。その辺もうまいこと表示しているデザインと同じようなかんじにできたらいいなと思いますので、今後ちょっと調べたいと思います。

しかし、このプラグインを入れておけば簡単にPDFとして表示され、保存すればPDFファイルにもなるのでとても便利です。blogサイトだけでなく、業務的にもWordPressで作成されたサイトなどではかなり便利に使えそうです。

このblogでも各記事の一番下の方に小さいPDFボタンを表示してあるので押してみて動作を確認してみてください(^^)/。

実際にお使いになるには、ここに書いたようにいくつかハックする必要がありそうなので利用には注意が必要そうです。

も、もしかするとオプションの設定などでハックしなくてもできる!とかあるのかもしれませんが、その方法がわかったら是非是非教えてくださいませm(_ _)m

追記:他にもエラーが出ているところがありましたorz

今日blogを書こうと思って新規投稿画面を見たら、抜粋の上あたりに

Image

こんな感じにエラーが出まくっていました(^_^;。まだまだ色々出てきそうですが、一応これは…この入力欄の意味がよくわからないので表示しないようにしようと思います。

*くさいものにふたというか…

plugins\wp-mpdf\wp-mpdf.php

の、

    if(function_exists('add_meta_box')) {
        add_meta_box('mpdf_admin', 'wp-mpdf', 'mpdf_admin_printeditbox', 'post', 'normal', 'high');
        add_meta_box('mpdf_admin', 'wp-mpdf', 'mpdf_admin_printeditbox', 'page', 'normal', 'high');
    }
    else {
        add_action('dbx_post_advanced', 'mpdf_admin_printeditbox_old');
        add_action('dbx_page_advanced', 'mpdf_admin_printeditbox_old');
    }

あたりでこの辺を表示しているみたいなので、

    if(function_exists('add_meta_box')) {
    //  add_meta_box('mpdf_admin', 'wp-mpdf', 'mpdf_admin_printeditbox', 'post', 'normal', 'high');
    //  add_meta_box('mpdf_admin', 'wp-mpdf', 'mpdf_admin_printeditbox', 'page', 'normal', 'high');
    }
    else {
    //  add_action('dbx_post_advanced', 'mpdf_admin_printeditbox_old');
        //add_action('dbx_page_advanced', 'mpdf_admin_printeditbox_old');
    }

コメントにしてしまいました。これで、

Image

投稿画面にwp-mpdfオプションが出なくなりました。

と、思ったのもつかの間、blogを書いているときに再度エラーに見舞われました。

Image

どうやら投稿記事を修正して保存するときにPDFを作り替えているようです。そこでまた同じようなnoticeが出て、ということが起こっています。基本的に今後は設定でキャッシュを使わないという設定にして、noticeが出そうな所は極力コメントアウトしていきます(ちょっとかなりやっつけ気味です。自分のサイトでないとできないかも)。

今回は、plugins\wp-mpdf\wp-mpdf.php の

add_action('save_post', 'mpdf_admin_savepost');

が引っかかっていたので、

//add_action('save_post', 'mpdf_admin_savepost');

コメントアウトしました。

この記事が気に入ったら
いいね または フォローしてね!

あなたのシェアが励みになります!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントを残す

記事をざっと見る