JavaでWord、Excel、PowerPoint、PDFからバーコードを読み取る方法

バーコードは、バーとスペース（またはドット）で構成され、数字や文字を機械で読み取ることができる表現方法である。今日、バーコードは食料品店、医院、法律事務所、郵便局、小売店など、数え切れないほど広く使われている。Code39、Code128、PDF417、DataMatrix、QRなどのバーコードを様々な種類の文書（Word、Excel、PowerPoint、PDFなど）から読み取ることができることは、実に有益なことであると言えます。
今回は、[Spire.Office for Java](https://jp.e-iceblue.com/introduce/spire-office-for-java.html)を使って、Javaで**MS Office文書やPDFからバーコードを読み取る方法**について紹介します。このライブラリでは、よく見かける40種類以上の1次元・2次元バーコードがサポートされています。
- **[JavaでWordからバーコードを読み取る](#javaでwordからバーコードを読み取る)**
- **[JavaでExcelからバーコードを読み取る](#javaでexcelからバーコードを読み取る)**
- **[JavaでPowerPointからバーコードを読み取る](#javaでpowerpointからバーコードを読み取る)**
- **[JavaでPDFからバーコードを読み取る](#javaでpdfからバーコードを読み取る)**
## 【依存関係の追加】
この方法は、Spire.Office for Javaが必要ですので、先にjarファイルをインポートしてください。
### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。
```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.office</artifactId>
        <version>7.12.4</version>
    </dependency>
</dependencies>
```
### 2. 公式サイトよりJarファイルをダウンロード
まず、[Spire.Doc for Java](https://jp.e-iceblue.com/download/spire-office-for-java.html)の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Doc.jarファイルを依存関係としてプロジェクトにインポートしてください。
## JavaでWordからバーコードを読み取る
Spire.Office for Javaを使用して、Wordファイルの特定のページからバーコードを読み取る手順を説明します。
- **Document**クラスのオブジェクトを作成します。
- **Document.loadFromFile()** メソッドを使用して、バーコードを含むサンプル Word ファイルを読み込みます。
- **Document.saveToImages(int pageIndex, ImageType type)** メソッドを使用して、1ページ目を画像に変換します。
- **BarcodeScanner.scan()** メソッドを使用して画像からバーコードを読み取り、結果を**String**配列で返します。
- 結果をTXTファイルに書き出す。

**Java**
```Java
import com.spire.barcode.BarcodeScanner;
import com.spire.doc.Document;
import com.spire.doc.documents.ImageType;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class readBarcodeFromWord {

    public static void main(String[] args) throws IOException {

        //Documentクラスのオブジェクトを作成する
        Document doc = new Document();

        //Wordドキュメントを読み込む
        doc.loadFromFile("バーコード.docx");

        //1ページ目を画像に変換する
        BufferedImage image = doc.saveToImages(0, ImageType.Bitmap);

        //画像からバーコードを読み取る
        String[] data = BarcodeScanner.scan(image);

        //結果をプリントアウトする
        for (int i = 0; i < data.length; i++)
        {
            Files.write(Paths.get("スキャン結果.txt"), data[i].getBytes());
        }
    }
}
```
![2023-01-05_165859.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090371/433b0476-1836-a2df-f8cd-b662f0f3cf61.png)

## JavaでExcelからバーコードを読み取る
以下は、Spire.Office for Javaを使用して、ワークシートからバーコードを読み取る手順です。
- **Workbook**クラスのオブジェクトを作成します。
- **Workbook.loadFromFile()** メソッドを使用して、バーコードを含むExcelファイルを読み込みます。
- **Workbook.getWorksheets().get()** メソッドを使用して、1つ目のワークシートを取得します。
- **XlsWorksheet.saveToImage(int firstRow, int firstColumn, int lastRow, int lastColumn)** メソッドを使用して、ワークシートの選択範囲を画像に変換します。
- **BarcodeScanner.scan()** メソッドを使用してイメージからバーコードをスキャンし、結果を**String**配列で返します。
- 結果をTXTファイルに書き出す。

**Java**
```Java
import com.spire.barcode.BarcodeScanner;
import com.spire.xls.CellRange;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class readBarcodeFromExcel {

    public static void main(String[] args) throws IOException {

        //Workbook クラスのオブジェクトを作成する
        Workbook wb = new Workbook();

        //Excelファイルを読み込む
        wb.loadFromFile("バーコード.xlsx");

        //1つ目のワークシートを取得する
        Worksheet sheet = wb.getWorksheets().get(0);

        //1つ目のワークシートから指定されたすべてのセル範囲を取得する
        CellRange cellRange = sheet.getAllocatedRange();

        //セル範囲を画像に変換する
        BufferedImage image =  sheet.saveToImage(1,1,cellRange.getLastRow(),cellRange.getLastColumn());

        //画像からバーコードを読み取る
        String[] data = BarcodeScanner.scan(image);

        //結果をTXTファイルに書き出す
        for (int i = 0; i < data.length; i++)
        {
            Files.write(Paths.get("スキャン結果.txt"), data[i].getBytes());
        }
    }
}
```
![2023-01-05_171726.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090371/1c7902ea-2191-83af-d861-258557fd4d4c.png)

## JavaでPowerPointからバーコードを読み取る
PowerPointのスライドからバーコードを読み取る手順は、以下の通りです。
- **Presentation**クラスのオブジェクトを作成します。
- **Presentation.loadFromFile()** メソッドを使用して PowerPoint ファイルを読み込みます。
- **Presentation.getSlides().get()** メソッドを使用して、1つ目のスライドを取得します。
- **ISlide.savAsImage()** メソッドを使用してスライドを画像に変換します。
- **BarcodeScanner.scan()** メソッドを使用して画像からバーコードをスキャンし、結果を **String** 配列で返します。
- 結果をTXTファイルに書き出す。

**Java**
```Java
import com.spire.barcode.BarcodeScanner;
import com.spire.presentation.ISlide;
import com.spire.presentation.Presentation;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;

public class readBarcodeFromPowerPoint {

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

        //Presentationクラスのオブジェクトを作成する
        Presentation presentation = new Presentation();

        //PowerPointファイルを読み込む
        presentation.loadFromFile("バーコード.pptx");

        //1つ目のスライドを取得する
        ISlide slide = presentation.getSlides().get(0);

        //1つ目のスライドを画像として保存する
        BufferedImage image = slide.saveAsImage();

        //画像をストリームに変換する
        InputStream imageStream = bufferedImageToInputStream(image);

        //画像ストリームからバーコードを読み取る
        String[] data = BarcodeScanner.scan(imageStream);

        //結果をTXTファイルに書き出す
        for (int i = 0; i < data.length; i++) {
            Files.write(Paths.get("スキャン結果.txt"), data[i].getBytes());
        }
    }
    public static InputStream bufferedImageToInputStream(BufferedImage image) throws IOException {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(image, "png", os);
        InputStream input = new ByteArrayInputStream(os.toByteArray());
        return input;
    }
}
```
![2023-01-05_172704.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090371/eb8443fe-7023-2d62-780a-9574635de59e.png)

## JavaでPDFからバーコードを読み取る
Spire.Office for Javaを使用して、PDFページからバーコードを読み取る手順を説明します。
- **PdfDocument**クラスのオブジェクトを作成します。
- **PdfDocument.loadFromFile()** メソッドを使用してPDFファイルを読み込みます。
- **PdfDocument.saveAsImage(int pageIndex, PdfImageType type)** メソッドを使用して、1ページ目を画像に変換します。
- **BarcodeScanner.scan()** メソッドを使用して画像からバーコードをスキャンし、結果を **String** 配列で返します。
- 結果をTXTファイルに書き出す。

**Java**
```Java
import com.spire.barcode.BarcodeScanner;
import com.spire.license.LicenseProvider;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.graphics.PdfImageType;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class readBarcodeFromPdf {

    public static void main(String[] args) throws IOException {

        //PdfDocument クラスのオブジェクトを作成する
        PdfDocument doc = new PdfDocument();

        //PDFファイルを読み込む
        doc.loadFromFile("バーコード.pdf");

        //1ページ目を画像に変換する
        BufferedImage image = doc.saveAsImage(0, PdfImageType.Bitmap);

        //画像からバーコードを読み取る
        String[] data = BarcodeScanner.scan(image);

        //結果をTXTファイルに書き出す
        for (int i = 0; i < data.length; i++)
        {
            Files.write(Paths.get("スキャン結果.txt"), data[i].getBytes());
        }
    }
}
```
![2023-01-05_173514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090371/2de2d2a1-9bab-be21-f1dc-2da70c7e472d.png)

> **この記事では、Officeファイルからバーコードを読み取る方法を紹介します。Spire.Office for Javaには、この他にもOffice文書を操作するための様々な機能があります。これらの機能に興味がある方は、[Spire.Office Forum](https://www.e-iceblue.com/forum/)で詳細をご覧ください。**