ワード(docx)からEPUBファイルへ下準備

epubファイルを作成するのに元データがワードというケースがあったりなかったり。
電書オリジナルもそうだし、既存の本のOCRもデータがWORDファイルということになる。
このネタ、過去にも何度かここに書いていて、くりかえしになるかもしれないので、今回は途中で使うスクリプトをアップロードして差別化…ていうかやっとくだらないバグが取れたので(汚いケド)晒してもいいかな、と。
スクリプトを使って
・ワードファイル(.docx)を解凍(展開)
・ワードで指定されているルビ、縦中横、圏点、太字をxhtmlのタグに変換
・ルビのオフセットを出力
やることは以上3つ。
用意するものは。
・例によってperl
WINDOWSは https://www.activestate.com/activeperl/downloads からダウンロード、インストールが必要。
それ以外のOS、Macやunix系は特に必要なし。
・コマンドライン版のunzip
WINDWOSは https://github.com/bmatzelle/gow/downloads このへんからダウンロード、インストールが必要。
それ以外のOS、Macやunix系は特に必要なし、かな。
・以下のスクリプト
https://t2aki.doncha.net/tmp/docx2xhtml-tag.zip
ターミナルのコマンドプロンプトで
perl check_docx.pl word.docx
と叩くとdocxを展開して、ルビはxhtmlのタグに変換。縦中横や圏点は独自タグに変換。
「_docx-yyyymmdd.txt」というファイルを出力する。
同時に「check_docx.log」というルビとそのオフセット位置を記述したファイルを出力。
なんでこんなファイルを出力するのかというと。
ルビを削除したい時にオフセットをいじってルビを見えなくする、という凶悪なことをやってるケース。ワード上ではルビは見えないのにデータにはルビが殘っている、という迷惑なことが何度かあって ムカついたから オフセットが変なルビを確認するため。
次にターミナルのコマンドプロンプトで
perl _docx2xhtml-tag.pl _docx-yyyymmdd.txt
と叩いて、縦中横・圏点・太字をxhtmlのタグに変換。
「_docx-yyyymmdd-converted.txt」というファイルを出力する。
ワードファイルを真面目に解析すればワード上のレイアウト情報も取れるんだけど、そもそもepubファイルに変換する時に、ワード上のレイアウトを再現することを要求されることはほとんどない。
必要な情報はルビと文字装飾(縦中横・圏点・太字・傍線)ぐらいなものなので、これだけで実用には十分。
以上のことをwordを開いて目視確認(目grep)して、タグづけしてたんじゃとてもやってられんので、スクリプトにやらせることにした。このおかげで3〜4時間作業が20分作業となって取りこぼしも激減。
(スクリプトではwordのxmlを解析してごにょごにょやってるんで、そっち系のひとにはほんの少しは面白いネタかもしれない)
てことで、今日は家人と築地市場で海を食ってきた!
いや、なんというか、ほんとに美味かったなあ(涎)
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
Ingress Lv15になった

7月3日にlv14になって、先月9月18日にlv15となった。
メダルは揃ってたんでlv14からはただただAP稼ぎ。敵陣営のリンクが集中してるポータルを見つけたら焼き、自陣営のポータルを強化しつつ、CFを狙ってリンクを張る、というIngressの基本に立ち返ったプレイスタイル。
アクションしてればもろもろメダルの実績に繋がるので、銀が金に、金がプラチナにステップアップしていく…のが、とりあえずの面白みといったところ。うーん、ビミョー。
予定通り(?)Rechargerがオニキスとなり、lv16へ必要なメダルはあとオニキス1つとなった。これまた予定通り、そのうちTranslatorかTrekkerでオニキスが取れそうなのでメダルについてはじたばたする必要はない。
この先AP稼ぎとなる。
lv16は4000万AP必要。こりゃ先が長い(現状約2500万AP)
さすがに、ちょっと飽きてきた、かも。
オニキス
Recharger 遠隔で見方ポータルの回復
プラチナ
Sojourner 24時間単位でハックし続けた日数
Translator グリフハック成功ポイント
Trekker 歩いた距離
金
Builder デプロイ数
Connector リンクを張った回数
Engineer 自陣ポータルへのmod差し回数
Explorer ユニークポータルのハック数
Guardian 自ポータルの維持日数
Illuminator CF作成時のmu獲得数
Liberator ポータルのキャプチャ数
Mind Controller CF作成数
Pioneer 初めてキャプチャしたポータル数
銀
Hacker ハック回数
Purifier 敵のレゾネーター破壊数
SpecOps クリアミッション数
前回よりステップアップしたのは
Recharger。金からオニキスへ昇格。
Engineer、Illuminator、Liberatorの3つ。各々、銀から金へ昇格。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
縦書き電子書籍で最低限のスタイルシート

「何を今さら」なんだけどちょくちょく聞かれることがあったりするし、自分整理のためにも。
仕事がらみや公開している easy_epub で使っているスタイルシートから抜き出してメモ(文字通り備忘録)。
とりあえずこれだけでシンプルな縦書きの電子書籍となります(EPUB3チェックではValid)
body
デフォルトで縦書きを指定。
writing-mode:vertical-rl→縦書き(vertical)で、右(right)から左(left)という指定
line-height(行間)は1.75(横書きだと改行の多い文書はスカスカに見えるので1.6ぐらいがいい塩梅だと思う)
body.vertical
縦書きの指定。bodyと同じ。
body.horizontal
横書きの指定。
writing-mode:horizontal-tb→横書き(horizontal)で、上(top)から下(bottom)という指定。
.vertical と .horizontal を作っておくと、ページ単位で縦書き/横書きの指定が簡単。
「本文はデフォルトの縦だけど奥付は横書き」とか「扉ページ=縦書き中央配置のページを作るための小細工のため」に使う。
縦中横
縦書きに混じる!?や平成25年、ABCなどの半角英数字や記号などを正立させる。リーダーによって何文字まで正立するか違いがあるので、2文字ぐらいまでが安全なところかな。
縦書き関連はここまで。
以下はわたしが普段使い回ししている=使用頻度の高いスタイル設定
傍点
sesamiはゴマみたいな形、dotは丸。縦書きの場合はゴマ、横書きの場合は丸というのが好み。
h(見出し)タグ
何も指定をしないと、リーダーのデフォルト設定となり、思った以上に大きい文字になることが多いと思う。ので、ここで文字サイズなど指定しておく。
imgタグ
google play ブックスなどの場合、デバイスの表示領域以上の大きいサイズの画像を全部表示しようとして画面をハミ出してしまってびっくりすることになる。なのでここで最大サイズを100%と指定しておく。
(kindleはmax-width、max-heightに対応していないので、kindlegenで変換すると警告がでるけど無問題)
pタグ
段落タグ
文書、元テキストは段落単位にしておくのが基本。リフローは改行位置が決まらないので、改行したければBRタグを使うか、空のpタグを使う。
p.line-indent1
リーダーのデフォルトがどうなってるのかよくわからないので、行頭の一字下げはなしにしておいて、行頭字下げのコントロールはスタイルシートでする。
p.paragraph-indent1
段落を字下げしたいリクエストもあるので用意しておいた
扉ページ(縦書き中央配置)
具体的なXHTMLと指定のしかたはこちら→ 『EPUB3リフローレイアウトで扉ページ』
ページを横方向にして、縦書きにしたいタイトルを入れたdivなどのブロック要素をセンタリングして、ブロックの中を縦書きにする。
他、もろもろ本体は 『macOSでEPUB3作成』 にあるMac版、Windows版のeasy_epub.zipの中に入っています。このツールで作ったファイルをそのままkindleの登録に使ってます。
電子書籍のスタイルシートは 「緊デジのテンプレート」 なども公開されていて、中をみるといろんなパターンがあってとても参考になります。おすすめ。
わたしがEPUB3を始めたきっかけは以下の記事とCSS。ひたすら大感謝です。
・ 期待の電子書籍フォーマット『EPUB3.0』で電子書籍を作ってみよう
・ 草枕を作ろう 縦書きHTML簡単作成ガイド
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
Kindleの日本語ストアが11月オープン?

という噂が流れてるけど、PDFで受け付けてくれるのかしらん。ePub形式でファイルを作るのは、仕様通りにやればいいだけなので意外に簡単とはいえ、縦書き、禁則、ルビがまだ。仕様に入っていても、リーダーの方が対応していないと。
とりあえず、どちらの形式でも作れるようにしておいて、日本語ストアがオープンしたらとっとと上げてしまおう。
amazonは個人で使えるクレジットカードの少額決済も始めるようで、
http://techcrunch.com/2010/09/09/amazon-payments-now-allows-users-to-checkout-directly-on-merchant-websites/
paypalのbuyNow(今すぐ購入)のところをamazonがやってしまおうか、ということ、かな。paypalを使ってダウンロード販売している 下町飲酒会駄文支部 日野裕太郎 もamazonに乗り換えてもいいかも。仕様の日本語版が出てきたら慌てて検討。paypalは海外ではシェアNo1といっても日本では、本を買うというのはamazonのほうがなじみがあるしねえ。
個人が気楽に少額決済できる環境が整ってくるのはいいことです。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
リアルタイム実況twitter

streaming API を使えばリアルタイム実況ができる。
http://apiwiki.twitter.com/Streaming-API-Documentation
てことで、雨模様の週末だし、ちょっと作ってみた。
・followしているひとの発言を流す。
・filter.xmlに対してPOSTでリクエスト。
・followパラメータをつけて、followしているひとのIDを指定。follow=ID,ID,ID などとコンマで区切る。
・認証はBasic認証
以上で、callback関数を適当に作るだけ、だった。
ハマったのは、content-tyepの指定忘れ、requestの第二引数の書き方(":content_cb"=>$disp_twit だと思ってたら、requestの場合は関数へのリファンレンスをそのまま書けばいいだけだった)
followしているIDと名前とパスワードを渡せば、これだけで、だらだらコンソールに流れ出すリアルタイム実況が始まる。予想以上に簡単、LWPだけでOKだった。うううむ。perlサイコーっす。
ってもちっと出力データを整形加工しないと、見にくいんだけど。
ところが、もっとらくちんに、こいつをブラウザで表示させようと思って、悶絶。インラインフレームを使うのか、Ajaxを使うのか。どうもよくわからず。ちょっと手ごわい。ぐーぐる様詣で。
[10/03 20:42:29]
comet とか言われてもわからんちんだ。ネットワークプログラムから理解して、perlでストリーミングサーバーを立てる感じになるのか。
てことで素人のわたしには、お手上げ確定。コンソールで眺めるだけにしておく、か。とほほ。
[10/04 18:42:11]
ぐーぐる様によると、perlの世界も、オブジェクトに非同期。POEとかAnyEventとか、初耳寝耳に水、だ。この数年で取り残されてしまってるじゃねいか。とほほ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
コメントスパム

この雑記帖、コメントスパム対策しなきゃなぁ、と思いつつ放置していた。まあ、こんなアクセスも外部リンクもない辺境にスパマーたちもやってこないだろう、と思って舐めてたら、こんなところにもやってきた。やれやれ。一度チェックされるとしばらく続くのでとりあえず非表示にしていた。
「迷惑チラシっていうけど、入れてるひとたちだってそれで生活してるんです」と団地の寄り合い、血気盛んなB29たちの罵り合いの最中、飛び出していたが、迷惑は迷惑。
スパム対策ってもピンキリ。
その0.
今はcaptchaが定番(読みにくく判別しにくい英数字の画像を利用)
最初はコレをいれるか、と思ったんだけど。依存関係でいくつかライブラリのアップデートが必要、スクリプトの側も新規に設定するところがいくつかあって、結構しんどい。まあ、やろうと思えばportsで用意されている、という確認ができた。てことで今回は見送り。
その1.
apnicが公開しているIPアドレスのリスト(delegated-apnic-latest)があって、それを見れば国別にフィルタリングするのも簡単。JP以外は書き込み禁止に地引網っぽく一網打尽作戦か(ウチにスパムを放り込んでくるのは過去の例からDEとかUKとかRUとか)
その2.
一回、余分なクリックが入るけど、コメントフォームをAjaxで表示させるのもいいかも。bot、プログラムはjavascriptを「まだ今のところ」解釈できないんで、ページ遷移の起こらないAjaxで出される入力フォームは「見えない」はず。対策にはなってないけど抑止できるかも。
apnicのリストでフィルタリングするのが簡単なんだけど、どこまでフィルターをかけるのか、本当にJP以外を弾いてもいいのか、とかあるんでちょっと見送り。でも、このリストは便利重宝だなぁ。
んなもんで、とりあえず、一番手軽な(ナニも考えずに済む)Ajax入力フォーム作戦をこっそり仕込んでみた。
それでもおさまらなきゃcaptchaをガンバル、かな。 VQ1005
喉がかさついて嫌ンな感じっす。だるいんで気力もねえんだ、これが。ううむ。
[10/03 21:30:46]
っと。zaurusのOperaはAjax未対応なので、コメントが書けない。zaurusのときはこうやって追記するしかないなあ。
[10/04 10:44:40]
ちょっと成功したかも。
先日からやってきているスパムアクセス。
static.202.88.46.78.clients.your-server.de
ほかのリンクはアクセスにいってるのに「Comment」が見えてないっぽい。これでうまくいくなら、Ajaxだけにして、フィルタはかけずにおこう。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」