Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JasperReportによるPDF出力時のメソッドエラーについて

JAVA初心者です。
どうしてもわからないことがありまして質問させていただくことにしました。

JasperReportsよりPDF出力させたいのですがEclipse上で実行させると
Exception in thread "main" java.lang.NoSuchMethodError: com.itextpdf.text.Document.setRole(Lcom/itextpdf/text/pdf/PdfName;)V
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:580)
    at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:519)
    at net.sf.jasperreports.engine.JasperExportManager.exportToPdfFile(JasperExportManager.java:156)
    at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:504)
    at test_japser.main(test_japser.java:34)
とエラーが発生してしまいます。

指定ドライブに一応PDFは出力されますが、サイズが0KBでファイルエラーが起きます。

Eclipse上、コーディング時のエラーは発生していません。

開発環境:

開発ツール:Eclipse 4.4.1
JasperReportプラグイン実装

JAVA:JavaSE-1.8

外部jar:
commons-beanutils-1.9.0.jar
commons-collections-3.2.1.jar
commons-digester-2.1.jar
commons-logging-1.1.1.jar
iText-5.0.6.jar
iTextAsian.jar
itextpdf-5.5.6.jar
itext-pdfa-5.5.6.jar
jasperreports-6.0.3.jar

ソースコード:test_japser.java

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

public class test_japser {

    public static void main(String[] args) {

        //jrxmlファイルのパス
        String jrxmlPath = "D:\\Program Files\\pleiades\\eclipse\\workspace\\Test_Japser\\example.jrxml";

        //jrxmlファイルをコンパイルしたjasperファイルのパス
        String jasperPath = "D:\\Program Files\\pleiades\\eclipse\\workspace\\Test_Japser\\example.jasper";

        //PDFファイルの出力先
        String pdfPath = "D:\\report1.pdf";

        try{

            //テンプレートのコンパイル
            JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);

            //帳票の出力
            //空のデータソースnew JREmptyDataSourceを与えないと白紙になってしまう
            JasperPrint print = JasperFillManager.fillReport(jasperPath, null,new JREmptyDataSource());

            //PDFへ出力(内部的にデータのバインドと出力を行っている)
            JasperExportManager.exportReportToPdfFile(print, pdfPath);

        }catch(Exception e){

            System.out.println(e.getMessage());

        }

    }

}

レポート側ソースコード:example.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.0.3.final using JasperReports Library version 6.0.3  -->
<!-- 2015-08-05T17:29:28 -->
<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="example" pageWidth="595" pageHeight="842" orientation="Landscape" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="4376d848-6af1-40c4-94a9-182f8baab16a">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch"/>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="68" splitType="Stretch">
            <staticText>
                <reportElement x="229" y="38" width="100" height="30" uuid="ec0d48a5-b7f5-4404-b768-1d3aa36b497d"/>
                <textElement>
                    <font fontName="MS 明朝" pdfFontName="HeiseiMin-W3" pdfEncoding="UniJIS-UCS2-H"/>
                </textElement>
                <text><![CDATA[テスト]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch"/>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

どなたかご教授していただけると助かります。
よろしくお願いします。

2

回答

8195

閲覧

2件の回答

評価

0

初心者は余計。
それに、そんなもの使ってる時点で初心者とは言えない。

Eclipse上では、自分が組んでいるソースから参照するI/Fが存
在するかと、参照クラスが参照しているクラスが存在する
か、くらいしか見ていない。
奥まったところにあるクラスから参照するI/Fが存在するか
は、Eclipseでは分からない。

そういうわけで、一般的にはこのようなエラーは、利用して
いるライブラリ(jar)同士のバージョン不整合が考えられ
る。

評価

10

よくわかんないっすけど、ここのとこじゃないっすか。
JasperPrint print = JasperFillManager.fillReport(jasperPath, null,new JREmptyDataSource());

ここの部分で帳票とデータをバインドしてるんじゃないじゃないかな…。

new JREmptyDataSource()ってカラデータって意味だと思うんすけど、カラデータでいいの?

下だとどうなる?
HashMap<String, Object> params = new HashMap<>();

JasperPrint print = JasperFillManager.fillReport(jasperPath, params, new JREmptyDataSource());

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。