略して「青P」、v2.10 製作後記 [製作後記]
『青空文庫形式のテキストファイルをPDFに変換するツール、略して「青P」』 v2.10を公開しました。
今回の主な修正は3つ。
- 現時点での最新版(2012.4.14版)の注記一覧への対応
- 「しおり」の出力
- PDFのプロパティへの出力
新しい注記の対応ですが、2012.4.14版で変更/追加になったものは一通り対応したはずです。
(「キャプション」は“無視する”という方向で対応)
また、
文字がUnicodeにある外字は、そのコード番号を指定するように注記が変更になったことを受け、フォントファイルに存在しない文字に付けるコメントの文面を(外字の指定があれば)外字注記の文面そのものに変更しました(以前はUnicodeのコード番号のみ)。
(以前からUnicodeに文字がある外字は置き換えて出力していたのですが)どういうわけか Windows XP 付属の MSゴシック には「二の字点」が無く、「二の字点」は文字の置き換えを行わず外字として出力していたのですが(外字として出力した方が読む側にとって分かりやすかった事と、ユーザ数的な問題で)、フォントに無い文字のコメントの文面を変えたことで「二の字点」も置き換えて出力するようにしました(細かな話ですが)。
「しおり」でページの移動はできるんですが、その移動先の指定が縦組みに向いていないので、ちょっと変かも。(参照してるのが PDF1.6の仕様なので、最新の仕様では違うかも知れませんが)画面の端で指定する場合は、上端の指定と左端の指定しか無いのです。縦組みだと右端で指定したいのに…。
PDFのプロパティに、作成者とか出力できるようにしたのですが、手動です。
そこら辺のフォーマットがキッチリ決まって無いみたいなので自動には出来ませんでした…。
と言うわけで、感想等は↓のコメント欄へどうぞ。
(最新版や過去の製作後記は、タグをリンクして辿れます)
「しおり」の出力、ありがとうございました!
2012.4.14版注記一覧への対応はしていただけるかと思っておりましたが
(こちらもとても助かります)、「しおり」は半ば諦めておりましたので
最高に嬉しいです。特に大切な本は、自炊してOCR認識させて、手作業で
青空文庫形式にしているのですが、目次を自動生成できるようになって大
助かりです。本当にありがとうございました。
by horuso (2012-06-11 15:03)
久しぶりに設定を登録したのですが、再起動したら消えてしまいました。
前のバージョンでは一度登録したものは再起動しても残っていたと思いま
す。…それに、現バージョンでは再起動すると各種設定がデフォルトに戻っ
てしまうのですが、思い出してみると前バージョンまでは再起動したとき
には、前回の設定を引き継いでいたように思います。
どこかのフォルダのパーミッションがおかしいとか、こちらの環境のせい
のような気がしますが、どのあたりを調べたらいいでしょうか。登録され
たデータはどこに記録されているのでしょうか。
Macで利用しています。
by horuso (2012-08-04 01:09)
設定は Java の Preferences という機能を使って保存しています。
具体的にどこに保存されるのかは Java が管理していることなので、Macの場合、それがどこなのか分かりませんでした。
(確証はありませんが Library/Preferences 辺りではないかと…)
ところで、登録した設定が読み込めないと、ライセンス未登録となりライセンスキー入力画面が表示されるのですが、どうなってますか?
ライセンスキー入力画面が表示されないなら、設定は読めるが保存できない(しかし1度は保存に成功している)状態になっていると予想できるのですが。
by 晶紀 (2012-08-05 09:37)
~/Library/Preferences/com.apple.java.util.prefs.plist
に収められていることがわかりました。
見てみると、/jp/is3000nx/aop2 というDictionaryはできている
んですが、中が空っぽでした。
ライセンスキー入力画面は出ませんが、別のマシンにインストール
すると、毎回ライセンスキーが求められます。plistは上記と同じ
症状です。
下記プログラムで実験したところ、/net/horuso/にAOPというキー
でaopという文字列が格納されており、私の環境で、まるで
Preferencesが使えなくなっているわけでもないようです。
すみませんが、なにか実験できるようなことがあればご教示ください。
package net.horuso;
import java.util.prefs.*;
public class PrefTest {
private Preferences prefs;
public PrefTest() {
prefs = Preferences.userNodeForPackage(this.getClass());
}
public void save(String key, String value) {
try {
prefs.put("AOP", "aop");
prefs.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new PrefTest().save("AOP", "aop");
}
}
by horuso (2012-08-08 17:34)
どうでもいいことですが、
prefs.put("AOP", "aop");
は
prefs.put(key, value);
の誤りです。
# インデントは保存されないんですね。みにくい…
by horuso (2012-08-08 17:37)
推測するに、Preferences の保存に失敗しているみたいですね。
設定のロード/セーブの失敗時にエラーメッセージを出すようしたものを
下記URLに置きましたので、これで試してもらえないでしょうか。
http://www.geocities.jp/is3000nx/AOP2d.jar
by 晶紀 (2012-08-11 09:55)
参考までに、
「青P」での設定保存部分のコードを抜粋すると
↓の様になっています。
prefs = Preferences.userRoot().node("/jp/is3000nx/aop2");
byte[] buff = (略)
pref.putByteArray("Property0", buff);
pref.remove("Property1");
なんと flush() を呼んでいなかったので、
もしかしたらコレが保存に失敗する原因なのかも知れません。
(最初のマシンで ライセンス入力画面が出ない理由が正直さっぱり分かりませんが…。/jp/is3000nx/aop2 をディレクトリごと消してみると状況は変わるのだろうか…。)
by 晶紀 (2012-08-11 09:58)
AOP2d.jar ではエラーメッセージが表示されませんでした。
というより、コード抜粋を示していただいて状況がわかってきました。
私の書いたサンプルコードでは、preferencesは前述のように
~/Library/Preferences/com.apple.java.util.prefs.plist
に収められるのですが、AOP2のコードのようにUserRootを指定すると
~/Library/Preferences/jp.is3000nx.aop2.plist
に収められます。
(com.apple.java.util.prefs.plistにも空のplistがあったのが謎ですが)
で、このファイルのタイムスタンプが5/21 20:31となっていました。
起動時にライセンスキーが求められないところをみると、
Property0が読めるのは間違いないようです。
ただ、書き込めていないようですね。write permissionはありますし、
AOP2d.jarでエラーも表示されないので、もしかしたらflush()が原因か
もしれません…。当方のJavaのバージョンが5/21以降にあがって挙動が
おかしくなったのかもしれないです。
一度flush()呼ぶ版を試させていただけたら幸いです。
by horuso (2012-08-12 04:46)
AOP2d.jar は、既にflush()を呼ぶようになっています。
jp.is3000nx.aop2.plist と com.apple.java.util.prefs.plist の両方あると上手くいかないのですかね?
ただ、JDK付属のソースファイルを見る限り、
Preferences.userNodeForPackage は 内部で Preferences.userRoot().node(~) を呼んでいるので違いは無いはずなのですが…。
by 晶紀 (2012-08-12 21:40)
1. すみません、jp.is3000nx.aop2.plistとcom.apple.java.util.pref.plistの両方にエントリが書かれるのは正しい挙動のようです。下記サンプルコードでもそのようになりました。このあたりよくわかっていなくて手探りでやっているのでご勘弁を。
2. jp.is3000nx.apo2.plistを削除してAOP2d.jarを試してみたところ、空のjp.is3000nx.aop2.plistは生成されるものの、ライセンスキーや設定情報は書き込まれません。エラーも出ません。
3. 下記のコードで、net.horuso.aop2.plistができあがり、バイト配列が書き込まれました。ほとんど同じ事をやっているはずなのに、何が違うのでしょうね。
package net.horuso;
import java.util.prefs.*;
public class PrefTest {
private Preferences prefs;
public PrefTest() {
prefs = Preferences.userRoot().node("/net/horuso/aop2");
}
public void save(String key, byte[] value) {
try {
prefs.putByteArray(key, value);
prefs.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
byte[] buff = {1,2,3,4};
new PrefTest().save("Property0", buff);
}
}
by horuso (2012-08-13 01:20)
手元にMacが無いため、色々面倒なことをしていただく羽目になってしまい申し訳なく思ってます。
今までの結果から、もしかして Preferences の読み書きに失敗しているのではなく、設定の保存処理そのものが呼び出されていないのではないかと思い至り、そちらの線で調べてみたところ、大当たり。
設定は画面を閉じた時に保存しているのですが、
Mac では 「画面を閉じた」ことを検出できないことがあるそうです。
(原因とか対処法とか)まだ詳しくは調べていませんが、
こんどの週末にでも 何とかしようと思います。
by 晶紀 (2012-08-15 19:32)
設定を保存するタイミングを変更したものを v.2.10+ として公開しました。
これで大丈夫だと思いますが、どうでしょう?
by 晶紀 (2012-08-18 10:39)
v.2.10+を試しました。
問題なく設定を保存&読み込みできました!
ありがとうございました。
ついでに設定がらみの希望を2つ。
最初から登録されている設定を削除できるとありがたいです。
削除して後悔するかもしれないのでデフォルトに戻すこともできたらなおいいです。
それから、以前のバージョンでは直前にどの設定を選んだかが保存されていませんでしたっけ?再起動時には必ず「縦組」になっているのがちょっと不便です。この情報もPreferencesに保存することをご検討ください。
by hosuro (2012-08-21 00:28)
ツールを起動した時に、設定が「縦組」になるのは昔からです。
この設定の機能を使う人は あまり居ないだろうな と勝手に考えていたので、色々と後回しになってます。
ぼちぼち追加していこうと思います。
by 晶紀 (2012-08-25 20:45)
初めまして。とても便利に使わせていただいています。
縦組みで変換したときに、ヒラギノUD丸ゴ W4をフォントとして埋め込むと、爺という字の表示が消えてしまいました。
コピーしてメモ帳などに貼り付けると、貼り付けられるので字自体が消えているわけではないようです。
フォントを変えて変換するしかないのでしょうか?
by aaa. (2013-01-12 17:28)
とりあえず 別のフォントを利用してください。
流石に フォントに「爺」の字が入っていないということは無いと思うので(縦組ができるワープロソフトで「爺」が表示してもらえれば…)、
変換が失敗しているとは思うのですが…。
推測ですが、
使用している文字のフォントだけを取り出す処理(フォントの部分埋め込み)をしているのですが、ここで上手く取り出せていないと思います。
java -DAOP2.FontEmbedded=full -jar AOP2.jar
↑
このコマンドで起動すると、フォントの部分埋め込みをしなくなるので
PDFファイルのファイルサイズは大きくなりますが
もしかしたら正常に表示されるかも知れません。
by 晶紀 (2013-01-13 09:16)
早速の返信ありがとうございます。
フォントの中には「爺」の字は含まれています。
上記コマンドで変換すると「爺」の字は空白ではなくなり、□の中に×が書かれたような文字が表示されました。その他の字は通常に表示できています。
とりあえず別のフォントを利用してみます。
by aaa. (2013-01-13 11:45)
追記です。
少し調べてみました。
ヒラギノフォントには同じ書体でもstd(pro)とstdn(pron)の2種類フォントが用意されていて、変換にはstdnを使っていました。stdを用いて変換したところ無事に変換できました。stdはjis 90基準フォントで、stdnはjis 2004基準フォントらしいです。新規格で変更されたフォントだと表示されずに消えてしまうみたいです。
by aaa. (2013-01-13 14:35)
Mac OSで使用しています。
明朝はヒラギノ、ゴシックはヒラギノかメイリオなど
文字数の多いフォントで出力しますが、いずれも
ダッシュが縦書きに対応しないので何か方法がありましたら
よろしくお願い致します。
by paprika (2013-01-30 16:10)
Mac OSが手元に無いので、Windowsの MS明朝で試したのですが
―(ダッシュ)、ー(長音)、‐(ハイフン)、-(マイナス)を縦組で出力したところ、-(マイナス)は横向きのままでした。
この辺りは大丈夫でしょうか?
また、
v.2.xx は縦組み用フォントを利用するのですが、
v.1.xx は横組み用フォントを90度回転して無理矢理縦組用にしているので、
どうしてもということなら v.1.xx (古いバージョン)を使うというのも
一つの手だとは思います。
by 晶紀 (2013-01-31 20:38)
ご回答ありがとうございました。
文章中の1行を使ってダッシュ、長音、ハイフン、マイナスと
4種の横書き文を作り、縦書きに出力してみました。
するとマイナスとハイフン以外、大丈夫で
ダッシュ、長音は縦書きになりました。
それで、再度青空文庫からダウンロードした小説を変換しますと
やっぱり横のままで出力しました。
長文になると、なぜか変換しないという現象が起きてしまうようです。
自分の環境のせいなのかどうかよくわかりませんが
古いバージョンで試してみます。
結果はまたご報告いたします。
ちなみに、テキストは泉鏡花「雛がたり」でした。
by paprika (2013-02-02 14:37)
旧バージョンをダウンロードして確認しました。
やはり横書きのままの出力となってしまいました。
2個のダッシュが横棒、横棒、と出力されて、縦の棒ダッシュにはならないです。
出力は縦書きA5(A4に2枚文プリントするため)
使用フォントはデフォルトで表示されたのをそのままで変えていません。
どうしたものか困っています。
by paprika (2013-02-03 09:57)
縦になるかは、“フォントに依存” するので、フォントにこだわりが無ければ違うフォントに変更してみるのも1つの対応策ではあります。
http://a2k.aill.org/ の真ん中くらいの「カスタマイズ」のところにある「ipam00301.zip」というフォントを使って変換してみましたが、ちゃんと縦になることが確認できました。
縦書きできるかどうかは、縦書きできるワープロソフトで表示してみれば判ります。
ちょっと上のコメントでもありますが、JIS 2004基準フォントの場合、うまく表示できない文字もあるようなので、それが原因かも知れません。
by NO NAME (2013-02-03 19:31)
あ、上のコメント、自分の名前 書き忘れた
by 晶紀 (2013-02-03 19:31)
ありがとうございました!
フォントに問題があった事がわかりました。
教えていただいたフォントですっかり解決です。
「ipam00301.zip」をダウンロードして実行したところ、
ちゃんと縦ダッシュになりました。
最初に確認していただいたときのMS明朝で
私のほうでは縦になりませんでしたが、同じMS明朝でも
MacとWindowsの違いからうまくいかなかったようです。
ヒラギノ、MS、と手持ちの明朝フォントが使えずに困りましたが
良いフォントをいただけて、感謝です。
何度もありがとうございました!
by paprika (2013-02-04 17:37)
青P V2.10を利用しています。
不具合だと思いますので下記を対応をお願いできますか?
風の又三郎[宮沢賢治]をPDFへ変換した際に下記の記述をPDFへの変換が1ページ一杯に変換されてしまいます。
[#17×4=の数式(fig462_02.png、横37×縦41)入る]
by とし (2013-06-03 07:20)
画像ファイルは全て「挿絵」 として扱い、
挿絵は全て「ページ一杯に表示する」という仕様です。
(付属のヘルプにも、そのように書いてあります)
画像の大きさ(解像度)はスキャンした人によってマチマチで、
ページ一杯の挿絵なのか、文中のちょっとした図(文字で表現できないものを画像で代用したもの等)なのかを自動で区別することは難しく、
かと言って解像度を指定する方法にすると詳しい人しか使いこなせないことになりかねないため、
(「誰でも簡単に使えること」に重点を置いて)この様な動作にしています。
青空文庫の方でタグを拡張して、図の位置とかが指定できるようになると良いのですが。
by 晶紀 (2013-06-03 23:19)
画像ファイルは全て「挿絵」 として扱いの仕様の件、了解しました。
回答ありがとうございました。
by とし (2013-06-04 06:58)