将 FNC1 字符添加到使用 tcpdf datamatrix 创建的代码中

问题描述 投票:0回答:2

我正在使用 tcpdf 生成数据矩阵条形码。效果真的很好。现在有人问我是否可以在代码中添加 fnc1 字符。 但我不知道 fnc1 字符的表示对于 tcpdf 生成器来说是正确的。 我在这里遇到了这个http://sourceforge.net/p/tcpdf/discussion/435311/thread/161b1b1a

但我想了解使用

chr(241)
的答案实际上来自哪里。对我来说,它就像是从天上掉下来的。文档没有对此进行任何说明,而且我还没有在其他任何地方找到
chr(241)
是 fnc1 字符的表示。

除此之外,它对我不起作用,扫描条形码只会导致代码中间出现

ñ
字符。

有人知道如何将 fnc1 字符放入我的 tcpdf 数据矩阵中吗?我缺少什么?提前感谢您的帮助!

$string = chr(241).str_replace(";", chr(241), $string);
$barcodeobj = new TCPDF2DBarcode();
$barcodeobj->setBarcode($string, 'DATAMATRIX');
$barcodeobj->getBarcodeSVGcode(6, 6, 'black');
php barcode tcpdf datamatrix
2个回答
3
投票

查看

/tcpdf/include/barcodes/datamatrix.php
中版本1.0.008(从2014-05-06开始)的代码,我看不到Data Matrix中特殊函数或宏字符的任何综合处理,所以你可能不走运。

也就是说,您链接到的论坛回复是由 TCPDF (Nicola Asuni)的作者撰写的,因此我们可能值得联系他,看看他当时在想什么。我的猜测是,其他一些库使用的示例输入误导了他,让他相信 FNC1 可以表示为普通代码点,但这是错误的,因为 FNC1 是需要特殊处理的非数据字符


0
投票

我知道这是一个老话题,但对于那些需要解决方案的人,您可以添加以下两行:

$cw[] = 232; // FNC1 for GS1 DATAMATRIX
++$cw_num; // for GS1 DATAMATRIX

包含arcodes\datamatrix.php(在受保护函数“getHighLevelEncoding”中),第714行,如下所示:

protected function getHighLevelEncoding($data) {
    // STEP A. Start in ASCII encodation.
    $enc = ENC_ASCII; // current encoding mode
    $pos = 0; // current position
    $cw = array(); // array of codewords to be returned
    $cw_num = 0; // number of data codewords
    // Add FNC1 for GS1 DATAMATRIX
    $cw[] = 232; // FNC1 for GS1 DATAMATRIX
    ++$cw_num; // for GS1 DATAMATRIX
    $data_length = strlen($data); // number of chars

然后,每个生成的数据矩阵将以“]d2”(=FNC1)而不是“]d1”开始。

致以诚挚的问候

© www.soinside.com 2019 - 2024. All rights reserved.