はじめに
ASTERIA Warpを使って「ExcelからPDFへ変換」を考えてみました。
まずExcelファイルをそのままPDFファイルへ変換するようなコンポーネントは現在用意されていません。
”変換(エクスポート)”ではないですがExcelPOIInputとPDFコンポーネントを使って読み込んだExcelファイルのデータをもとにPDFデータを作ることは思いつきます。
「ExcelのPDFエクスポート機能を使ったVBAプログラム」を自作してExeコンポーネントで実行 もありますが今回はGoogleDriveを使ってExcelからPDFヘ変換(エクスポート)する方法を考えてみました。
環境
- OS: Windows10
- Java:1.8.0.191
- ASTERIA Warp : 1812
フロー
GoogleDriveアダプターのGoogleDriveSQLCallを使います。
完成したフローはこんな感じです。
大まかには
GoogleDriveへアップロード → (アップロードしたIdの取得) → GoogleDriveからダウンロード → アップロードしたファイルの削除 といった感じです。
ダウンロード - GoogleDriveSQLCall
まずは肝となるダウンロード部分のGoogleDriveSQLCallから。
ストアドプロシージャのDownloadFile
を使いました。
記述方法はCData Software Inc.社のオンラインドキュメントを参考にしています。
「CData JDBC Driver for Google Drive 2018J」
[データモデル]-[ストアドプロシージャ]-[DownloadFile]
http://cdn.cdata.com/help/GGD/jdbc/pg_sp-downloadfile.htm
プロシージャのInput
Name | Type | 説明 |
---|---|---|
Id | String | ダウンロードするリソースのId |
FileFormat | String | ファイルの保存時に適用されるファイル形式 |
LocalFile | String | 保存先のローカルファイルパス |
Encoding | String | LocalFile インプットが空白の場合に使用されるエンコード |
Overwrite | String | 保存先のファイルを上書きするかどうか |
にあわせて以下のような設定にしました。
実行する処理:ストアド実行(結果なし)
SQL文:{ call DownloadFile(?Id?,?FileFormat?,?LocalFile?,?Encoding?,?Overwrite?)}
SQLパラメーター:
「FileFormat」にはapplication/pdf
を指定してます。
「Id」はひとまずブラウザからURLに埋め込まれているファイルのIdを確認してセットしてもOKだと思います。
エクスポートの制限
ExcelをGoogleDriveにアップロードしてGoogleDriveSQLCallでpdfに変換しようとすると
Export only supports Google Docs.
というエラーになりました。FileFormatを指定してエクスポートするときはGoogle Docsしかサポートされていないようです。ExcelではなくGoogle スプレッドシートではないとダメなようです。
MIMETypeを確認する
ということでダウンロードするファイルタイプを確認してみます。
ブラウザーからはファイルの詳細の種類
で確認できそうです。
GoogleDriveGetではFilesテーブルのMIMEType
というフィールドの値で確認できるみたいです。
アップロード - GoogleDrivePut
上記エクスポートの制限があるので「MIMEType」にGoogleDriveGetで確認できた値application/vnd.google-apps.spreadsheet
をセットしてます。
「MIMEType」をセットしておくとアップロード時に適宜、ファイル形式を変換してくれるようです。
wordやpptファイルも変換対象にしてみたのでTable関数使って拡張子でセットする値を変えてます。
ParentIds
はアップロード先のフォルダーIdをセットしてみてます。
ファイル削除 - GoogleDrivePut
アップロードして・・pdfでエクスポートして・・最後にアップロードしたファイルの削除を入れてます。GoogleDrivePutで「実行する処理」をDelete
としてます。
Id取得 - GoogleDriveGet
アップロードしたファイルのIdを取得するために今回はアップロード後にもう一度GoogleDriveGetでデータ取得してます。ついでにMIMETypeとか確認するのにも使ってました。
<SQL文>
SELECT A.Id,
A.Name,
A.MIMEType,
A.ParentIds,
B.Name
FROM GoogleDrive.Files A LEFT OUTER JOIN GoogleDrive.Folders B ON A.ParentIds = B.Id
WHERE A.Trashed = 'false'
AND A.Folder = 'false'
AND A.Name = ?FileName?
AND B.Id = ?ParentId?
おわりに
FileFormatに何も指定しなければそのままのファイル形式でダウンロードできるようです。コネクションの作成手順などは割愛しましたが、GooleDriveSQLCallを使ったpdf変換含めGooleDriveGet、GoogleDrivePutの使い方、勘所などの参考にもなれば幸いです。
以上です。