Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

PHPでOpenDocumentフォーマットを扱う

PEAR::OpenDocumentがあります。先日バージョン0.1.2がリリースされました。


OpenDocument is a package to read, create or modify office documents in open document format.
OpenDocument format is a replacement for proprietary office formats such as .doc or .xls. This package is a very useful tool for php developers and another point to switch from proprietary office formats to OpenDocument one, that means switching to open source software and standards.
OpenDocument was developed as a project of Google Summer of Code 2006 Program.
Package provides object oriented style for working with open documents, a little similar to DOM as for XML.

Google Summer of Code 2006」の一環で作られたようですね。現時点では、まだodtファイル(Wordのdocファイルに相当)の操作のみ可能となっています。ちなみに、odtファイルは実際にはzipアーカイブです。。。ということで、PHPの場合、Zip拡張モジュールが必要になることに注意が必要です。
で、ちょっと使ってみました。

$ pear install -a opendocument
$ cp -rp /path/to/pear/OpenDocument/examples /path/to/work/
$ chmod 777 /path/to/work

上記のexamplesディレクトリに

  • odtファイルの生成(create.php
  • odtファイルを読み込んで、HTMLに変換(html.php
  • odtファイルを読み込んで、修正・保存(read.php

がありますので、実際に実行して、中で何をしているか確認してみると良いです。
また、実際にOpenOffice2.1日本語版(Linux)を使って作成したodtファイルを使った場合も、html.phpを使って日本語を含め正しく表示できました。また、PHPスクリプトで日本語を扱う場合、utf-8にする必要があります。以下は、編集したcreate.phputf-8で保存した場合の例ですが、その他のエンコーディングの場合、iconvやmb_convert_encodingを使うことになると思います。

<?php
require_once 'OpenDocument.php'; // open document class

//create a new OpenDocument Text file
$odt = new OpenDocument;
//add heading
$h = $odt->createHeading('Heading', 1);
       :
//create link in heading
$a2 = $h->createHyperlink('日本語です。どうかな?', 'http://ya.ru');
       :
//save as test.odt
$odt->save('test.odt');

echo 'saved as test.odt';
?>

そういえば、PHP Excel 2007 classes - Do You PHP はてなも同様にZip拡張を使ってファイルを作ってましたね。こちらは開発がどんどん行われているようで、バージョン1.3.5がリリースされています。