红联Linux门户
Linux帮助

linux 打印中文,乱码或空白

发布时间:2007-10-11 10:51:35来源:红联作者:sean_chz
linux 打印中文,乱码或空白
文章评论

共有 17 条评论

  1. freebase 于 2007-10-15 11:32:44发表:

    RedHat7.3中文打印的设置方法。

    进入kde3以后,从开始菜单----》系统---->Control Panel可以打开Cups Printer
    Configuration, 打开以后报告localhost:631打不开。原因是系统起动缺省情况下
    cups是不开的,运行命令:
    #ln -s /usr/bin/smbspool /usr/lib/cups/backend/smb
    #/etc/rc.d/init.d/cups start
    然后,再点击Cups Printer Configuration(注意control panel里面的东西都是
    单击不是双击啊!双击会让你郁闷的)这时一个基于web的cups管理界面就出来了。点击
    administration. 向你要用户名,口令,把root和root口令敲进去,进入管理叶面,
    选add printer, name: 我填我们网的windows打印机共享名hp,location: 我填
    我们网上打印共享机器名字xxxxxxx,description: xxxxxxxx.hp.
    点continue到下一步,选windows printer via samba,continue.
    device uri: smb://workgroup/xxxxxxx/hp
    下两步选HP--"hp laserjet 6L foomatic+ljet4"
    然后完成,然后就可以打印测试页,测试正常,再打开kword随便弄一篇汉字东西选好字体。
    打印就成了。当然,我猜想fm一定要装的。不然没这么容易搞定。

  2. freebase 于 2007-10-15 11:25:31发表:

    06-08-21, 13:29
    我用的是Debian的系统,用cups来配置打印机,用lp命令打印文本文件。打印英文都没问题,但是打印中文的话要么是乱码,要么干脆就跳过不打。用gedit打印的话都没问题,中文支持的很好,但是在命令行下就不能打出中文,请问我要做哪些配置呢?
    对于中文打印支持了解的还不太多,请多帮助!谢谢!
    woodandwood
    06-08-21, 13:47
    请高手指教啊!SOS
    woodandwood
    06-08-21, 15:27
    自己顶。。。。。。。。。
    woodandwood
    06-08-22, 11:35
    没人知道吗 :(
    woodandwood
    06-08-22, 16:13
    继续顶。。。。。。。
    aleng
    06-08-22, 16:50
    我要一说 就长篇大论了,所以不想罗嗦。简单的说linux不适连接 打印机 不适合作共享打印服务器。一句话 用 win
    completist
    06-08-22, 17:55
    你需要一个先将中文文本转化成ps东东,诸如bg5ps等,utf8的编码,则推荐使用u2ps或者paps,这些小工具缺省直接将文本发到打印机上,除非你指定输出到ps文件上
    woodandwood
    06-08-23, 09:50
    多谢二位指点。我昨天用了bg5ps,把文本文件转化为ps文件,然后再打印该ps文件
    cat test.txt |bg5ps -en gb2312 > test.ps
    ps2ps test.ps cn.ps
    但是不管我是打印test.ps还是cn.ps,打出来的汉字和原文件根本不一样,而且都是不认识的字,这是怎么回事呢?
    woodandwood
    06-08-23, 12:46
    楼上的大侠去哪了?
    completist
    06-08-23, 13:03
    看看/etc/bg5ps.conf 和试试 -nps y 选项,应该没问题的
    也可试试u2ps和paps
    u2ps -X gbk --gpfamily=Sans -o test.ps test.txt
    iconv -f gbk -t utf8 test.txt | paps --family=Serif > test.ps

    下面是我的/etc/bg5ps.conf

    # Default Encoding
    # Encoding: 指定??
    # big5,gb2312
    Encoding="gb2312"

    #chineseFontPath: 指定中文字型的路?(??值: ? bg5ps 同)
    chineseFontPath="/usr/share/fonts/truetype"

    #modify the above line

    #fontName: 指定中文字型的?案名?(??值: ntu_kai)
    #fontName="ntu_kai.ttf"
    fontName="arphic/gbsn00lp.ttf"
    fontName_big5="arphic/bsmi00lp.ttf"
    fontName_gb2312="arphic/gbsn00lp.ttf"

    #oddPages: 0 不?出奇??,1 ?出奇??(??值: 1)
    #true=1, false=0
    oddPages=true

    #evenPages: 0 不?出偶??,1 ?出偶??(??值: 1)
    evenPages=true

    #size: 指定?出字型的大小(??值: 12)
    size=12.0

    # leftMargin: 指定左?界(??值: 72.0)
    # rightMargin: 指定右?界(??值: 72.0)
    # topMargin: 指定上?界(??值: 72.0)
    # bottomMargin: 指定下?界(??值: 72.0)
    topMargin=72.0
    bottomMargin=72.0
    leftMargin=72.0
    rightMargin=72.0

    #lineSpace: 指定行距(??值: 6.0)
    lineSpace=6.0

    #chrSpace: 指定字距(??值: 2.0)
    chrSpace=2.0

    bg5ps基本属于要淘汰的东东了,开发也早就停了,毕竟替代的东东太多,而且精确的排版输出也用不到这些,小鬼子的u2ps不错,虽然是修改自a2ps,但距a2ps的功能和实用还有距离,倒是小鬼子也对a2ps不支持utf8耿耿于怀的,呵呵
    woodandwood
    06-08-23, 16:24
    谢谢 completist! 我按照你说的去做了
    root@wood-desktop:/tmp# u2ps -X gbk --gpfamily=Scans -o test.ps test

    (gnome-u2ps:23292): GnomePrint-WARNING **: Problem while creating filter from 'frgba': filter 'frgba' is unknown
    root@wood-desktop:/tmp#
    这是怎么回事呢?我在网上找了找这个错误,不过还是没有弄明白 :(
    completist
    06-08-23, 16:37
    我也没闹清,不过不影响使用 :)
    gv test.ps 可以看看效果,或者ps2pdf test.ps test.pdf 转成pdf,也可lpr test.ps 直接打印输出
    woodandwood
    06-08-23, 16:59
    直接打印test.ps文件,OK!!
    太感谢completist了!
    谢谢!!:)
    woodandwood
    06-08-24, 11:25
    还想问 一下completist,你是从哪里找到paps的?我都搜索不到 :(
    completist
    06-08-24, 11:51
    http://paps.sourceforge.net/

    用debian的话,应该源里有的
    $ apt-cache show paps
    Package: paps
    Priority: optional
    Section: text
    Installed-Size: 44
    Maintainer: Debian Hebrew Packaging Team <debian-hebrew-package@lists.alioth.debian.org>
    Architecture: i386
    Version: 0.6.6-1
    Depends: libc6 (>= 2.3.6-6), libfreetype6 (>= 2.2), libglib2.0-0 (>= 2.10.0), libpango1.0-0 (>= 1.12.1)
    Filename: pool/main/p/paps/paps_0.6.6-1_i386.deb
    Size: 15574
    MD5sum: db99c7b99e626a7ea76d296429664381
    SHA1: 75637e318c7f87eea8a0395965f2be106fcd9a46
    SHA256: 8449e5a5d6c651638cd2c9c3eea2d796008f788063a40cc7cfd74e94daf13ef5
    Description: UTF-8 to PostScript converter using Pango
    Paps reads a UTF-8 encoded file and generates a PostScript
    language rendering of the file. The rendering is done by
    creating outline curves through the pango ft2 backend.
    .
    Homepage: http://paps.sourceforge.net/
    woodandwood
    06-08-24, 13:42
    在我的Debian里没有。按照你说的,那就是下源码来自己编了?
    像u2ps是把utf8转换,如果不是utf8呢?我换了台机器,发现是iso-8859-1编码,那该怎么办?
    我尝试了用bg5ps来做,但是打印转换后的ps文件是很奇怪的中文,都是不认识的字。如果用u2ps来的话,就如下显示
    /tmp # u2ps -X gbk --gpfamily=Sans -o test.ps test.txt

    (gnome-u2ps:753): libgnomevfs-WARNING **: Unable to create ~/.gnome directory: No such file or directory
    Could not create per-user gnome configuration directory `/root/.gnome2/': No such file or directory
    /tmp #
    在/tmp下生产不了ps文件,这又是为什么呢
    woodandwood
    06-08-24, 14:54
    用a2ps 可以吗?我下了下来,但是不知道怎么用:(
    而且还报错:a2ps:unknown medium 'libpaper'
    woodandwood
    06-08-24, 15:49
    completist,你用过a2ps吗?要是用过的话,能否告知怎么使用?我总感觉输入的格式不对:(
    completist
    06-08-24, 17:14
    paps在etch/sid里有而sarge中没有,自己编也没啥不好的,只是注意编译时把一些选项加上,看看里面的readme/install等东东

    可以使用iconv转了后再用u2ps处理,错误说无法创建.gnome等目录,自己去看看有没有,或者新建个用户,进一下gnome后应该就可以了,u2ps毕竟是利用libgnomeprint来工作的

    bg5ps在sid中因为所用的python模块regev已被re替代,处理时可能会有问题
    cat /usr/share/doc/bg5ps/examples/test.gb2312 | bg5ps -en gb2312 >test.ps
    刚试了下,gv test.ps 结果是好的,如果在你那不行,要么bg5ps工作不正常,要么是你的ghostscript的字体问题没配好,把gs-afpl和s-cjk- resource等东东装上,不用自己改啥应该就可以的,看看/var/lib/defoma/gs.d/dirs/fonts/CIDFnmap,里面应该有你机子的中文字体条目,否则,就是你系统的字体啥的设置问题了

    a2ps设置选项挺多,自己a2ps --help 或者 info a2ps看看,比如要把每两页缩放到一页输出,可以
    a2ps -2 -o test.ps test.txt && gv test.ps
    woodandwood
    06-08-25, 10:05
    a2ps可以把iso-8859-1编码格式转换成ps格式的文件吗?
    completist
    06-08-25, 11:55
    $ a2ps --list=encodings | grep ISO-8859-1
    ISO-8859-1 (iso1)
    The ISO-8859-1 character set, often simply referred to as Latin 1,
    ISO-8859-10 (iso10)
    Latin 6 (or ISO-8859-10) adds the last letters from Greenlandic and
    ISO-8859-13 (iso13)
    Latin7 (ISO-8859-13) is going to cover the Baltic Rim and re-establish
    ISO-8859-15 (iso15)

    多数经典软件的缺省编码都是8859-1的,这也是母语是英语的好处,utf8慢慢会普及的,到时情况会好起来
    P.S,
    *nix下80%以上的常见问题可以在软件的自带文档中找到答案,毕竟写软件的最熟悉自己的东东,这也是RTFM的由来,个人一直认为论坛等不是解决很系统问题的地方,随机文档、google和Mailing lists应该是首选的,oftc和freenode上的irc也是不错的选择
    woodandwood
    06-08-25, 12:25
    说的不错,赞!
    不管怎样还是要感谢你,谢谢你的指点和帮助,谢谢!

  3. freebase 于 2007-10-15 11:12:28发表:

    Linux技巧 用CUPS打印DVI文件的方法
    来源:xnux.cn 作者: 发布时间:2007-05-25
    http://www.xnux.cn/html/newbie/20070525/9052.html

    公共 UNIX 打印系统(CUPS)是当今许多 Linux 和 UNIX® 系统使用的打印假脱机程序。可以用 CUPS 提供的过滤器在各种各样的打印机上格式化和打印众多类型的文件。但是如果 CUPS 不支持要打印的文件类型该怎么办?可以先把文件转换成 CUPS 能打印的类型,例如 PostScript 或 PDF。或者也可以创建一个过滤器,这样 CUPS 打印系统就能够正确识别并打印文件。本文摘自 LPI 102 考试准备:打印 教程,它介绍了如何创建简单的过滤器。

    MIME 类型和 CUPS

    那么,CUPS 如何确定用于格式化特定文件类型的过滤器呢?在打印文件的时候,CUPS 使用 MIME(多用途 Internet 邮件扩展)类型确定合适的转换过滤器。请注意其他打印包可能使用 file 命令所使用的 magic number 那样的机制。请参阅 file 或 magic 的手册页获得更多信息。

    MIME 类型用于把各种文件作为邮件附件传输。其中包含类型(例如文本或图片)和子类型(例如 html、postscript gif 或 jpeg)。类型和子类型之间用分号(;)分隔。可选参数可能包含诸如字符集编码或语言等信息。 CUPS 使用来自 /etc/cups/mime.types 的规则确定文件的类型,然后从 /etc/cups/conv.types 列出的过滤器中为给出的 MIME 类型选择合适的过滤器。MIME 类型在 IANA(Internet Assigned Numbers AuthorityInternet)上注册。如果所需的类型没有注册,请在子类型前加上 'x-' 前缀。清单 1 显示了一些图片类型的示例。

    清单 1. /etc/cups/mime.types 的一些 MIME 类型项

    image/gif gif string(0,GIF87a) string(0,GIF89a)

    image/png png string(0,<89>PNG)

    image/jpeg jpeg jpg jpe string(0,) &&\

    (char(3,0xe0) char(3,0xe1) char(3,0xe2) char(3,0xe3)\

    char(3,0xe4) char(3,0xe5) char(3,0xe6) char(3,0xe7)\

    char(3,0xe8) char(3,0xe9) char(3,0xea) char(3,0xeb)\

    char(3,0xec) char(3,0xed) char(3,0xee) char(3,0xef))

    image/tiff tiff tif string(0,MM) string(0,II)

    image/x-photocd pcd string(2048,PCD_IPI)

    image/x-portable-anymap pnm

    这些项的格式超出了本文的讨论范围。请参阅 /usr/share/mime/magic 文件或 /usr/share/file/magic 文件了解如何用 magic number 标识文件。

    确定了文件的 MIME 类型之后,就用 /etc/cups/mime.convs 文件查找正确的过滤器。这个文件的行有四项:源 MIME 类型和目标 MIME 类型、代价、过滤器的名称。这里使用了代价最小的过滤器。清单 2 显示了一些示例。

    清单 2. /etc/cups/mime.convs 的过滤器项

    text/plain application/postscript 33 texttops

    text/html application/postscript 33 texttops

    image/gif application/vnd.cups-postscript 66 imagetops

    image/png application/vnd.cups-postscript 66 imagetops

    image/jpeg application/vnd.cups-postscript 66 imagetops

    image/tiff application/vnd.cups-postscript 66 imagetops

    image/x-bitmap application/vnd.cups-postscript 66 imagetops

    如果找不到合适的过滤器,尝试打印文件就会产生错误消息。如果使用 CUPS 之外的打印机守护程序,那么可能得到意料之外的输出。清单 3 显示了使用 DVI 文件时的情况(来自 TeX 和 LaTex 的正常输出)。

    清单 3. 打印不支持的文件类型

    [ian@attic4 ~]$ lpr samp1.dvi

    lpr: Unsupported format 'application/octet-stream'!

    用于 CUPS 打印的 DVI 过滤器

    幸好,提供 TeX 和 LaTeX 的 tetex 包还提供了把 DVI 转换成 PostScript 的转换工具 dvips。不幸的是,它不能作为过滤器工作,因为它不知道如何处理 CUPS 过滤器必须处理的参数:作业 id、用户、作业标题、拷贝数量和作业选项。如果输入来自文件,那么过滤器管道中的第一个过滤器还具有额外的参数 ---- 文件名。

    解决方案是创建一个作为过滤器的包装器脚本。dvips 命令不接受来自 stdin 的输入,所以这个脚本可能需要创建临时文件,在调用 dvips 之前把 stdin 拷贝到临时文件。清单 4 显示了可能的脚本。

    清单 4. CUPS DVI 到 PostScript 的过滤器脚本

    #!/bin/bash

    # CUPS filter to process DVI files using dvips

    # Create a sandbox for working if input on stdin

    if [ $# -lt 6 ]; then

    sandbox=${TMPDIR-/tmp}/cups-dvitops.$$

    (umask 077 && mkdir $sandbox) || {

    echo "Cannot create temporary directory! Exiting." 1>&2

    exit 1

    }

    fn="$sandbox/cups-dvitops.$$"

    cat > "$fn"

    else

    fn="$6"

    fi

    # Call dvips quietly, securely and with output to stdout

    dvips -R -q -o - "$fn"

    # Erase sandbox if we created one

    if [ $# -lt 6 ]; then

    rm -rf "$sandbox"

    fi

    回想一下 CUPS 使用 /etc/cups 中的两个文件来确定 MIME 类型和要使用的过滤器。只要重新安装或升级 CUPS,这些文件都会被覆盖。幸运的是,CUPS 在启动或重新启动时,都会读取 所有 扩展名为 .types 或 .convs 的文件。所以应当为新的过滤器创建一对文件,例如 /etc/cups/dvitops.types 和 /etc/cups/dvitops.convs。清单 5 显示了 DVI 过滤器的两个配置文件。

    清单5. CUPS dvitops 的配置文件 filter

    [ian@attic4 ~]$ cat /etc/cups/dvitops.types

    # Local MIME definition for DVI files

    application/x-dvi dvi string(0,)

    [ian@attic4 ~]$ cat /etc/cups/dvitops.convs

    # Local DVI to PostScript filter for CUPS

    application/x-dvi application/postscript 50 dvitops

    清单 5 说明前两个位置是 16 进制数字 F7 和 02 的文件被识别为 DVI 文件,而且这类文件应当用 dvitops 过滤器处理。

    接下来,作为 root 用户,把上面的脚本拷贝到 /usr/lib/cups/filter/dvitops,并确保它完全可读并可执行(-rwxr-xr-x)。脚本的名称必须与上面的 /etc/cups/dvitops.convs 文件中的名称匹配。如果在强制模式下运行 SELinux,还应当运行 /usr/lib/cups/filter 目录中的 restorecon 来更新安全上下文。否则,lpr 看起来会工作,但是实际上并不能打印文件。

    最后,请用重新启动选项以及 /etc/rc.d/init.d 或 /etc/init.d 中的 cups 脚本,重新启动 CUPS 并使用新的过滤器。

    如果使用的是比较老的打印假脱机程序,可能要使用 magicfilter 或 apsfilter 作为输入过滤器,以便把各种输入文件转换成在 PostScript 打印机上打印的 PostScript 格式,或者使用 Ghostscript,在非 PostScript 打印机上面打印。

    结束语

  4. freebase 于 2007-10-12 15:33:56发表:

    解决了没有?

  5. freebase 于 2007-10-12 14:59:20发表:

    解决了没有?

  6. sean_chz 于 2007-10-11 15:31:30发表:

    好的,看一下

  7. freebase 于 2007-10-11 15:15:57发表:

    Debian上的打印提到中文支持问题,参考一下:
    http://www.lslnet.com/linux/dosc1/38/linux-276704.htm

  8. sean_chz 于 2007-10-11 13:06:55发表:

    驱动没问提,光盘自带的

  9. freebase 于 2007-10-11 12:51:22发表:

    LaserJet 5100/TN/DTN驱动下载:http://www.icare.hp.com.cn/techcenter/product_miniSite.asp?hprid=804&lang=zh-hans&cc=cn&y=8&x=7

    找个linux的驱动试试

  10. freebase 于 2007-10-11 12:44:05发表:

    需要安装什么驱动,到哪儿下载?谢谢!

  11. kemen 于 2007-10-11 12:29:47发表:

    如果windows下???,?是linux 的打印???程序?有?好,重新?上正?的即可。

    HP的??很好?的哦,我的是HP4000的在redhat 9.0下???

  12. itceoaug 于 2007-10-11 11:32:31发表:

    打印问题没弄过,不懂

  13. freebase 于 2007-10-11 11:28:20发表:

    linux系统连接上去,不能打印中文?

  14. sean_chz 于 2007-10-11 11:04:28发表:

    不是,windows下连上可以打中文

  15. freebase 于 2007-10-11 11:01:34发表:

    打印机是不是国外直接送过来的?

  16. sean_chz 于 2007-10-11 10:58:22发表:

    网络打印机是postscript的 用的ipp协义,PPD下了一个,网上看看好像打印机要filter生成中文postscript,搞了好几天

  17. freebase 于 2007-10-11 10:55:52发表:

    问题解决:

    硬件原因:

    1. 惠普激光打印机在重新开关机且没有连接数据线的情况下,开机后没有发送任何打印命令,仍然不停打印乱码。此时,请对打印机做冷复位。

    2. 惠普激光打印机在重新开关机且连接数据线的情况下,且计算机已关机,开机后仍然不停打印乱码。此时,请将打印机关机,拔除数据线,再开打印机。如果仍不停打印乱码,请遵照原因 1 继续操作。如果不在打印乱码,请更换数据线。

    3. 惠普激光打印机在重新开关机且连接数据线的情况下,开机后没有发送任何打印命令,仍然不停打印乱码。此时,请关闭计算机,再开打印机。若仍然打印乱码,请遵照原因 2 进行操作。



    软件原因:

    1. 惠普激光打印机打印脱机配置页时正常,但打印联机测试页时,出现不停打印乱码的情况,请重新安装打印机驱动。若重新安装后,打印联机测试页仍不停打印乱码,请在更换数据线后,重新安装驱动。

    2. 惠普激光打印机打印联机测试页时正常,但打印某些个别应用软件出现不停打印乱码,请将所打印文件分批打印或减小页面复杂度。若以上操作无效,请联系您的软件供应商。