紙印刷本から電子書籍から紙印刷本というエコシステム

2016/2/19 [12:12:20] (金) 天気

InDesignからSigil経由のEPUBファイルをInDesignへ。

何を言ってるかわからないと思う。わたしも最初聞いた時は驚いた。


紙で出版されたものが電子書籍として配信されて、今度はその配信されたものを組み直して再び紙印刷本へというお話。

売れっ子グラビアアイドルが、AVに出演した後、温泉街のストリップに流れる、みたいな変遷。逞しい話で、名作(テキスト)は姿形を変えてもしっかり生き残るという良い例だろう(ほんまか)


おそらく元になってるInDesignデータは出せなくて(権利的な話じゃなく、たぶん探すのが面倒、もしくはもうなくなっているので)電子書籍のEPUB3ファイルを元にするしかない。


ということで、そのEPUB3ファイルをバラしてInDesignに流し込みという雇用創出となった。


まだEUPBファイル制作のソフトが出揃ってなかったんだと思う。

ファイルは、一時使われていた縦書きにもできる改造版Sigilで作られているっぽい(EPUBファイルのフォルダ構成やファイルの命名規則がどっかで見たことあるなあと)


でもまあ、青空記法に独自規則のアレンジとかdotBookからのHTMLっぽいデータよりはEPUBファイルの方が扱いやすい。


・組み直しになるので、元のレイアウトにこだわる必要ない。

・小説なので、EPUBファイルから拾い上げるのはルビと圏点、外字程度。


ルビはグループルビのタグがついているし、圏点はsesame(ゴマ)というクラスが指定されている。外字は画像になってるのでそこは「〓」にしておいて校正で対応。


↓InDesignにはタグ付きテキストというのがあって

http://help.adobe.com/ja_JP/indesign/cs/taggedtext/indesign_cs5_taggedtext.pdf

テキストデータにルビや圏点のタグを付けてInDesignに「配置」すればそのままルビも圏点も生かしてくれる。


以下のスクリプトでEPUB3のルビと圏点のタグをInDesignのタグに変換してやれば大丈夫だった。


use strict;
use utf8;
use Encode;
binmode STDOUT=>":utf8";
my $dir = ’OEBPS/’;
my $xhtml_dir = $dir . ’/Text/’;
opendir(DIR, $xhtml_dir) || die; my @xhtml = grep(/p\-\d+\.xhtml$/, readdir(DIR)); closedir(DIR);

foreach (@xhtml){
    my ($base) = $_ =~ m!(p\-\d+)\.xhtml!;
    my $text = $base . ’.txt’;
    open(IN, $xhtml_dir . $_) || die;
    open(OUT, ’>’ . $text) || die;
    binmode OUT=>":utf8";
    print OUT qq{<UNICODE-WIN>\n};
    my $sw;
    while(<IN>){
        my $line = Encode::decode(’utf8’, $_);
        $sw = 1, next if $line =~ m!<body!;
        last if $line =~ m!</body>!;
        next if $line =~ m!^\r?\n!;
        if($sw){
            $line =~ s!\r?\n!!;
            $line =~ s!^[ \t]+!!;
            $line =~ s!<p><br /></p>!
!;
            $line =~ s!<ruby>([^<]+)<rt>([^<]+)</rt></ruby>!&ruby({str=>$1, ruby=>$2})!eg;
            $line =~ s!<span class="em-sesame[^>]+>([^<]+)</span>!&goma({str=>$1})!eg;
            $line =~ s!<img[^>]+class="gaiji[^>]+>!〓!g;
            $line =~ s!<[^>]+>!!g;
            $line =~ s!
! !g;
            $line =~ s!___cRuby:1___!<cRuby:1>!g;
            $line =~ s!___cRubyString:([^_]+)___!<cRubyString:$1>!g;
            $line =~ s!___cMojiRuby:0___!<cMojiRuby:0>!g;
            $line =~ s!___cRuby:___!<cRuby:>!g;
            $line =~ s!___cRubyString:___!<cRubyString:>!g;
            $line =~ s!___cMojiRuby:___!<cMojiRuby:>!g;
            if($line){
                print OUT $line . "\n";
            }
        }
    }
    close(IN);
    close(OUT);
}
sub ruby{
    my $args = shift;
    $args->{ruby} =~ s![  ]!!g;
    return "___cRuby:1______cRubyString:$args->{ruby}______cMojiRuby:0___$args->{str}___cRuby:______cRubyString:______cMojiRuby:___";
}
sub goma{
    my $args = shift;
    return "___cKentenKind:1___$args->{str}___cKentenKind:___";
}


文字コードでちょっとハマった。

InDesignで「配置」する時、文字コードはShift_JISかUTF16じゃないと文字化けしてしまう。

元にするEPUB3ファイルの文字コードはutf8(BOM無し)。

EPUB3のUTF8をShift_JISにすると文字化けを起こす可能性があるような気がするので、とりあえずutf8のまま上記スクリプトでタグ変換して、エディタで開いて文字コードをUTF16に変換した後、配置した。


Adobeのタグ付きテキストのPDFを見ると、かなり細かく制御できるので、ちゃんと探せばこの手のコンバート系でいろんな強力なツールが出てるはず。

でも、たぶん、そんな継続する案件でもなさそうなので、テキトーな使い捨てスクリプトでやっつけ仕事。

image

しかし、ほんとニッチな需要もあったもんだ。

ガッテンしていただけたでしょうか。

<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】