htmlファイルからPDFの作成 [CentOS]

htmlファイルからPDFを作成する方法はいろいろあるが、無料で実現できて、cssを駆使したページでもかなりきれいに表示させる方法としては、mozilla2ps + XULRunner + ps2pdfがベストだと思います。

この方法だとXが必要になりますが、ここでは仮想フレームバッファを使用することで回避しています。
必要な作業は

  • XULRunnerのインストール
  • mozilla2psのインストール
  • Xvfb(仮想フレームバッファ)の自動起動設定
  • (ps2pdfでpdfに変換)

です。

XULRunnerのインストール

XULRunner 1.8.0.4 Release Notes – MDCからダウンロードします。

wget http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.8.0.4/linux-i686/en-US/xulrunner-1.8.0.4.en-US.linux-i686.tar.gz
tar xvzf xulrunner-1.8.0.4.en-US.linux-i686.tar.gz
su
mkdir -p /opt/xulrunner/1.8.0.4/
mv xulrunner /opt/xulrunner/1.8.0.4/
cd /opt/xulrunner/1.8.0.4/xulrunner/
./xulrunner --register-global

mozilla2psのインストール

Michele Baldessari – Homepageよりダウンロードします。

wget http://michele.pupazzo.org/mozilla2ps/download/mozilla2ps-0.6.xulapp
/opt/xulrunner/1.8.0.4/xulrunner/xulrunner --install-app mozilla2ps-0.4.xulapp /tmp

これで/tmpディレクトリにインストールされる。/tmpはインストールしたいディレクトリを指定します。
指定しなかった場合は、/usr/lib/foo bar inc./にインストールされます。

Xvfbの自動起動設定

XULRunnerを実行するにはXが起動している必要があります。ただ、今回サーバでXは起動したくないので、Xvfb(仮想フレームバッファ)を利用します。

/usr/X11R6/bin/Xvfb :1 -screen 0 1024x768x8 &

のようにすることで起動は可能なのですが、xvfb-runというのを使用すれば、コマンドの実行中だけ自動的に起動させておくことができます。ただし、これのCentOS用のが見つからなかったのですが、xvfb-run.shというのをたまたま見つけたのでこれを使用します。

wget http://svn.exactcode.de/t2/trunk/package/xorg/xorg-server/xvfb-run.sh

これで

xvfb-run.sh /opt/xulrunner/1.8.0.4/xulrunner/xulrunner /tmp/mozilla2ps/application.ini http://www.yahoo.co.jp /tmp/foo.ps

とすることで、/tmp/foo.psというポストスクリプトファイルが出来上がります。
もし、ローカルにあるファイルを変換する場合は

xvfb-run.sh /opt/xulrunner/1.8.0.4/xulrunner/xulrunner /tmp/mozilla2ps/application.ini file:///tmp/temp.html /tmp/foo.ps

のようにします。
これを元にPDFを作成します。

ps2pdfでpdfに変換

ps2pdfはデフォルトで入っていることが多いです。

ps2pdf /tmp/foo.ps /tmp/foo.pdf

これでpdfが作成できます。
あるいは、ImageMagickのconvertを使用しても作成できます。

convert /tmp/foo.ps /tmp/foo.pdf

以上の流れをシェルスクリプト等にしておけば、htmlから自動でpdfが作成できるようになります。

参考サイト

Xvfb – 仮想フレームバッファ – MOYO Laboratory

CentOSにyumでtracのインストール

バグトラッキングにtracを使用することが多いが今回別サーバにインストールする必要があったので、メモ。

インストール

できるだけ簡単に入れたい、ということでyumでインストール。

そのままではインストールできないのでリポジトリの追加。
/etc/yum.repos.d/Dag.repo
として下記の内容を保存

[dag]
name=Dag RPM Repository for Redhat EL4
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

下記のコマンドをrootで実行。

yum install trac

Subversionのインストール

せっかくなのでSubversionのバージョン管理と連携させたい。
もしインストールされてなければ下記コマンドでインストール。

yum install subversion

SVNリポジトリの作成

リポジトリを作成したい場所で

svnadmin create projectname

リポジトリの設定は、出来上がったディレクトリのconfディレクトリにあるファイルで行う。

passwdファイルの内容は下記のとおり

[users]
username = password
username2 = password2

username は実際のユーザー名(linuxのユーザーである必要はない)
password はパスワード。
平文で書くのでセキュリティ的にあまり良くないが、sshとの連携を行うようにすればこのようにしなくてもよい。
しかしそうすると、かなりの頻度でパスワードの入力の必要がでるので今回はこのやり方でやる。

svnserver.confの内容は下記のとおり

[general]
anon-access = none
auth-access = write
password-db = passwd

プロジェクトの作成

trac-admin /path/to/create/project initenv

/path/to/create/projectはプロジェクトを作成したい任意の場所

Project Name [My Project]>  任意のプロジェクト名を入れる
Database connection string [sqlite:db/trac.db]> そのままエンター
Repository type [svn]> そのままエンター
Path to repository [/path/to/repos]>  svnリポジトリの場所
Templates directory [/usr/share/trac/templates]> そのままエンター

以上で作成される。

作成されたディレクトリをapacheの所有にする。

chown -R apache:apache /path/to/create/projcet

設定は/path/to/create/project/conf/trac.iniで行う。
ここではとりあえず文字コードだけ変更しておく。

default_charset = utf-8

apacheの設定

/etc/httpd/conf.d/trac.conf
として下記の内容で作成。

<virtualhost>
     DocumentRoot /path/to/create/projcet
     ServerName some.domain.com

     <location />
          SetHandler mod_python
          PythonHandler trac.web.modpython_frontend
          PythonOption TracEnv /path/to/create/projcet
          PythonOption TracUriRoot /
     </location>
</virtualhost>

なお、ディレクトリごとに分ける場合(例. some.domain.com/project/でアクセスしたい)は
下記のようにする。

<virtualhost>
     DocumentRoot /path/to/create
     ServerName some.domain.com

     <location /project>
          SetHandler mod_python
          PythonHandler trac.web.modpython_frontend
          PythonOption TracEnv /path/to/create/projcet
          PythonOption TracUriRoot /project
     </location>
     <location /projec/logint>
        AuthType Basic
        AuthName "trac"
        AuthUserFile /somewhere/.htpasswd
        Require valid-user
     </location>

</virtualhost>

apacheの再起動。

なお、/somewhere/.htpasswdにパスワードファイルを作っておく。このファイルは分かりやすいように/path/to/create/projectと同じディレクトリにあってもいいかもしれない。

htpasswd -c /somewhere/.htpasswd username

以上で設定完了。

参考

CentOSでyumからTracをインストール

PostgreSQLでWARNING: skipping “pg_*” — only table or database owner can vacuum it

PostgreSQLでvacuumをする際に下記のようなワーニングがでていた。

WARNING:  skipping "pg_authid" --- only table or database owner can vacuum it
WARNING:  skipping "pg_tablespace" --- only table or database owner can vacuum it
WARNING:  skipping "pg_pltemplate" --- only table or database owner can vacuum it
WARNING:  skipping "pg_shdepend" --- only table or database owner can vacuum it
WARNING:  skipping "pg_shdescription" --- only table or database owner can vacuum it
WARNING:  skipping "pg_database" --- only table or database owner can vacuum it
WARNING:  skipping "pg_auth_members" --- only table or database owner can vacuum it

調べてみたらバージョン8.1からグローバルテーブルの情報を各DBから参照できるようになったようで、それが原因のようだ。
リリース8.1

PostgreSQLでは、グローバルテーブル(ユーザ、データベース、テーブル空間)の情報を複数のデータベースから参照することができます。

つまり、このバキュームを行っているユーザーはこのDBの所有者なのだが、このDBの中にはグローバルテーブルも含まれてしまっていて、このグローバルテーブルの所有者はスーパーユーザーなので、バキュームはできませんよ、ということ。つまり、このワーニングがでていても問題なしということで。

SugarCRMに新しいモジュールを追加した際に日本語環境でタブに文字が表示されない問題

SugarCRMにSUGAREXCHANGEでダウンロードしたモジュールを、モジュールローダーからインストールすると、ロケール設定が日本語でログインしたときには、タブに文字が表示されなくなっていた。無理やり空のスペースをクリックすると後は正常に動作していた。

解決法

下記の作業を行うことで解決した。

  • custom/application/Ext/Language/en_us.lang.ext.php を custom/application/Ext/Language/ja.lang.ext.phpとしてコピー
  • custom/Extension/application/Ext/Language/en_us.forums.php を custom/Extension/application/Ext/Language/ja.forums.phpとしてコピー

タブの日本語化

さらに日本語化する際は、「管理」より「開発者向けツール」の中の「タブの名前を変更」をクリック。ここで日本語にできる。ちなみに、先ほどの作業を行う前まではここにも(Japaneseを選択した際には)表示されてこなかった。
変更してもすぐに反映しなかったが、一度ログアウトしてログインしなおすと無事日本語化された。

SugarCRMの日本語言語パック(Japanese Language Pack) 5.0用を4.5.1で使用する方法

ずっと前からSugarCRMを使用していたのだが、今回、新たに入れなおす必要がでた。

SugarCRM 5.0 RCはやめてSugarCRM 4.5.1をインストール

SugarCRM 5.0 RCがでていたので、これをインストールしたのだが、Asertiva Thunderbird Extension が使用できなかった。Asertiva Thunderbird Extensionはどうしても使いたかった。間もなく5.0も正規リリースされるだろうし、そうなればAsertiva Thunderbird Extensionも対応してくれるだろう。
さらには、4.5.1から5.0へのアップグレードも楽そうだったので、今回は4.5.1をインストールしなおした。

Japanese Language Packがない!

ここで問題になったのが、このバージョンのJapanese Language Pack(日本語化パック)がないこと。SugarForge: Japanese Language Pack: ファイルリストに5.0用のはあるのだが、それ以外のはない。
みんなで使用したいと思っていたので、できたら日本語化したい。

5.0用を使って日本語化

そこで、SugarCRM 5.0用のJapanese Language Packを使用して日本語化しようと思った。そのままアップロードしてみると、予想通りだめ。というわけで、他言語の4.5用のLanguage Packを参考に作成しなおした。

  1. ダウンロードしたLANGPACK JAPANESE OSS500beta2 alpha1.zipを解凍
  2. manifest.phpだけ変更して再圧縮

変更した後のmanifest.phpは下記の通り。

<?php

$manifest = array(

 'name' => 'Japanese',

 'description' => 'Sugar Community Edition 4.5.1 Japanese Language Pack',

 'type' => 'langpack',

 'is_uninstallable' => true,

 'version' => '4.5.1',

 'acceptable_sugar_flavors' => array(),

 'published_date' => '2007-10-22',

 'author' => 'CareBrains Inc.',

 'acceptable_sugar_versions' => array(),

 'lang_file_suffix' => 'ja',

 'icon' => '',

);

?>

後は、.zipに圧縮する際にフォルダを圧縮するのではなくて、フォルダの中身だけを圧縮するように注意する。

圧縮してできたファイルをアップロードしたら、きれいに日本語になった。まだ、あまり試してはないのだけど、おそらく問題ないだろう。

この日本語化パック、正規版になったときもケアブレインズが提供してくれるかどうか微妙なところのようだ。過去のファイルも消されているようだし、一応、今回ダウンロードした5.0用のファイルもとっておいた方がいいかもしれない。

vista で IE6を動作させるには

無料で実現するにはVirtual PC + Windows XP VPCイメージ

いろいろ調べた結果、無料で実現するには、Virtual PC 2007+ Microsoftで配布している無料のWindows XP のVPCイメージを使うのが、よさそう。XPはあるのだが、これをVirtual PCに入れるとライセンスがもう一つ必要になってしまう。この無料のVPCイメージは英語版だが、Windows XPのCDROMがあれば日本語を使用できるようにするのは簡単だ。

このWindows XPの無料のVPCイメージは使用期限が設定されており、現在配布されているものは、2008年の4月1日まで。ただ、これまでも使用期限が切れると、また新たに配布が始まるので、再度ダウンロードすれば継続的に利用できる。ただし、その度に再設定が必要なのが面倒だが・・・。

再設定というのは、配布されているXPが英語版なので、それを日本語が使用できる環境にすること。あとは、IE6へのデバッグ環境のインストール。

Virtual PC 2007とWindows XP VPCイメージのダウンロード

Virtual PC 2007はダウンロードの詳細 : Virtual PC 2007からダウンロードできる。

Windows XP VPCのダウンロードはDownload details: IE App Compat VHDからできる。 どうやら、使用期限がきれて新たな配布が始まってもおなじURLで大丈夫そう。

Virutual PCのインストールとXPの起動

Windows Vista Home PremiuamにVirtual PC 2007をインストールすると、対応していない等のメッセージがでるが、無視してインストールすると通常通り使用できる。サポートはしていないが、動くことは動くらしい。

VPCイメージはEXEファイルを起動すると、どこに解凍するかをきかれるので、適当なディレクトリを指定する。

次にVirtual PC 2007を起動。「新規」をクリック。「新しいバーチャルマシンウィザード」が開始される。
「バーチャルマシンの作成」を選択し「次へ」
「名前と場所」では適当なディレクトリと名前を選択し「次へ」(先ほど解凍したディレクトリにしておくとわかりやすいかもしれない。名前はIEonVista等分かりやすいものにする)
「オペレーティングシステム」では「Windows XP」のまま「次へ」
「メモリ」は256MBにした。
「バーチャルハードディスクオプション」では「既存のバーチャルハードディスク」のまま「次へ」
「バーチャルハードディスクの場所」では先ほど解凍したファイルを指定。使用用途に応じて「復元ディスクを有効にする」にチェックをいれ「次へ」
以上で完了。

なぜか、Virtual PCが終了するので、再度Virtual PCを起動する。すると先ほど作成したものが表示されているので、選択して「設定」をクリックする。ここでメモリ等の再設定も可能。ここではネットワークの設定だけ変更しておく。というのは、私の環境では、有線のネットワークと、無線LANと2種類あり、通常の環境では無線LANを使用しているのだが、Virtual PCのデフォルトで有線の方を選択されてしまっているため、このままではネットワークに接続できない。これを無線LANのアダプタを選択しOK。
「起動」をクリックすると、XPがVirtual PC上で起動する。

日本語環境の整備

[start]⇒[Control Panel]⇒[Date,Time,Language and Regional Option]⇒[Regional and Language Options]
[Languages]タブを選択。
[Install files for East Asian languages]にチェックをいれる。警告が表示されるのでOK。さらにOK。
ここでWindows XPのCDROMを入れるように要求される。
私の環境の場合、どうもCDROMがうまく認識されなかったので、CDROMにあるI386ディレクトリをネットワーク上にコピーし、そこを参照するようにした。
その際、SP2ではなかったので、途中でService Pack 2 のCDROMを入れるように警告がでたが、Cancelをクリックすると[Do you want to continue Setup without copying this file?]と聞かれるので[Yes]として続けた。この警告は20回くらいでるが、すべて同様に対処する。
再起動するかきかれるので、再起動。
再起動後、もう一度
[start]⇒[Control Panel]⇒[Date,Time,Language and Regional Option]⇒[Regional and Language Options]
[Languages]タブを選択。
[Details]をクリック。
[Add]をクリック。
[Input Language]で[Japanese]を選択し、OK。
OK、OK、とクリックしすべてのダイアログを消す。

以上で日本語入力準備も整った。インターネットエクスプローラを開いてgoogle等で日本語で入力してみよう。
そのままでは英語入力モードになっているので、左側のAltとShiftを同時におす。そうすると日本語IMEに切り替わる。
さらに日本語を入力する場合は、Altと半角/全角キーを押す。(下記を行って日本語キーボードにしたら半角/全角キーのみで動作する)

また、このままでは101英語キーボードと認識されているので、たとえば、Shift + 2 で@が入力されるようになっている。このままでも、慣れてしまえば問題はないが、日本語キーボードに変更してみる。

[start]⇒[Control Panel]⇒[Printers and Other Hardware]⇒[Keybord]
[Hardware]タブで[Properties]をクリック。
[Driver]タブで[Update Driver]をクリック。
Hardware Update Wizard では、[No, not this time]を選択し[Next]
[Install from a list or specific location(Advanced)]を選択し[Next]
[Don’t search. I will choose the driver to install.]を選択し[Next]
[Show compatible hardware]のチェックをはずす。
[Manufacturer]は[(Standard keybords)]にして、[Model]から
[Japanese PS/2 Keyboard(106/109 Key)]を選択し[Next]
2度警告がでるが、そのまま[Yes]
再起動。

以上で完了。

[操作]⇒[閉じる]でVirtual PCを終了するが、その際に変更を保存することを忘れずに。これを忘れて変更を削除にしてしまうと、今行った設定をまた一から行うことになる。