6
protected static byte[] exportReportToPdf(JasperPrint jasperPrint) 
                                                      throws JRException {
  JRPdfExporter exporter = new JRPdfExporter();       
  ByteArrayOutputStream baos = new ByteArrayOutputStream();

  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
  exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 
              "this.print({bUI: true,bSilent: false,bShrinkToFit: true});");

  exporter.exportReport();        
  return baos.toByteArray();
}

このようなコードを使用して、JasperアプリケーションからPDFドキュメントをエクスポートしています。

この線

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, 
             "this.print({bUI: true,bSilent: false,bShrinkToFit: true});");

JavaScriptを追加して、PDFドキュメントを直接プリンタに送信します。

予想される動作は、印刷ダイアログにPDFドキュメントのプレビューが表示されることです。

これはほとんどの場合正常に機能しますが、Internet Explorer 8とFirefoxで5〜6回に1回の問題が発生している場合を除きます。

何が起こるかというと、PDFドキュメントを含む印刷プレビューダイアログが表示されないか、プレビューウィンドウに空白のドキュメントが表示されます。

-私はいくつかの異なるJavaScriptを試しました(this.print()経由するための異なるパラメータ-私は次のexporter.setParameter ような異なる応答ヘッダーを設定しようとしました

response.setContentType("application/pdf");
response.setHeader("Content-disposition","inline;  filename=\"" 
                   + reportName 
                   + "\"");
response.setContentLength(baos.size());

これらは役に立たなかったようです

これはIEとFFの問題のようです。誰かがこの問題に対処したことがありますか?すべてのブラウザで100%動作させる必要があります。おそらく、PDFドキュメントのエクスポートを直接プリンタに送信するという目標を達成するための別のアプローチですか?またはブラウザ間で動作するサードパーティのライブラリ?

4

1 に答える 1

4

UIを更新する機会がないのかもしれません。次のコードは印刷を遅らせ、おそらく必要な機会を与えます。私はあなたの環境がないのでテストしませんでした。

exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT,
    "app.setTimeOut('this.print({bUI: true,bSilent: false,bShrinkToFit: true});',200);")
于 2012-11-20T18:26:52.750 に答える