Java OCR ライブラリを使用して画像を Excel に変換するツールを構築する

## ステップ1: 画像をExcelに変換するための認証 

Original Post: [Convert Image to Excel with OCR Library](https://www.compdf.com/blog/build-image-to-excel-converters-with-java-ocr-library?utm_source=qiita_imagetoexcel_20241105&utm_medium=imagetoexcel&utm_campaign=imagetoexcel)

コンソールから取得できる次のコードの publicKey フィールドと secretKey フィールドを置き換える必要があります。その後、認証後に accessToken と検証関連の情報を取得できます。AccessToken は 12 時間後に期限切れになります。画像から Excel への変換 API を呼び出すときは、このトークンをリクエスト ヘッダーに含める必要があります: Authorization: Bearer {accessToken}。

 
```
import java.io.*;
import okhttp3.*;
public class main {
  public static void main(String []args) throws IOException{
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("text/plain");
    RequestBody body = RequestBody.create(mediaType, "{\n    \"publicKey\": \"{{public_key}}\",\n    \"secretKey\": \"{{secret_key}}\"\n}");
    Request request = new Request.Builder()
      .url("https://api-server.compdf.com/server/v1/oauth/token")
      .method("POST", body)
      .build();
    Response response = client.newCall(request).execute();
  }
 ```

### 必要なパラメータ:

画像を Excel に変換するときに正確な変換を行うには、次のパラメータをインポートしてください。インポートしない場合は、デフォルトのオプションが適用されます。

 

- contentOptions : コンテンツを抽出するオプション (1: テキストのみ、2: 表のみ、3: すべてのコンテンツ) デフォルトは 2 です。
- worksheetOptions : ワークシートを作成するためのオプション (1: テーブルごとにシートを作成する、2: ページごとにシートを作成する、3: ファイルごとに 1 つのシートを作成する) デフォルトは 1 です。
- isAllowOcr : OCR を開くことを許可するかどうか (1: はい、0: いいえ)、デフォルトは 0。
- isContainOcrBg : OCR を有効にした後、背景画像を保持するかどうか (1: はい、0: いいえ) デフォルトは 0。
- isOnlyAiTable : AI がテーブルを認識できるようにするかどうか (1: はい、0: いいえ) デフォルトは 0。
 

画像を Excel に変換するパラメータを適用する方法:

 
```
{
  "contentOptions": "2",
  "worksheetOptions": "1",
  "isAllowOcr": "0",
  "isContainOcrBg": "0",
  "isOnlyAiTable": "0"
}
 ```

 

## ステップ2: タスクを作成する

前の手順で取得したaccessToken を置き換える必要があります。置き換えた後、応答データにtaskIdが取得されます。

 
```
import java.io.*;
import okhttp3.*;
public class main {
  public static void main(String []args) throws IOException{
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("text/plain");
    RequestBody body = RequestBody.create(mediaType, "");
    Request request = new Request.Builder()
      .url("https://api-server.compdf.com/server/v1/task/img/xlsx?language={{language}}")
      .method("GET", body)
      .addHeader("Authorization", "Bearer {{accessToken}}")
      .build();
    Response response = client.newCall(request).execute();
  }
}
 ```

 

## ステップ3: ファイルをアップロードする
 

変換するファイルをアップロードします。画像変換では、JPG、JPEG、PNG、BMP 形式がサポートされています。必要に応じて、 taskId、accessToken、およびtask パラメータを更新してください。

 
```
import java.io.*;
import okhttp3.*;
public class main {
  public static void main(String []args) throws IOException{
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("text/plain");
    RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
      .addFormDataPart("file","{{file}}",
                       RequestBody.create(MediaType.parse("application/octet-stream"),
                                          new File("<file>")))
      .addFormDataPart("taskId","{{taskId}}")
      .addFormDataPart("language","{{language}}")
      .addFormDataPart("password","")
      .addFormDataPart("parameter","{  \"contentOptions\": \"2\",  \"worksheetOptions\": \"1\"}")
      .build();
    Request request = new Request.Builder()
      .url("https://api-server.compdf.com/server/v1/file/upload")
      .method("POST", body)
      .addHeader("Authorization", "Bearer {{accessToken}}")
      .build();
    Response response = client.newCall(request).execute();
  }
}
```


## ステップ4:ファイルを処理する
 

必要に応じてtaskId、accessToken、およびtask パラメータを更新してください。

 
```
import java.io.*;
import okhttp3.*;
public class main {
 public static void main(String []args) throws IOException{
   OkHttpClient client = new OkHttpClient().newBuilder()
     .build();
   MediaType mediaType = MediaType.parse("text/plain");
   RequestBody body = RequestBody.create(mediaType, "");
   Request request = new Request.Builder()
     .url("https://api-server.compdf.com/server/v1/execute/start?taskId={{taskId}}&language={{language}}")
     .method("GET", body)
     .addHeader("Authorization", "Bearer {{accessToken}}")
     .build();
   Response response = client.newCall(request).execute();
 }
}
 ```

 

## ステップ5: タスク情報を取得する
 

前の手順で取得したtaskIdとaccess_tokenを使用して、すべてのタスク情報にアクセスします。変換結果である .xlsx ファイルも取得できます。

 
```
import java.io.*;
import okhttp3.*;
public class main {
  public static void main(String []args) throws IOException{
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("text/plain");
    RequestBody body = RequestBody.create(mediaType, "");
    Request request = new Request.Builder()
      .url("https://api-server.compdf.com/server/v1/task/taskInfo?taskId={{taskId}}")
      .method("GET", body)
      .addHeader("Authorization", "Bearer {{accessToken}}")
      .build();
    Response response = client.newCall(request).execute();
  }
}
```