0

任意の文字列を、PDF に印刷できる code128 バーコードに変換できる必要があります。

私のアイデアは、code128 フォントを PDF に埋め込み、そのフォントを使用して、文字ごとにバーコードとして表示する必要がある文字列をレンダリングすることでした。

ただし、チェックサムを計算し、開始文字と停止文字を含める必要があることもわかりました。

これはPHPでは不可能ですか?私はどこにも解決策を見つけていません。私が見つけることができる唯一の解決策は、バーコードを画像として直接レンダリングすることです。これは、PDF でバーコードを作成するためにフォントを使用する必要があるため、現在の状況では役に立ちません。

4

2 に答える 2

4

作業を 128B に制限すると、大文字と小文字、数字、およびほとんどの句読点にアクセスできます。また、A および C シンボル体系にシフト インおよびシフト アウトするコードを記述する必要がなくなります。これにより、チェックサムを計算するコードが非常に簡単になります。

Code 128B の開始文字の値は 104 です。すべての Code 128 バリエーションの停止文字の値は 106 ですが、その値は chksum の計算には含まれません。実際の演習では、"Hello" という文字列を選びましょう。Code 128 テーブルにアクセスできることを確認してください。これから説明するすべての値は、ASCII や UTF-8 ではなく、その表に含まれるものではありません。

チェックサムは、開始コードを除いて、バーコード内の位置によって文字の値の倍数を加算することによって計算されます。

スタートコードの位置は「1」ですが、スタートコードに続く最初の文字の位置も「1」です。したがって、スタート コードとデータの最初のバイト ('H') は両方とも 1 倍されます ((104 × 1) + (40 × 1) = 144)。

次の 4 バイトは、段階的に高い乗数を取得します ((69 x 2) + (76 x 3) + (76 x 4) + (79 x 5) = 1065)。すべてを合計すると (144 + 1065)、1209 になります。

PHP でモジュラス演算子 (1209 % 103) を使用して、Code 128B 文字列「Hello」のチェックサム文字として 76 を取得できるはずです (103 は定数です。信頼してください)。したがって、「Hello」を Code 128 バーコードにマップするコードの最終的な配列は、[104 40 69 76 76 79 76 106] です。

文字列の文字値を Code 128B の文字値に変換して、バーコード フォントが期待するものに変換するには、ルックアップ テーブルが必要です。しかし、必要なのは、ループ、配列インデックス、係数の合計のアキュムレータ、および定数値 103 に対するモジュラス演算子だけです。

于 2015-02-24T20:20:20.840 に答える
3

PHP で PDF 用のバーコードを生成する最も簡単な方法は、専用のソフトウェア ライブラリを使用することです。

私の知る限り、現在最も完全なものはtc-lib-barcode ( https://github.com/tecnickcom/tc-lib-barcode ) で、線形バーコードと二次元バーコードの両方を生成できます。含まれている例から、すぐに始めることができます。

ソース コードは PSR-2 に完全に準拠しており、 Composerを使用して PHP プロジェクトに簡単に追加できます。

元のコードは、 TCPDFから移植およびリファクタリングされており、すでに数十億のドキュメントで使用されています。

于 2015-06-30T07:48:15.390 に答える