使用 incron 运行命令时出现问题

使用 incron 运行命令时出现问题

我尝试将一些 ODT 文档从 LibreOffice 4(Ubuntu 13.04 OS)打印到 Toshiba e-Studio 167 打印机。当文档包含 Liberation Sans、Liberation Serif 等字体时,我得到的打印页面出现以下错误:

ERROR:
invalidfont
OFFENDING COMMAND
$definefont
STACK:
--nostringval--
/WASRNP+LiberationSerif
--nostringval--
/WASRNP+LiberationSerif
--nostringval--
--nostringval--
17

但是,如果将 ODT 文件导出为 PDF 并打印 PDF 文件或者从 Acrobat 打印另一个 PDF 文件,则没有问题。

我一直在尝试此线程中给出的解决方案,但如果我将打印机语言类型更改为 PostScript,我会收到相同的错误:

无法从 LibreOffice 打印

LibreOffice Writer 中出现打印问题,但 Adob​​e Acrobat Reader 或 Evolution 中没有出现打印问题

为了尝试解决这个问题,我配置了 incron,以便首先打印到 PDF 打印机,然后将文件打印到打印机。

以下任何命令都可以从命令行运行,并且文件可以正常打印:

cat <file.pdf> | acroread -toPostScript | lpr -P <printer name>

cat pdf2ps <file.pdf> | lpr -P <printer name>

但如果我将它们放在运行“incrontab -e”时打开的文件中,则不会发生任何情况(打印机不执行任何操作)。

incrontab -e

/home/<user>/PDF IN_CLOSE_WRITE cat $@/$# | acroread -toPostScript | lpr -P <printer name>

保存文件

或者

incrontab -e

/home/<user>/PDF IN_CLOSE_WRITE cat pdf2ps $@/$# | lpr -P <printer name>

保存文件

Incron 可以与其他命令(如 cp)配合使用。

另一方面,接下来两种“incrontab -e”的可能配置使打印机工作,但存在我在开头提到的问题。可能是管道的问题?

/home/launion/PDF IN_CLOSE_WRITE /usr/lib/libreoffice/program/soffice --invisible --norestore -pt <printer name> $@/$#

/home/launion/PDF IN_CLOSE_WRITE lpr -P <printer name> -o Resolution=600x600dpi -o PageSize=A4 -o Duplex=None $@/$#

答案1

最后,我使用一个简单的 bash 脚本(/usr/local/bin/print_pdf.sh)解决了这个问题,避免在 incrontab 文件中使用管道:

#!/bin/bash
cat $1 | acroread -toPostScript | lpr -P <printer name>

所有用户的执行权限:

sudo chmod a+x /usr/local/bin/print_pdf.sh

此后,作为普通用户:

incrontab -e

/home/launion/PDF IN_CLOSE_WRITE print_pdf.sh $@/$#

保存文件

现在,当打印到虚拟 PDF 打印机时,东芝打印机将以 PostScript 格式接收文件并正常打印。

我没有尝试使用 pdf2ps 命令但也许它也能起作用。

相关内容