Wednesday, August 1, 2012

Alfrescoのコンテンツ変換(content transformation)について少々

こんにちは。aegifの大谷です。

今回は、Alfrescoのコンテンツ変換機能についてお話ししようと思います。
Alfrescoはコンテンツ変換の仕組みを持っており、以前「AlfrescoでPDFファイルのプレビューができない!」というエントリでも触れたプレビューや、コンテンツのサムネイル生成などに利用されています。 もちろん、フォルダにルールを指定してアップロードされたコンテンツを他のフォーマットに変換するというような使い方も可能です。


そもそもコンテンツ変換って何?


そもそもコンテンツ変換とは何なのかという話ですが、読んで字のごとく、Alfrescoが管理しているコンテンツを別のフォーマットに変換する機能のことです。
例えば、先ほど例に挙げたプレビューやサムネイルなどは、AlfrescoにアップロードされたコンテンツをSWF(プレビュー用ファイル。Adobe Flashを使ってプレビューを表示しています)やjpeg, png等の画像ファイル(サムネイル表示用ファイル)に変換することで実現しています。
もちろん汎用的な仕組みになっているので、ルール機能のアクションとしてコンテンツ変換を設定することもできますし、カスタマイズで独自のロジックを作成する際にコンテンツ変換機能を呼び出して利用することもできます。


どのフォーマットの変換が定義されてるの?


コンテンツ変換が何者かということが分かると、Alfrescoで利用可能なコンテンツ変換のフォーマットって何なのか?一覧はないのか?という話になると思うのですが、これはAlfrescoにアクセスして確認することができます。
ブラウザで http://<サーバIP>:<ポート番号>/alfresco/service/mimetypes (例えば http://localhost:8080/alfresco/service/mimetypes とか)にアクセスすると、以下の画面が表示されます。

これはAlfrescoが認識可能なMIMEタイプの一覧で、「details for ...」をクリックすると、以下のような画面が表示されます(以下はapplication/mswordつまりWordのdocファイルについての詳細です)。

この例だと、docファイルはPDF、bmp等の画像、html等のテキストに変換可能で、逆に、rtfファイルからdocファイルに変換することも可能であることが分かります。


独自のコンテンツ変換を追加できるの?


できます。が、今回はその詳細については割愛させていただきます(すいませんすいません)。英語にはなりますが、具体的な方法についてはAlfresco WikiのContent Transformationsの項目(英語)で説明されています。
また、以前書いた「AlfrescoとTesseract OCR」の記事でも独自のコンテンツ変換(tiffからtextへの変換)を定義する手順を説明していますので、こちらも見てみてください。


そもそもコンテンツ変換ってどんな感じで使うの?


ありがちな使い方は、コンテンツを自動的に他のフォーマットに変換するというものです。一例として、あるフォルダにアップロードもしくはコピーされたファイルをPDFに自動変換するための設定方法を説明します(コンテンツの出入りをトリガにしてアクションを実行する「ルール機能」を利用します)。例えば、ワークフロー等で承認されたコンテンツを特定のフォルダにコピーして自動的にPDFファイルを生成したりするような使い方を想定しています。

1.  まず、設定に利用するフォルダを作成します。例えば、以下のように「承認済」フォルダと「PDF」フォルダを作成し、「承認済」フォルダのアクションメニューの「ルールの管理」をクリックします。

2. 「ルールの作成」をクリックし、以下のようにルールを設定します。ポイントは、「アイテムはこのフォルダで作成または入力されます」「すべてのアイテム」「コンテンツを変換およびコピーする」「Adobe PDF Document」「PDFフォルダ」です。設定が終わったら「作成」ボタンをクリックします。

3. ルールが設定されると、以下のようにフォルダにルールアイコンが表示されます。

4. テストを行います。「承認済」フォルダに適当なファイルをアップロードし、PDFフォルダに同名のPDFコンテンツが生成されていればOKです。


こんなコンテンツ変換にも注意が必要


ここまでAlfrescoのコンテンツ変換機能について説明しましたが、一つ注意が必要な点があります。コミュニティ版では4.0.dから、エンタープライズ版では4.0.1から、コンテンツ変換に対して制限を設定できるようになりました。変換を行う最大ファイルサイズやページ数、変換時間を設定し、それを超えるものについては変換を行わないもしくはその範囲について変換を行うようにすることができます。詳細についてはAlfrescoWikiにある解説ページ(英語)を参照してください。
これだけであれば便利な設定ができるね、という話なのですが、問題は以下の設定がデフォルトでなされていることです(repository.propertiesで設定されています)。
# Content Transformers

# Base setting for all transformers (2 min timeout)
content.transformer.default.timeoutMs=120000
content.transformer.default.readLimitTimeMs=-1
content.transformer.default.maxSourceSizeKBytes=-1
content.transformer.default.readLimitKBytes=-1
content.transformer.default.pageLimit=-1
content.transformer.default.maxPages=-1

# text -> pdf using PdfBox (txt=text/*) 10M takes about 12 seconds
content.transformer.PdfBox.TextToPdf.maxSourceSizeKBytes=10240

# pdf -> swf using Pdf2swf 1M takes about 30 seconds.
# Using a value of 1.25M (a bit larger that the txt or xlsx) used to create
# the pdf on the way to swf to avoid the second part of a transform failing
content.transformer.Pdf2swf.maxSourceSizeKBytes=1152

# txt -> pdf -> swf 1M (pdf is about the same size as the txt)
# Need this limit as transformer.PdfBox txt -> pdf is allowed up to 10M
# unlike transformer.OpenOffice and transformer.JodConverter which
# also only allow 1M text
content.transformer.complex.Text.Pdf2swf.maxSourceSizeKBytes=1024

# Limits for specific mimetype transformations (txt=text/plain only) 1M
# Has implication for Share preview which generally goes via pdf to get to swf
content.transformer.OpenOffice.mimeTypeLimits.txt.pdf.maxSourceSizeKBytes=1024
content.transformer.OpenOffice.mimeTypeLimits.xlsx.pdf.maxSourceSizeKBytes=1024

content.transformer.JodConverter.mimeTypeLimits.txt.pdf.maxSourceSizeKBytes=1024
content.transformer.JodConverter.mimeTypうeLimits.xlsx.pdf.maxSourceSizeKBytes=1024
これを見るとコンテンツ変換に120秒のタイムアウトが設定されていることが分かります(ちなみに-1は制限無しという意味です)。また、1152KBを超えるPDFのSWF(プレビューに使います)への変換は行われず、1024KBを超えるプレーンテキストやExcelファイルのPDFへの変換も行われない設定となっています。
ルール機能等でコンテンツ変換を仕掛けたけどうまく変換されない場合があります!という場合は、この設定を確認し、必要に応じて設定を変更する必要があります。

ただし、制限を緩めるとその分サーバへの負荷が高まることにも注意が必要です。そもそもこの制限が導入された背景には、コンテンツ変換の種類によってはCPUにそれなりの負荷がかかるということがあります。コンテンツ変換に制限を設けることで、その負荷を減らそうという狙いがあるわけですので、環境構築時にはその点に注意して制限を調整する必要があります。

また、エンタープライズ版のみですが、このコンテンツ変換自体を別サーバに外出ししてAlfrescoサーバの負荷を軽減することも可能です。Transformation Serverと呼ばれる機能ですが、詳細はAlfrescoのヘルプ(英語)を参照いただければと思います。ちなみにこの機能を使うと、OfficeファイルをMicrosoft Officeを使ってPDF変換することができるようにもなるため、PDF変換の精度が劇的に高まります(標準ではOpenOfficeを利用しているため、お世辞にも実用に耐える精度とは言えないのが実情です…)


最後に


今回は、コンテンツ変換についての説明と、簡単な使い方、注意点について説明しました。Transformation Serverについての詳細は今後記事にしていきたいと思いますので、引き続きよろしくお願いします。

No comments: