Barcode4J バーコードXMLフォーマット

はじめに

このページでは、Barcode4Jで使われている、バーコード定義用のXMLフォーマットについて説明します。また、各種バーコードによってサポートされるデータ形式についても説明します。

構文

訳注:原文では名前空間なしのXML構文で書かれていますが、この翻訳では全て名前空間ありの記述としました。Copper PDFや、XSLT等の一般的なXMLアプリケーションでBarcode4Jを使う場合は名前空間が必要です。この翻訳では、名前空間の接頭辞は”bc”としていますが、これは任意に変えられます。

バーコードXMLフォーマットの構文は次の通りです:

<bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns"
 message="200123456789">
 <bc:{type}>
   {バーコード個別の設定}
 </bc:{type}>
</bc:barcode>

{type}は、「ean-13」や「code39」のようなバーコードタイプ名で置き換えてください。また、「org.krysalis.barcode4j.impl.Code39」のような実装クラスの省略無しのクラス名を使うこともできます。内部的にはBarcodeClassResolverインターフェイスを使って名前を解決しています。

{バーコード個別の設定}は、そのバーコードの種類により、異なります。詳しくは、後述しますが、例としては次のようなものです:

<bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns">
  <bc:intl2of5>
    <bc:height>10mm</bc:height>
    <bc:wide-factor>2.5</bc:wide-factor>
  </bc:intl2of5>
</bc:barcode>

データ型

バーコードの設定は、次のデータ型から構成されます。

  • {boolean}: 値は(true|yes|on)か(false|no|off)
  • {string}: 「hello123」のような簡単なユニコードの文字列
  • {char}: ユニコード文字
  • {number}: 「2.43」や「5」などの数字
  • {unit}: 長さの単位、mm、cm、ptのどれか
    • デフォルトの単位は通常mm(ミリメートル)です。
    • 特殊な単位にmw(モジュール幅)があります。これは1次元バーコードでは線の最小幅で、2次元バーコードではドットの大きさです。
  • {length}: 「{number}[[ ]{unit}」という形式での長さ。例:1.2mm, 5.0, 3, or 10mw.
  • {checksum-mode}:チェックサムの動作を決定する。
    取りえる値は(全ての値が全てのバーコードフォーマットでサポートされているわけではない。):

    • add:チェックサムが自動的にデータに追加される
    • check:バーコードの描画の間、チェックサムは中断する
    • ignore:チェックサム処理は行われない
    • auto:バーコードタイプのデフォルトの動作
  • {human-readable-placement}:この列挙型はバーコードの可読部分の位置を決める。
    • bottom:可読部分はコードシンボルの底部に置かれる
    • top:可読部分はシンボルの上部に置かれる
    • none:可読部分は生成されない
  • {baseline-alignment}:この列挙型はPOSTNETのようなバーコードラインのそろえ方を決める。
    • bottom:長短ラインは下ぞろえで配置される
    • top:長短ラインは上ぞろえで配置される
  • {font-name}:名前の通り、出力の際に使われるフォントの名前です。全ての出力フォーマットで全てのフォントが利用できるわけではないことに注意してください。
  • {shape}:この列挙型はDataMatrixバーコード用のシンボル設定の選択を決める
    • force-none:正方形のシンボルも長方形のシンボルも両方許可される
    • force-square:正方形シンボルの使用を強制する
    • force-rectangle:長方形シンボルの使用を強制する
  • データ型は{length:15mm}のような形式で記述します。データ型の後の値はデフォルトの値を意味します。

バーコードXMLフォーマット:省略形

次のcode39の例のように、バーコードXMLフォーマットは簡略化できます(結果、全てのデフォルトの値が使われます)。

<bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns"
 message="200123456789">
 <bc:code39/>
</bc:barcode>

この場合、デフォルトの値を考慮すると、次のように記述したのと同じことになります。

<bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns"
 message="200123456789">
  <bc:code39>
    <bc:height>15mm</bc:height>
    <bc:module-width>0.19mm</bc:module-width>
    <bc:wide-factor>2.5</bc:wide-factor>
    <bc:interchar-gap-width>1mw</bc:interchar-gap-width>
    <bc:quiet-zone enabled="true">10mw</bc:quiet-zone>
    <bc:checksum>auto</bc:checksum>
    <bc:human-readable>
      <bc:placement>bottom</bc:placement>
      <bc:font-name>Helvetica</bc:font-name>
      <bc:font-size>8pt</bc:font-size>
      <bc:pattern>{string}</bc:pattern> <!-- 詳細は後述 -->
      <bc:display-start-stop>false</bc:display-start-stop>
      <bc:display-checksum>false</bc:display-checksum>
    </bc:human-readable>
  </bc:code39>
</bc:barcode>

可読部分のパターン

一般的な1次元バーコードは内部的な構造を持ちません。そのため、多数の桁からなる巨大な数字の場合、カスタマイズされた可読部分を表示します。

複雑で長いメッセージを簡単に読み取れるようにするためには、パターンが必要です。可読部分にカスタムパターンを加える機能が利用可能なのはInterleaves 2 of 5, Code 39, Code 128 and Codabarだけです。その他の種類のバーコードは可読部分をもたないか、あるいはメッセージの特殊な書式設定が必要になります。(例:UPC・EAN)

パターンの中でアンダーライン”_”は次のデータのための置き換え文字として使われます。パターン内の他の文字はデータの間に挿入される。バックスラッシュ””はエスケープ記号です。”?”はアンダーラインとバックスラッシュを含む任意の文字に置き換えられます。実際に”?”を表示したい場合は”?”と記述してください。

例:

バーコードメッセージ 1234567890 01012001103854 1234567890
可読パターン ____ ____ __ __/__/____ __:__:__ UTC ___________
可読メッセージ 1234 5678 90 01/01/2001 10:38:54 UTC 1234567_890

サポートされている全てのバーコードの設定詳細

訳注:JANコードはEAN-13, EAN-8, EAN-128と互換であるため、これをそのまま使用してください。Copper PDFは、ISBN, QRコードもサポートしています。ISBN, QRコードについてはこちらを参照してください

{バーコード個別の設定}

PDF

バーコード/QRコードプラグイン

このプラグインについて

barcode
Copper PDF 2.1.3 以降で、バーコード(QRコードを含む)の表示が可能になるプラグインです。

このプラグインには、

Barcode4J 2.0
http://barcode4j.sourceforge.net/

QRコードクラスライブラリ for Java ver. 0.50beta
http://www.swetake.com/qr/java/qr_java.html

を使用しています。

インストール方法

こちらからダウンロードしてください。

ダウンロードパッケージに含まれているcopper-pdf/pluginsの内容を、Copper PDFのpluginsディレクトリの中にコピーしてください。

(DEBまたはRPMパッケージ版のCopper PDFのpluginsディレクトリは/usr/share/copper-pdf/にあります。)
Copper PDFが動作中の場合、1分ほど待つか、再起動するとプラグインが読み込まれます。

基本的な使用方法

バーコードタグの詳細な仕様はBarcode4J ドキュメント抄訳を参照してください。ここでは概要を解説します。

パッケージに含まれているサンプルHTMLコード(example.html)もご利用ください。

プラグインをインストールしたCopper PDFでは、HTML/XHTML中に記述された、http://barcode4j.krysalis.org/ns名前空間に属する要素がバーコードに置き換えられます。
例えば、以下の記述はEAN-13(JAN-13)形式のバーコード画像に置き換えられます。

<bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns"
 message="200123456789">
 <bc:ean-13>
 <bc:height>15mm</bc:height>
 <bc:module-width>0.33mm</bc:module-width>
 <bc:quiet-zone enabled="true">10mw</bc:quiet-zone>
 <bc:checksum>add</bc:checksum>
 <bc:human-readable>
   <bc:placement>bottom</bc:placement>
   <bc:font-size>8pt</bc:font-size>
 </bc:human-readable>
 </bc:ean-13>
</bc:barcode>

要素の記述方法(The Barcode XML format)は以下のページで解説されています。

(英語) http://barcode4j.sourceforge.net/2.0/barcode-xml.html
(日本語訳)
https://copper-pdf.com/?p=905

このプラグインは、Barcode4Jがサポートする、全ての形式のバーコードを表示することが出来ます。
加えて、EAN-13(JAN-13)の変形として、日本国内で流通する図書のISBNを表記するためのバーコードと、QRコードをサポートしています。

CSSによるサイズ、色、フォントの指定

サイズを固定したい場合は、CSSによって指定することができます。
また、背景色と描画色は同様にbackground-color, colorによって指定します。
例えば、以下の例では幅が1cmに固定され、背景色がピンク、描画色が青となります。

<bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns"
 xmlns:html="http://www.w3.org/1999/xhtml"
 html:style="width: 1cm; background-color: Pink; color: Blue"
 message="エンコードする文字列">
 <bc:qrcode/>
</bc:barcode>

font-name要素による指定は無視されます。代わりに、CSSのfont-family, font-weight, font-styleが適用されます。

OCRBフォントの使用を推奨します。MS Officeに含まれているものや、以下のサイトで配布されているものがあります。
http://ansuz.sooke.bc.ca/software/ocrb.php

QRコードの表示方法

HTML中に次の記述をすることで、QRコードが表示されます。

<bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns"
 message="エンコードする文字列">
 <bc:qrcode/>
</bc:barcode>

qrcode要素には、次の要素を含むことが出来ます。
QRコードについては、以下のサイトもご参照ください。
http://www.denso-wave.com/qrcode/qrgene2.html

・version

QRコードのバージョンです。0から40の整数で指定します。0の場合は自動設定です。
デフォルトは0です。

・ecc

エラー訂正レベルです。L, M, Q, Hのいずれかを指定します。
デフォルトはMです。

・encmode

エンコードモードです。N(数字), A(英数字), B(8ビットバイト)のいずれかを指定します。
デフォルトはBです。

.module-width

セルの大きさです。単位はcm, mm, pt, inのいずれかを使用可能です。
デフォルトは0.25mmです。

.quiet-zone

上下左右のマージンです。単位はcm, mm, pt, in, mw(セルの大きさ)のいずれかを使用可能です。
デフォルトは1mwです。

例えば、以下の場合はバージョン10、エラー訂正レベルH、英数字モード、セルサイズ0.5mm、マージン1mmのQRコードを生成します。

<bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns"
 message="ENKODOSURUMOJIRETSU">
 <bc:qrcode>
 <bc:version>10</bc:version>
 <bc:encmode>M</bc:quiet-zone>
 <bc:ecc>H</bc:shape>
 <bc:module-width>0.5mm</bc:module-width>
 <bc:quiet-zone enabled="true">2mw</bc:quiet-zone>
 </bc:qrcode>
</bc:barcode>

ISBNコードについて

記述方法とデフォルト値は次のとおりです。
(ただし、バージョン2.0以前の各パラメータのデフォルト値はEAN-13(JAN-13)と同じになります。)

<bc:barcode>
  <bc:isbn>
    <height>{length:14mm}</height>
    <module-width>{length:0.33mm}</module-width>
    <quiet-zone enabled="{boolean:true}">{length:5mm}</quiet-zone>
    <checksum>{checksum-mode:auto=add|check}</checksum>
    <human-readable>
      <placement>{human-readable-placement:bottom}</placement>
      <font-name>{font-name:OCRB}</font-name>
      <font-size>{length:3.7mm}</font-size>
    </human-readable>
  </bc:isbn>
</bc:barcode>

再配布条件

Copper PDF バーコードプラグインは自由に配布することができます。
付属のライブラリについては、
copper-pdf/plugins/avalon-framework.LICENSE.txt
copper-pdf/plugins/barcode4j.LICENSE.txt
copper-pdf/plugins/Qrcode.LICENSE.txt
をお読みください。


PDF

Code 128

実例

example-code128

構文

<bc:barcode message="0123456789"<
  <bc:code128<
      <bc:height<15mm</bc:height<
      <bc:module-width<0.21mm</bc:module-width<
      <bc:quiet-zone enabled="true"<10mw</bc:quiet-zone<
      <bc:human-readable<
        <bc:placement<bottom</bc:placement<
        <bc:font-size<8pt</bc:font-size<
      </bc:human-readable<
  </bc:code128<
</bc:barcode<

メモ

  • {height}は少なくともバーコードの長さの0.15倍か0.25インチ以上無ければならない

メッセージ書式

  • 有効文字:全7ビットASCII(US-ASCII)文字セットがサポートされている
  • ファンクション1から4までが使用可能であり、メッセージではASCII文字の0xF1 (241), 0xF2 (242), 0xF3 (243) and 0xF4 (244) としてコード化される。

PDF

Codabar

実例

example-codabar

構文

<bc:barcode message="0123456789">
  <bc:codabar>
      <bc:height>15mm</bc:height>
      <bc:module-width>0.21mm</bc:module-width>
      <bc:wide-factor>3.0</bc:wide-factor>
      <bc:quiet-zone enabled="true">10mw</bc:quiet-zone>
      <bc:human-readable>
        <bc:placement>bottom</bc:placement>
        <bc:font-size>8pt</bc:font-size>
      </bc:human-readable>
  </bc:codabar>
</bc:barcode>

メモ

  • 現在チェックサムは実装されていない

メッセージ書式

  • 有効な文字は[0~9]と[- $ : / . +]
  • 開始と終了文字は[a b c d e * n t]

PDF

Interleaved 2 of 5

実例

example-intl2of5

構文

<bc:barcode message="0123456789">
  <bc:intl2of5>
      <bc:height>15mm</bc:height>
      <bc:module-width>0.21mm</bc:module-width>
      <bc:wide-factor>3.0</bc:wide-factor>
      <bc:quiet-zone enabled="true">10mw</bc:quiet-zone>
      <bc:checksum>ignore</bc:checksum>
      <bc:human-readable>
        <bc:placement>bottom</bc:placement>
        <bc:font-size>8pt</bc:font-size>
        <bc:display-checksum>false</bc:display-checksum>
      </bc:human-readable>
  </bc:intl2of5>
</bc:barcode>

メモ

  • {height}は少なくともバーコードの長さの0.15倍か0.25インチのどちらか大きい値以上無ければならない
  • {module-width}は少なくとも7.5ミル(1ミルは1000分の1インチ)か0.19ミリメートル以上必要である。
  • もし、狭いエレメントが20ミル以上なら、広いエレメントは2倍から3倍の範囲に収める必要がある。もし、狭いエレメントが20ミル未満なら、倍率は2.2倍を超えなければならない。
  • {quiet zone}は少なくともモジュール幅の10倍か0.25インチは無ければならない。
  • {display-checksum}は計算されたチェックサムを可読領域に含めるかを決定する。
  • このシンボロジーでは二つの文字が交互に配置されるので(一つはバーに、次は空白部分に置かれる)、読み取り機により返されるメッセージは常に偶数桁の数値になる。必要なら、0文字桁がデータの前に追加される。

メッセージ書式

有効な文字は[0~9]である。


PDF

DataMatrix

実例

example-datamatrix-square

構文

<bc:barcode message="2012345">
  <bc:datamatrix>
      <bc:module-width>0.352777mm</bc:module-width> <!-- 1 pixel at 72dpi -->
      <bc:quiet-zone enabled="true">1mw</bc:quiet-zone>
      <bc:shape>force-none</bc:shape>
  </bc:datamatrix>
</bc:barcode>

メモ

  • このシンボロジーは可読領域を持たない。
  • このアルゴリズムは常に可能な最も小さいシンボル配列を選択する。
  • 構造的な付加機能はまだ実装されていない。

メッセージ書式

  • 全てのISO-8859-1文字は有効なメッセージ文字である。
  • 数字文字だけを使えばより小さいシンボルサイズに収められる。
  • 現時点では、ECI機能は使用できない。ISO-8859-1エンコーディング文字だけが使用できる。
  • 現時点では、FNC1と読み取り機のプログラミングシグナルはコード化できない。
  • アップリケーションの中には(グループ区分け文字)や (レコード区分け文字)のような特殊なASCII文字を使用するものがある。そのままバーコード4Jに送ってよい。Javaではそのようなアップリケーションのプリアンブル(“[)>RS05GS”)は”[)>u001E05u001D”.と表現される。同じデータがURLの一部としてエンコードされる(バーコードサーブレット使用時)と、”%5B%29%3E%1E05%1D”となる。

PDF

PDF417

実例

example-pdf417

構文

<bc:barcode message="2012345">
  <bc:pdf417>
      <bc:module-width>0.352777mm</bc:module-width> <!-- 1 pixel at 72dpi -->
      <bc:row-height>3mw</bc:row-height>
      <bc:columns>2</bc:columns>
      <bc:min-columns>2</bc:min-columns>
      <bc:max-columns>2</bc:max-columns>
      <bc:min-rows>3</bc:min-rows>
      <bc:max-rows>90</bc:max-rows>
      <bc:ec-level>0</bc:ec-level>
      <bc:quiet-zone enabled="true">2mw</bc:quiet-zone>
      <bc:vertical-quiet-zone>2mw</bc:vertical-quiet-zone>
      <bc:width-to-height-ratio>3.0</bc:width-to-height-ratio>
  </bc:pdf417>
</bc:barcode>

メモ

  • このシンボロジーは可読領域を持たない。
  • {ec-level}はエラー修正レベルであり、0から8の間で無ければならない。
  • {vertical-quiet-zone}が明示的に設定されない場合、{horizontal-quiet-zone}が設定されているのと同じことになる。
  • メッセージのサイズによって、{columns}と{ec-level}は調整する必要があるかもしれない。起こりえるエラーのメッセージを注意深く読んでほしい。
  • 代替方法として、{columns}セッティングを削除して、メッセージによってシンボルを伸び縮みさせられる{min/max-columns}と{min/max-rows}を扱っても良い。{width-to-height-ratio}を使って、シンボルの形をコントロールできる。(注:有効な行数は3から90の間に、有効な列数は1から30の間に設定しなければならない。)
  • {columns}設定を使うと{min/max-columns}設定を無効にする。あるいは言い換えるなら、{columns}を設定すると{min-columns}と{max-columns}を同じ値に設定する。
  • Macro PDF417 機能はまだ実装されていない。
  • Compact PDF417 機能はまだ実装されていない。

メッセージ書式

  • 印刷可能な全てのASCII文字は有効な文字である。
  • バイトコンパクションモードは256の全ての取りえる8ビットのバイト値をコード化させられる。
  • 数字文字だけを使えばより小さいシンボルサイズに収められる
  • 現時点では、ECI機能は使用できない。全ての文字は”cp437″ (PC437)エンコーディングで翻訳される。

PDF

USPS Intelligent Mail

実例

example-usps4cb

構文

<bc:barcode message="01234567094987654321012345678">
  <bc:usps4cb>
      <bc:module-width>0.02in</bc:module-width>
      <bc:track-height>0.050in</bc:track-height>
      <bc:ascender-height>0.050in</bc:ascender-height>
      <bc:interchar-gap-width>0.025in</bc:interchar-gap-width>
      <bc:quiet-zone enabled="true">10mw</bc:quiet-zone>
      <bc:vertical-quiet-zone>0.028in</bc:vertical-quiet-zone>
      <bc:bc:human-readable>
        <bc:placement>bottom</bc:placement>
        <bc:font-size>8pt</bc:font-size>
      </bc:human-readable>
  </bc:usps4cb>
</bc:barcode>

メモ

  • 上記の設定値の有効範囲の情報に関してはこのシンボルの仕様詳細を参照していただきたい。

メッセージ書式

  • 有効な文字は[0~9]
  • コード処理の過程でその他の全ての文字は自動的に除去される。

リンク

仕様詳細:http://ribbs.usps.gov/OneCodeSolution(英語)


PDF

POSTNET

実例

example-postnet

構文

<bc:barcode message="2012345">
  <bc:postnet>
      <bc:height>15mm</bc:height>
      <bc:module-width>0.02in</bc:module-width>
      <bc:quiet-zone enabled="true">10mw</bc:quiet-zone>
      <bc:checksum>ignore</bc:checksum>
      <bc:interchar-gap-width>0.026in</bc:interchar-gap-width>
      <bc:tall-bar-height>0.125in</bc:tall-bar-height>
      <bc:short-bar-height>0.050in</bc:short-bar-height>
      <bc:baseline-alignment>bottom</bc:baseline-alignment>
      <bc:bc:human-readable>
        <bc:placement>bottom</bc:placement>
        <bc:font-size>8pt</bc:font-size>
        <bc:display-checksum>false</bc:display-checksum>
      </bc:human-readable>
  </bc:postnet>
</bc:barcode>

メッセージ書式

  • 有効な文字は[0~9]である
  • {display-checksum}は計算されたチェックサムを可読領域に含めるかを決定する。

PDF

EAN-128(JAN-128)

UCC/EAN-128, GS1-128としても知られている。

構文

<bc:barcode message="42012345ñ910112345678912345678ð">
  <bc:ean-128>
      <bc:height>15mm</bc:height>
      <bc:module-width>0.21mm</bc:module-width>
      <bc:check-digit-marker>ð</bc:check-digit-marker>
      <bc:group-separator>ñ</bc:group-separator>
      <bc:template>(420)n5(91)n2+n9+n2-8+cd0</bc:template>
      <bc:quiet-zone enabled="true">10mw</bc:quiet-zone>
      <bc:human-readable>
        <bc:placement>bottom</bc:placement>
        <bc:font-size>8pt</bc:font-size>
        <bc:omit-brackets>false</bc:omit-brackets>
      </bc:human-readable>
  </bc:ean-128>
</bc:barcode>

メモ

  • EAN-128はCode128シンボロジーを基礎にしている。
  • {height}は少なくともバーコードの長さの0.15倍か0.25インチ以上無ければならない
  • {template}の値は通常は任意である。実装すると、AI(アップリケーション識別子)を検査することで正しいテンプレートを識別しようとする。組み込まれた定義済みアップリケーションテンプレートのテーブルが用意されている。
  • {template}の書式は(カッコに囲まれた)AIナンバーの繰り返しの集合で、後にフィールド記述が続く。許容されるデータ型は「n」(数字)、「an」(英数字)、「d」(日付)、と「cd」(チェックデジット)である。「cd」はAIの後の最初の文字から始まるチェックディジットを計算する。「cd0」はチェックディジットの計算にAIを含む(USPSで使われる)。複数のフィールド部は「+」文字で区切れる。
  • 例:「n13」はちょうど13桁の数字フィールドを定義する。「n13+cd」はちょうど13桁の数字フィールドにチェックディジット加えたものを定義する。「an1-9」は1から9文字の英数字フィールドを定義する。
      実例:”(01)n13+cd(421)n3+an1-9(10)an1-20″
  • {group-separator}はメッセージの中で使うグループの区切り文字を定義する。デフォルトではASCII (0x1D, 035) または0xF1 がグループ区切り文字として認識される。XSL-FOアップリケーションでは、0xF1はASCII の替わりに使う必要があるかもしれない。
  • {check-digit-marker}は、メッセージの中で、バーコード4Jにより自動的に計算されるチェックディジット用のプレースホルダーとして使う文字を表す。
  • もし、{omit-brackets}の設定が「true」の場合、可読領域のAIの周りにカッコが表示されない。

メッセージ書式

  • 有効な文字:全ての7ビットASCII(US-ASCII)文字がサポートされている
  • ファンクション1と3が使用可能で、メッセージの中では、ASCII文字の0xF1 (241), 0xF3 (243)としてコード化される。

PDF