我尝试将一些 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 Writer 中出现打印问题,但 Adobe 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 命令但也许它也能起作用。