0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaでWord文書を画像に変換する実践ガイド

0
Posted at

ビジネス文書や報告書をシステムで扱う際、「Wordファイルをそのまま保存するだけでは不都合がある」という場面に遭遇することは少なくありません。例えば、ブラウザ上で文書をプレビューしたい、文書の改ざんを防ぎたい、あるいはサムネイルを自動生成したい——そんな時に役立つのが、Word文書を画像形式へ変換する技術です。

本記事では、Spire.Doc for Javaを使用してWord文書をJPG、PNG、SVGなどの画像形式に変換する方法を解説します。コード例を交えながら、実務でそのまま活用できる内容を目指します。

1. Spire.Doc for Javaとは

Spire.Doc for Javaは、Microsoft WordをインストールせずにWord文書の操作を可能にするJavaライブラリです。文書の作成・読み込み・編集に加え、PDFや画像などの形式への変換機能を提供しています。

本記事で扱う変換処理の核心は、Documentクラスが持つsaveToImages()メソッドやsaveToSVG()メソッドにあります。

2. 環境のセットアップ

2.1 Mavenプロジェクトの場合

プロジェクトのpom.xmlに以下のリポジトリと依存関係を追加します。

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc</artifactId>
        <version>13.12.2</version>
    </dependency>
</dependencies>

バージョン番号は公開時点のものを参考に、最新の安定版を確認することをお勧めします。

2.2 ライセンスについて

Spire.Doc for Javaには製品版(有料)と無料版(Free Spire.Doc for Java)が存在します。それぞれ以下のような制約があります。

  • 製品版:機能制限なし
  • 無料版(Free Spire.Doc for Java):処理可能な段落数は最大500段落、テーブル数は最大25テーブル。画像形式への変換時は先頭から10ページまで出力可能

また、評価ライセンスを取得していない状態で製品版を使用すると、出力結果に赤色の透かしが入り、変換可能なページ数も10ページまでに制限されます。本記事のコード例は製品版を前提としています。

3. 実装:Wordから画像への変換

3.1 Word文書をJPG形式で出力する

最も基本的なパターンとして、Word文書の全ページをJPG画像として保存する方法を示します。

import com.spire.doc.Document;
import com.spire.doc.documents.ImageType;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class WordToJpgConverter {
    public static void main(String[] args) throws IOException {
        // 1. Documentオブジェクトを生成
        Document doc = new Document();

        // 2. Word文書を読み込む
        doc.loadFromFile("input/sample.docx");

        // 3. 全ページをBufferedImage配列として取得
        BufferedImage[] images = doc.saveToImages(ImageType.Bitmap);

        // 4. 各画像をJPGファイルとして保存
        for (int i = 0; i < images.length; i++) {
            BufferedImage image = images[i];
            
            // 色空間の調整(JPEG出力に適した形式へ変換)
            BufferedImage newImage = new BufferedImage(
                image.getWidth(), 
                image.getHeight(), 
                BufferedImage.TYPE_INT_RGB
            );
            newImage.getGraphics().drawImage(image, 0, 0, null);
            
            // ファイル出力
            File outputFile = new File(String.format("output/page_%d.jpg", i));
            ImageIO.write(newImage, "JPEG", outputFile);
        }
        
        doc.close();
    }
}

コードのポイントは以下の通りです。

  • saveToImages(ImageType.Bitmap)で取得される画像は、背景透過情報を持つ場合がある
  • JPG保存時は色空間をTYPE_INT_RGBに変換することで、出力結果を安定させる

3.2 PNG形式で解像度を指定して出力する

高品質な出力が必要な場合や、透明背景を維持したい場合はPNG形式が適しています。また、解像度(DPI)を指定することで、より鮮明な画像を得ることが可能です。

import com.spire.doc.Document;
import com.spire.doc.documents.ImageType;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class WordToPngWithDpi {
    public static void main(String[] args) throws IOException {
        Document doc = new Document();
        doc.loadFromFile("input/sample.docx");

        // 150 DPI で画像変換(引数: 開始ページ, ページ数, 画像タイプ, 水平DPI, 垂直DPI)
        BufferedImage[] images = doc.saveToImages(
            0, 
            doc.getPageCount(), 
            ImageType.Bitmap, 
            150,  // X 方向の解像度
            150   // Y 方向の解像度
        );

        for (int i = 0; i < images.length; i++) {
            File outputFile = new File(String.format("output/page_%d.png", i));
            ImageIO.write(images[i], "PNG", outputFile);
        }
        
        doc.close();
    }
}

解像度の目安としては以下の通りです。

  • 72 DPI: Webプレビュー用途、ファイルサイズを抑えたい場合
  • 150 DPI: 一般的な資料表示、バランスが良い
  • 300 DPI: 印刷用途、高精細が必要な場合

3.3 SVG形式でベクター画像として出力する

ロゴや図表を含む文書の場合、拡大縮小に強いSVG(Scalable Vector Graphics)形式が適しています。

import com.spire.doc.Document;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class WordToSvgConverter {
    public static void main(String[] args) throws IOException {
        Document doc = new Document();
        doc.loadFromFile("input/sample.docx");

        // SVGデータをバイト配列のリストとして取得
        List<byte[]> svgDataList = doc.saveToSVG();

        for (int i = 0; i < svgDataList.size(); i++) {
            byte[] svgData = svgDataList.get(i);
            String outputPath = String.format("output/page_%d.svg", i);
            
            try (FileOutputStream fos = new FileOutputStream(outputPath)) {
                fos.write(svgData);
            }
        }
        
        doc.close();
    }
}

SVG形式はテキストエディタで内容を編集できるという特性も持つため、図形データの後処理が必要なケースでも有用です。

4. 実践的なユースケース

4.1 特定ページのみを抽出して画像化

文書の一部分だけを画像として出力したい場合、saveToImages()の引数で開始ページとページ数を指定できます。

// 3ページ目から5ページ目まで(全3ページ)を出力
// 注意:ページ番号は0始まり
BufferedImage[] images = doc.saveToImages(2, 3, ImageType.Bitmap);

4.2 サムネイル生成への応用

変換結果をそのまま保存するのではなく、さらに縮小処理を加えることでサムネイルを生成できます。

BufferedImage original = images[0];
// 縮小率を指定してサムネイル作成
java.awt.Image thumbnail = original.getScaledInstance(
    original.getWidth() / 4, 
    original.getHeight() / 4, 
    java.awt.Image.SCALE_SMOOTH
);

5. 注意点と制約事項

5.1 パフォーマンスに関する考慮

文書のページ数が多い場合、saveToImages()はメモリを多く消費します。以下の対策を検討してください。

  • 不要になったBufferedImageオブジェクトは早めに参照を解放する(null代入など)
  • JVMのヒープサイズを十分に確保する(-Xmxオプション)
  • 大量の文書を処理する場合は、1文書ごとにDocumentオブジェクトを再生成する

5.2 フォント依存の問題

環境にインストールされていないフォントが文書内で使用されている場合、出力画像でフォントが正しくレンダリングされない可能性があります。この場合、システムに該当フォントをインストールするか、別のフォントに代替されることを許容する必要があります。

5.3 無料版と評価版の違い

無料版(Free Spire.Doc for Java)を使用する場合、以下の制限を認識しておく必要があります。

  • 無料版:透かしは入らないが、段落数500・テーブル数25の制限がある。画像変換時は先頭から10ページまで出力可能
  • 評価版(評価ライセンス未適用時):出力画像に赤色の透かしが入り、変換可能なページ数は10ページまでに制限される

製品の機能を評価する段階では、公式サイトから取得できる30日間の評価ライセンスを利用することで、これらの制限を一時的に解除できます。

おわりに

本記事では、Spire.Doc for Javaを使用したWord文書の画像変換について、具体的なコード例を交えながら解説しました。このライブラリを活用することで、Microsoft Wordに依存しない文書処理フローの構築が可能になります。JPG、PNG、SVGという主要な画像形式に対応しており、用途に応じた柔軟な出力設定を行うことができます。無料版と製品版では機能制限が異なるため、ご自身のユースケースに合わせて適切なエディションを選択してください。特に、段落数やページ数の制限は実運用において重要な判断基準となります。本記事が、皆様のJava開発における文書変換処理の実装の一助となれば幸いです。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?