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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JasperReports

JasperReportsはオープンソースの帳票生成ツールです。JasperReportはPDF, HTML, Microsoft Excel, ODT, XML等の様々なフォーマットのものをエクスポートします。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2032閲覧

cossou/JasperPHP、またはJasperStarterにおいて、日本語を含むレポートを出力する方法

masaya_ohashi

総合スコア9206

JasperReports

JasperReportsはオープンソースの帳票生成ツールです。JasperReportはPDF, HTML, Microsoft Excel, ODT, XML等の様々なフォーマットのものをエクスポートします。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/12/13 08:01

編集2017/12/13 08:42

###前提・実現したいこと
PHPのフレームワーク上で、JasperReportsを使った日本語表記を含む帳票を出力しようとしています。今回使用したツールはcossou/JasperPHPで、Laravel5.4上で動いています。

###発生している問題・エラーメッセージ
日本語部分だけが出力できません。ぶっちゃけJasperの日本語がPDFで出るようになるならcossou/JasperPHPじゃなくてもいいです。内部でJasperStarterを使っているようなので、そちらで設定する方法でもあればとてもうれしいです。

###該当のソースコード
※Laravel独自の記法も含まれます。

PHP

1<?php 2namespace App\Library; 3use JasperPHP; 4class ReportExporter { 5 public static function exportFile($jrxmlFilePath, $parameters = null) { 6 if(!\File::exists(storage_path('app/jasper'))) { 7 \File::makeDirectory(storage_path('app/jasper'), 0775, true); 8 } 9 if(!\File::exists(storage_path('app/public/pdf'))) { 10 \File::makeDirectory(storage_path('app/public/pdf'), 0775, true); 11 } 12 $jasperFilePath = storage_path('app/jasper/' . urlencode($jrxmlFilePath)); 13 $pdfFilePath = storage_path('app/public/pdf/' . str_random(40)); 14 if(!\File::exists($jasperFilePath)) { 15 JasperPHP::compile($jrxmlFilePath, $jasperFilePath)->execute(); 16 } 17 $output = JasperPHP::process( 18 $jasperFilePath, 19 $pdfFilePath, 20 array('pdf'), 21 $parameters, 22 [ 23 'driver' => config("database.connections.mysql.driver"), 24 'username' => config("database.connections.mysql.username"), 25 'password' => config("database.connections.mysql.password"), 26 'database'=> config("database.connections.mysql.database"), 27 'host' => config("database.connections.mysql.host"), 28 'jdbc_dir' => resource_path('assets/jdbc') 29 ] 30 )->execute(); 31 return $pdfFilePath . '.pdf'; 32 } 33}

###試したこと

  • JaspersoftStudio上でもPreviewでは正しく見えても、Export As PDFすると日本語部分だけ消える
  • JaspersoftStudioのフォント設定で、PDFにフォントを埋め込む設定にしてある
  • JaspersoftStudioのフォント設定からexportしたfonts.jarをJasperPHPのjdbc_dirに置いてある

※置かないと「そんなフォントはない」とエラーが出るので、フォントは読み込まれているし、PDFも組み込まれた分容量も大きくなっている

  • JavaでJasperを使ったときは以下の設定をすることで日本語を含むレポートが正しく出力された

Java

1JasperReportsContext context = DefaultJasperReportsContext.getInstance(); 2context.setProperty("net.sf.jasperreports.extension.registry.factory.fonts", "net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory"); 3context.setProperty("net.sf.jasperreports.extension.simple.font.families.font", "/path/to/font");

###補足情報(言語/FW/ツール等のバージョンなど)
cossou/jasperphp 2.4
laravel/framework 5.4

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://amg-solution.jp/blog/1519
この記事を参考に、JaspersoftStudioのフォント設定を変更、fonts.jarをexportし直したらうまくいきました!

PDF Detailsの中のPDF EncodingをIdentity-Hに変えたらうまく行きました。Embed this...の方のチェックはすでに入れていたのですが、Encoding設定がされていないことが原因だったようです。

日本語を含むPDFを出力するための設定まとめ

  • Jaspersoft Studioで日本語フォントを組み込む。このページを参考にどうぞ
  • レポートのstyle等でそのフォントを使う
  • Jaspersoft Studioでフォントの設定から使いたいフォントを複数選択してexportするとjarになる
  • JasperPHPの$db_connectionjdbc_dirを設定、そのフォルダに先程のフォント用のjarを置く

注意点

フォント用のjarを置くために$db_connectionを設定すると、他のdb設定も諸々必要になる。jdbc_dirだけを指定することは出来ない。これはJasperStarterが「フォント用jarをjdbcフォルダに入れてね」と言っているのでどうしようもない。どうにかしてclasspath等でフォント用jarのパスを解決しようとしたが、JasperStarterの起動スクリプトがjava -jarコマンドを使っていたので、外からclasspathを指定できなかった。
【Java: -jar と -classpath は併用できない】
http://d.hatena.ne.jp/sardine/20060908
【JasperStarterのマニュアル抜粋】
http://jasperstarter.cenote.de/unicode-pdf-export.html

Using a font with JasperStarter

If you want to use the previously created font jar with JasperStarter just put it into the jdbc directory you are using with JasperStarter. All jar files there are added to the classpath.

投稿2017/12/13 08:58

編集2017/12/13 09:03
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問