Я использую Ghostscript для растеризации первой страницы файла PDF к JPEG. Чтобы постараться не создавать tempfiles, данные PDF передаются по каналу в stdin Ghoscripts, и JPEG "истощен" на stdout. Этот конвейер работы как очарование до GS получает недопустимые данные PDF: Вместо того, чтобы сообщить обо всех сообщениях об ошибках относительно stderr, как я ожидал бы, это все еще пишет некоторые сообщения к stdout вместо этого.
Воспроизвести:
$ echo "Not a PDF" >test.txt
$ /usr/bin/gs -q -sDEVICE=jpeg -dBATCH -dNOPAUSE -dFirstPage=1 -dLastPage=1 \
-r300 -sOutputFile=- - < test.txt 2>/dev/null
Error: /undefined in Not
Operand stack:
Execution stack:
...
Отметьте 2>/dev/null
выше не подавляет сообщения об ошибках. Документация Ghostscript уже предупредила, что запись в stdout требует -q
флаг для подавления сообщений на stdout но я все еще, кажется, пропускаю что-то здесь.
Если вы хотите действительно отключить Ghostscript, измените свою командную строку следующим образом:
/usr/bin/gs -q \
-sstdout=%stderr \
-sDEVICE=jpeg \
-dBATCH \
-dNOPAUSE \
-dLastPage=1 \
-r300 \
-sOutputFile=- \
- < test.txt 2>/dev/null
Добавление -sstdout =% stderr
позволяет Postscript stdout для перенаправления, при этом позволяя драйверам писать в stdout. (Этот патч находится в Ghostscript примерно с 22 сентября 2001 г.)