在打印时,我们可能会遇到各种情况
一些较新的打印机已经直接支持 ISO Latin 2 代码布局。 其中包括
据说这可以工作
\033(2N\033(s0p12h0s0b4099T
使用命令 ESC ( t
将 ISO 8859-2 代码表复制到打印机的第二个表中;然后使用命令 ESC t
选择打印机的第二个表(“Epson ESC/P Reference Manual”,1997 年 12 月,C-73 和 C-77 页)
\033(t\003\000\002\177\002\033t\002
\033
是 Escape 字符的八进制代码。在 /etc/printcap 中调整环境以适应此类打印机的方法在支持其他包含我们字符的字符集的打印机部分中有更详细的描述。
如果打印机支持其他包含我们字符的字符集(不久之前,通常的做法是用 EPROM 替换打印机中的 ROM,并将其中的瑞典字符替换为 JUS I.B1.002 字符),您仍然可以通过在 /etc/printcap 中进行适当的设置来打印以 ISO Latin 2 编码的文件。
我们必须适当地补充 /etc/printcap 文件。 例如,让我们看一下爱普生打印机,它在瑞典字符集的位置上有 JUS I.B1.002 字符。
lp|ascii|epson|Epson LQ-850:\ :lp=/dev/lp1:\ :sd=/usr/spool/lpd/epson:\ :lf=/usr/spool/lpd/ERRORLOG:\ :mx#0:\ :sh: jus|Epson LQ-850 z znaki JUS I.B1.002:\ :lp=/dev/null:\ :sd=/usr/spool/lpd/jus:\ :if=/usr/spool/lpd/jus_filter:\ :lf=/usr/spool/lpd/ERRORLOG:\ :mx#0:\ :sh: latin2|text|Epson LQ-850 z znaki ISO Latin 2:\ :lp=/dev/null:\ :sd=/usr/spool/lpd/latin2:\ :if=/usr/spool/lpd/latin2_filter:\ :lf=/usr/spool/lpd/ERRORLOG:\ :mx#0:\ :sh:
该示例有三种打印队列类型。 第一种是具有美国 (ASCII) 字符集的实际打印机。 第二种使用过滤器 /usr/spool/lpd/jus_filter
#!/bin/sh /usr/spool/lpd/jus_epson | lpr -Pascii
jus_epson
所做的只是在开头添加切换到瑞典字符集的代码,将输入文件复制到输出,并在结尾添加切换回美国字符集的代码。 这也是唯一依赖于打印机类型的软件部分#!/bin/sh # Tiskanje besedil kodiranih po JUS I.B1.002 na tiskalnik Epson LQ # # Izberemo slovenski (svedski) nabor /bin/echo -ne "\033R\005\c" # Izpisemo dokument cat # Izberemo ameriski nabor /bin/echo -ne "\033R\000\c"
第三种类型使用类似于第二种类型的过滤器,只是它首先将文本从 Latin 2 转换为 JUS,然后使用已描述的过滤器在开头和结尾添加打印机所需的代码,最后将此类文件放入第一个队列。
#!/bin/sh /usr/local/bin/recode --force latin2:yu | \ /usr/spool/lpd/jus_epson | lpr -Pascii
--force
,因为映射是不可逆的 - 在 Latin 2 中,我们既有带变音符号的字符,也有花括号,而在 JUS 中,只有前者。对于此示例,我们必须在 /usr/spool/lpd 目录中创建三个子目录:/usr/spool/lpd/epson、/usr/spool/lpd/jus 和 /usr/spool/lpd/latin2。
打印现在是这样的
-Pepson
或 -Pascii
,文件将作为 ASCII 打印
lpr 文件
-Pjus
,文件将作为以 JUS I.B1.002 编码的文本打印
lpr -Pjus 文件
-Platin2
或 -Ptext
,文件将作为以 ISO Latin 2 编码的文本打印
lpr -Platin2 文件
(Matjaz Terpin < matjaz.terpin@comcom.si>, Message-id: <Pine.LNX.3.96.980709095750.24607B-400000@guru.comcom.si>
)
Matjaz Terpin < matjaz.terpin@comcom.si> 提出了对刚刚描述的过程的出色改进,通过该改进,我们可以打印我们的字符和方括号和花括号。 他的建议的核心是一个过滤器,它在我们字符的每一个字符之前切换到瑞典字符集,并在其后立即切换回 ASCII。
在这种情况下,/etc/printcap 文件如下所示
# /etc/printcap lp|raw|yu:\ :lp=/dev/lp1:\ :sd=/var/spool/lpd/lp:\ :lf=/var/spool/lpd/ERRORLOG:\ :mx#0:\ :sh: lat2:\ :lp=/dev/null:\ :if=/etc/lp/lat2.filter:\ :sd=/var/spool/lpd/lat2:\ :lf=/var/spool/lpd/ERRORLOG:\ :mx#0:\ :sh:
过滤器 /etc/lp/lat2.filter 通过以下过滤器 /etc/lp/lat2.switch 过滤文本,并将其放入队列 lp
中
#!/bin/sh # /etc/lp/lat2.filter /etc/lp/lat2.switch | lpr -Plp
“肉”过程在文件 /etc/lp/lat2.switch 中
#!/bin/sh #/etc/lp/lat2.switch echo -ne "\033R0" sed -e "s/c/`echo -ne "\033R5\~\033R0"`/g" \ -e "s/C/`echo -ne "\033R5\^\033R0"`/g" \ -e "s/s/`echo -ne "\033R5\{\033R0"`/g" \ -e "s/S/`echo -ne "\033R5\[\033R0"`/g" \ -e "s/z/`echo -ne "\033R5\140\033R0"`/g" \ -e "s/Z/`echo -ne "\033R5\@\033R0"`/g" \ -e "s/c/`echo -ne "\033R5\}\033R0"`/g" \ -e "s/C/`echo -ne "\033R5\]\033R0"`/g" \ -e "s/d/`echo -ne "\033R5\|\033R0"`/g" \ -e "s/D/`echo -ne "\033R5\\\\033R0"`/g" echo -ne "\033R5"
Matjaz 还说:sed 不太理解``echo -ne "\000"'',所以我只使用字符 0(零),因为打印机(NEC pinwriter P7)对此也很满意。
PostScript 中的“自然”代码集是 Adobe Standard Encoding。 它不识别我们的字母。 不仅不识别我们的,也不识别许多其他字母,实际上根本没有这种野心。 相反,ASCII 通过组合字符的构建块扩展:抑音符、锐音符、分音符、软音符等 - 都在那里。 PostScript 语言允许定义组合字符。 一切都只是在等待某人来定义 ISO Latin 2 代码集的组合字符。 那个人是 Juliusz Chroboczek,他编写了软件包 ogonkify。
过滤器 a2ps
和 GNU enscript
的编写目的是为了解决我们地区不寻常的困境:如何在仅理解 PostScript 的打印机上打印纯文本。 两者都在 PostScript 中放置一个包含给定文本的页面,并将其发送到打印机。 PostScript 的灵活性还允许转换(例如,缩小)或在打印程序输出时突出显示语法。 两者都支持 ISO Latin 2 代码集。
http://www.dcs.ed.ac.uk/home/jec/programs/ogonkify/
http://www-inf.enst.fr/~demaille/a2ps/
http://www.iki.fi/~mtr/genscript/
ftp://ftp.arnes.si/gnu/enscript/enscript-1.6.1.tar.gz
Ogonkify 是 PostScript 输出的过滤器,它允许正确打印不使用 ISO Latin 1 代码集的语言中的字母。 由于它是一个过滤器,因此它刚好晚了一步,无法优雅地完成此操作,但必须消化程序在其之前的步骤中吐出的任何垃圾,并从获得的产物中生成漂亮的打印件。 程序生成 PostScript 文件的方式略有不同,这使得过滤器“ogonkify”的工作变得困难。 目前支持的 PostScript 输出格式有:NCSA Mosaic、Netscape Navigator、StarOffice、Applixware 和 XFig。
Ogonkify 需要 Perl 才能运行。 安装后,我们按如下方式使用 ogonkify
来打印从 Navigator 保存的 Web 文档
ogonkify -AT -N netscape.ps | lpr
如果 GNU enscript 尚未安装,请按照程序随附的说明进行安装。 除此之外,我们还需要至少一种包含我们所有字符的字体,以 Type 1 格式编写。 例如,IBM Courier 是合适的字体,它是免费提供的,并与 X Window System、程序 ghostscript
等一起分发。 如果我们不确定是否已安装它,请运行
find / -name cour.pf[ab]
在个人 (~/.enscriptrc) 或共享配置文件(通常是 /usr/local/etc/enscript.cfg 或 /usr/local/etc/enscriptsite.cfg)中,添加字体文件的正确路径。 此外,GNU enscript 在每个字体目录中还需要一个名为 font.map 的文件,其中包含字体名称和存储字体的文件之间的映射。 我们使用命令 mkafmmap
创建它。
配置文件示例
... # Kje hranimo pisave PostScript? AFMPath: /usr/lib/X11/fonts/Type1:/usr/local/lib/ghostscript/fonts ... # Privzeti nacin kodiranja: DefaultEncoding: latin2 ... # Privzeti format papirja: DefaultMedia: A4 ... # lpd izbira tiskalniske vrste z -P... QueueParam: -P ... # Za tiskanje uporabljamo ukaz lpr, ne lp Spooler: lpr
当所有必需的设置都完成后,只需使用命令即可打印文本
enscript 文件
在 4.7.21 版本中,Akim Demaille 在 a2ps
中内置了用于组合字符的机制,Juliusz Chroboczek 在过滤器 ogonkify 中使用了该机制。
我们通过对设置文件进行少量更改来调整 a2ps
以适应我们地区。 系统设置文件通常位于 /usr/etc/a2ps.cfg、/usr/local/etc/a2ps.cfg 或类似位置; 个人文件名为 ~/.a2psrc。
... # Default encoding Options: --encoding=latin2 # Default media Options: --media=A4 ...