カテゴリー別アーカイブ: XSL-FO・CSS

XSL-FO仕様の難しさ、CSS組版のリスク

2001年~2002年頃にかけて、XSL-FO(当時はV1.0)について学びました。10数年を経て、この2か月ほど、再び、XSL-FO(今度は V1.1)と格闘しています。先日ブログで紹介した、『XSL-FOの基礎』を完成するために。

いまは、フロートについて調べています。フロートは、本文の文脈中に記述する要素です。但し、組版処理を行ったとき、本文の流れとは切り離して配置します。XSL-FOとCSSには、類似のフロート関連機能があります。では、XSL-FOとCSSのフロートの違いはなんでしょうか? まず、フロート関連の機能をざっくりと比較してみましょう。

1.フロート

(1)適用対象オブジェクト

・XSL-FOではfo:floatという組版オブジェクトを規定し、フロートの処理方向をかなり詳しく書いてあります。また、フロート組版オブジェクトを配置できる(スキーマ上の)位置も規定しています。フロート配置したいオブジェクトはfo:floatの中に置きます。

・CSS2.0では、フロートという組版オブジェクトはありません。floatプロパティのみ規定しています。そして、floatプロパティは、絶対位置指定のボックスと生成されたボックス以外であれば何でも適用できる、とされています(CSS2.1では生成されたボックスにも適用できるようです)。つまり、HTMLの様々な要素にfloatプロパティを指定できます。

(2) floatプロパティ

・XSL-FOではfo:float組版オブジェクトに対するfloatプロパティで、浮動のさせ方を規定しています。floatプロパティは、before、 start、end、 left、right、inside、outside、noneがあります。

・CSS2では、left、right、noneの三つです。

XSL-FOは前方フロートを新設しています。また、サイドフロートという分類があります。前方、後方というのは行の進行方向を基準とします。横組なら前方は上、縦組なら前方は右です。

・beforeは前方フロートで横組ならページの上、縦組ならページの右に浮動させて配置します。例えば、<fo:float float=”before”>テキストや画像を含むブロックFOオブジェクト</fo:float>と指定すると、テキストや画像を含むブロックFOオブジェクトは、横組ならばページの上部に配置されます。

・start、end、 left、right、inside、outsideはサイドフロートで、それぞれ行の開始側、行の終了側、左、右、のど側、小口側への配置を指定します。サイドフロートは、CSS2のfloatプロパティの形式上の拡張になっています。厳密にいうとモデルのずれがありますので、形式上と表現しておきます。

2.フロートのクリア

フロートされたオブジェクトが先行するとき、その後方のオブジェクトのボーダーの前方辺がフロートされたオブジェクトのマージンの後方辺よりも後ろになるように空きを入れることをフロートをクリアすると言います。XSL-FO、CSSの組版モデルでは、オブジェクトの領域を内容、パディング、ボーダー、マージンという4層の玉ねぎ構造で規定しています。クリアは解除と訳されることが多いですが、厳密には解除では無くて前方マージンを広げることです。

(1)適用対象オブジェクト

・XSL-FOでは、clearプロパティはブロックレベルのFOとfo:floatに適用できます。

・CSS2では、clearプロパティはブロックレベルの要素に適用できます。

(2) clearプロパティ

・XSL-FOでは、start、end、left、right、inside、outside、both、noneがあります。前方フロートのクリアはありません。

・CSS2ではnone、left、right、 bothです。

3.侵入による移動

フロートが配置されると、本文はフロートが配置された分だけ移動して、フロートを回り込みます。

XSL-FOでは、侵入による移動(intrusion-displace)というプロパティで本文の移動の仕方を指定できます。このプロパティは、ブロックレベルのFOと、fo:table-caption、fo:list-itemに指定できます。

intrusion-displace=”line”とするとCSS2のフロートの回り込みと同じとなり、それ以外に、auto、none、indent、blockを指定できます。

CSS2には、侵入による移動の仕方を指定する機能はありません。

◎まとめ

XSL-FOでは印刷を意識してフロートの処理を比較的詳しく説明し、製本のため、小口・のどなどの方向拡張をしています。縦組でも破たんしないように前方・後方、行の開始・終了で方向を指定できます。一方、CSS2のフロート動作は、簡単な説明なので判りやすいですが、あまり厳密ではありません。さらに、適用する要素が広範なため、様々なHTML要素にfloatプロパティを指定したとき、その組版処理結果がどのようなレイアウトになるかが曖昧になりそうです。

XSL-FOのclear、intrusion-displaceなどの説明は、英語の文章がセンテンスがながく、関係代名詞の使いまくり、未定義の用語 (ネィティブには定義する必要がない?)が一杯でてきて難しく、理解するのに難儀しています。XSL-FOの難しさは、まず、第一に仕様書の文章の難しさです。そ の先にまだあるかもしれませんが・・・第一の関門を突破しないとわかりません。ただし、仕様書にかかれている制約条件は、XSL-FOプロセサがきちんと処理してくれればユーザーが理解していなくても支障ありません。XSL-FOプロセサを開発する立場では、きちんと処理結果を保証しなければなりませんので、そうはいかないのです。

CSS3でフロートがどのように強化されているかまでは、まだ調べていません。CSS3ではCSS2の機能と互換になるように拡張しなければならないでしょうが、どうなるのでしょうかね。CSS組版のリスクは、文章はとっつきやすいけど規定が曖昧なことでしょうね。


アンテナハウスCAS電子出版

皆様、おはようございます。
本日と明日19日は、電子出版サービスグループがお届けいたします。

本日のお題は、
アンテナハウスCAS電子出版です。

アンテナハウスCAS電子出版とは、アンテナハウスが自社サービスCAS-UBを使って書籍を出版する際に用いるブランド名です。

現在、アンテナハウスが出版している書籍は10タイトルあります。また、無料で配布しているものは9冊、CAS電子出版の紹介で紹介しています。

最近は、POD(プリントオンデマンド)出版にも手を伸ばし始めました。
POD出版したものは次の通りです。

「PDFインフラストラクチャ解説-電子の紙PDFとその周辺技術を語り尽す-

表紙イメージ
「ビジネスを強化する リーディング・プレゼンテーションの技法」

表紙イメージ

これから出版予定のもの:レビュー募集中!

現在、アンテナハウスCAS電子出版では、次のPOD出版を進めています。
次回出版予定は、「XSL-FOの基礎」です。

表紙イメージ

XSL-FO の仕様書というのはとかく難解な長文(英語)で、翻訳されても難しくてよく分からないというのが現状です。本書は、主として XSL-FOドキュメントを印刷するソフトである XSL-FOプロセサを利用するための人向けの解説書として出版を予定しています。

現在は原稿を編集中で、アンテナハウスが主催する「Formatter Club」の会員様向けに無料配布して、レビューを募っています(完成時点で終了)。

Formatter Clubの詳細は、Formatter Clubについてをご覧ください。また、参加のお申込みは、下記のお申込用紙に必要事項をご記入のうえ、FAXまたはe-mailでお申し込みください。

  • 参加申込書用 PDF
  • メールアドレス:naganawa@antenna.co.jp(Fomatter Club 担当)
  • FAX 番号:03-5829-9024

AH Formatter V6.3 のご紹介:Data Matrix と PDF417 など(バーコードジェネレータオプション)

AH Formatter V6.3』では、『バーコードジェネレータオプション』を使用することにより、ISO/IEC 16022:2006 で規格制定されている Data Matrix と、JIS X 0508:2010 または ISO/IEC 15438:2006 で規格制定されている PDF417 が指定可能になりました。

AH Formatter 組版例
– Data Matrix と PDF417 の組版例 –

また、ご要望の多かったバーコードの色指定や、QR バーコードの余白(クワイエットゾーン)の変更が可能になりました。

AH Formatter 組版例
– バーコードに色指定した組版例 –

サンプルページには、
本機能が確認できる「バーコードの見本」を掲載しております。

『AH Formatter』にご興味のある方は評価版を次のページよりお申し込みいただけます。
AH Formatter 評価版のお申し込み

弊社では検討中のお客様向けに技術相談会を行っております。お気軽にお問い合わせください。
アンテナハウス システム製品技術相談会


AH Formatter V6.3 のご紹介:見開きページマスタ

AH Formatter V6.3』では、見開きページをひとつの単位と判断できるようになり、2ページにまたがる見開き領域を定義することができるようになりました。タイトルが 2ページにまたがる場合、画像または表の幅が 1ページより広い場合、縁なし背景の画像が 2ページにまたがる場合などに本機能をご使用いただけます。
見開きページマスタ拡張(オンラインマニュアル)

AH Formatter 組版例
– 見開きページにひとつの背景を定義した組版例 –

サンプルページには、
本機能が確認できる「見開きページマスタの設定例」を掲載しております。

『AH Formatter』にご興味のある方は評価版を次のページよりお申し込みいただけます。
AH Formatter 評価版のお申し込み

弊社では検討中のお客様向けに技術相談会を行っております。お気軽にお問い合わせください。
アンテナハウス システム製品技術相談会


AH Formatter V6.3 のご紹介:強化された多言語対応

AH Formatter』は、『AH Formatter V6.2』リリース以降、ビルマ語(ミャンマー語)やシンハラ語のスクリプトに対応し、『AH Formatter V6.3』が対応する言語はいよいよ 70以上になりました。
対応スクリプトと言語(オンラインマニュアル)

AH Formatter 組版例
– シンハラ語とミャンマー語の組版例 –

『AH Formatter』は、Unicode で扱えるほとんどの文字を扱うことができ、サロゲートペアにも対応しています。縦書きや、アラビア語などの右から左への文章も記述でき、これらを混在させた文書も容易に作成することができます。また、ハイフネーション処理や、言語によって異なる約物前後の空白の調整、独自のカウンタスタイルの定義なども自由に行うことができます。『AH Formatter V6.3』は、40言語以上のハイフネーション処理を行うことができます。このため、多国語対応の文書の生成などに最適です。

サンプルページには、
多言語組版機能の見本」を掲載しております。

『AH Formatter』にご興味のある方は評価版を次のページよりお申し込みいただけます。
AH Formatter 評価版のお申し込み

弊社では検討中のお客様向けに技術相談会を行っております。お気軽にお問い合わせください。
アンテナハウス システム製品技術相談会

 


AH Formatter V6.3 公開!

アンテナハウス株式会社は、XML/HTML 自動組版ソフトのベストセラー『Antenna House Formatter』をバージョンアップした『Antenna House Formatter V6.3』を 2016年2月4日から出荷開始いたしました。

AH Formatter ロゴ

『AH Formatter』は XML で記述されたマニュアル、契約書、報告書・書籍などを XSL-FO または CSS を使ってレイアウト指定して、PDF に出力したり印刷するソフトウェアです。

XSL-FO は W3C が XML に対するレイアウト指定の標準として勧告している世界標準です。国内外で『AH Formatter』は最も優れた XSL-FO 準拠製品との評価を確立しており、現在、自動車、携帯電話、航空機、OA 機器のメーカ等のマニュアル制作システムなど数千社のお客様にお使いいただいています。

詳しくは製品ページをご覧ください。

AH Formatter フロー

続きを読む


組版した結果の文字位置が思い通りにならない―思いもよらない盲点

こんにちは。
AH Formatter』のサポート担当です。

お客様からのお問い合わせで、時々、
「組版した結果の文字位置が思い通りにならない」というのがあります。
詳しい状況をお聞きすると、FO は次のようになっていました。

<fo:block> AH Formatter について </fo:block>
<fo:block> AH Formatter V6.2 は、XSL-FOを使った組版や
CSSを使ったXML/HTMLが使える、組版・印刷ソフトウェアです。 </fo:block>

元々のデータでタイトルや段落中に空白や改行を使って位置を調整していたのでしょうね。
(XSLTスタイルシートでも空白の扱いは難しいですがここでは置いときます)

これをいざ組版してみたらどうなるでしょう。

組版結果

元々あった空白や改行は???

XSL-FO では次のような仕様があるのです。

7.16.7 “linefeed-treatment”
http://www.w3.org/TR/xsl11/#linefeed-treatment
Value: ignore | preserve | treat-as-space | treat-as-zero-width-space | inherit
Initial: treat-as-space
改行コード(U+000A)をどのように扱うかが定義されています。
初期値は “treat-as-space” ですので空白文字として扱われます。

7.16.8 “white-space-treatment”
http://www.w3.org/TR/xsl11/#white-space-treatment
Value: ignore | preserve | ignore-if-before-linefeed | ignore-if-after-linefeed | ignore-if-surrounding-linefeed | inherit
Initial: ignore-if-surrounding-linefeed
これは空白文字(U+0020)の扱いについてです。
初期値は “ignore-if-surrounding-linefeed” です。改行の前後の空白は無視されます。
行の最初と最後の空白は削除されたようになります。

7.16.12 “white-space-collapse”
http://www.w3.org/TR/xsl11/#white-space-collapse
Value: false | true | inherit
Initial: true
これは連続した空白の処理です。
初期値の “true” では、連続した複数の空白文字(U+0020)は一つの空白として扱われます。

まずは、このブロックから見ていきましょう。
<fo:block> AH Formatter について </fo:block>

white-space-collapse=”true” によって「AH Formatter について」の前後にある空白は1つにまとめられます。
次に、white-space-treatment=”ignore-if-surrounding-linefeed” によってその空白も削除されてしまいます。
white-space-collapse=”false” white-space-treatment=”preserve” を指定することで元々あった空白は残ります。

こちらのブロックは改行コードと空白が使われています。
<fo:block> AH Formatter V6.2 は、XSL-FOを使った組版や
CSSを使ったXML/HTMLが使える、組版・印刷ソフトウェアです。 </fo:block>

改行コードを有効にするためには、linefeed-treatment=”preserve” を指定します。

しかしながら、スタイルシートを使った組版はそもそも「コンテンツとレイアウトの分離」というのを
前提に考えることが重要ではないかと思います。
なので、空白文字を使った位置合わせ、というのはあまり望ましくないと感じています。

こうしたお問い合わせは意外と少なくありません。
本日のブログのタイトルは、長年サポートをやっておりますと、
こんな話は基本的なことだろうと思っていたのですが
思い込みは良くないというわたくしへの戒めでございます。

 


CSS を組版に使うときに注意すべきこと(入門編その2)

こんにちは、『AH Formatter』のサポート担当です。
前回、CSS でレイアウトを実現する上で注意すべき点を挙げてみました。[1]
おさらいすると、
・セレクタで対象を決めて、プロパティと値でスタイル付けすること
・セレクタは多重定義できること
・優先順位があること
などです。
優先順位は大雑把に言ってしまえば、
1.Style=””
2.idセレクタ
3.classセレクタ、属性セレクタなど
の順番に低くなります。

詳しい仕様は、
http://www.w3.org/TR/css3-selectors/
に載っています。
日本語の解説サイトもたくさんあります。
私もまだまだ勉強中です。

実際のところ、一番頻繁に使われているのは <div class=”~”> のタイプかと思います。
コンテンツを divタグで囲って classセレクタでレイアウトを指定します。

.hoge{
border-style:solid;
border-color:#fbbdaf;
border-width:10px 10px 10px 10px;
color:#000000;
font-size:90%;
padding:0.1em 0.4em;
}

<div class=”hoge”>
<p>Antenna House</p>
<p>AH Formatter</p>
</div>

出力結果

ネストしたdiv構造で次のようなケースはよくあります。

.default{
background-color: #900;
padding:10pt;
font-size:20pt;
}
.test{
color:red;
border-top-style:dotted;
border-top-width:10pt;
border-top-color:yellow;
}
.test2{
border-style:solid;
border-width:5pt;
}
.test3{
border-bottom-color:blue;
}

<div class=”default”>
<div class=”test test2 test3″>
<p>Antenna House</p>
</div>
</div>

この場合、競合したスタイルは、後から指定されたものが優先になります。
組版結果は次の通り。

出力結果

さらに、前回、同じセレクタに対して何度でも指定することができると書きました。
上記の例で、
.default{
background-color: #00EE40;
}
を追加したらどうなるでしょう。
この場合も後から定義されたものが有効になります。

次に、CSS が外部ファイルに定義されていて、
このふたつの defaultクラスが別々のファイル(”styleA.css” と “styleB.css”)に保存されていたら?

<link rel=”stylesheet” type=”text/css” href=”styleA.css” />
<link rel=”stylesheet” type=”text/css” href=”styleB.css” />

答えは、”styleB.css” の.default{ }が有効になります。
この順番が変わるだけで結果が違ってきてしまいますね。ああ恐ろしい。

実際にサポート業務をしていると、次のようなデータを見ることが多くあります。

<!DOCTYPE html>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″/>
<title>Test</title>
<link rel=”stylesheet” type=”text/css” href=”style-A.css” />
<link rel=”stylesheet” type=”text/css” href=”style-B.css” />
.
.
.
<link rel=”stylesheet” type=”text/css” href=”style-X.css” />
<link rel=”stylesheet” type=”text/css” href=”style-Y.css” />
<link rel=”stylesheet” type=”text/css” href=”style-Z.css” />

</head>
<body>
<h1>Test</h1>
<div class=”A B C D”>
<div class=”E F G”>
<div class=”H I J K L M N” id=”sample”>
<div class=”O”>
<p>………</p>
<ol class=”M A Z”>
<li>……</li>
<li>……</li>
<li>……</li>
</ol>
</div>
</div>
</div>
</div>
</body>
</html>

こんな状態でレイアウトを変更しようとなった時に、
どこを変更したらいいかをすぐに判断するのは難しいですね。
CSS はレイアウトを分離して共通化して運用できるのでとても便利ですが、
複数の開発者が共有するような場合には工夫しないと破綻してしまいそうです。
設計段階での明示的なルール決めと共に、
シンプルなオーサリングやレイアウト設定が必要になります。

続きのお話はまたいずれ。

[1] CSS を組版に使うときに注意すべきこと(入門編)


弊社プレゼンテーション資料のご紹介(XML London 2015)

2015年6月6日~7日にロンドンで開催された XML カンファランス(XML London 2015)にて、弊社の Tony Graham は、XSL FO チュートリアルセッションで「XSLT and XSL FO Toolbox of Tips and Tricks」(XSLT と XSL-FO の実践のためのコツとヒント)を発表しました。

その内容は、主に多様な言語で記述されている世界人権宣言(UDHR in Unicode)を用いて、スタイルシートや XSL-FO を開発する流れを説明したものです。『AH Formatter』や『Antenna House リグレッションテストシステム(PDF 高速自動比較ツール)』、『focheck』など弊社製品のみでなく、様様なツールを用いて実践的な解決策を示しています。

資料(PDF)は英語になってしまいますが、よろしければご覧ください。
XSLT and XSL FO Toolbox of Tips and Tricks

XML London 2015 の出展レポートは既にブログに掲載しております。あわせてご覧いただければ幸いです。
海外出展レポート XML London 2015 その1その2

 


海外出展レポート XML London 2015 その2

Tony Graham はこのカンファランスの XSL FO チュートリアルセッションで XSLT と XSL-FO の実践のためのコツとヒントについての発表も行いました。

およそ 400言語に翻訳されている世界人権宣言(UDHR)の様々な言語のユニコードテキストを用いて、FO を作成するサンプルなどを紹介しています。

発表資料はこちらからダウンロード可能です。
http://www.antenna.co.jp/AHF/ahf_jirei/pdf/2015/tips-and-tricks.pdf

トニーグラハムの経歴
Tony Graham は1991年よりマークアップに関わり、1996年からは XML に、そして1998年からはXSLT/XSL-FO に従事している。現在 W3C の Print and Page Layout Community Group の議長を務めている。以前は W3C の XSL-FO 仕様を策定する XML Print and Page Layout Working Group (XPPL) の招待エキスパートであり、また同時に XSLT のエキスパートであり、stf スキマトロン テスティング フレームワークの開発者であり、Antenna House focheck XSL-FO 検証ツールの開発者であり、XSpec および Juxy XSLT テストフレームワークのコミッターであり、「Unicode: A Primer」の著者である。
Tony の XML と SGML のキャリアは日本、USA、イギリス、アイルランドで培われ、また扱った言語は英語、中国語、日本語、韓国語で、教育界、自動車産業、出版、ソフトウェア、通信機器業界など様々な分野に関わっている。
2014年11月より、アンテナハウス(株)にシニア・アーキテクトとして勤務。 AH Formatter、 クラウドオーサリングサービス、その他関連製品に携わり、XSL-FO, XSLTのコン サルティングサービスを担当している。

US 営業グループ
アンテナハウス海外サイト
http://www.antennahouse.com/
http://rainbowpdf.com/


Pages: Prev 1 2 3 4 5 6 Next