タグ別アーカイブ: AH Formatter

[AH Formatter] MathML への取り組み

当ブログでこれまでも何度か話題として取り上げていますが、改めて『AH Formatter』の MathML への取り組みに触れたいと思います。

まず、MathML(マスエムエル)とは?
MathML は、Mathematical Markup Language の略であり、XML形式で数式などの数学的記述を表現するための言語です。
数式「x+2」であれば次のような記述で表現されます。

数式「x+2」

<mi> は変数など識別名、<mo> は +, – などの演算子、<mn> は数値を表します。

『AH Formatter』は MathML を描画するためのエンジンを独自開発、特に V6.2 では MathML描画エンジンの刷新と合わせ、W3C による「MathML 3.0」に対応し PDF中へのイメージを高い解像度で描画することが可能になりました。その後も MathML 3.0 2nd Edition に対応、最新 V6.6 では数式用の OpenTypeフォントに含まれる、MATHフィーチャへ対応するなど改良を続けています。

製品ページ、関連するブログ記事により詳細な情報を掲載しています!

・製品ページ:MathML で記述した数式を PDF に変換
[AH Formatter] MathML 3.0 2nd Edition 対応
[AH Formatter V6.6] OpenType の MATHフィーチャに対応

製品以外でも MathML を使って数式組版を行うための入門書「MathML 数式組版入門」の販売や公開、描画エンジンの性能の一端をご覧いただくため W3C の MathML仕様書を『AH Formatter』で組版、PDF出力したものを公開するなど MathML の普及のため活動を行っています。

[書籍紹介] MathML 数式組版入門
AH Formatter の CSS組版例「MathML 3.0 2nd Edition」

「MathML 数式組版入門」は、PDF版を公開しています。興味を持たれた方には是非ご覧になっていただきたい内容です。
PDF版
 
 
AH Formatter ロゴ

『AH Formatter』の評価版は以下のページよりお申し込みいただけます。是非、お試しください。
AH Formatter 評価版のお申し込み

XSL-FO の基本仕様と『AH Formatter』の拡張機能を気軽にお試しいただくため「サンプル FO 集」もご用意しています。

『AH Formatter』についてお問い合わせがございましたら sis@antenna.co.jp 宛てにご連絡ください。


[AH Formatter] Markdown形式の原稿を CSS組版により PDF文書に変換するための事例紹介

AH Formatter の導入事例紹介ページに有限会社フェリックス・スタイル様の事例「AH Formatter を用いた Markdown-PDF 変換事例紹介」を掲載しております。

事例紹介ページにある PDF文書では、Markdown形式の原稿を『AH Formatter』の CSS組版により、表紙や目次、ノンブルなどを備えた PDF文書へと変換するフローが詳解されております。

また、この事例紹介の PDF文書も Markdown原稿から作成されており、その作成に用いたソースファイル一式も GitHub にて公開しておりますので、実際に Markdown原稿から CSS組版を利用した PDF へのビルドをご体験いただけます。是非ご覧ください。

なお、主に海外の方に向けて、ソースファイルは英語版もご用意しております。
Markdown-PDF
https://github.com/2SC1815J/md2pdf/tree/en (English Version)
 
 
AH Formatter ロゴ

『AH Formatter』の評価版は以下のページよりお申し込みいただけます。是非、お試しください。
AH Formatter 評価版のお申し込み

XSL-FO の基本仕様と『AH Formatter』の拡張機能をお試しいただけるよう「サンプル FO 集」もご用意しています。

『AH Formatter』についてお問い合わせがございましたら sis@antenna.co.jp 宛てにご連絡ください。


DITAをPDFに(PDF5-ML)

昨日 は DITA を docx に変換する DITA-OT プラグインのことを書きましたが、やはりいまだにマニュアル系は PDF が主流です。

DITA-OT には DITA で書かれたインスタンスを PDF にするためのスタイルシート(プラグイン)が標準で入っているのですが、残念ながら機能的にしょぼくて、あまり積極的に使いたいと思うようなものではありません。多くの人がまず「日本語が文字化けするんだけど」という問題にぶつかります。

アンテナハウスはこれに替わるプラグインを公開しました。”PDF5-ML”といいます。
https://github.com/AntennaHouse/pdf5-ml

“ML”というのは”Multiple Language”の略で、その名のとおり多言語対応を得意としています。
ひとつの DITA トピックファイルの中に複数言語が混在することがありますが、このような場合でも言語毎のフォント選択をきっちり行うことができます。
DITA 採用時にぜひお試しいただければと思います。

アンテナハウスはこのプラグインのカスタマイズ作業も請け負っております。PDF 生成でお悩みの方はご一報下されば幸いです。


DITAからWord(docx)への変換

最近「DITA から Word へ変換することはできないか」というお問い合わせをいただくようになりました。
日本で英語マニュアルを作って、それを各国の販社に送り、販社側でローカライズするには Word が便利なのでしょう。

Word へ変換する DITA OTプラグインはあるにはあります。
https://github.com/jelovirt/com.elovirta.ooxml
しかし、もう2年くらいメンテナンスがされておらず、ちょっと商用では使えないレベルのものです。docx の仕様があまりにも難しいというのが理由のひとつだと思われます。
XSL-FO の仕様は PDF にすると500ページ程度に対して、Word の Open XML File Format の仕様は PDF でなんと6700ページ。全部読み切った人はいるのでしょうか(^^;

ところがところが、昨年アンテナハウスはこの変換プラグインを開発しちゃいました。しかもオープンソースで、どなたでも自由にお使いいただくことができます。
https://github.com/AntennaHouse/ah-wml

そして、来る3月6日に DITAコンソーシアムジャパン主催の「DITA Festa 京都」の開催が計画されているようで、その中で上記のようなことをテーマにしたセッションがあるみたいです。
関西方面でご興味がある方は今のうちに予定に入れておいてください。

DITA


アンテナハウス製品におけるJava 11以降の動作確認と動作保証

2019年1月でJava 8のサポートが切れます。
そして、2018年9月下旬、Java 11が予定通り出荷され、お客様からの問い合わせが入っていますので、アンテナハウス製品におけるJava 11以降の動作確認、動作保証について、現段階での方針をお知らせします。

Oracleが、これまで無償で配布してきたJDKのサポートを有償化するという話が出て、いろいろと混乱した話が飛び交いましたが、OpenJDKを使えば、無償で使えます。
OpenJDKは、OracleからJDKのソースコードの提供を受けて、いろんな企業や団体がビルドして無償で配布しているもので、企業や団体によって、有償サポートがあったりなかったり、サポート料やサポート期間もマチマチです。
この辺は、Linuxに各種のディストリビューションがあるのと似ています。
詳しい話は、参考に挙げた記事やサイトをお読みください。

アンテナハウスは、OpenJDKの中でも、LTS(Long Term Support)バージョンのOpenJDKを、無償で、最低4年間は、セキュリティやバグフィックスのアップデートを提供するといっているAdoptOpenJDKによって、動作確認と動作保証を始めています。
AdoptOpenJDKのJava 11は、最低、2022年9月までアップデートが提供される予定です。

AdoptOpenJDK

AdoptOpenJDK Support

First Availability End of Availability [1]
Java 8 (LTS) March 2014 At Least Sep 2023 [2]
Java 9 Sept 2017 March 2018
Java 10 March 2018 Sept 2018
Java 11 (LTS) Sept 2018 At Least Sept 2022 [2]

AdoptOpenJDKでダウンロードできるバイナリのうち、アンテナハウスが動作確認、動作保証の対象とするJava 11は、「OpenJDK 11 Hotspot」です。
Hotspotは、元々Sun(Javaの本家)が作ったJVM(Java仮想マシン)です。Oracleがメンテナンスや機能拡張をしています。これがリファレンスと考えてよいので、このJVMのみ動作保証対象にする予定です。
理由は、JVMは多くの実装があるので、やり出したら、きりがないからです。
たとえば、上記サイトには、Java 11でも、
「OpenJDK 11 with Eclipse OpenJ9」
がありますが、OpenJ9は、IBMが開発したJVMです。これは動作保証の対象にはしない予定です。
アンテナハウス自身が、動作確認、動作保証をするJVMを限定することについては、何卒、ご了承ください。

現在、アンテナハウス製品で使われているJavaのコードは、Java 8のコンパイラでビルドして出荷していますが、動作確認を始めた製品では、いずれも、問題なくJava 11で動いています。
アンテナハウスの製品のうち、Javaを使っている製品については、いずれ、各製品のウェブページで、動作確認が取れたことをお知らせしていく予定です。
なお、Java 8のコンパイラからJava 11のコンパイラに切り替える時期は未定です。
Java 11のコンパイラでビルドすると、Java 11の実行環境が必要になり、Java 8では動かなくなることが予想されます。
2019年1月でJava 8のサポートが切れるといっても、すぐ、Java 11に乗り換えられるお客様は、そんなに多くないだろうと考えていますので、2019年早々のコンパイラの切り替えは考えていません。
Javaを使っているアンテナハウス製品のリリース時期によりますが、今後、1年から数年をかけて、コンパイラを切り替えていくことになるでしょう。

参考:
【GlassFish勉強会レポート】各JDKベンダの動向を知ってJava 11に備えよう
2018年10月5日
杉山貴章

Javaは今も無償です

Oracle Java SE サポート・ロードマップ
(2018年 9月25日更新)

Time to look beyond Oracle’s JDK
Monday, 3 September 2018


Breaking Paragraphs into Lines

Breaking Paragraphs into Lines は、Donald E. Knuth と Michael F. Plass の行分割に関する論文で、40年近く前のものです。ここで示されているアルゴリズムは、パラグラフ全体を Box/Glue/Penalty という要素(Paragraph Item)でモデル化して、行分割位置を決定するものです。処理の流れは次のようになります。

  1. アプリケーションが、文書から Paragraph Items を構築する。
  2. 分割可能位置に対して、そこで行分割したときの不具合度を示すデメリット値と呼ばれる値を計算する。
  3. もっともデメリット値の合計の少ない位置を選択し、行分割位置とする。

Paragraph Item の要素 Box/Glue/Penalty は、それぞれが幅を持っています。

  • Box は常に幅が確保される。伸縮性はない。
  • Glue も幅が確保されるが、そこで分割が起こったとき幅がなくなる。Glue には伸縮性がある。
  • Penalty はその逆で、通常は幅が確保されないが、そこで分割が起こったとき前の行末にその幅が確保される。Penalty に伸縮性はない。また、行分割の起こり易さを調整するペナルティ値という値を持っており、分割不可では ∞ を、分割必須では −∞ を与えることになっている。 ハイフネーションは Penalty を利用して実現されている(通常の Penalty と区別するために Flagged Penalty と呼ばれる)。

次のような文書(論文に出てくるグリム童話)を例に、このアルゴリズムがどのように行分割位置を決定するのかをざっと見てみましょう。

fig-12

これから次のような Paragraph Items が構築されます。
x は要素、t は要素の種別、w は要素の幅、y は伸ばせる幅、z は縮められる幅、p はペナルティ値を示しています。

x0 empty box for indentation t0 = box w0 = 20
x1 box for ‘In’ t1 = box w1 = 17.44
x2 glue for space U+0020 t2 = glue w2 = 4.54 y2 = 5 z2 = 2
x3 box for ‘old’ t3 = box w3 = 25.68
x4 penalty for hyphenation t4 = flagged-penalty w4 = 7.12 p4 = 100
x5 box for ‘en’ t5 = box w5 = 19.44
x6 glue for space U+0020 t6 = glue w6 = 4.54 y6 = 5 z6 = 2
x7 box for ‘times’ t7 = box w7 = 43.7
x8 glue for space U+0020 t8 = glue w8 = 4.54 y8 = 5 z8 = 2
x9 box for ‘when’ t9 = box w9 = 43.88
......
x24 glue for space U+0020 t24 = glue w24 = 4.54 y24 = 5 z24 = 2
x25 box for ‘lived’ t25 = box w25 = 38.54
x26 glue for space U+0020 t26 = glue w26 = 4.54 y26 = 5 z26 = 2
x27 box for ‘a’ t27 = box w27 = 8.78
x28 glue for space U+0020 t28 = glue w28 = 4.54 y28 = 5 z28 = 2
x29 box for ‘king’ t29 = box w29 = 35.5
x30 glue for space U+0020 t30 = glue w30 = 4.54 y30 = 5 z30 = 2
x31 box for ‘whose’ t31 = box w31 = 50.64
......
x51 box for ‘young’ t51 = box w51 = 49.76
x52 penalty for hyphenation t52 = flagged-penalty w52 = 7.12 p52 = 100
x53 box for ‘est’ t53 = box w53 = 21.84
x54 glue for space U+0020 t54 = glue w54 = 4.54 y54 = 5 z54 = 2
x55 box for ‘was’ t55 = box w55 = 29.82
x56 glue for space U+0020 t56 = glue w56 = 4.54 y56 = 5 z56 = 2
x57 box for ‘so’ t57 = box w57 = 17.7
x58 glue for space U+0020 t58 = glue w58 = 4.54 y58 = 5 z58 = 2
x59 box for ‘beau’ t59 = box w59 = 38.36
x60 penalty for hyphenation t60 = flagged-penalty w60 = 7.12 p60 = 100
x61 box for ‘ti’ t61 = box w61 = 11.56
x62 penalty for hyphenation t62 = flagged-penalty w62 = 7.12 p62 = 100
x63 box for ‘ful’ t63 = box w63 = 21.82
......
x143 box for ‘old’ t143 = box w143 = 25.68
x144 glue for space U+0020 t144 = glue w144 = 4.54 y144 = 5 z144 = 2
x145 box for ‘lime-‘ t145 = box w145 = 42.34
x146 penalty for inter-word t146 = flagged-penalty w146 = 0 p146 = 100
x147 box for ‘tree’ t147 = box w147 = 30.46
x148 glue for space U+0020 t148 = glue w148 = 4.54 y148 = 5 z148 = 2
x149 box for ‘in’ t149 = box w149 = 16.3
......
x267 box for ‘her’ t267 = box w267 = 26.52
x268 glue for space U+0020 t268 = glue w268 = 4.54 y268 = 5 z268 = 2
x269 box for ‘fa’ t269 = box w269 = 14.7
x270 penalty for hyphenation t270 = flagged-penalty w270 = 7.12 p270 = 100
x271 box for ‘vor’ t271 = box w271 = 26.48
x272 penalty for hyphenation t272 = flagged-penalty w272 = 7.12 p272 = 100
x273 box for ‘ite’ t273 = box w273 = 19.6
x274 glue for space U+0020 t274 = glue w274 = 4.54 y274 = 5 z274 = 2
x275 box for ‘play’ t275 = box w275 = 33.42
x276 penalty for hyphenation t276 = flagged-penalty w276 = 7.12 p276 = 100
x277 box for ‘thing.’ t277 = box w277 = 47.02
x278 finishing glue t278 = glue w278 = 0 y278 = ∞ z278 = 0
x279 forced break t279 = flagged-penalty w279 = 0 p279 = −∞

次の位置が分割可能位置となります。上の例では、x2、x4 などです。

  1. xb が Penalty であり pb < ∞ である xb
  2. xb が Glue であり xb-1 が Box である xb

デメリット値は、そこで行分割するとどの程度よろしくないのかを示す値であり、この値が小さいほどよい分割位置と判断されます。 あまりに大きなデメリット値のときは分割位置の候補から除外されます。 デメリット値の算出方法の詳細はここでは触れませんが、外部から与えるいくつかのパラメタによって、デメリット値を調整できるようになっています。

上の例では、x2 や x4 のデメリット値は非常に大きく、候補から除外されます。最初(1行目)の分割位置候補となるのは x26 と x28 で、デメリット値を d とすると、d26 = 975.065、d28 = 23.5004 となっています。
x26 で行分割したとき、次の行(2行目)の分割位置候補は、x52 と x54 で、d52 = 29412.2、d54 = 1288.3 です。
x28 で行分割したときは、x56 と x58 が次の候補となり、d56 = 24.6185、d58 = 6446.52 です。
パラグラフ全体にこれを繰り返すと、次のようなネットワークができ上がります(パスのいくつかは省略されています)。数値は、下に示された語の後で分割したときのデメリット値を示しています。この例では、太い枠の語で分割するのが最良となっています。

fig-12-network

 

現在の AH Formatter はこのアルゴリズムを利用していません。そこで、このアルゴリズムを利用すると、どのように行分割位置が変化するのかを見てみます。

AH Formatter の結果 — ハイフネーションなし
V6-1
Knuth-Plass アルゴリズム の結果 — ハイフネーションなし
V7-1

これは、行あたりの単語数の少ない文書です。つまり、分割可能位置が少ない。 行末のアキの幅がより均等に近いのは、Knuth-Plass アルゴリズム の方であるのが見て取れます。

ハイフネーションをしたときは次のようになります。

AH Formatter の結果 — ハイフネーションあり
V6-2
Knuth-Plass アルゴリズム の結果 — ハイフネーションあり
V7-2

AH Formatter はハイフネーションが多く発生しています。
Knuth-Plass アルゴリズム は、ハイフネーションの発生を少なく抑えるように作られていますが、パラメタを調整して、もう少しハイフネーションが起こり易くすると、次のようにもなります。

Knuth-Plass アルゴリズム の結果 — ハイフネーション多め
V7-2a

行あたりの単語数が多いときは分割可能位置も多いので、結果に差はなくなってきます。

AH Formatter の結果 — ハイフネーションなし
V6-3
Knuth-Plass アルゴリズム の結果 — ハイフネーションなし
V7-3

Knuth-Plass アルゴリズム には、いろいろ制約があることがわかっています。例えば以下のようなものです。

  • 空白によって分かち書きされる英語などの文書を想定しているので、日本語のように分かち書きせず、ほとんどの文字間で分割可能な言語のことは考慮されていない。
  • 非矩形の領域を扱えるが、そのとき行の高さが一定であることが仮定されている。つまり、途中で大きな文字が入っていたりすると処理できない。
  • ドロップキャップ、letter-spacing、カーニング、リガチャ、綴りの変化するハイフネーション、ルビなどは考慮されていない。
  • ページ分割は処理しないので、widows/orphans は処理できない。

AH Formatter にこのアルゴリズムを導入することが検討されています。

 


FormatterでA3横サイズのPDFをA4縦サイズ2ページに分割してみる

昨日に引き続き、Formatterの普段とはちょっと違った使い方第三弾です。

すでにA3横サイズで作ってしまったPDFをA4縦サイズ2ページに分割したいことってありませんか?
だいぶ前にお客様からそういうご要望をいただいたことがあります。次のような新旧比較表でした。

これを次のようにA4見開きにしたいわけです。

いろいろと考えた挙句、次のようにすることにしました。

1. A3横サイズの左側だけをトリミングしてA4縦のページに乗っける絵にすると次のようなイメージです。

2. A3横サイズの右側だけをトリミングしてA4縦の次のページに乗っける絵にすると次のようなイメージです。

スタイルシート的にはこんな感じ

分かりにくい説明で申し訳ありません。
ご興味のある方は是非ご一報を! 詳しく説明させていただきます。


Formatterで画像やテキストを重ね書きしてみる

以前このブログの「FormatterでMathMLをPDFにしてみる」という記事でFormatterの普段とはちょっと違った使い方の紹介をしましたが、今日はその第二弾です。

たとえば次のようなXMLがあったとします。

そうすると

こんな感じにいつもとは違ったちょっとポップなPDFができちゃいます(もちろん別途XSLTスタイルシートは必要ですが)。

自動組版というよりはDTPソフトっぽい使い方ですね。テキストの部分にはFormatterの機能でドロップシャドーを付けてみました。

工夫すれば頻繁に更新するチラシや優待券みたいなものも作れるかもしれません。


海外出展情報 その2

近年では、自己出版、電子書籍、ウェブ制作に重点が置かれています。 それでもまだ、イベントでは紙の本が中心的な存在でした。

Digital Book World 2018

今年のDigital Book World(10月2-4日開催)は、いつもの展示会とは少し異なって、オーナーが替わり、出展会場が替わり、また焦点となるテーマにも変化がありました。 以前は、Digital Book Worldカンファレンスは、電子書籍、その関連技術、および既存のコンテンツを電子形式に移行するための最良の方法を理解する目的でユーザーが参加できる数少ない会議の1つでした。 しかし、長年にわたって人々の関心は減少方向にありました。 その結果、F&W Media publishingは、2017年にScore Publishingにこの展示会を売却しました。Score Publishingは、他にiBooks Author Conferenceもプロデュースしています。

今まで開催してきたニューヨーク市に替わって、Digital Book Worldはナッシュビル・テネシー・ミュージックシティ・コンベンションセンターに移転しました。 コンベンションセンターは巨大で、約1,000人の参加者には大きすぎました。 ジョイントセッション、ブレークアウトセッション、朝食/昼食、展示エリアは、それぞれ建物が異なるフロアとエリアにありました。

Digital Book Worldは6つのトラックで構成されていました。 マーケティング、教育、法律、データ、制作、および新メディアを提供していました。 ケーススタディーセッションもありました。 注目された分野は音声技術(アレクサ、シリなど)、オーディオブック、デジタルブックでした。 出展者の大部分は、オーディオへの移行、書籍の販売、配布を手がけているサービスプロバイダーでした。

Score Publishingのビジネスは、オーディオブック、Kindle、インタラクティブなibooksと印刷の分野を中心に扱っています。 それが会議に反映されたのは驚くことでははありませんでした。 これらの分野に関心のある著者や出版社は、会議で生産性を見い出したでしょう。しかし、企業の自動化ソリューションに興味を持ち、書籍の背後にあるテクノロジーに関する議論を期待していた出席者としては、それは少し残念であると感じました。

アンテナハウス(海外サイト)
http://www.antennahouse.com/

http://rainbowpdf.com/


海外出展情報 その1

アンテナハウスは最近、ドイツで開催のFrankfurt Bookfairとテネシー州ナッシュビルで開催のDigital Book Worldに出展しました。 これらのイベントに参加することの趣旨は、出版業界の方向性、出版社、ベンダー、消費者が興味を持って探しているものへの理解をより深めることです。

Frankfurter Book Fair(10月10-14日開催)は、500年以上の伝統を持ち、出版社の数と訪問者数の両方においても世界最大の書籍見本市です。世界中の出版社や訪問者が集う国際的なイベントです。 今年は109カ国から7503社の出展者と285,000人の来場者がありました。 5日間のフェアは、大規模な複数階建ての建物内にあるおびただしい数のパビリオンで開催されます。 アンテナハウスが関連しまた関心を持った分野は第4ビルに集中していました。第4ビルには、主に出版業界、学術出版の展示がありました。 ブックフェアにはアンテナハウスのパートナーがいつものように出展、ヨーロッパの長年のお客様とも会える大変貴重な機会でもありました。

アンテナハウス(海外サイト)
http://www.antennahouse.com/

http://rainbowpdf.com/


Pages: 1 2 3 4 5 6 7 8 9 10 ... 18 19 20 Next