将 ZPL 标签中的文本设为粗体或下划线?

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

根据新的欧盟法律,每个食品包装标签都必须通过在成分列表中将其加粗或下划线来概述可能引起过敏的成分。

目前我正在通过 ZPL 将标签打印到斑马打印机。我检查了 ZPL 手册 1 和 2,但没有找到如何以粗体或下划线打印某些内容的方法。有什么办法可以做到这一点吗?

示例: “成分:水、糖、牛奶、奶酪、巧克力”

现在应该是: “成分:水,糖,牛奶奶酪,巧克力”

我当前的成分标签代码是:

^CF0,15
^FO13,245
^FB530,2,,L,
^FH^FD__VAR_INGREDIENTS__
^FS

非常感谢您的帮助,

史蒂芬

printing zebra-printers zpl barcode-printing
3个回答
32
投票

下划线 - 使用等宽字体,如 AA、AC、AD、AF 或 AG

使用

^FO350,50^AGR^FDwhatever,milk,butter,salt^FS
^FO340,50^AGR^FD         ____ ______^FS

此处的下划线位于牛奶和黄油下方,您可以通过将

FO
的 X 和 Y 位置修剪几个点(此处为 10 X)来调整偏移量

经过进一步调查,我发现

大胆

使用旧的点阵打印机技巧。仍然使用固定间距字体,重新打印文本,但将非粗体字符替换为空格,并将 X 位置调整 1 或 2 点,再次重新打印,Y 位置调整 1 o2 2 点。

^FO350,50^AGR^FDwhatever,milk,butter,salt^FS
^FO348,50^AGR^FD         milk butter^FS
^FO350,52^AGR^FD         milk butter^FS

要添加下划线,请在所需字母下方绘制一个图形框。由于每个字母的宽度是恒定的,因此计算起来相对容易。

^FO345,490^GB0,160,4^FS
^FO345,690^GB0,240,4^FS

我使用A300和8“*3”标签进行测试,因此我需要旋转文本,因此出现一些奇怪的计算。即使在示例中,手册也没有显示

^FS
,但我发现它是必需的。


9
投票

你也可以尝试让字体宽度变大一点:

^A0N,18,20

“^A”开始字体设置,其中“0”是嵌入字体,“N”是旋转,“18”是高度,“20”是字体宽度。最后一项默认为 10。因此,您实际上使字体变宽,从而形成 bold...

的形式

它可能不会影响水平打印的线条,但你会得到粗体的感觉。

(我知道这是一个“老”话题,但我只是想分享)


0
投票

基于@raphioly-san,我决定增加字体大小以获得等效的字体粗细/粗体。

对于以下 javascript 对象和函数,我在 Node-RED 应用程序上实现了所需的结果:


    const element = { 
        type: 'text', 
        content: 'Article: 1001779', 
        x: 5, // horizontal position from left border
        y: 5, // vertical position from top border
        font_size: 6, // font size in pixels
        font_weight: 'bold', // can be 'bold', 'bolder' or remove line for 'normal'
    };
    
    const margin = 2; // for 2mm margins

    return {
        ...msg
        payload: generateZPLText(element, margin)
    };

    function mmToPoints(mm, margin) {
        return Math.abs( (mm + margin) / 10 * 72);
    }

    function generateZPLText(element, margin) {
        const x_points = mmToPoints(element.x, margin);
        const y_points = mmToPoints(element.y, margin);
        const fontSize = element.font_size ? element.font_size * 4 : 20;
        
        if(element.font_weight) {
            if(element.font_weight == 'bolder') {
                const fontWidth = Math.abs( (fontSize + 5) * 4 );
            }
            else if(element.font_weight == 'bold') {
                const fontWidth = Math.abs( (fontSize + 3) * 4 );
            }
            else {
                const fontWidth = Math.abs( fontSize * 4 );
            }
        }
    
        return `^FO${x_points},${y_points}^A0N,${fontSize},${fontWidth}^FD${element.content}^FS`;
    }

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