年別アーカイブ: 2020年

海外ウェビナー動画「CSSとXSL-FO:印刷出版に私はどちらを使うべきでしょうか?」(日本語字幕付き)

Xplor International(https://xplor.org/)主催のウェビナーにて、弊社副代表のMichael Millerが発表を行いました。

タイトルは「CSSとXSL-FO:印刷出版に私はどちらを使うべきでしょうか?」(原題:CSS or XSL-FO: Which should I use for producing print publications)です。
「CSSとXSL-FO、どちらを使うべきでしょうか?」という質問をよくいただきます。こののウェビナーではCSSとXSL-FO、それぞれの特徴や歴史的な背景を昨今の出版を取り巻く環境も含めてご紹介しています。技術的な内容は少なめで、どなたでも理解しやすい内容となっています。

ウェビナーの様子はYouTubeでご覧いただくことができますので、ぜひご視聴ください。

なおYouTubeの字幕機能を使えば、日本語字幕付きでご視聴いただくこともできます。
字幕の設定方法は、

  1.  動画右下の設定アイコン(歯車マーク)をクリック
  2. 「字幕」をクリック
  3. 「日本語」にチェックを入れる

以上の設定で日本語字幕付きでご視聴いただけます。



XSL-FO/CSSスタイルシートにより、XMLとHTMLをサーバー上で高速にPDFに変換!



アンテナハウス ウェビナー スケジュール一覧 2020


e-na伊那谷 旅便り 第32回 土用松茸

「土用松茸」というものをご存じでしょうか。
秋に収穫される松茸とは別に、土用の丑の日の近くの夏の暑い時期に生えるものを伊那谷では「土用松茸」と呼ぶそうです。
今年は梅雨の長雨の影響で豊作ということなので
伊那市にある産直市場に見に行ってきました。

価格は大きさや開き具合で変わりますが右が3600円、左は少し大きめで1パック6000円!!!!
さすがになかなかのお値段です。
秋に取れる通常の松茸のような香りはないということで、主に味や食感を楽しむものだということです。

秋には近隣の市場に松茸も含め、たくさんの茸が並びます。
去年は雨が少なかったことや高温のせいか不作でしたが今年はこの勢いでたくさん採れることを願っています。



「ScanSave」のデモムービーシリーズ 基礎編_「多彩な入力機能」 YouTubeミニセミナー第10弾

デジタル化に舵を切る為の最短コース、国税庁の「電子帳簿保存法」対応パッケージソフト「ScanSave」の便利機能を解説します。

  • 手入力
    → 各種検索項目を全て入力する
  • 「ピン」機能を利用した効率的な入力
    → 連続した書類種別や拠点はピンを指して固定できる便利機能
  • CSV仮取込、連携キー入力
    → 利用するCSVの連携キーを入力して、検索項目を流し込む便利機能
  • CSV仮取込、ファイル名自動判定
    →  ファイル名を連携キーに事前にRenameすることで、CSVの該当レコードから1ボタンで流し込める
  • 他システムデータ一括取込
    →  複数レコードのCSVと複数のPDF等を一気に、突合させて、画像をいちいち開かずにインポートできる便利機能

内容をギュッと15分に圧縮して、YouTubeでいつでも視聴できるミニセミナーにしました。
お好みのところのみ短時間での確認も可能です!!

皆様のお役に立てれば幸いです。
また、要望を頂ければ、その要望にマッチした、セミナーの制作を検討させていただきます。


【 公開セミナー 一覧 】

  1. 第1回 「日本はデジタル化後進国か?!」
    https://youtu.be/aKctKhLRjOY
  2. 第2回 「電帳法」を優しく解説
    https://youtu.be/RbEZe00m0TA
  3. 第3回 「帳簿・書類」の7年保存がそもそも何故求められるのか?
    https://youtu.be/Ht68XGdFdnU
  4. 第4回 タイムスタンプって_なに?
    https://youtu.be/RqRbwlHvAfo
  5. 第5回 国税庁の「電子帳簿保存法」のページの見方
    https://youtu.be/pCUfL17KgEY
  6. 第6回 電帳法4制度の横断的概要学習!
    https://youtu.be/5HbsneGZAFQ
  7. 第7回 電帳法_電子取引の最新情報!
    https://youtu.be/cRT4Cw4-n70
  8. 第8回 電帳法_導入手順!
    https://youtu.be/a7lRuEusH1Q
  9. 第9回 電帳法対応のシステム・サービスのご説明
    https://youtu.be/742w23Xd4RQ

筆者紹介
益田康夫
メールアドレス:masuda@antenna.co.jp
1984年に社会人になり、IT業界一筋ながら3回の転職を経て現在に至っています。
特に2008年のリーマンショック後の不況の影響を受けて、2010年6月末にリストラ退社して現本業のアンテナハウス株式会社 https://www.antenna.co.jp/ に入社しました。Sun MicrosystemsやOracleを中心にしたITインフラから、IAサーバとしてのCompaqやIBMなどや、文書管理システムやポータルシステムを販売していた前職と、現在のアンテナハウスでのPDF技術や電子ファイルの変換技術などを中心にした、e-ドキュメントソリューションを探求してノウハウを習得してきました。特に、2011年以降、個人で学習時間をひねり出して、文書情報管理士資格2級、1級、上級と最短記録でレベルアップさせ、更に国家資格の行政書士※、日商簿記3級を2015年までに取得しました。※行政書士とは、https://www.gyosei.or.jp/information/ をご覧ください。


Google Chrome開発者版(86)でタグ付きPDFを出力[8/4修正]

[8/4追記]社内で「Chrome出力ではなくAcrobat Readerの対応外のタグ使用によって表示が壊れている可能性がある」と指摘を受けました。記事内での表現を修正します。

当初の記事タイトルは「タグ付きPDFがGoogle Chromeのデフォルトに?」だったのですが、現状としては「今後Google Chromeでタグ付きPDF出力が可能になるかもしれない」あたりのようです。

今回使用した環境は次になります。

  • Windows 10 Home 1909
  • Google Chrome バージョン: 86.0.4221.0(Official Build)canary (64 ビット)
  • Acrobat Reader DC – Japansese (20.009.20074)
  • 検証に使用したページ*https://www.w3.org/TR/xsl11/

2020年8月リリースのGoogle Chrome 85から、タグ付きPDFの出力がサポートされます[1]。関連する情報発信自体は以前からあったようですが、実際にリリースされるこのタイミングで俄かに活気づいているようです。活気づいてますよね?

早速Google Chromeをサイトからダウンロードしてみましたが、バージョンを確認すると2020年8月3日時点では84のようです。Google ChromeにはCanaryバージョンがあるのでこちらをダウンロード。試験運用版ですので、同様に検証される方はくれぐれも自己責任でお願いします。(84でもExperimentalの設定として「Export Tagged PDF」を有効化できます。)

バージョンを確認。86……86ですね。85ではありませんが、検証には問題ないでしょう

この後Chrome 84でのtagged PDF出力も確認しましたが、同様の結果になりました。

タグ付きPDFとは

ざっくりとまとめると「タグ付きPDFは、内部に文書構造を指定するタグを付与したPDFのこと」になります。
通常PDFは印刷物のデジタル表現、つまり視覚的な表現として文書構造が見られればよいわけですが、
PDF内部のデータを別の目的で使うときにこの情報だけでは不足することがあります。
別の目的としては、データの読み上げ、PDFから他形式への再変換などがあります。

また、PDFをHTMLのようにリフローで表示したいときにも、タグを用いることで文書の表示順序などを壊さないようにできます。
「HTMLのように」と書きましたが、このタグ付きPDFで設定できるタグの多くはHTMLでのタグと類似したものになります。

概要は[2][3]、詳細は[4][5]をご覧ください。

新ビューアは今のところリフロー表示に対応していないらしい

Canaryだと、PDF出力オプションの他に「PDF Viewer Update」オプションがあるんですね。

chrome://flags/#pdf-viewer-update

これを有効化すると、84ではExperimentalのオプションである「PDF Two-up View」もついでに使えるようになります。

ウインドウ画面と表示をフィットさせる場合に上下と左右どちらを優先するか、回転表示、PDF注釈の表示のオンオフ、アウトライン表示など、色々改善がされていることがわかります。とはいえ、全体的なPDFの表示機能についてはまだまだ頑張ってほしいところです。

さて、タグ付きPDF対応と聞いて真っ先に期待してしまうであろうリフロー表示ですが、とりあえず86の新ビューアではできないようです。
「タグ付きPDFの出力」と「PDFのリフロー表示」は重なる部分もあるものの別の話なので、そういうこともありますね。
今回の新バージョンについて、ChromiumのブログにChrome Accessibilityのリーダーからコメントがあります。improving Chrome’s built-in PDF reader to better consume tagged PDFsとあるので、それなりに可能性はあるのではないでしょうか。
> While this is an important milestone, we’re not done. Future work includes both improving the quality of generated tagged PDFs, and also improving Chrome’s built-in PDF reader to better consume tagged PDFs.

タグ付きPDFをChromeで出力する

本題のタグ付きPDF出力です。Experimentalな設定で次を指定するとタグ付きPDFが出力できるようになるとあります。

chrome://flags/#export-tagged-pdf

では、PDFを出力してみます。*のページを「PDFで保存」します。さて、本来はこれをAcrobat Readerで開いてみて「おおー」となる予定だったのですが、「表示」「折り返し」を有効にしたAcrobat Readerでのリフロー表示がうまくいってないようです。

W3Cのページはあまり変なマークアップのHTMLはないはずです。タグ付きPDFは検証した日時でのGoogle ChromeとしてはExperimentalな機能なので、こちらが原因でしょうか。タグ付きPDFとリフロー表示についてはAcrobat Readerの対応状況も関連するので、Chromeの出力が原因ではないかもしれないとの指摘をいただきました。Google Chromeには自分の出力の正しさを証明するためにもPDFリフロー表示に対応してほしいですね。
PDFの内部を確認したい方は、アンテナハウスのデスクトップ製品『
瞬簡PDF 編集 9
』[6]付属の『タグ編集ツール PDFタグエディターVer.2』を使うとよいかもしれません。

他に数件確認してみましたが、ページが上のように壊れることはないものの、「いきなり何もかも上手く出力できる」とはいかないようです。Experimentalな機能なので詳細な検証をすることを避けました。

ちなみに、Chromeでのタグ付きでないPDF出力をAcrobat Readerの折り返し表示したときは、とりあえずは表示されています。

ちなみに、同じWebサイトをAntenna House Formatter V7.0 MR3でタグ付きPDFを出力した場合、折り返し表示でも問題はないようです(フォントサイズや余白、分割アルゴリズムの違いなどがあるので同じ条件にはなっていません。)。

ChromeでのHTMLとタグ付きPDFの補足資料

Chromiumのタグ付きPDF機能開発におけるデザイン資料[7]によればこれはマークアップを元にタグを付与するものなので(AIが何もかもやってくれるような話ではない)、求められるタグを出力できるかはページ製作者次第です。Chromeの開発過程で実際にはどうなったかは確認していませんが(資料中のメーリスやバグトラッカーを確認していけばよさそうです)、DOMツリーと描画用ツリー、そしてARIA属性などを基にした「Accessibility tree」を利用するデザインのようです。


The accessibility tree computed in Blink is another good possibility. The accessibility tree is derived from the DOM and the Layout Tree and also takes accessibility attributes such as ARIA attributes into account.
Chromium Tagged PDF Export Design Doc

We think the accessibility tree is the best fit and that’s the design proposed here.
Chromium Tagged PDF Export Design Doc

つまり出力が完璧だったとして、現在のところ多くのWebページについて実用的かと言われれば疑問の残るところ。残念ながら、ページによってはむしろ不要なノイズだらけになってしまうでしょう。[7]に次のようにありますが、こういった機能を機にアクセシブルなWebページを作ろうという気運が再燃したりすれば幸いです。

正常に出力されるページもあるかもしれませんが、現在Experimentalとある機能ですので、今回はここまでとします。

タグ付きPDFにご興味を持たれた方は、アンテナハウスのPDF製品を是非チェックしてみてください。


if you visit a web page that’s compliant with WCAG accessibility guidelines, then export it as PDF, then open that PDF in Chrome, the PDF in Chrome should have the same level of accessibility, modulo the limitations of a PDF file.Chromium Tagged PDF Export Design Doc

  1. [1] Using Chrome to generate more accessible PDFs – Chromium Blog
  2. [2] タグ付きPDFとはどんなもの
  3. [3] PDFのリフロー表示。タグ付きPDFとタグの付いていないPDFの比較。
  4. [4] 『タグ付きPDF 仕組と制作方法解説』
  5. [5] 『PDFインフラストラクチャ解説』
  6. [6] かんたん操作でPDFを自由自在に編集 瞬簡PDF 編集 9
  7. [7] Chrome Tagged PDF Export – Authors: dmazzoni[at]chromium.org
    November 2019



e-na伊那谷 旅便り 第31回 シードル(林檎の発泡酒)とガレット(蕎麦のクレープ)

林檎の生産量が青森県に続いて2位の長野県では、近年その加工品としてシードル(林檎の発泡酒)の生産も盛ん行われるようになっています。
林檎農家さんとワイナリー(長野県内には 50以上のワイナリーがあって現在も増加中です)が手を組んでシードルを醸造という形態が主かと思いますが、林檎の栽培からシードルの製造と販売まで行うこだわりの醸造所もあり、伊那市の『カモシカシードル』さんもその一社で、なんと昨年 2019年にはシードルの国際コンテスト「フジ・シードル・チャレンジ」で最高位のトロフィー賞を受賞しています。

シードル

また、「信州そば発祥の地」を謳う伊那市では、しばらく前から「伊那谷ガレット(※)」(蕎麦のクレープ)と称して地粉を活かしたガレットの普及にも力を入れていますが、このガレットとシードルの相性がとてもよいのです。それもそのはず、正統なガレットのレシピでは材料にシードルを用いますし、そもそものガレット発祥のフランスのブルターニュ地方は、シードルの産地でもあるのです。訪ねたことはありませんが、親近感が沸きます。
信州伊那谷ガレット協議会

「ズッキーニとベーコンのガレット ズッキーニのサラダ添え」

新型コロナウイルス感染症のニュースは依然として落ち着かず、外出も敬遠しがちですが、いつか信州を訪れる機会がありましたら、伊那ものぞいてガレットとシードルを味わっていただけたらと思います。

「たっぷりキノコと2種チーズガレット」



毎月第2、第4火曜日に「アンテナハウスウェビナー」を配信します。

新型コロナウィルス感染は4月~5月の緊急事態宣言でいったん減少しましたが、緊急事態解除により日常の生活が戻るにつれて、再び、感染者数が急速に増加しています。昨日(29日)には、1日の感染者数が1000人を超えたというニュースが伝わっています[1]。

今年は、3月以降計画していた展示会やセミナーなどのイベントはほぼすべて中止になってしまいました。弊社営業が昨年まで参加していた「ソフトウェア&アプリ開発展」も中止となり、来年2021年春まで持ち越しになっています。このほか、セミナーもいくつか計画していましたが、すべて流れてしまいました。

それに代わってオンラインによるセミナー(ウェビナー)が一斉に行われるようになっています。弊社でも来月より「ちょっと一息 アンテナハウスウェビナー」としてZoomを使ってのオンラインセミナーを推進することにしました。(次の画像クリックでアンテナハウスウェビナーのページへ移動します。)

アンテナハウスウェビナーはZoomを使っての定期的なオンラインセミナーです。
8月から毎月第2、第4火曜日の16時から開催する予定です。
初めのうちは試行錯誤になるかもしれませんが、毎回工夫しながら、できるだけ長く継続したいとかんがえております。

  • 第1回は8月11日(火)16時より「PDFのしおり・目次の追加、ファイルサイズ分割の活用法 」としてアウトライン作成ソフト『アウトライナー』の話題を中心にお送りします。
  • 第2回は8月25日(火)16時より「PDFテキスト抽出の基本、問題点、実践的解決策」としてPDFテキスト抽出の話題を中心にお送りします。現在開発中のPDFテキスト抽出製品もご覧いただく予定です(本邦初!)

9月以降も、肩の凝らないお役立ち情報を定期的にお届けする予定です。ながら視聴でも構いませんので、お時間の余裕のある方はぜひお立ち寄りください。

[1] 【国内感染】29日 1264人の感染確認(30日午前0時現在)
[2] ちょっと一息 アンテナハウスウェビナーのページ
[3] PDFのしおり・目次の追加、ファイルサイズ分割の活用法(ウェビナー申し込みページ)
[4] PDFテキスト抽出の基本、問題点、実践的解決策(ウェビナー申し込みページ)


電帳法対応のシステム・サービスのご説明 YouTubeミニセミナー第9弾

【2020年8月26日追記】
2020年8月21日に、『ScanSave-V3』と『ScanSave-V4』(スキャンセーブ)の機能を大幅に強化するとともに製品名称を新たにした『e-Success』を発売開始いたしました。


デジタル化に舵を切る為の最短コース、
国税庁の「電子帳簿保存法」対応パッケージソフト「ScanSave」の便利機能を解説します。

  • 電帳法の4つの制度
    • → 帳簿・書類・スキャナ・電子取引の4つの制度についておさらいしましょう
  • 要件確保のポイント
    • → 電帳法の共通5要件にいておさらいしましょう
  • アンテナハウス製「ScanSave」の変遷
  • 「ScanSave」の導入実績・事例
  • 「ScanSave」特徴や強み

内容をギュッと15分に圧縮して、YouTubeでいつでも視聴できるミニセミナーにしました。
お好みのところのみ短時間での確認も可能です!!

皆様のお役に立てれば幸いです。
また、要望を頂ければ、その要望にマッチした、セミナーの制作を検討させていただきます。


【 公開セミナー 一覧 】

  1. 第1回 「日本はデジタル化後進国か?!」
    https://youtu.be/aKctKhLRjOY
  2. 第2回 「電帳法」を優しく解説
    https://youtu.be/RbEZe00m0TA
  3. 第3回 「帳簿・書類」の7年保存がそもそも何故求められるのか?
    https://youtu.be/Ht68XGdFdnU
  4. 第4回 タイムスタンプって_なに?
    https://youtu.be/RqRbwlHvAfo
  5. 第5回 国税庁の「電子帳簿保存法」のページの見方
    https://youtu.be/pCUfL17KgEY
  6. 第6回 電帳法4制度の横断的概要学習!
    https://youtu.be/5HbsneGZAFQ
  7. 第7回 電帳法_電子取引の最新情報!
    https://youtu.be/cRT4Cw4-n70
  8. 第8回 電帳法_導入手順!
    https://youtu.be/a7lRuEusH1Q

筆者紹介
益田康夫
メールアドレス:masuda@antenna.co.jp
1984年に社会人になり、IT業界一筋ながら3回の転職を経て現在に至っています。
特に2008年のリーマンショック後の不況の影響を受けて、2010年6月末にリストラ退社して現本業のアンテナハウス株式会社 https://www.antenna.co.jp/ に入社しました。Sun MicrosystemsやOracleを中心にしたITインフラから、IAサーバとしてのCompaqやIBMなどや、文書管理システムやポータルシステムを販売していた前職と、現在のアンテナハウスでのPDF技術や電子ファイルの変換技術などを中心にした、e-ドキュメントソリューションを探求してノウハウを習得してきました。特に、2011年以降、個人で学習時間をひねり出して、文書情報管理士資格2級、1級、上級と最短記録でレベルアップさせ、更に国家資格の行政書士※、日商簿記3級を2015年までに取得しました。

※行政書士とは、https://www.gyosei.or.jp/information/ をご覧ください。



CommonMark文書をXSL-FO経由でPDFへ変換する

前回、cmark[1]でCommonMark[2]のASTをXML形式で得られることを確認しました。

記事中で登場するコードの動作についての保証はできかねます*1。ご了承ください。

今回の記事で使用した環境は次になります。

文書はその目的に適した構造を持ち、組版では多くの場合その構造に沿ってマークアップを行うでしょう[3]。
Markdownはそれらを放棄しているために、文書として組版するためには不足するものを補う必要があります*2。基本的には、「レポート」であるならレポートの見た目になるよう、Markdown文書とレポートの対応関係を用意する必要があるということです。例えば「<heading level="1">のテキストをレポートのタイトルとする」として、「レポートタイトルはフォントサイズは本文の2倍、中央寄せ、前後のアキは……」とスタイルを用意していきます。書籍を組むのであれば目次や索引などが補う対象となります。

記法の数が比較的少ないCommonMarkとはいえ、すべての対応関係について記述するのは労力が大きいため、一部のみとします。また、前回言及した「Markdown + XSL → PDF」[4]の記事ではリンク記法を応用して脚注記法を用意していますが、処理が複雑化しますのでこういった応用もしません。

変換するCommonMark文書

# CommonMark文書をAH XSL FormatterでPDFにする

## はじめに

[XSL](https://www.w3.org/TR/xsl/)は2部に分けられます。一方はスタイルシート言語としてのXML語彙(XSL-FO)、他方はXML変換のための言語XSLTです。

## 基本版面

`<fo:simple-page-master>`とその子要素に基本版面のサイズとそれぞれの区画を記述していきます。

* `<fo:region-before>`
* `<fo:region-after>`
* `<fo:region-start>`
* `<fo:region-end>`
* `<fo:region-body>`


startからendは*行進行方向*、beforeからafterは*ブロック進行方向*です。

## 本文

```xml
<fo:flow flow-name="xsl-region-body">
    <fo:block>
        ...
```

region-bodyの`region-name`の既定値は「xsl-region-body」ですが、**変更**できます。

基本版面が完成したら、ヘッダやフッタなど配置が固定的なものを配置する`<fo:static-content>`と、
見出しや本文の`<fo:flow>`を記述していきます。版面で指定したページマスタや区画を指定します。

ようやく紙面に文字を表示するための記述に入れます。LaTeXなどではクラスファイルとしてまとめられている箇所を自力で書いているようなものですので、慣れるまでは煩雑に見えるかもしれません。

XMLへの変換

このCommonMark文書をPDFに変換します。
cmarkによるCommonMark文書のXML変換はコマンドライン操作になります。標準出力に出力されるため、出力結果をファイルに書き込んでいます。変換結果のXMLで文字化けがしていたら、コマンドラインの文字コード設定などが関係しているかもしれません。

> cmark.exe doc.md -t XML > result.xml 

このXMLをXSLTで変換し、得られたFOをAntenna House XSL FormatterでPDFへと変換します。先に結果を見てみましょう。

PDF出力結果



源ノ明朝、源ノ角ゴシックを使用したPDFが出力されています。欧文はTimes New RomanとDeja Vu Sansです。

XSLTの抜粋

AH Formatterではソフトウェア側の設定をあまり弄らずともOpenTypeフォントを使用できます。

<!-- XSLT -->
<xsl:attribute-set name="mainfont">
 <xsl:attribute name="font-family">Times New Roman, 源ノ明朝</xsl:attribute>
 <xsl:attribute name="font-size">14q</xsl:attribute>
 <xsl:attribute name="line-height">1.7</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="/"><fo:root>を置きます。


<xsl:template match="/">
 <xsl:variable name="varAuthor" select="'アンテナハウス'" />
 <xsl:variable name="varTitle"><xsl:text>CommonMarkからXSL-FOでPDFを作る</xsl:text>
</xsl:variable>
 <xsl:variable name="varMainPageName" select="'main'" />
 
 <fo:root xsl:use-attribute-sets="attsRoot">
 <!-- 基本版面 -->
 <xsl:call-template name="layoutMasterSet"> 
 <xsl:with-param name="mainPageName" select="$varMainPageName" />
 </xsl:call-template>
 <!-- 表紙 -->
 <xsl:call-template name="coverPage">
 <xsl:with-param name="mainPageName" select="$varMainPageName" />
 <xsl:with-param name="author" select="$varAuthor"/>
 <xsl:with-param name="title" select="$varTitle"/>
 </xsl:call-template>
 
 <!-- 文書内容 -->
 <fo:page-sequence master-reference="{$varMainPageName}"
 xsl:use-attribute-sets="attsPageSequence">
 <xsl:apply-templates />
 </fo:page-sequence>
 </fo:root>
</xsl:template>

<xsl:template match="md:document">

 <xsl:call-template name="header">
 <xsl:call-template name="footer" />
 <fo:flow flow-name="xsl-region-body">
 <xsl:apply-templates />
 </fo:flow>
</xsl:template>

基本版面についてはMarkdown側で干渉するところは特にないので名前付きテンプレートとして省略しました*3。coverPageテンプレートで本文とは別に表紙を作っています。
著者情報を「レベル1見出しの直後の段落を著者名にする」といった形でMarkdown側で記述するようにもできるでしょうが、
やはり「Markdownでは記述しない箇所を決める」という割り切りがある程度の単純さを保つために必要に思えます。

ブロックの例を見てみましょう。

<xsl:attribute-set name="attsCode">
 <xsl:attribute name="font-family">Source Code Pro, 源ノ角ゴシック Code JP, monospace</xsl:attribute>
 <xsl:attribute name="font-size">12q</xsl:attribute>
 <xsl:attribute name="xml:space">preserve</xsl:attribute>
</xsl:attribute-set>

<xsl:attribute-set name="attsCodeBlock" use-attribute-sets="attsCode">
 <xsl:attribute name="linefeed-treatment">preserve</xsl:attribute>
 <xsl:attribute name="axf:border-bottom-left-radius">3pt</xsl:attribute>
 <xsl:attribute name="axf:border-top-right-radius">3pt</xsl:attribute>
 <xsl:attribute name="border">solid 1.5pt gray</xsl:attribute>
 <xsl:attribute name="background-color">silver</xsl:attribute>
 <xsl:attribute name="padding">3mm</xsl:attribute>
 <xsl:attribute name="space-before">4mm</xsl:attribute>
 <xsl:attribute name="space-after">4mm</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="md:code_block">
 <fo:block xsl:use-attribute-sets="attsCodeBlock">
 <xsl:apply-templates />
 </fo:block>
</xsl:template>

コードブロックです。CommonMarkのASTにはinfoとして最初の行の```xml、「xml」が格納されていますが、
1からシンタックスハイライトを行うのはつらいので、背景色やボーダー、等幅フォントを指定しています。< xsl:templatye match="md:code_block">の箇所はかなりシンプルにできていますね。

<xsl:attribute-set name="attsListBlock">
 <xsl:attribute name="space-before">1rem</xsl:attribute>
 <xsl:attribute name="space-after">1.4rem</xsl:attribute>
 <xsl:attribute name="provisional-label-separation">2mm</xsl:attribute>
 <xsl:attribute name="provisional-distance-between-starts">5mm</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="md:item">
 <xsl:variable name="type" select="../@type" />
 
 <fo:list-item xsl:use-attribute-sets="attsItem">
 <fo:list-item-label end-indent="label-end()">
 <fo:block text-align="end">
 <xsl:attribute name="axf:number-transform">
 <xsl:choose>
 <xsl:when test="$type = 'bullet'">
 <xsl:text>circle</xsl:text>
 </xsl:when>
 <xsl:when test="$type = 'ordered'">
 <xsl:text>1.</xsl:text>
 </xsl:when>
 </xsl:choose>
 </xsl:attribute>
 <xsl:number />
 </fo:block>
 </fo:list-item-label>
 <fo:list-item-body start-indent="body-start()">
 <fo:block>
 <xsl:apply-templates />
 </fo:block>
 </fo:list-item-body>
 </fo:list-item>
</xsl:template>

<xsl:template match="md:list">
 
<fo:block-container column-count="2">
 <fo:list-block xsl:use-attribute-sets="attsListBlock">
 <xsl:apply-templates />
 </fo:list-block>
</fo:block-container>
</xsl:template>

箇条書き(リスト)です。それぞれの項目が短い場合、1段だと余白がかなり空いてしまいます。AH Formatterではブロックコンテナでも段組みを別に指定できるので、2段組にしてみました。今回使用してはいないものの、数字付き箇条書きでも動作します。CommonMarkのASTでは箇条書きは同じlist構造でtypeプロパティの値が違う形なので、HTMLのようにulとolが分けられているより対応が楽だと感じました。入れ子のリストでの記号の変更も、 <xsl:variable name="nest" select="count(ancestor::list)" />のようにすれば階層が割と簡単に分かりそうです。
ところでこの組版結果は想定とズレていて、ASTの<item>の内部で一度<paragraph>が使われているため、ラベルと項目の間に、通常の段落を想定した段落開始のインデントが入ってしまっています。

インライン記法の変換例を見てみましょう。

<xsl:attribute-set name="attsEm">
 <xsl:attribute name="axf:text-emphasis-style">dot</xsl:attribute>
 <xsl:attribute name="axf:text-emphasis-font-family">Kenten Generic</xsl:attribute>
 <xsl:attribute name="axf:text-emphasis-skip">spaces punctuation symbols narrow</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="md:emph">
 <fo:inline xsl:use-attribute-sets="attsEm">
 <xsl:apply-templates />
 </fo:inline>
</xsl:template>

和文の簡易マークアップで悩ましいemとstrong。AH Fromatterでは圏点の拡張がありますから、emでは圏点を使用してみました。


今回の記事は『スタイルシート開発の基礎 XMLとFOで簡単な本を作ってみよう』[5]を片手に、適宜読み替えながら書き進めてみました。Markdownからの変換はLaTeXやHTML経由でのものが多く、それぞれに長所や特徴がありますが、XSL-FOで1つ1つ記法とFOを確かめながらというのも、組版全般やXSLTの学習がしっかり進んだように感じ、良いものです。
体感としては、一般的なプログラミング言語で同程度の内容を書くよりも3倍くらいの行数になっている感じがします。

*1XSLTとXSL-FOの記法について学習中の人間が執筆しました。誤りが含まれる箇所があるかもしれません。

*2 「不足する」他のものとしては、表示言語などもそうです。多くのXMLアプリケーションでは「xml:lang」や「id」といった情報は<xsl:copy-of>を利用して入力から出力へそのまま渡せますが、CommonMarkのASTにその情報は含まれません。<html_block>の情報としてマークアップを処理する、言語ごとにファイルを分けるなど、手軽な処理とはいかないでしょう。

*3 <template match="/">は個人的な感覚としては一般的なプログラミング言語におけるmain関数に近いので、切り出せる処理を適時追い出し、子の箇所で必要な値(で子からの取得が面倒なもの)については<xsl:with-param>で渡しています。<xsl:attribute>は調整する可能性がないものは<xsl:template>内でハードコード、そうでなければxsl:use-attribute-setsで別に切り出しています。2ページもない文書を処理するにしては冗長かもしれません。


参考資料

  1. [1] https://github.com/commonmark/cmark
  2. [2] https://commonmark.org/
  3. [3] 構造化文書とは – アンテナハウス
  4. [4] Markdown + XSL → PDF
  5. [5] スタイルシート開発の基礎 – アンテナハウス


Antenna House Formatter

DITA/XML Service Antenna House


関連記事


e-na伊那谷 旅便り 第30回 お味噌作り

日本で最も味噌が作られているのが長野県のようです。
子供の頃は実家で仕込み味噌を作っていたように記憶しています。今回仕込み味噌作り体験をさせていただきました。

こんなおおきな釜で大豆を炊き上げます。

薪をくべながらの作業は、大変ですが楽しいです。

しっかり冷まして、桶に麹と塩を入れておおよそ1年間仕込みます。
今年は、新型コロナウイルスの影響で仕込みが1カ月程、遅れてしまいましたが、なんとか仕込むことができました。

発酵食品も今やブームになっておりますので、来年が楽しみです。

こちらが1年前に仕込んだ味噌です。
無添加ですし、うま味があり、お味噌汁はもちろんですが、今の季節にはきゅうりに大変あいますね。

お味噌といえば、ハナマルキの伊那工場があります。あの“おみそな~らハナマルキ♪”です。
工場見学や、味噌の基礎知識の学習、より手軽に味噌作りを体験できる「みそ作り体験館」があります。

みそ作り体験館
https://misotaiken.jp

興味のある方は、いかがでしょうか。


電帳法_導入手順! YouTubeミニセミナー第8弾

  • 電帳法の4つの制度
    • → 帳簿・書類・スキャナ・電子取引
  • 要件確保のポイント
    • → 5要件
  • 申請書の確認
    • → 帳簿・書類・スキャナは申請書の提出とその承認獲得が要件
  • システム・サービスの選定
    • → JIIMA認証製品がおすすめ
  • 導入に向けてのチェックシート
    • → 帳簿・書類・スキャナ・電子取引 4つの制度に応じてポイントをチェック

内容をギュッと16分に圧縮して、YouTubeでいつでも視聴できるミニセミナーにしました。
お好みのところのみ短時間での確認も可能です!!


皆様のお役に立てれば幸いです。
また、要望を頂ければ、その要望にマッチした、セミナーの制作を検討させていただきます。

【公開セミナー 一覧】

  1. 第1回「日本はデジタル化後進国か?!」
    https://youtu.be/aKctKhLRjOY
  2. 第2回「電帳法」を優しく解説
    https://youtu.be/RbEZe00m0TA
  3. 第3回「帳簿・書類」の7年保存がそもそも何故求められるのか?
    https://youtu.be/Ht68XGdFdnU
  4. 第4回 タイムスタンプって_なに?
    https://youtu.be/RqRbwlHvAfo
  5. 第5回 国税庁の「電子帳簿保存法」のページの見方
    https://youtu.be/pCUfL17KgEY
  6. 第6回 電帳法4制度の横断的概要学習!
    https://youtu.be/5HbsneGZAFQ
  7. 第7回 電帳法_電子取引の最新情報!
    https://youtu.be/cRT4Cw4-n70

筆者紹介
益田康夫
メールアドレス:masuda@antenna.co.jp
1984年に社会人になり、IT業界一筋ながら3回の転職を経て現在に至っています。
特に2008年のリーマンショック後の不況の影響を受けて、2010年6月末にリストラ退社して現本業のアンテナハウス株式会社 https://www.antenna.co.jp/ に入社しました。Sun MicrosystemsやOracleを中心にしたITインフラから、IAサーバとしてのCompaqやIBMなどや、文書管理システムやポータルシステムを販売していた前職と、現在のアンテナハウスでのPDF技術や電子ファイルの変換技術などを中心にした、e-ドキュメントソリューションを探求してノウハウを習得してきました。

特に、2011年以降、個人で学習時間をひねり出して、文書情報管理士資格2級、1級、上級と最短記録でレベルアップさせ、更に国家資格の行政書士※、日商簿記3級を2015年までに取得しました。

※行政書士とは、https://www.gyosei.or.jp/information/ をご覧ください。


ScanSave on ONe SaaS
ScanSave v4

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