LoginSignup
0
2

More than 3 years have passed since last update.

SpringBoot + JODConverter で OnlineConverter を使ってみた

Last updated at Posted at 2019-12-20

概要

jodConverter を OnlineConverter で利用した際のメモ。
SpringBoot を利用していたため、JODConverter Spring Boot Starter を利用しての実装となっている。

環境

  • SpringBoot:2.1.3.RELEASE
  • JODConverter:4.1.0
  • JODConverter Spring Boot Starter

OnlineConverter呼び出し側の実装

  • 基本的にはLocalConverterを利用する時と変わらないが、application.yml に OnlineConverterサーバーのURLを指定する
    • リクエスト時のURLは【ymlに設定したURL】/lool/convert-to/【変換先の拡張子】という形で送信される
application.yml
jodconverter:
  online:
    enabled: true
    url: 【OnlineConverterサーバーのURL】

OnlineConverterサーバーの実装

  • build.gradle の dependencies に以下の設定を追記する

    • compile 'org.jodconverter:jodconverter-spring-boot-starter:4.1.0'
  • application.yml に LibreOffice のインストール先を設定する

application.yml
jodconverter:
  enabled: true
  officeHome: 【LibreOffice インストール先】
  • リクエストを受け取るための Controller を実装する
    • MultipartFile で変換元のファイルの受け取りを行う
    • outputExtension で変換後の拡張子を指定する
@RestController
public class SampleController {
  @Autowired
  private DocumentConverter documentConverter;

  @RequestMapping(path = "/api/jodconverter/lool/convert-to/{outputExtension}", method = RequestMethod.POST)
  public Resource convert(
      @RequestParam("data") MultipartFile file,
      @PathVariable("outputExtension") String outputExtension
  ) throws IOException, OfficeException {
    // 変換前ファイル情報取得
    String inputExtension = FilenameUtils.getExtension(file.getOriginalFilename());
    DocumentFormatRegistry registry = this.documentConverter.getFormatRegistry();
    DocumentFormat inputFormat = registry.getFormatByExtension(inputExtension);
    if (inputFormat == null) {
      inputFormat = registry.getFormatByExtension("xlsx");
    }

    // 変換後拡張子設定
    DocumentFormat outputFormat = registry.getFormatByExtension(outputExtension);

    // 変換処理
    try (
        InputStream is = file.getInputStream();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
    ) {
      this.documentConverter.convert(is).as(inputFormat).to(os).as(outputFormat).execute();
      return new ByteArrayResource(os.toByteArray());
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
}

まとめ

OnlineConverter は今まで使う機会がなかったため、使い方の勉強になった。

ただ、LocalConverter のほうが OnlineConverter 利用時のサーバーの実装がない分簡単に導入できるので、
よほどの理由がない限り使わないかな。。。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2