LoginSignup
0

More than 1 year has passed since last update.

【FileMaker】Rakuten Rapid API経由で画像データをPDFに変換する

Last updated at Posted at 2021-12-21

さて、今回は画像データをPDFに変換するAPIのご紹介です。
PDF以外にも、テキストデータ、htmlデータに変換できます。
画像でスキャンしたオブジェクトを文書解析する、PDFで保存するなどの時に活用できると思います。
例えば、紙でもらった領収書などをスマホのカメラで撮ったあと、画像解析のAPIにかませてPDFで保存、テキストに解析して自動で会計処理、など利用場面が思い浮かびます。

このOCR Supreme APIRakuten Rapid APIの画像認識カテゴリーのAPIにあります。
Basicプランなら無料でテストできますので、ぜひ使ってみてください。

実装・実行環境

今回はcurlとJSONを使いますので、FileMaker 16以上で実装・実行してみてください。
また、Rakuten Rapid APIのアカウントをすでに取得していることを前提に話を進めていきます。
まだアカウントを取得していない方は、これを機会に取得してみてください。

OCR Supreme API登録

料金プランで、Basicプランをプランを選択してください。
これでAPIが使えるようになります。

APIの確認

エンドポイントページでPOSTする種類から「OCR Image Endpoint 1」を選択します。
「OCR Image Endpoint 2」もありますが、どちらもエンドポイントが違うだけで、動きは同じです。
スクリーンショット 2021-12-18 22.27.37.png

コードスニペットのプルダウンからShell>cURLを選択してcURLでのサンプルコードを確認します。
スクリーンショット 2021-12-18 22.29.09.png

curlの構文を見てみましょう。

curl --request POST \
    --url https://ocr-supreme.p.rapidapi.com/ocr/image \
    --header 'content-type: application/json' \
    --header 'x-rapidapi-host: ocr-supreme.p.rapidapi.com' \
    --header 'x-rapidapi-key: <RAPID API KEY>' \
    --data '{
    "data": "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AABWAAAAKAAAAFYAAABWAAAek91yAyIAAB5fSURBVHgB7J0HsNTEH8dXRUWkSC9Kl65UUWYYBRQEQSyIdBQQlKIoIF3RAdGhIwjjqIhioSqIgDQBQZpSRkSqIjqiSJUOAvLnu/w37+7du/cuud1ckvvuDCSXl2w2n/1l97slv73q1KlTlwQDCZAACZAACZAACZAACZBATASuooCOiRNPIgESIAESIAESIAESIAFJgAKahkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgALagQ1cvHhRnDp1Shw5ckQcOnRI/jt2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v0KAPHv2bDNhwgRz9dVXm99//70q2uDGG280HTt2DAFHTdqwiAS0v3z98ccf7QszdOjQir8wp59+ujn88MO9JabWBPQff/xhevToYb744osCo7hCwKeA9sHXJeT66683Xbp0cR/r/vjhhx+aPfbYo8Ahbj67C9daay3zyCOPmMUXX9x9VZfHn3/+2XTv3t189913Nv3wTML0jjvuMO3atatLhnlIdC3VXyHxpqyfPn26GT58uHnqqacqKqSXXnppM3nyZC9On5CYhmKLBHQGOeFa9cOGDTPPP/98RV4YPDyPPfaYWX311b2kyIfAC8kDPX78eDNw4MACmyQCwKeAxhB6DS6++OJUNnHxAQccYAYMGFCIp95PfAk+3+9UXvMF71m08ZlUQF944YVmv/32yyuGurG7FuqvUDMLr/SDDz5ocHpUyiut+iG7p0ECOju2Nubvv//evjCI6b/++itTMb3//vtbIZVEHDbEUEsCmjzAQ/vnn3/aZCbl41tAM+QnOsQlqV0tWrSwno0llliiYTbW5Wfes969e5tPPvkkVX5z8ZAhQ0yvXr3qkqNLNGXBqaeeah5//HH7VVIBfeihh5qzzjrLRatjDgjktf4KHS3v1Ouvv26uvfZa88ILLxR6dJLWAY2lF0cAQ0nWXnvtxn6mvyUgIAGdAFqSS/7++28rcs477zzz008/FYS0zxfGp8fMh4A+6qijzMknn5wEl7drSAde3rFjx9o40/D2LaAReD179iykNY1td955p9lqq60KcdXzCXnOWHfGvBPgmpTt1ltvbW655RbDu1XPgeEXNCbSBA2JSUOvutfmrf6qLq14d581a5YZPXq0GTdunL0wTXlV6s7yQpcik+57Ceh0/GJfTeXOsA48Oow5cy9L0gq+oQG+hk34ENCbbbaZueeee6oqPl599VVz0EEHFTCl4exbQNOFt+uuu5pvvvnG2ueehYKxMU723HNPc+mllyYWijFulYufMrHy3HPPLdiaNN8RzpqkaQwTM/Egu5CEpzxhjl5+j3mpv/JImDkGo0aNMnfffbc1P0190DD99E5OmTLFrLTSSg3/pM8pCEhAp4CX5lIKoqfmTijAQ+tzaMc666xjK/y0E598COhqe+8YC7vbbruZb7/91mZV2gLJt4CGMT0SCDRCElFiL5z7HwXkE088YVq2bOm+quujT+/+0Ucf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",
    "lang": "eng",
    "output": "pdf"
}'

data

dataの部分は、JSONで指定します。
JSONキーのdataには、Base64EncodeRFCでエンコードした画像の文字列データを指定します。

lang

langは、日本語なら"jpn"を指定します。

もし、正確に他のlang指定も知りたい・活用したい、ということでしたら、"List supported languages"エンドポイントのcurl実行で一覧が得られます。
スクリーンショット 2021-12-18 22.32.35.png

output

outputは、画像データをどの形式で出力するか、以下の3種類が指定できます。
・pdf
・text
・hocr(html)

実装

curl構文もわかったので、実装していきましょう。

テーブル設計

今回は、入力の画像データをocrDataフィールドに、出力されたoutputデータを保存するフィールドをそれぞれ用意しました。
そのほかのフィールドは、追加しなくてOKです。
スクリーンショット 2021-12-18 22.40.30.png

レイアウト

インプットの画像と変換されたデータを保存するフィールドを配置します。
スクリーンショット 2021-12-18 22.45.53.png

入力データであるocrDataフィールドは、データの書式設定で「イメージ」を選択してください。
スクリーンショット 2021-12-18 22.45.25.png

PDF出力フィールドは、データの書式設定で「インタラクティブ」を選択します。
スクリーンショット 2021-12-18 22.45.34.png

html出力は、Webビューワツールを設置します。
スクリーンショット 2021-12-18 22.45.46.png

スクリプト

さて、実際にcurlを指定するスクリプトの作成です。

どの変換もそうなのですが、元の画像データをcurlで送信する際は文字列に変換(エンコード)する必要があります。
Base64EncodeRFCという関数を使います。
"4648"という数値は、RFC番号です。
今回は画像データなので改行コードをつけないRFC番号になります。
画像を変換する際はよく使う、というかこの関数を使うので、是非とも覚えておきたい関数です。

Base64EncodeRFC ( 4648 ; ocrAPI::ocrData )

画像→PDF変換

PDF変換するときのスクリプトステップです。
4,5,7行目は、スクリプトステップで継続して使用しなければ、特に変数にする必要もありませんが、デバッガなどを通すときに変数の値を確認するときに便利なので、変数に格納しました。
スクリーンショット 2021-12-18 23.25.10.png

2行目のdataオプションの編集を拡大してみました。
スクリーンショット 2021-12-19 17.02.48.png
dataとして指定している画像の文字列は、JSONObjectではなく、JSONStringを指定します。
間違えると、変換されて返ってきたデータが正しくありません。

3行目は、いよいよ送信です。
過去のcurl構文でも口を酸っぱくしていっていますが、"'"は、"\""に変換して使ってください。
スクリーンショット 2021-12-19 17.18.24.png

6行目で、返ってきたpdfデータをBase64Decode関数で文字列からオブジェクトデータに変換します。
この時、関数の2つ目の引数でファイル名を指定しますが、拡張子付きのファイル名であれば、インプットの画像ファイル名である必要はありません。
この2つ目の引数を忘れると、デコードが失敗しますので、必ず指定してください。
スクリーンショット 2021-12-19 17.20.26.png

一連の流れは、こんな感じです。

画像→テキストデータ

画像からテキストデータへの変換は、PDFの時とほぼ一緒ですが、違うのは送信時に指定する引数としてoutputが"text"になることです。
また、返ってきたデータは何も変換せずに使用できます。
スクリーンショット 2021-12-18 23.25.24.png

画像→HTML

こちらも、テキストデータ変換と同様です。
送信時の引数としてoutputをHTMLを意味する"hocr"を指定し、同様に返ってきたデータは何も変換しません。
とはいえ、返ってきたHTMLには、見慣れないXML構文も含まっていたので、その部分は今回手動で取り除きました。
何かしら方法があるんだとは思いますが、、、

スクリーンショット 2021-12-19 17.20.26.png

では、これらを実行してみてください!

実行結果

画像→PDF変換

スクリーンショット 2021-12-19 17.31.09.png

画像→テキストデータ

スクリーンショット 2021-12-19 17.31.21.png

画像→HTML

スクリーンショット 2021-12-19 17.31.38.png

HTML変換は、最初の行のxmlの構文がつきますので、ウェブビューアで表示する際は、xml行を削除すると表示できます。
スクリーンショット 2021-12-19 17.32.08.png

文字データに変換されると、変なところに空白が入ってしまうのが「?」な感じですが、おおよそうまくいっている感じですね。

APIでDXをしていきましょ!

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