我正在使用 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');
查看
/tcpdf/include/barcodes/datamatrix.php
中版本1.0.008(从2014-05-06开始)的代码,我看不到Data Matrix中特殊函数或宏字符的任何综合处理,所以你可能不走运。
也就是说,您链接到的论坛回复是由 TCPDF (Nicola Asuni)的作者撰写的,因此我们可能值得联系他,看看他当时在想什么。我的猜测是,其他一些库使用的示例输入误导了他,让他相信 FNC1 可以表示为普通代码点,但这是错误的,因为 FNC1 是需要特殊处理的非数据字符。
我知道这是一个老话题,但对于那些需要解决方案的人,您可以添加以下两行:
$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”开始。
致以诚挚的问候