2

BIRT レポート ジェネレーターの問題に直面しています。デザイナーを使用してレポートを作成し、マスターページの向きを横向きに、ページの種類を A4 に設定しましたが、サーバーのレポート エンジンを使用して機能させる方法がありません (常に縦向きで表示されます)。追加を省略pdfOptionsしても、問題は引き続き発生します。

ただし、デザイナーのプレビュー オプションを使用すると機能します。

それが私のReportRendererクラスです:

import javax.servlet.ServletContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
import org.eclipse.birt.report.engine.api.IPDFRenderOption;
import org.eclipse.birt.report.engine.api.IRenderOption;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.PDFRenderOption;
import org.eclipse.birt.report.engine.api.RenderOption;
import org.eclipse.birt.report.engine.api.ReportEngine;
import org.springframework.web.context.ServletContextAware;

public class ReportRenderer{

    public ByteArrayOutputStream renderReport(ReportPath reportPath,
            Map<String, Object> reportParams,
            Locale locale) throws EngineException {

        IReportEngine engine;
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        EngineConfig config = new EngineConfig();
        engine = new ReportEngine(config);

        final IReportRunnable design = engine
                .openReportDesign(this._ServletContext.getRealPath("/") 
                   + reportPath.get_Path());

        // design.get
        // engine.
        // Create task to run and render the report,
        final IRunAndRenderTask task = engine.createRunAndRenderTask(design);

        //report arguments and language
        task.setParameterValue("data_url", this._DataUrl);
        task.setParameterValue("user_name", this._UserName);
        task.setParameterValue("user_password", this._UserPassword);
        for (Entry<String, Object> entry : reportParams.entrySet()) {
            task.setParameterValue(entry.getKey(), entry.getValue());
        }
        task.setLocale(locale);

        // Set parent classloader for engine
        task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY,
                GenericReportRenderer.class.getClassLoader());

        final IRenderOption options = new RenderOption();
        options.setOutputFormat("pdf");

        options.setOutputStream(os);

        final PDFRenderOption pdfOptions = new PDFRenderOption(options);
        pdfOptions.setOption(IPDFRenderOption.PAGE_OVERFLOW,
                IPDFRenderOption.FIT_TO_PAGE_SIZE);
        pdfOptions.setOption(IPDFRenderOption.PAGE_OVERFLOW,
                IPDFRenderOption.OUTPUT_TO_MULTIPLE_PAGES);


        task.setRenderOption(options);

        // run and render report
        task.run();
        task.close();
        return os;
    }
}

このリンクが示すように、 javascript を使用してページの向きを変更するオプションのようですが、どこに適用すればよいかわかりません。私は birt ランタイム 4.2.0 を使用しています。

何か案が?

4

3 に答える 3

-1

これをコードに追加する必要があります。

options.setMasterPageContent(true);
options.setOutputMasterPageMargins(true);
于 2013-06-22T12:31:33.793 に答える
-1

Xtreme Biker のソリューションはうまくいきませんでした。

私の問題は、rptdesign ファイルに向きの設定がなかったことです。

ブラウジングの 2 日間後、次の作業が見つかりました。

IReportRunnable runnableReport = engine.openReportDesign("myreport.rptdesign");

ReportDesignHandle designHandle = (ReportDesignHandle) runnableReport.getDesignHandle();
designHandle.getMasterPages().get(0).setStringProperty("orientation", "landscape");

(これは、質問にリンクされているJavaScriptコードと同じです)

私も自分のコンテンツに合わせる必要がありました:

PDFRenderOption pdfOptions = new PDFRenderOption(options);
pdfOptions.setOption(IPDFRenderOption.PAGE_OVERFLOW, IPDFRenderOption.FIT_TO_PAGE_SIZE);

別の解決策として(後で見つけました-Xtreme Bikerに感謝します)、GUIに方向を強制するオプションがあります向きを強制するデザイナー GUI オプション

ただし、ページ オーバーフローをプログラムで処理する必要がありました。

于 2015-06-13T14:39:05.960 に答える