iOSのPDFリーダーのリフロー Adobe Readerはリフローできない。Good Readerはテキストのみをリフローする。

PDFのリフローの続き)前回は、AndroidでのPDFリーダーでしたが、iOS7(iPad2)でのPDF Readerのリフロー表示を調べてみました。

・Adobe Reader(11.2.3、無料)は、どうもPDFのリフロー表示はできないようです。実際のところ、iOS版のAdobe Readerは、Adobeのクラウドサービスや、その他の有料サービスのための撒き餌のような位置づけがかなり明瞭です。一方、PDFリーダーとしての機能はあまり強力ではありません。

・Foxit(3.5、無料)は「PDFのリフローができる」、と宣伝文句がありますが、使い方がわかりません。ヘルプを読んでも機能の説明がありません。もしかするとiPadではリフローしないのかも? 実際、iPadではそれほどリフローの必要性は感じないものね。

ということで、やむを得ず、有料(500円)のGood Reader(V3.20.1)を購入してみました。
さすがにGood Readerではリフローモードがあります。早速、試してみましたところ、次のような点に気がつきました。

1.Good Readerではタグ付きPDFとタグのないPDFではリフロー表示に差がありません。タグ付きPDFのリフロー表示にはタグの情報を利用していないようです。
2.Good Readerでは見出し、表の見出しセルなどすべて単なるテキスト表示です。また、表をセルの並びとして整形していません。
タグ付きPDFの1ページ目をGood Readerで表示した結果(図1)とPC版のAdobe Acrobat XIの表示結果(図2)と比較すると一目瞭然です。

IMG_0012
図1 Good Readerでタグ付きPDF(P1)をリフロー表示

PDF-reflow-Adobe-p1
図2 Adobe Acrobat XIでタグ付きPDF(P1)をリフロー表示

3.Good ReaderではPDFの中に埋め込まれている図を無視しています。
タグ付きPDFの2ページ目をGood Readerで表示した結果(図3)とPC版のAdobe Acrobat XIの表示結果(図4)と比較すると一目瞭然です。

IMG_0011
図3 Good Readerでタグ付きPDF(P2)をリフロー表示

PDF-reflow-Adobe-p2
図4 Adobe Acrobat XIでタグ付きPDF(P2)をリフロー表示

結論からいうと、Good Readerのはリフロー表示とは言えないような。単なるテキスト抽出&テキスト表示というべきじゃないかなあ。ナサケナイ。

PDFのリフロー続き)あちゃ! Android版のAdobe Readerでは、タグ付きでも正しくリフローしない。

昨日の続きです)

昨日は、Windows7用のAdobe Reader X(Adobe Acrobat XIProも同じ)での表示確認でした。いずれもタグ付きPDFではタグの情報を利用して正しくリフロー表示しますが、タグがないとリフロー表示が乱れます。
念のために、両者を比較してみました。同じ内容のPDFですが、左がタグ付き、右がタグなしのPDFに出力したものです。

PDF-reflow-PC
図 Windows7用のAdobe Reader Xでの表示比較―左がタグ付き、右がタグなしのPDF

さて、ほかの環境はどうか、ということで、Nexus5 (Android 4.4)のAdobe Reader(Adobe Reader 11.1.3)で調べてみました。タグ付きPDFのリフロー表示とタグなしPDFのリフロー表示も同じになります。残念ながらリフロー表示にタグの情報を使っていないようですね。

PDF-reflow-android
図 Android4.4用のAdobe Reader 11での表示比較―左がタグ付き、右がタグなしのPDF

それだけではなく、テキストの表示順序はPCのリーダーと異なっています。PDFの読み込みの方法が違うんでしょうか? 

PDFのテキストの表示がこのように異なってしまう、ということは、読み上げ順序もきっとちがうんだろうな・・・

もう少し探してみました。少し古いですが、Androidフォーラムに「Best PDF Text Reflow?」(PDFのテキストリフローのベスト製品は?」という話題があります。

“Best PDF Text Reflow?” http://androidforums.com/android-applications/482404-best-pdf-text-reflow.html(January 12th, 2012)

この投稿を読みますと、テキストリフローをきちんとできる製品はなかなかないようです。

PDFのリフロー表示。タグ付きPDFとタグの付いていないPDFの比較。

PDFの表示はデフォルトではページ単位のレイアウト状態ですが、リフロー表示もできます。

○Adobe Readerでリフロー表示するには: 「表示」→「ズーム」→「折り返し」

また、PDFにはタグ付きPDFという仕様があります(ISO 32000-1:2008の14.8節)。タグ付きPDFは、構造情報を表すための標準のタグ(XHTMLの要素に相当)を定めるものです。

タグは、グループ化要素、ブロックレベル要素、インライン・レベル要素、イラスト要素に分類されており、次のようなタグを決めています。

1)グループ化要素
Document, Part, Art, Sect, Div, BlockQuote, Caption, TOC, TOCI, Index, NonStruc, Privateがある。PDFが完全な文書を含むならばStrucTreeRootは、唯一のDocumentを含む。部分的な整合文書を含むなら、 Part, Art, Sectを代わりに使っても良い。
2)ブロックレベル要素
段落など(P, H, H1, H2, H3, H4, H5, H6)、リスト(L, LI, Lbl, LBody)、表(Table, TR, TH, TD, THead, TBody, TFoot)
3)インラインレベル構造
Span, Quote, Note, Reference, BibEntry, Code, Link, Annot, Ruby, RB, RT, RP, Warichu, WT, WP
4)イラスト要素
Figure, Formula, Form

タグ付けPDFにするメリットの一つにリフロー表示が正確にできる、ということがあります。これを実際に試してみたのが、次の図です。2段組のPDF(上)をリフロー表示させた状態です。タグ付きPDFでは下左のようになります。下右はタグのついていないPDFの場合です。PDFの印刷レイアウト表示は同じですが、リフロー表示は異なり、タグ付きPDFではリフロー表示でも表が正しく表示されていることがわかります。

reflow
図1 2段組のPDF(上)のリフロー表示

Adobe Acrobatを使うとタグを表示できます。次の図はタグ付きPDFのタグを表示したものです。

tag-yes-reflow
図2 タグ付きPDFのタグを表示(Acrobat XI)

このあたりまでは知っていたのですが、先日、タグの付いていないPDFをリフロー表示させるとタグを表示するペインにタグが現れることに気がつきました。図3はタグの付いていないPDFをリフロー表示させた状態です。この場合、すべてのブロックにPタグを生成しているようです。

tag-non-reflow
図3 タグの付いていないPDFをリフローしタグを表示(Acrobat XI)

どうやら、Adobe Readerは簡単なブラウザのようなレンダラを内蔵しており、それを使ってリフロー表示しているようです。タグ付きPDFはタグを使って各タグのデフォルトレイアウトで表示します。タグ付きでないときはタグを推定して割り当てているものと思います。

タグ付きPDFではタグのデフォルト表示が決まっていますが、簡単なレイアウト指定もできます。レイアウト属性はCSSとかXSL-FOのようなプロパティを使って指定するようです。

ちなみに、上のPDFは、AH CSS Formatter V6.2で作成しました。

AH CSS Formatter

■参考資料
AH Formatter
AH Formatter によるウェブコンテンツアクセシビリティガイドライン(WCAG 2.0) PDF実装方法
PDF/Aとはなにか

『PDFインフラストラクチャ解説』のPDFの構造機能、タグ付きPDFの説明を強化。タグ付きPDFは固定レイアウトEPUBにも通じる。

『PDFインフラストラクチャ解説』を0.38版に改訂しました。

下記で公開しています。

PDF版
EPUB版

【追記:2016/1/21】
2016年1月に本書発売となり、無償配布を終了させていただきました。(『PDFインフラストラクチャ解説』POD版とKDP版が揃い踏みとなりました
【追記:ここまで】

今回の改訂箇所は次の節です。

9-2 PDFにおける構造表現
9-3 タグ付きPDF
14-3 透明テキスト付きPDF(新設)
22-2 PDF/A ファミリー
22-3 PDF/A-1
22-4 PDF/A-2
22-5 PDF/A-3
22-6 PDF/Aの作り方
22-7 スキャン画像からPDF/Aを作成する(新設)

スキャン画像を透明テキスト付きPDF、タグ付きPDF、PDF/Aにするための関連知識の説明を大幅に見直し・強化しました。

PDFにはXMLとは異なる方式の構造化の仕組みが用意されています。その仕組みは構造要素という辞書をツリー構造にするのですが、ツリー構造の中にはコンテンツ本体は含まれていなくて、他の構造要素またはコンテンツ項目へのIDが入っています。コンテンツ本体では、必要な箇所をマークオペレータで囲み、必要な箇所にはIDをつけます。コンテンツと構造のツリーはお互いをIDで関係付けるという仕組みです。

タグ付きPDFは、PDFに用意されている構造化の仕組みを使って実現するXHTMLのようなものと考えたら良いでしょう。
標準の要素型が規定されています。この要素型は簡単なXHTMLをそのままあらわすことができます。要素型には属性を着けることができますが、これは標準レイアウトを指定しています。

tag-example-xhtml
図1 簡単なXHTML

tag-example-pdf
図2 タグ付きPDFの構造ツリーと表示コンテンツのリンク

この仕組みを使うと、タグ付きPDFを使って、マルチレンディションのEUPBに似通った電子書籍を実現できそうです。

CAS-UBのCSSテーマ、テーマの調整およびテーマのカスタマイズについて

『CSSスタイルシートのカスタマイズガイドV2』を改訂して、CAS-UB サポート&ガイドより公開しました。次のリンクからも直接ダウンロードしていただくことができます。

EPUB版
PDF版

CAS-UBによる電子書籍の制作では、原則としてコンテンツとレイアウトを分離しています。編集時はできるだけコンテンツのみを扱い、編集が終わったらEPUBやPDFを生成する際にレイアウトを設定します。EPUBは生成ではレイアウトをCSSで指定しますが、CSSの指定は次のような仕組みです。

(1)テーマを選定する
(2)必要に応じて、CAS-UBのメニューを使って、テーマを調整する
(3)必要に応じて、ユーザー自身がCSSを用意してテーマをカスタマイズする

以下、(1)~(3)を簡単に説明します。

(1) テーマの選定

CAS-UB V2.2では、18種類(V2テーマ9種類、旧テーマ9種類)のテーマをシステムで用意しており、EPUB生成の「一般」設定メニューの「CSSのテーマ」の項目に利用できるテーマの一覧が表示されます(次の図)。そこでお好きなテーマを選択して、設定を保存すると次のEPUB生成から有効になります。

CSSthema2
図1 テーマの一覧表示と選択

(2) テーマの調整

テーマの「調整」はV2.2で新規に追加した機能です。現在、次の5項目の調整ができます。

・段落先頭行の字下げ
・段落間の空き
・表の罫線
・段落の揃え
・見出しの文字サイズ

ここでは、段落先頭行の字下げについてのみ簡単に説明します。その他の機能を含めて、詳しくは、「CAS-UB User Guide」(10-2 CSSテーマV2と設定変更)をご参照ください。

①日本語テキストの段落表示には3通りのパターンが使われる
a. 書籍などの印刷においては、一般に段落の先頭を1文字字下げします。そして、段落と段落の行間は段落内の行間と同じにします。
b. 一方で、電子メールのようなデジタル・テキストを画面で表示するときは、段落の先頭を字下げせずに、段落と段落の間に空き行を置くのが一般的です。
c. Webページなどでは段落の先頭を1文字字下げし、かつ、段落の行間を空ける(a.とc.の両方折衷)方式も良く見かけます。

②デジタル・テキストの執筆方法
ワープロなどで、原稿を執筆するとき、そのパターンもあまり統一されていません。人によっては段落の先頭に「全角空白文字」を入力して字下げします。また、電子メールと同じように字下げしないで書く人もいます。ワープロでは、インデント機能により段落先頭を表示上1文字字下げすることができますので、テキストに「全角空白文字」を入力しなくても表示上で字下げができます。

③CAS-UBの考え方
CAS-UBでは、後者のデジタル・テキスト執筆方法を標準として採用しています。つまり、テキスト段落先頭には「全角空白文字」が入力されておらず、二つのテキストの間に空き行があったときに段落が分かれていると、想定します。(実際に、行頭に「全角空白文字」が入力されていても削除はしません。)

④CAS-UBのCSSテーマの考え方
V2.2で追加したCSSテーマ(V2テーマ)は、CSSによるインデント設定で段落先頭の字下げを行なうようになっています。また、段落間には空きを設定していません。

このため原稿のテキストの段落先頭に「全角空白文字」を入力している場合は、見かけ上行頭に2文字の字下げができてしまいます。これを避けるためには、次のようにテーマを「調整」します。この調整(設定変更)を行なうことで、CSSテーマの段落先頭1字下げ設定が無効となります。

① スタイルシート画面の「CSSの調整」をクリックします。
css-config
図2 CSSの調整メニュー

②CSSテーマの設定変更メニューが表示されます。
css-config-menu
図3 テーマの設定変更

③字下げを「なし」に変更して、「保存」ボタンを押します。

(3)CSSテーマのカスタマイズ

XHTMLやCSSの基本的な知識をお持ちのユーザーは、自分自身で、CSSスタイルシートを作成して、これをEPUBに反映することもできます。CAS-UBでは、XHTMLの要素や属性をかなり自由に入力できますが、『CSSスタイルシートのカスタマイズガイドV2』にまとめて説明しています。

★特定のユーザー専用テーマを開発またはテーマを専用にカスタマイズして、そのユーザー専用メニューの作成もできます。詳細は、営業担当(cas-info@antenna.co.jp)までお問合せください。

Safari とFireFoxのMathMLレンダリングの改良は、クラウドファンディングを利用したボランティアの手で進んでいる

昨日の「WebKitの数式(MathML)でSafariはボランティアの努力を採用し、数式を表示できる。Chromeは同じものを不採用として批判を浴びる。」の最後で、「WebKitもGeckoもMathMLレンダリングエンジンの開発は、ボランティア任せで専任の担当者はチェックしかしていないようです。」と書きましたが、その点についてもう少し掘り下げてみます。

WebKitのMathML関係のバグは、2013年4年1日~2014年3月8日までに、解決済みとなったものが52個あります。そのうち重複(DUPLICATE)が6件、終了(FIXED)が、46件となっています[1]。バグの内容を詳しく確認してないのですが、着実に進んでいるといえます。

FIXED46件の中では、fred.wang@free.frにアサインが22件、*@appleにアサインが14件、その他10件となっています。

WebKitについてはこの1年弱で、MathMLバグの大半がFrédéric Wang氏により、残りの多くをアップルの関係者が解決しているとみて良いでしょう。

Mozillaの方も同様で、同じ期間にFIXEDになったバグ40件の中で17件がFrédéric Wang氏によるものです。

Frédéric Wang氏のブログ[2]を見ますと、この人はフランス人のエンジニアで、現在、アメリカ数学会(American Mathematical Society)のMathJaxプロジェクトの外部契約エンジニアとしてMathJaxの改良に携わっているとあります。

Frédéric Wang氏はWebKitとGeckoのMathMLレンダリングの改良にもっと時間を割くため、2013年の11月19日からクラウドファンディングを利用して資金を集めました[3]。募集期間は終了していますが、3ヶ月程度はフルタイムで働く資金が集まったようです。

ボランティアの手によって、WebKitとGeckoという二つのレンダリングエンジンではMathMLの改良が少しずつ進んでいます。これから、バグ修正したレンダリングエンジンが、SafariやFireFoxに反映されるのが楽しみです。

Microsoft、Google、Appleという巨大な企業が、MathMLにあまり関心を持たずにボランティアが草の根的に改良しているという現状は、TeXにも似ているような気がします。それにしても、科学の根源である数学に対して、大ブラウザベンダーがあまりにも冷淡な・・・

[1] WebKit Bugzillaを、bug_status=RESOLVED、resolution=FIXED&resolution=DUPLICATE、chfieldfrom=2013-04-01&chfieldto=2014-03-08で検索した結果。
[2] Blog de Frédéric:About Me
[3] Funding MathML Developments in Gecko and WebKit (part 2)

WebKitの数式(MathML)でSafariはボランティアの努力を採用し、数式を表示できる。Chromeは同じものを不採用として批判を浴びる。

前の記事 EDUPUBで数式をどのように表わすのか? MathMLが飛翔するか、それともSVGなのか?の続きです。

HTMLに数式を埋め込む方法はいくつかあります。ここでは、MathMLを埋め込んだときの表示について検討します。

ちなみにMathMLとはどんなものか、を知るには次の資料をご覧いただくと良いと思います。

http://www.antenna.co.jp/AHF/ahf_samples/v62/Seminar20140307.pdf

HTML5ではMathMLの要素をHTMLの要素と同じように記述することができます。次のページにサンプルがあります。

http://www.w3.org/TR/2012/CR-html5-20121217/embedded-content-0.html#mathml

HTMLの中に記述したMathMLをブラウザで表示する方法として、ブラウザのネイティブレンダリング機能で表示する方法と、MathJaxというJavascriptを使って表示する方法があります。以下の話はネイティブレンダリング機能で表示する方法に関するものです。

ブラウザの有力なレンダリングエンジンのひとつがWebKitです。WebKitは主にアップルが中心になって開発してきたものでアップルのWebブラウザであるSafariで使われています。グーグルもChromeブラウザでWebKitを使っていました。なお、グーグルは2013年の春にレンダリングエンジンをBlinkに切り替えることを発表し、2013年7月リリースのChrome28以降はBlinkベースとなっています[1]。また、Androidの標準ブラウザもAndroid4.4からBlinkベースとなっています。

MathMLは、1998年にV1がW3Cの勧告となっており、歴史の古い仕様です。利用もWebブラウザ以外の領域ではかなり普及しています。ところがブラウザのネイティブレンダリング機能によるMathML表示はなかなか進んでいません。

現在、主要なブラウザでMathMLのネイティブレンダリングをサポートしているのは、Safari 5.1以降[2](WebKit)とFireFox(レンダリングエンジンはGecko)のみです。

GeckoのMathMLレンダリングエンジン開発は、FireFoxになる以前から始まっておりFireFoxは1.0で、既にMathMLの表示をサポートしています[3]。しかし、開発のスピードは遅いようで、かなり沢山の問題が残っています。MathML3.0で規定された算数(Elementary Math)のサポートもありません。

WebKitのMathMLレンダリングも少しずつ対応が進んでいたようですがあまり活発とはいえませんでした[4]。Wikiページの履歴をみますと、4年程前(2010年8月)にAlex Milowski氏とFrançcois Sausset氏による実装が行なわれ、その後2012年にDave Barton氏がバグを修正した後、グーグルは2013年1月にリリースしたChrome24でMathMLを有効にしました[5]。MathMLの実装を行なったのは、正社員や委託契約者ではなく、ボランティアのようです。

しかし、グーグルの開発者は、このMathMLレンダリングは品質的に不十分として2013年2月リリースのChrome25でMathMLのレンダリング機能を使えなくしてしまいました[6]。このChromiumの議論を読みますと、2月時点では、グーグルの担当者からは、問題を解決したらまた使えるようにしたいという、次のようなメッセージが出ています。

#32 “Note that MathML has had to be turned off because the code is not yet production ready.
We hope to turn it on in some future release.
#40 To summarize the current status of this bug: We’d like to enable MathML in Chrome, but the WebKit code still needs further improvements before we can ship it.
(Chromiumより)

しかし、2013年10月になって、次のような新しいコメント(#43)が発信されました。MathMLはMathJaxで十分なので直接サポート(ネイティブレンダリング)は不要という趣旨の発言です。これをめぐってMathMLのネイティブレンダリングを期待する開発者との間で激論となっています。

#43 comment #40 is out of date. MathML is not something that we want at this time. We believe the needs of MathML can be sufficiently met by libraries like MathJax and doesn’t need to be more directly supported by the platform.
(Chromiumより)

グーグル開発者の発言を読みますと、品質は具体的にはセキュリティの問題が大きく、これはアーキテクチャの問題なので簡単には解決できない、ということが指摘されています。一方で、MathMLを期待する側からは、セキュリティについては解決済みであり、機能を使えなくしてからそういうことを指摘しても実際に確認できないではないか、などの批判があります。

これに関して、一般のメディアでも、「グーグルは数式の重要性がわかっていないということで批判を浴びている」という記事が掲載されています。[7]

同じMathMLレンダリング機能をSafariでは有効にしている訳ですから、グーグルのセキュリティに関する発言が実際にどこまで妥当かは判断しにくいところです。

いろいろな記事を見ていきますと、WebKitもGeckoもMathMLレンダリングエンジンの開発は、ボランティア任せで専任の担当者はチェックしかしていないようです。このあたりに問題がありそうに思うのですが、引き続きもう少し調べて見たいと思います。

[1] 「Google Chrome 28」の安定版リリース Blink採用と「リッチ通知」機能(Windowsのみ)(2013年07月10日 )
[2] Safari 5.1 and math (July 21st, 2011 at 8:29 pm by Dr. Drang)
[3] http://fred-wang.github.io/MozSummitMathML/
[4] https://trac.webkit.org/wiki/MathMLには、WebKitのMathMLプロジェクトが記載されており、進捗をチェックできます。
[5] 「Google Chrome 24」が安定版に、“MathML”や“Datalist”要素をサポート (2013/1/11 13:48) 窓の杜ほか
[6] Issue 152430: Enabling support for MathML(chromium)
[7] Google subtracts MathML from Chrome, and anger multiplies(November 5, 2013)

3月7日 電子出版制作・流通協議会のソリューションセミナーのご案内

3月7日14時から15時30分まで、電子出版制作・流通協議会(電流協)主催のソリューションセミナーが開催されます。

■アンテナハウスによる無料招待

本セミナーは、電流協会員向けですが、アンテナハウスにお申し込みいただいた方は、無料ご招待となります。参加ご希望の方は、次のお申込みページよりご応募ください。

セミナー招待申込みページ

■セミナーの概要

第一部 
 講師:株式会社セルシス 取締役 成島 啓
 題目:グラフィックツール提供によるクリエイター支援活動の紹介
 参考:セルシス http://www.celsys.co.jp/

第二部
 講師:アンテナハウス株式会社 代表取締役小林徳滋
 題目:アンテナハウスの電子出版関連ソリューション
    ―電子書籍内製のための制作サービスの紹介を中心に―
 参考:アンテナハウスhttp://www.antenna.co.jp/

日時:2014年03月07日(水) 14:00-15:30
場所:電流協 会議室(東京都千代田区神保町2-2-31 第36荒井ビル8階)

本セミナーは電流協会員が中心ですが、アンテナハウスの招待を受けることで無料参加可能です。