Linux教程 用CUPS来打印DVI文件的方法(3)

解决方案是创建一个作为过滤器的包装器脚本。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 过滤器处理。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3ed6dfd1861f415c56bad3134ef4eef9.html