3

既存の PDF をレンダリングするのに適切な View クラスはどれですか? 抽象ビュー?

私はWebサービスを介してPDFをフェッチしているので、AbstractPdfViewをサブクラス化してPDFをレンダリングするつもりはありません。

ModelAndView を返す Spring コントローラー クラスを使い続けたいと思います。つまり、AbstractView の独自のサブクラスを作成して、PDF を ServletOutputStream に書き込むだけです。Spring MVC で利用可能なその他の組み込みサポートはありますか?

ありがとう

4

3 に答える 3

3

@Biju Kunjummen の回答に同意しますが、iText を使用して PDF を生成することもできます。

コントローラー メソッドのコード スニペットを次に示します。

@RequestMapping(value = "/common/reportgenerator/generatePDF")
    public void generatePdf(HttpServletRequest req,HttpServletResponse res)
    {
        res.setContentType("text/html;charset=UTF-8");
        ServletOutputStream outStream=null;
        try 
        {
            String calledFrom = req.getHeader("referer");
            calledFrom=req.getRequestURL().substring(0,req.getRequestURL().lastIndexOf("/"))+"/ReportGenerator.egp";
            calledFrom += "?isPdf=yes&"+req.getQueryString();
            System.out.println(calledFrom+"?isPdf=yes&"+req.getQueryString());



            InputStream input = new URL(calledFrom).openStream();
            StringWriter writer = new StringWriter();
            CopyUtils.copy(input, writer);

            //System.out.println(writer.toString());

            res.setContentType("application/pdf");
            res.setHeader("Content-Disposition", "attachment;filename=report.pdf");
            outStream = res.getOutputStream();

            ITextRenderer renderer = new ITextRenderer();


            renderer.setDocument(calledFrom);
            renderer.layout();
            renderer.createPDF(outStream);

        } 
        catch (Exception e) 
        {
            new AbcException(e,exceptionHandlerService);
        }
        finally
        {
            try
            {
                outStream.flush();
                outStream.close();
            }
            catch(Exception ex)
            {
                new AbcException(ex,exceptionHandlerService);
            }

        }


    }

これがお役に立てば幸いです。乾杯。

于 2012-06-09T07:33:15.140 に答える
1

最善の方法は、HttpServletResponse を使用して単純にストリーミングすることだと思います。

OutputStream out = response.getOutputStream();

out.write(..); //buffer and write..
于 2012-06-08T16:27:29.537 に答える
0

そのようなクラスはありません。

そのファイルを手動で書き込む必要があります。こちらの回答を参照してください: Spring MVC を使用してブラウザの新しいウィンドウで Web サーバーに保存されている PDF ファイルを表示する

そのコードを次のように変更しました。

 // get absolute path of the application
 ServletContext context = request.getSession().getServletContext();
 String appPath = context.getRealPath("/");
 // construct the complete absolute path of the file
 String fullPath = appPath + "WEB-INF/pdfs/201507.pdf";

また、pdf をダウンロードせず、inputStream を finally ブロックに配置するための回答も参照してください。

于 2015-07-26T10:46:11.890 に答える