はてなダイアリーをPDFファイルにするソフト

buttw2004-06-25



(→βばーじょんリリースしました:id:buttw:20040701#p1)


ご存知通り、はてなダイアリーには「日記を本にする」というサービスがあります。しかし、サンプルのPDFファイルを見てみると、デザインはあまり好きではないし、「その他のhtmlタグ、リンク等については、書籍内で再現されません」「機種固有文字については、書籍内で再現されません」などの条件もありますから、HTMLタグ・外字の多い私の日記には、あまり実用ではありません。
ということで、三日間かかって、全自動の変換ソフトを開発しました。
このソフトは、「設定」の中にダウンロードできるCSV形式の日記テキストファイルをPDFファイルを生成できます。

サンプル

注意:中国語を表示するには、Acrobatの中国語専用フォントが必要となるので、ダウンロード要請のメッセージが表示するとき、必ず「はい」をクリックしてください。自動的にフォントをダウンロードしないときは、最新バージョンのAcrobatをダウンロードしてください。
http://www.adobe.com/support/downloads/main.html

開発言語

Java 1.5 beta 2 (1.5 特有のGenerics・拡張for文などを多用するため、1.4では実行できません)
iTextクラスライブラリ(http://itext.sourceforge.net

公開方式

これから更新する時間があまりないと思うため、GPLライセンスで公開したいと思いますが、はてな社の「日記を本にする」有料サービスに衝突するそうですから、まだ検討しています。
はてなへ提供するかもしれない(笑)(でも、私有化ならテーマの開発は難しくなる。)
id:hatenadiary の意見はどうですか?

プログラム特性

  • デザインの可変性(テーマみたいな機能):
    オブジェクト指向を活用して、基礎のTemplateクラスを継承するだけで、違う風格のデザインが簡単に作れます。
  • はてなの書式ほぼ対応
  • HTMLタグ一部対応
  • 中国語の対応

対応したはてな書式

  • 「*」による見出し
  • 「*t*」による時刻付き見出し
  • 「*xxx*」による名づける見出し(普通の見出しとして表示)
  • 「-」によるリスト
  • 「+」による番号付きリスト
  • ネストしたリスト(現在の規格では-+が混用できない)
  • 「>> <<」による引用ブロック
  • 「blockquote」タグによる引用ブロック(title属性対応済み)
  • 「>| |<」による整形済みブロック
  • ネストしたブロック(←まだ実際に実験しない)
  • 「h3」タグで書いた小見出しはインデントしないよう対応した
  • 「(( ))」による脚注

まだ対応していないはてな書式

  • 「: :」による定義リスト
  • pタグの挿入を止める(詳しい実装した動きはまだ分からないので、作れない)
  • 自動リンク
  • Amazonのイメージ表示
  • mimetex
  • 下書き機能
  • ins,del タグ

対応したHTMLタグ

  • br: 改行
  • p: 改行
  • img: イメージ(JPEGのみ実験済み)*1
  • a: リンク(下線で表示)(アンカーは表示しない)
  • b: 太字
  • strong: 太字
  • i: イタリック
  • u: 下線
  • s: 削除線
  • small: 小さくする
  • big: 大きくする
  • font: フォント(サイズのみ対応・色などは対応していない)

スペック上、HTMLパーサは行ごとに処理するため、<...>...</...>型のタグは、同じ行に書かないと検出できない。
あと、現在のバージョンでは、ネストした同じタグは正常に検出できない。

独自の対応(ある意味このソフトの書式)

  • 「&#nnn;」(十進数)「&#xhhh;」(十六進数)による文字参照
  • 繁体字中国語対応(<span class="zhtw">タグから始まり、</span>で終わりの行は繁体字中国語フォントで表示)
  • 簡体字中国語対応(<span class="zhch">タグから始まり、</span>で終わりの行は簡体字中国語フォントで表示)
  • その他の span タグは、「(クラス名)」で表示

(これらの動きはTemplateを継承すると変えます。)

注意:Acrobat繁体字中国語などのフォントをアップデートしなければなりません。

判明した問題

  • iTextは英語ライブラリのため、全角記号の禁則処理は対応していない。そのため、よく「、」「。」「)」などの記号が行の始まりに表示することになってしまう。
  • HTMLパーサー実装後、サイズの大きい文字はちょっと崩れるそうになる
  • 例外処理は無視したため、書式の違い・イメージダウンロード不能などの原因でソフト異常中止することが可能

これからの更新目標

  • 未対応のはてな書式を対応へ
  • HTMLタグ sub, sup に対応
  • 目次の自動生成(日付で調べる)
  • 索引の自動生成(キーワード機能を活用に)
  • カテゴリをなんとか利用します(カテゴリ別目次など)
  • 全角記号の禁則処理
  • ハングルなどほかの言語への対応
  • 完璧の例外処理(苦笑)

*1:現在の規格では、イメージは必ず独立の一行を占める。