開発者コラム

開発者コラム

SmartBee開発エンジニアが、
業界の最新動向や技術について
コラムでご紹介します。

開発メモ

JavaでExcelファイル⇒PDFファイル(パスワード付)に変換する話

  • #Java
  • #システム担当者向け

本記事は、Javaを用いてExcelファイルからPDFファイルの変換を行い、PDFファイルにパスワードをかける方法について説明します。


■事前準備

1. jarファイルのインポート
必要な.jarファイルは以下になります。
JODConverter CoreJODConverter Local
 LibreOfficeを使用して、Excelファイル⇒PDFファイルに変換するのに必要になります。
GroupDocs.Merger
 PDFファイルをパスワード付きにするのに必要になります。

必要なjarファイルを用意したら、パスを通すことを忘れないで下さい。
Eclipseを利用したパスの通し方は以下になります。
①プロジェクトを右クリック>プロパティを選択
②Javaのビルド・パス>ライブラリーを選択
③JARの追加等から用意したjarファイルを選択し、下画像のようになっていればOK


2. LibreOfficeの用意
LibreOfficeをダウンロード/インストールしてください。日本語対応にする必要はないです。

本プログラムでは、LibreOfficeの機能とJODConverterを利用して、ExcelファイルからPDFファイルに変換していきます。



■プログラムの例

1. Excelファイル⇒PDFファイルに変換

import java.io.File;
import org.jodconverter.core.DocumentConverter;
import org.jodconverter.core.office.OfficeException;
import org.jodconverter.core.office.OfficeManager;
import org.jodconverter.local.LocalConverter;
import org.jodconverter.local.office.LocalOfficeManager;

public class Sample001 {
   public static void main(String[] args) throws OfficeException {

      String inputFileName = "C:\\Users\\Documents\\test.xlsx";
      String outputFileName = "C:\\Users\\Documents\\test.pdf";

      OfficeManager officeManager = LocalOfficeManager.make();
      DocumentConverter converter = LocalConverter.make(officeManager);

      officeManager.start();

      File excelFile = new File(inputFileName);
      File pdfFile = new File(outputFileName);
      converter.convert(excelFile).to(pdfFile).execute();

      officeManager.stop();
      System.out.println("finish");
   }
}

プログラムのポイントは、mainメソッドの後ろに「throws OfficeException」があることです。この処理が抜けているとエラーが発生します。
他に発生するエラーとしては、用意したjarファイル以外にも必要となるjarファイルを要求される可能性があります。
その際は、必要なファイルを用意してJODConverter Coreなどのjarファイルと同じようにインポートしてください。
officeManager.start(); LibreOfficeの機能を起動している。接続には、10秒ほどかかります。

converter.convert(excelFile).to(pdfFile).execute(); Excel⇒PDFにファイルを変換している

officeManager.stop(); LibreOfficeの機能を停止している。
この処理を忘れると、LibreOfficeとの通信が繋がり続け、次回変換する際に変換できない可能性がある。



2. PDFファイルにパスワードを付ける

import com.groupdocs.merger.Merger;
import com.groupdocs.merger.domain.options.AddPasswordOptions;

public class Sample001 {
   public static void main(String[] args) throws Exception {

      String inputFileName = "C:\\Users\\Documents\\test.pdf";
      String outputFileName = "C:\\Users\\Documents\\test_pass.pdf";

      Merger merger = new Merger(inputFileName);
      AddPasswordOptions addPass = new AddPasswordOptions("pass");
      merger.addPassword(addPass);
      merger.save(outputFileName);
      System.out.println("finish");

   }
}

本プログラムのポイントもmainメソッドの後ろに「throws Exception」を付けることを忘れないで下さい。
AddPasswordOptions addPass = new AddPasswordOptions("pass"); "pass"の部分でパスワードを設定する。

merger.addPassword(addPass);
merger.save(outputFileName);
PDFファイルにパスワードを設定し、ファイルを保存している。PDFファイルにパスワードをかける処理は、10秒弱かかる。



■感想

今回は、JavaでExcelファイル⇒PDFファイル(パスワード付)の変換をしましたが、1ファイルの処理時間は約20秒となった。
100ファイルすると約35分かかる計算になる。
対策案としては、「officeManager.start();~officeManager.stop();」の間で一度に100ファイルをPDFに変換することで処理時間を大幅に抑えられる。
100ファイルも一度にやることはないと思いますが。
また、筆者が困った場所としては、JODConverterを使用するのに多くのjarファイルを用意する必要があったことです。
一応、探せば全てWEB上に必要なjarファイルは存在していたので、皆さんも頑張って探して頂ければと思います(笑)


開発者コラム一覧に戻る開発者コラム一覧に戻る

お問い合わせはこちら月曜日~金曜日9:00~17:30
(ただし祝日、弊社休業日を除く)

SmartBee 紹介資料(PDF)のダウンロード