どこにもないものならば 作りましょう♪

4ヶ月前にJavaで書いたはてな出版くんをリリースしましたが、Windows環境でのJavaの利用は難しいため、Perl言語で新しいバージョンをかきました。実は8月から書きましたけど、忙しすぎてなかなかリリースできません。今日はようやくちょっと時間がありましたので、ソースを整理してリリースします。

今回のバージョンは中島靖さんのPDFJ(http://hp1.jonex.ne.jp/~nakajima.yasushi/)を採用しているため、日本語組版ルールい対応しているので、より本格な日本語製版ができるとおもいます。

はてな出版くん

はてな出版くんってなに?

これははてなダイアリーはてなグループのテキストをPDFに変換するソフトです。

What's New - 最新バージョン: 0.80 (2004/11/22)

  • 横書きと縦書きを同じアプリケーションに併合しました。
  • Windows用アプリケーションをウィザード式に書き直しました。
  • カバーページなどを生成するかどうかは選べるようにしました。
  • カテゴリー索引は正確のページ番号が生成できるようにしました。

Windows用アプリケーションダウンロード

私個人的には縦書きのほうがお勧めです(笑)。

他のOSを使っている方は手数ですが、ソースコードを使って実行してください。(PerlインタプリタとPDFJモジュールが必要になります。)一応Perl言語はインラプリタがあればどんなフォームでも実行できるはずですが。

サンプル

サンプルです(Last update: H16.11.07):

ソースコード

このスクリプトGPLで公開することにします。Perl言語に詳しい方なら、自分で変更して配布することができます。ただし、ソースコードを公開することも義務になりますので、ご注意ください。
なお、義務ではありませんが、コメントでもいいので、こちらに連絡いただけば幸いです。

プログラム機能

  • はてなの書式ほぼ対応(下記)
  • HTMLタグ一部対応(いまのところ行単位で対応しています。)
  • 中国語・ハングルの対応(下記)
  • 簡易カバーの生成
  • コピーライトページの生成

すでに対応できたはてな書式

  • 「*」による見出し
  • 「*t*」による時刻付き見出し
  • 「*xxx*」による名づける見出し(普通の見出しとして表示)
  • 「**」「***」による小見出し
  • 「-」によるリスト
  • 「+」による番号付きリスト
  • ネストしたリスト
  • 「>> <<」による引用ブロック
  • 「blockquote」タグによる引用ブロック
  • 「>| |<」による整形済みブロック
  • ネストしたブロック(←まだ実際に実験しない)
  • 「(( ))」による脚注
  • 「: :」による定義リスト
  • 下書き機能
  • 「:image」記法/fotolife記法の対応

自動リンク対応の現状

下記の記法はまだ対応していません:
  • 「isbn:」「asin:」などのアマゾンリンク
  • [amazon:〜] [rakuten:〜] [tabimado:〜] などの企業提携リンク

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

はてなダイアリーの書式のスペック変更は最近激しくなったため、まだ規格を把握できない書式が増えています。

  • 「>|| ||<」によるそのまま表示される整形ブロック
  • http記法
  • JAN/EANページ
  • 書影や書籍タイトルのための省略記法
  • 書籍やCD・DVDの詳細情報を表示する
  • 人力検索の質問情報を表示する…question記法
  • 自動リンクを止める(キーワードはないので、実装する必要性が高くないと考えている。)
  • 数式の表示

HTMLへの対応について

  • フォントサイズは対応していますが、やむなくの理由でサイズレーベルは微妙。
  • 行単位なので、二行以上に渡るタグは誤変換になります。(つまり、<b>〜</b>までは1行の中に記入しなければなりません。)
  • テーブルの対応はやめました。(泣)
  • <img>タグは対応していますが、画像は1行を占めることになります。 JPEGファイルのみ対応されています。
  • 削除線はなかなか対応できないため、とりあえず文字列を削除することにします。(縦書きだけ)

中国語・ハングルの対応について

Windowsのfontsフォルダにこれらのフォントがある場合のみ対応できる:

  • simsun.ttc - SimSun / 中国語フォント
  • batang.ttc - Batang / 韓国語フォント

フォントファイルが見つからない場合は、Acrobat の日本語組み込むフォントで生成することになります。表示できない場合もあるので、外字をよく使っている日記なら、これらのフォントを用意することがお勧めです。

Windows XPならデフォルトでこれらのフォントはインストールされているはずです。他のバージョンは自分でWindows UpdateでXX語サポートをダウンロードしなければならない可能性があります。

現在、はてなグループ日記の外字は対応しておりません。今まで外字対応の実装は、実体参照の文字を中国語や韓国語で表示することです。しかし、ユニコード対応のはてなグループでは意識に使わない限り、外字は実体参照に変換されません。もちろん、文字を一つずつSJISの範囲内かどうかをチェックすることが可能ですが、そうしたらメモリにもう一つのコードテーブルをロードしなければなりません。すでに今のバージョンでも結構重さを感じるのでこの問題について、他の解決方法があるかしばらく考えたいと思います。(H16.11.04)

OS互換性について

見出しの*t*記法の時刻はタイムゾーンによって違う結果に算出されるので、日本以外の地域に住んでいるWindowsユーザは正しい時間を得るために一時システムタイムゾーンを日本に設定する必要があります。

縦書き版のみの機能

元号の表示

日記の日付の年号は元号で表示されます。なぜか元号は振り仮名もついています(笑)。

過去日記の日付も元号に変換されますが、現在の実装は旧暦も無視しているため、X月X日は変換されずに新暦のままで表示されます。なお、元号の切り替えも一月一日とします。大正・昭和・平成は正しい切り替え日付を使うので、一月一日がありません。

一番古い元号「大化」は645年のため、644年までは西暦で表示されます。
未来日記については、2100年からは西暦で表示されます。とりあえず平成を 111年までとします(汗)。

数字の漢字化

文章内の数字は漢字で表示されることになります。

例)
1245642円 → 百二十四万五千六百四十二円

使用方法

1. はてなダイアリーの「編集」→「詳細設定」の下に、「ダウンロード」をクリックしてください。「エクスポート」ではないので、ご注意ください。

2. ダイアログが表示されるので、「保存」を選んで、好きなところに保存してください。絶対に「開く」を選ばないでください。Excelで開くと、ファイルがでかすぎてフリーズしてしまう恐れがあります。

3. こちらでダウンロードしたはてな出版くんのアプリケーションをダブルクリックして実行してください。まずは「はてなダイアリー」か「はてなグループ」か選んでください。「次へ」をクリックする。

4. 「参照」をクリックして、先にダウンロードしたcsvファイルを選んでください。「PDFファイル」は自動生成されますが、他のパスに保存したい場合は手動で変更することもできます。「次へ」をクリックする。

5. 「はてなユーザID」は自動生成されますが、間違いがある場合は手動で変更することもできます。「次へ」をクリックする。「ダイアリータイトル」のところは、「自動取得」をクリックするとインターネットを通じて探知してくれるので便利です。もちろん自分で入力や変更することも可能です。(はてなグループの場合は自動取得できませんので、手動でお願いします。)

6. はてなグループの場合は、グループのIDと名前も記入してください。

7. 生成する「開始日付」「終了日付」を設定してください。

8. テーマを選んでください。

9. オプションです。自由に設定してください。

10. 「次へ」をクリックすると、「バグレポート協力のお願い」画面が表示されます。「変換開始」をクリックしてください。

11. 作成するには時間がかかりますのでしばらくお待ちください。生成する範囲は長い場合や、日記の中に画像を多用する場合は、ネットアクセスは増えますので、更に待つ時間が長くなります。最初に1分間ほどフリーズしてしまうことがあります。正常ですから、強制中止しないでください。

12. この画面が表示されば完成です。

変換時間の目安

実は変換にかかる時間はそんなに長くありません。
最初に、CSVファイルを解読するのは重い処理ですが、CSVファイルのメガ数のそれだけ分間以内で済むことが可能です。つまり1MBのCSVファイルなら、CSVファイルは1分間以内で解読できると思います。

そして、PDFレイアウト処理ですが、実はネットアクセスは一番時間がかかります。画像を自分のサーバにアップロードした場合、その鯖への接続スピードは処理時間に大きく影響します。接続困難なサーバであれば、案外な時間がかかります。

CSVファイルの中には、「この日に画像をアップロードしたかどうか」を表示するデータがないので、毎日の日記もネットにアクセスして調べるしかありません。つまり日単位に、基本のネットアクセスが必要となっています。そのため、早く変換したい場合は、全ての日記をひとつのPDFではなく、年単位、もしくは季節単位・月単位で変換したほうがいいではないかと思います。

バグレポート、ご意見など

バグレポート、ご意見などは、この日記のコメントに書いてください。
最近は死ぬほど忙しいので、バグレポートを提供していただいても短時間内にバージョンアップできないことがあります。

ドネーションをお願いします

このページでお願いします。(自由)