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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

36482閲覧

JasperReportsで帳票出力の際にtext fieldから文字がはみ出る

Begi

総合スコア56

JasperReports

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

1クリップ

投稿2016/05/13 02:49

編集2016/05/13 07:34

###環境・現象
Linuxでjasperreports-5.2.0.jarを使用し、帳票出力するPGMを動作させています。
現在、ブラウザ上に表示された帳票(PDF)でtext field内に表示された文字列が横にはみ出してしまっており、どうしても解決できずに悩んでいます。
全角のダブルコーテーションと句点が連続して存在する行のみはみ出しており、ほかの行ははみ出していません。

###試したこと
コード内で
JRExporter exporter = new JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.FORCE_LINEBREAK_POLICY, Boolean.TRUE);
を試しましたが変わらず、iReportでXML内に
<property name="net.sf.jasperreports.export.pdf.force.linebreak.policy" value="true"/>
を追加しましたがこちらも変化はありませんでした。
Windows環境下でははみ出さず、正常に折り返しています。

また、ダブルコーテーションではなくシングルコーテーションにしても同様の現象が発生しました。

###補足
ローカル環境(Windows)で帳票出力した際にははみ出す現象は発生しませんでした。
Linuxの文字コードなどの影響かもしれませんが、Linux自体の設定を変更してしまうと他で影響が出る可能性があるためしたくありません。

大変お手数ですが、ご回答いただけると助かります。よろしくお願いします。

###追記 takyafuminさんへ
情報追加依頼ありがとうございます。
Struts2フレームワークを使用しているため、少々特殊な書き方になっております。
また、実データに差し支える部分は割愛させていただいています。
以下ソースコードになります。

@Result( name = "pdf", type = "stream", params = { "inputName", "inputStream", "contentType", "application/pdf; charset=UTF-8", "contentLength", "${ contentLength }", "contentDisposition", "inline; filename = ${fileName}", "root", "model", "ignoreHierarchy", "false" }) , public class PdfAction extends ActionSupport implements ModelDriven<PdfModel> { public String execute() throws Exception { String jasperFile = "./test.jasper"; JasperPrint jp = null; JRDataSource dataSource = makeBeansDataSource(bean); HashMap<String, Object> params = new HashMap<String, Object>(); JasperPrint jp = JasperFillManager.fillReport(jasperFile, params, dataSource); byte[] pdf = JasperExportManager.exportReportToPdf( jp ); fileName = "test.pdf"; inputStream = new ByteArrayInputStream(pdf); contentLength = pdf.length; return "pdf"; } }

実際には、beanにはfieldにセットするデータを、paramsにはparameterにセットする値をそれぞれ別メソッドで定義しています。
また、jrxmlファイルは手動でコンパイルしjasperファイルとなったものをサーバ上に配置し使用しています。
jrxmlファイルは会社で取り扱っているものですので、申し訳ありませんが割愛させていただきます。
このパラメータはどうなっているのか?など質問がありましたらできる限り回答させていただきます。
どうぞよろしくお願いします。

###再度追記 takyafuminさんへ
以下、該当text fieldのプロパティになります。
text fieldプロパティ1
text fieldプロパティ2
よろしくお願いします。

また、static textに全角ダブルコーテーションが含まれた該当文章を入れたものを作成し試してみたところ、そちらでははみ出さず折り返していました。
ということは、javaが悪さをしているということになるのでしょうか。Windows環境下では問題なく表示されるのですが…
引き続きよろしくお願いします。

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

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

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

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

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

takyafumin

2016/05/13 03:08

PDFに日本語フォントを指定することで解決できるかもしれません。 jr.xmlと出力処理のjavaソースを提示できますか? ソース部分はコード用のタグで囲い、見やすくしてもらえると助かります。
guest

回答1

0

ベストアンサー

質問文への追記ありがとうございます。

現象が起きている<textfield>タグの内容だけでも提示できませんでしょうか?
手元で再現できれば検証できるかもしれないので。(大いに期待はしないでください。。。)

自動改行に関しては、下記設定が関連していると思います。
あとはtextfieldで利用しているフォントも知りたいです。

  • Stretch With Overflow(isStretchWithOverflow)

原因の切り分け

解決しない場合、原因の切り分けとして以下検証可能でしょうか。

  • Javaから動的にパラメータをセットせず、固定文字でも再現するか確認する

jrxmlの定義時に固定文字として現象が起きている文字をセットしておいても再現しますか?

  • フォントを変更して再現するか確認する

利用可能な別フォントでも再現しますか?

  • 最新のjasperreportsを利用してみる

バージョン依存の問題かもしれないです。

  • ソースコード内でjrxmlをコンパイルして動作させてみる

情報ソースを忘れてしまいましたが、GUIツールで正しくコンパイルできない場合がある、という事例をWebで読んだことがあります。(不確実な情報です)


jaspserrepors 6.2.1の環境ですが、下記jrxmlでは
(mac環境なので、Linux環境ではないのですが)

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0 --> 3<!-- 2016-05-13T15:24:39 --> 4<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="34802" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="9b8569be-8ebb-4e33-9141-99648267c2a5"> 5 <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/> 6 <queryString> 7 <![CDATA[]]> 8 </queryString> 9 <detail> 10 <band height="125" splitType="Stretch"> 11 <textField> 12 <reportElement key="" x="0" y="10" width="200" height="50" uuid="e5428b67-fc47-400b-8853-137ec78fa119"> 13 <property name="com.jaspersoft.studio.unit.x" value="pixel"/> 14 <property name="com.jaspersoft.studio.unit.y" value="pixel"/> 15 <property name="com.jaspersoft.studio.unit.width" value="pixel"/> 16 <property name="com.jaspersoft.studio.unit.height" value="pixel"/> 17 </reportElement> 18 <textElement> 19 <font fontName="IPA ゴシック"/> 20 </textElement> 21 <textFieldExpression><![CDATA["”テストです。”ほげほげ、ふがふが、ほげほげ、ふがふが、ほげほげ、ふがふが、"]]></textFieldExpression> 22 </textField> 23 </band> 24 </detail> 25</jasperReport>

あと問題解決をする際は、実際のコード、リソースをもとに「ミニマムコード」にて検証すると良いかと思います。
考慮事項が少なくなり問題点がはっきりします。また、こういったサービスでも情報公開しやすくなり、回答もつきやすいかと思います。


追記

jasperreports 5.2.0で検証しました。

  • macでの検証
  • 日本語フォントはIPAフォント

となりますが、動作しました。

ソースを記載します。

Java

1package local.sample.report.servlet.pdf; 2 3import java.io.IOException; 4import java.io.InputStream; 5import java.util.HashMap; 6import java.util.Map; 7 8import javax.servlet.ServletException; 9import javax.servlet.ServletOutputStream; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14 15import org.slf4j.Logger; 16import org.slf4j.LoggerFactory; 17 18import net.sf.jasperreports.engine.JREmptyDataSource; 19import net.sf.jasperreports.engine.JRException; 20import net.sf.jasperreports.engine.JasperCompileManager; 21import net.sf.jasperreports.engine.JasperExportManager; 22import net.sf.jasperreports.engine.JasperFillManager; 23import net.sf.jasperreports.engine.JasperPrint; 24import net.sf.jasperreports.engine.JasperReport; 25 26/** 27 * Servlet implementation class ReportLinebreakServlet 28 */ 29@WebServlet(name = "ReportLinebreakServlet", urlPatterns = { "/lbreport" }) 30public class ReportLinebreakServlet extends HttpServlet { 31 32 // SUID 33 private static final long serialVersionUID = 74432808028667034L; 34 35 // Logger 36 private static final Logger log = LoggerFactory.getLogger(ReportLinebreakServlet.class); 37 38 /** Jasperファイル */ 39 private static final String JRXML = "/report/34802.jrxml"; 40 41 42 /** 43 * @see HttpServlet#HttpServlet() 44 */ 45 public ReportLinebreakServlet() { 46 super(); 47 } 48 49 50 /** 51 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 52 */ 53 protected void doGet(HttpServletRequest request, HttpServletResponse response) 54 throws ServletException, IOException { 55 56 // パラメータ作成 57 Map<String, Object> parameters = new HashMap<String, Object>(); 58 parameters.put("text", "”JAVAからセットしました。”改行されて、表示される、といいですね。"); 59 60 try { 61 62 try (InputStream template = getClass().getResourceAsStream(JRXML)) { 63 64 // PDF生成 65 JasperReport report = JasperCompileManager.compileReport(template); 66 JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource()); 67 68 // 帳票のバイト化 69 byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint); 70 71 // レスポンス出力 72 response.setContentType("application/pdf"); 73 response.setContentLength(bytes.length); 74 75 // PDF出力 76 ServletOutputStream out = response.getOutputStream(); 77 out.write(bytes); 78 out.flush(); 79 out.close(); 80 } 81 } 82 catch (JRException e) { 83 log.error("JRException"); 84 throw new ServletException(e); 85 } 86 } 87} 88

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0 --> 3<!-- 2016-05-13T15:57:17 --> 4<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="34802" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="9b8569be-8ebb-4e33-9141-99648267c2a5"> 5 <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/> 6 <parameter name="text" class="java.lang.String"/> 7 <queryString> 8 <![CDATA[]]> 9 </queryString> 10 <detail> 11 <band height="125" splitType="Stretch"> 12 <textField> 13 <reportElement key="" x="0" y="10" width="200" height="50" uuid="e5428b67-fc47-400b-8853-137ec78fa119"> 14 <property name="com.jaspersoft.studio.unit.x" value="pixel"/> 15 <property name="com.jaspersoft.studio.unit.y" value="pixel"/> 16 <property name="com.jaspersoft.studio.unit.width" value="pixel"/> 17 <property name="com.jaspersoft.studio.unit.height" value="pixel"/> 18 </reportElement> 19 <textElement> 20 <font fontName="IPA ゴシック"/> 21 </textElement> 22 <textFieldExpression><![CDATA["”テストです。”ほげほげ、ふがふが、ほげほげ、ふがふが、ほげほげ、ふがふが、"]]></textFieldExpression> 23 </textField> 24 <textField> 25 <reportElement x="280" y="10" width="200" height="50" uuid="6b829219-af14-4bdb-8564-bc5153e08cb4"> 26 <property name="com.jaspersoft.studio.unit.y" value="pixel"/> 27 <property name="com.jaspersoft.studio.unit.width" value="pixel"/> 28 <property name="com.jaspersoft.studio.unit.height" value="pixel"/> 29 </reportElement> 30 <textElement> 31 <font fontName="IPA ゴシック"/> 32 </textElement> 33 <textFieldExpression><![CDATA[$P{text}]]></textFieldExpression> 34 </textField> 35 </band> 36 </detail> 37</jasperReport>

投稿2016/05/13 06:29

編集2016/05/13 06:59
takyafumin

総合スコア2335

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

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

Begi

2016/05/13 06:56

takyafuminさん 回答ありがとうございます。 - Stretch With Overflowにチェックを入れても変化はありませんでした。 - 最新のjasperreports(6.2.2)を使用してみましたが変化はありませんでした。  (jarを差し替え、ビルドパスを更新し試しました。また差し替え後にStretch~も試しましたが変わりませんでした) - Pdf font name~プロパティをHeiseiKakuGo-W5からHeiseiMin-W3に変更し試しましたが変化はありませんでした(フォント自体は明朝に変化しましたがはみ出ていました)。 - javaでコンパイルするよう修正し試しましたが変化はありませんでした。 - static textに固定文字として入力するのは今から試してみます。 以下、該当text fieldのプロパティになります。 ![text fieldプロパティ1](5f440b5bd74baa35c5ac0eb456833d36.jpeg) ![text fieldプロパティ2](202cc9c5502ddb9f329c6b8d8b089e96.jpeg) ご助力いただき本当に助かります。引き続きよろしくお願いします。 ミニマムコードにつきましても勉強になります。ありがとうございます。
Begi

2016/05/13 06:57

すみません、返信として画像を投稿する方法がわからないのですが教えていただいてもよろしいでしょうか…
takyafumin

2016/05/13 07:22

> すみません、返信として画像を投稿する方法がわからないのですが教えていただいてもよろしいでしょうか… 私にも分からないので(笑)、質問文に追記するやり方ではいかがでしょうか?
Begi

2016/05/13 07:31

はい、iReportのプロパティ画面のキャプチャを質問文に追加させていただきます。
takyafumin

2016/05/13 07:48

日本語フォントを埋め込まない方式でPDF生成を行っているようですね。 そのために環境に依存して意図しない動作になっている可能性が高そうです。 * http://wiki.tk2kpdn.com/create-pdf-by-jasperreports6-and-java-p4/ 日本語フォントを埋め込む方式に変更することは可能ですか? ※フォントのにはライセンスもあると思いますので、フリーライセンスのIPAフォントを利用した例のURLとなります。 * http://wiki.tk2kpdn.com/create-pdf-by-jasperreports6-and-java-p5/
Begi

2016/05/13 08:09

text fieldのプロパティ「Left Indent」の値を0にして動かしてみたところ、はみ出ることがなくなりました。 ダブルコーテーションの数を増減させたりシングルコーテーションを入れたりして試しましたが、はみ出ることはなくなったようです…。 ひとまず、現状で行きたいと思います。 時間が取れましたらIPAフォント埋め込みのパターンも試したいと思います。 ご助力いただき、本当にありがとうございました。
takyafumin

2016/05/13 08:11

直接的な回答にならず、申し訳なかったです。 解決の糸口となったようであれば幸いです。
Begi

2016/05/13 08:22

いえ、献身的にご助力いただいたおかげで本当に勉強になりましたし解決できたと思います。 機会がありましたらまたご助力いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問