在一个简单的 shell 脚本中我尝试运行以下命令:
cat /filelocation/myoutput.PDF | /opt/Adobe/Acrobat7.0/bin/acroread -toPostScript
在大多数情况下,这是可行的。但偶尔我会收到错误:
lp: standard input is empty
lp: request not accepted
Broken pipe
cat: Cannot write to output.
这似乎仅在我们以递归方式处理大量 pdf 的高负载下才会发生。(使用不同的文件反复调用所述 shell 命令)
答案1
你可以让你的 shell 脚本变得更简单,看看是否至少能得到更好的错误消息:
/opt/Adobe/Acrobat7.0/bin/acroread -toPostScript < /filelocation/myoutput.PDF
这也使得建议的 strace 更加美观:
strace -f -o /tmp/acroread.$$.strace /opt/Adobe/Acrobat7.0/bin/acroread -toPostScript < /filelocation/myoutput.PDF
答案2
您可以尝试使用 pdf2ps:
pdf2ps [ options ] input.pdf [output.ps]
或者,您可能想要安装较新版本的 Adobe Acrobat。
答案3
我假设,由于您使用的是STDOUT
/STDIN
版本-toPostScript
,因此您正在将输出传输到acroread
to lp
(问题中未显示?)。我感觉您遇到了假脱机问题 —— 要么您正在完全填满假脱机(这会导致lp
to barf),要么遇到了其他类型的限制。
此主题讨论了一些无法打印大文件的诊断方法(尽管我怀疑连续快速打印许多小文件可能会导致同样的问题)——
- 检查您的 /var/spool/lp 是否有足够的可用空间。
- 假设 /var/spool 是挂载点,请检查此文件系统是否已打开“largefiles”选项。(可能不适用于您的情况)。
我对印刷不太了解,但是我绝对认为这是lp
导致问题的原因,而不是cat
,acroread
或管道一般情况下。(不过,如果你怀疑,acroread
你可以尝试一下pdf2ps
,这是xpdf
)。
答案4
如果管道没有正确关闭并试图重新打开,则可能会发生这种情况。如果您的负载很重,就像您所说的那样,则可能会发生这种情况。
尝试在调用之间引入一个减速因素。也许在调用脚本之间添加一个“wait 1”命令。