[Java/DocumentConverter]ExcelなどPdf化する場合に縮小率など設定する方法

2014/06/25 16:35

こちらをベースに作りました
DocumentConverterとOpenOfficeインストール済み、8100で受付けられるようにしてある前提です。
//その他パラメータは http://www.antenna.co.jp/sbc/doc/oosbc-1-0-manual-ja.pdf 参考
//こちらも参考 http://www.artofsolving.com/node/18

//今回はpoiのWorkbookから作成しています
    public String changeToPdfFromXls(Workbook workbook,String fileName)  {
        if(FrsUtil.isNull(fileName)){
            return null;
        }
       //PDF用の customPdfFormat インスタンス作成
        DocumentFormat customPdfFormat =new DefaultDocumentFormatRegistry().getFormatByFileExtension("pdf");
        Map<String,Object> pdfOptions = new HashMap<String,Object>();
        //zoom指定
        pdfOptions.put("Magnification", new Integer(4));
        //倍率指定
        pdfOptions.put("Zoom", new Integer(92));

        //ExcelならSPREADSHEET、wordならDRAWING、pptならPRESENTATION、テキストならTEXTかと思われる
        customPdfFormat.setExportOption(DocumentFamily.SPREADSHEET, "FilterData", pdfOptions);

        // バッファ内にExcelの内容を書き出す
        ByteArrayOutputStream buff = new ByteArrayOutputStream();
        // PDF変換時に渡すInputStreamを用意
        ByteArrayInputStream in=null;
        String path = getResource(fileName);
        try {
            workbook.write(buff);
            in = new ByteArrayInputStream(buff.toByteArray());

            // PDFの出力先を開く
            FileOutputStream out=null;
            try {
                out = new FileOutputStream(path);
                // OpenOfficeに接続(localhostの8100番ポート)
                SocketOpenOfficeConnection con = new SocketOpenOfficeConnection(8100);
                try {
                    con.connect();

                    // ExcelからPDFへ変換
                    DocumentConverter converter = new OpenOfficeDocumentConverter(con);
                    converter.convert(
                            in, new DefaultDocumentFormatRegistry().getFormatByFileExtension("xlsx"),//拡張子から指定
                            out, customPdfFormat
                    );
                } catch (Exception e) {
                    e.printStackTrace();//エラー処理は随時に
                } finally {
                    // OpenOfficeから切断
                    con.disconnect();
                }
            } catch (FileNotFoundException fnfe) {
                throw new RuntimeException(fnfe);//開けない場合はここでアウト
            } finally {
                if(null != out){
                    try {
                        out.flush();
                        out.close();
                    } catch (IOException ioe) {
                        // ignore
                        ioe.printStackTrace();
                    }
                }

            }


        } catch (IOException ioe) {
            throw new RuntimeException(ioe);
        } finally {
            if(null != in){
                try {
                    in.close();
                } catch (IOException ioe) {
                    // ignore
                    ioe.printStackTrace();
                }
            }
            try {
                buff.close(); // OpenOfficeから切断
            } catch (IOException e) {
                // ignore
                e.printStackTrace();
            }
        }

        return path;
    }


コメントを投稿

次の HTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">

コメントはまだありません。