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

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

ただいまの
回答率

90.47%

  • Java

    14119questions

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

  • Linux

    3909questions

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

  • JasperReports

    43questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 9,953

Begi

score 31

環境・現象

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環境下では問題なく表示されるのですが…
引き続きよろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • takyafumin

    2016/05/13 12:08

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

    キャンセル

回答 1

checkベストアンサー

0

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

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

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

  • Stretch With Overflow(isStretchWithOverflow)

 原因の切り分け

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

  • Javaから動的にパラメータをセットせず、固定文字でも再現するか確認する
    jrxmlの定義時に固定文字として現象が起きている文字をセットしておいても再現しますか?

  • フォントを変更して再現するか確認する
    利用可能な別フォントでも再現しますか?

  • 最新のjasperreportsを利用してみる
    バージョン依存の問題かもしれないです。

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


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

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0  -->
<!-- 2016-05-13T15:24:39 -->
<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">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <detail>
        <band height="125" splitType="Stretch">
            <textField>
                <reportElement key="" x="0" y="10" width="200" height="50" uuid="e5428b67-fc47-400b-8853-137ec78fa119">
                    <property name="com.jaspersoft.studio.unit.x" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
                </reportElement>
                <textElement>
                    <font fontName="IPA ゴシック"/>
                </textElement>
                <textFieldExpression><![CDATA["”テストです。”ほげほげ、ふがふが、ほげほげ、ふがふが、ほげほげ、ふがふが、"]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

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

  • http://blogs.wankuma.com/nagise/archive/2007/12/02/111385.aspx

 追記

jasperreports 5.2.0で検証しました。

  • macでの検証
  • 日本語フォントはIPAフォント
    となりますが、動作しました。

ソースを記載します。

package local.sample.report.servlet.pdf;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

/**
 * Servlet implementation class ReportLinebreakServlet
 */
@WebServlet(name = "ReportLinebreakServlet", urlPatterns = { "/lbreport" })
public class ReportLinebreakServlet extends HttpServlet {

    // SUID
    private static final long serialVersionUID = 74432808028667034L;

    // Logger
    private static final Logger log = LoggerFactory.getLogger(ReportLinebreakServlet.class);

    /** Jasperファイル */
    private static final String JRXML = "/report/34802.jrxml";


    /**
     * @see HttpServlet#HttpServlet()
     */
    public ReportLinebreakServlet() {
        super();
    }


    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {

        // パラメータ作成
        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("text", "”JAVAからセットしました。”改行されて、表示される、といいですね。");

        try {

            try (InputStream template = getClass().getResourceAsStream(JRXML)) {

                // PDF生成
                JasperReport report = JasperCompileManager.compileReport(template);
                JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource());

                // 帳票のバイト化
                byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);

                // レスポンス出力
                response.setContentType("application/pdf");
                response.setContentLength(bytes.length);

                // PDF出力
                ServletOutputStream out = response.getOutputStream();
                out.write(bytes);
                out.flush();
                out.close();
            }
        }
        catch (JRException e) {
            log.error("JRException");
            throw new ServletException(e);
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0  -->
<!-- 2016-05-13T15:57:17 -->
<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">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="text" class="java.lang.String"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <detail>
        <band height="125" splitType="Stretch">
            <textField>
                <reportElement key="" x="0" y="10" width="200" height="50" uuid="e5428b67-fc47-400b-8853-137ec78fa119">
                    <property name="com.jaspersoft.studio.unit.x" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
                </reportElement>
                <textElement>
                    <font fontName="IPA ゴシック"/>
                </textElement>
                <textFieldExpression><![CDATA["”テストです。”ほげほげ、ふがふが、ほげほげ、ふがふが、ほげほげ、ふがふが、"]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="280" y="10" width="200" height="50" uuid="6b829219-af14-4bdb-8564-bc5153e08cb4">
                    <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
                </reportElement>
                <textElement>
                    <font fontName="IPA ゴシック"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{text}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/13 15: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)

    ご助力いただき本当に助かります。引き続きよろしくお願いします。
    ミニマムコードにつきましても勉強になります。ありがとうございます。

    キャンセル

  • 2016/05/13 15:57

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

    キャンセル

  • 2016/05/13 16:22

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

    私にも分からないので(笑)、質問文に追記するやり方ではいかがでしょうか?

    キャンセル

  • 2016/05/13 16:31

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

    キャンセル

  • 2016/05/13 16: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/

    キャンセル

  • 2016/05/13 17:09

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

    キャンセル

  • 2016/05/13 17:11

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

    キャンセル

  • 2016/05/13 17:22

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

    キャンセル

関連した質問

同じタグがついた質問を見る

  • Java

    14119questions

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

  • Linux

    3909questions

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

  • JasperReports

    43questions

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