ZPL fieldblock ^FB for unicode fonts - zebra-printers

I am using ZQ520, its already supports Unicode and I am loading the font as follows:
^XA ^CWZ,E:TT0003M_.FNT^FS^XZ
I can use the font to print Arabic as follows:
^FO100,50^CI28^AZN,0,25^FD ARABIC TEXT HERE ^FS
It works fine but when I use ^FB with ^FO, the Arabic letters get messed up and gets separated (In Arabic, they are connected), here an example:
^FO100,50^FB200,,,R,^CI28^AZN,0,25^FD ARABIC TEXT HERE^FS
so it seems that ^FB does not support the Unicode font. on page 187 of the manual its mention this
The ^FB command does not support complex text. For complex text
support, use ^TB.
And 179
The Field Block (^FB) command cannot support the large TrueType fonts.
Is there a way around this? Because Arabic is right to left, so I am trying to make the text right aligned and multi-line as some strings are long.

I managed to print out word wrapping Arabic text using ^TB using the following code. It may be useful to adapt for your own purposes.
^XA^LRN^CI28^CWZ,E:TT0003M_.FNT^FS
^FO600,10,2
^AZN,50,40
^TBN,600,100
^FH
^FD
arabic text here
^FS
^PQ1
^XZ
Useful links:
TB command (some extra info compared to below link): https://support.zebra.com/cpws/docs/zpl/TB_Command.pdf
Please note that it states the ^TB command must be issued after any ^Ax (font selection) command
ZPL Manual: https://www.zebra.com/content/dam/zebra/manuals/en-us/software/zpl-zbi2-pm-en.pdf

Related

Vietnamese text printing on ZPL printer using Zpl commands

I am trying to print Vietnamese text on my Zebra label using Zpl coding.
But i am getting issues in vietnamese characters. For example, i am trying to print a label with text "Nhập khẩu" but it is giving me the output "Nh p kh u", thus missing the Vietnamese fonts.
I have tried using Andale and Swiss font and also declaring the ^CI28 tag for printing various characters in utf-8 encoding.
If anyone else has any other inputs, please let me know.. thanks in advance..
EDIT:
This is the code i am using..
^XA^CWZ,E:TT0003M_.TTF^FS^XZ
^XA
^CF01,20,15
^CI28
^FO20,20^FDNhập khẩu - LOẠI:For Fujifilm^FS
^XZ
Have you tried google's Noto fonts?
https://fonts.google.com/specimen/Noto+Sans
I have used them to render Vietnamese. If that doesn't work, post the sample ZPL you have tried and we can work through it.
Here is some example ZPL. This assumes the Noto Sans font is saved to the printer as E:NOTOSANS.TTF:
^XA^CI28
^A#N,32,32,E:NOTOSANS.TTF
^FO50,50
^FDNhập khẩu^FS
^XZ

ways to include miscellaneous symbols like Recycle, Rain on the ZPL files for printing labels

I am new to ZPL coding and am not sure how to include miscellaneous symbols like Recycle, Rain on the ZPL files for printing labels.
I tried a bit of coding in UTF-8 encoding by using ^CI28 command and converted the recycle and rain logos to hexadecimal and tried escaping the default underscores using ^FH command but no avail.
^XA
^CI28
^CFT,30,30
^FO50,50^FH^FDTesting^FS
^FO50,100^FH^FD_e2_99_b2^FS
^XZ
In UTF-16, it is printing &72 instead of recycle logo
^XA
^CI29
^CFT,30,30
^FO50,50^FH^FDTesting^FS
^FO50,100^FH^FD_2672^FS
^XZ
Also the results i checked are from simulator available in http://labelary.com/viewer.html. Not sure if there is an issue with my code or simulator in which i am seeing the output.It will be great if any ZPL coding experts can provide some pointers on this regard. Thanks in advance!
Store the images on the printer's memory, and call them up as you need them with the image command.

QTextDocument print to pdf and unicode

I try to print pdf file from QTextDocument. Content of document is set by setHtml().
Simplified example:
QTextDocument document;
document.setHtml("<h1>My html \304\205</h1>"); // Octal encoded ą
QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("cert.pdf");
document.print(&printer);
It does not work as expected on windows (msvc). I get pdf file with "?" in place of most polish characters. It works on ubuntu.
On windows It makes pdf with tahoma font embedded subset. How to force QPrinter or QPrintEngine to embed more characters from this (or any other) font?
As pepe suggested in comments. I needed to wrap this string one of:
QString::fromUtf8
tr() (in case of joining translated parts)
Use html escape sequence (ex. &#261 for ę)
My original html in program was build from tr() parts, but I forgot to octal escape some of them. (which worked on gcc, not on msvc, even with utf-8 with BOM)

Arabic-English Transliteration using unsupported font

I am working on language transliteration for Ar and En text.
Here is the link which displays character by character replacement : https://github.com/Shnoulle/Ar-PHP/blob/master/Arabic/data/Transliteration.xml
Now issue is:
I am dealing with font style robert_bold.ttf and robert_regular_0.ttf which has some typical characters with underline and overline as in this snap
I have .ttf file so I can see this fonts on my system. But in my application or in above Transliteration.xml characters are considered as junk like [, } [ etc.
How can I add support of this unsupported characters in Transliteration.xml file?
<pair>
<search>ي</search>
<replace>y</replace>
</pair>
<pair>
<search>ى</search>
<replace>a</replace>
</pair>
<pair>
<search>أ</search>
<replace>^</replace> // Here is one of the character s_ (s with underscore not supported)
</pair>
It seems that the font is not Unicode encoded but contains the underlined letters at some arbitrarily assigned codes. While this works up to a point, it does not work across applications, of course. It works only when that specific font is used.
The proper way is to use correct Unicode characters such as U+1E0F LATIN SMALL LETTER D WITH LINE BELOW “ḏ” and, for rendering, try to find fonts containing it.
An alternative is to use just basic Latin letters with some markup, say <u>d</u>. This means that the text must not be treated as plain text in later processing, and in rendering, the markup should be interpreted as requesting for a line under the letter(s).

How to get glyph unicode representation of Unicode character

Windows use uniscribe library to substitute arabic and indi typed characters based on their location. The new glyph is still have the original unicode of the typed character althogh it has its dedicated representation in Unicode
How to get the Unicode of what is actually displayed not what is typed.
There are lots of tools for this like ICU, Charmap and the rest. I myself recommand http://unicode.codeplex.com, it uses Unicode Character Database to represent characters.
Note that unicode is just some information about characters and never spoke about representation. They just suggest to implement a word just like their example. so that to view each code you need Standard Unicode Font like MS Arial Unicode whichis the largest and the best choise in windows platform.
Most of the characters are implemented in this font but for new characters you need an update for it (if there are such an update) or you can use the font which you know that it implemented your desire characters
Your interpretation of what is happening in Uniscribe is not correct.
Once you have glyphs the original information is gone there is no reliable way to go back to Unicode.
Even without going to Arabic, there is no way to distinguish if the glyph for the fi ligature (for example) comes from 'f' and 'i' (U+0066 U+0069) or from 'fi' (U+FB01).
(http://www.fileformat.info/info/unicode/char/fb01/index.htm)
Also, some of the resulting glyphs do not have a Unicode value associated with them, so there is no "Unicode of what is actually displayed"

Resources