ОК, во-первых, вы не 'сжимаете PDF-файл'. То, что вы делаете, это интерпретация исходного файла PDF, создание последовательности операций маркировки, а затем создание нового файла PDF из этих операций маркировки. Это не одно и то же, и важно оценить разницу.
Например, одна из возможных вещей - это преобразование цвета в цвет или уменьшение разрешения изображений (оба из которых потенциально имеют место при выборе/ebook). Если вы просто «сжимаете» этот файл, вы не будете изменять данные, поэтому такие изменения не будут возможны.
Однако вы также можете потерять информацию. Единственной целевой целью для устройства pdfwrite Ghostscript является то, что внешний вид должен быть неизменным (насколько это разумно, если вы измените разрешение и т. Д.). Метаданные могут не сохраняться. Действительно, тот факт, что устройство pdfwrite не сохраняет определенные метаданные (например, вложенные файлы Illustrator), является частью причины, по которой он может создавать меньшие PDF-файлы.
Я не знаю ничего о «мозаичном», но вы пытаетесь отправить данные в Ghostscript через stdin и прочитать полученный PDF-файл из stdout?
Если это так, вы фактически создадите несколько временных файлов. Невозможно обработать файл PDF из stdin, в общем, поскольку формат PDF требует произвольного доступа к файлу. Поэтому, если вы передаете PDF-файл в stdin, первое, что Ghostscript будет делать, это создать временный файл и поместить в него файл PDF-файла из stdin. Затем он может интерпретировать файл. Кроме того, pdfwrite создаст многочисленные временные файлы, связанные с созданием вывода.
Вы «можете» выбрать стандартный вывод в качестве адресата для файла PDF, но .....
Как я уже упоминал формат PDF является произвольным доступом, и ее обычной практикой писать части файла, оставляя пространство для битов, которые вы еще не знаете, затем перемотайте файл и заполните их, когда вы это сделаете. Очевидно, что это не будет работать с потоком, недоступным для поиска. В настоящее время устройство pdfwrite делает это только при создании PDF-файла Linearized (оптимизированного для быстрого просмотра в Интернете), но я не буду гарантировать, что будущие версии pdfwrite не потребуют возможности поиска в выходном файле.
Таким образом, короткий ответ: вы можете установить OutputFile в качестве стандартного вывода, но это не гарантируется.
Спасибо, что нашли время, чтобы объяснить основы! Таким образом, соединение PDF в ghostscript, безусловно, невозможно. (Например, 'cat mayflle.pdf | ghostscript ...' не идет и никогда не будет работать из-за природы файлов PDF?) – lanti
Это сработает, но то, что GS будет делать за кулисами, делает вход stdin в временный файл на диске, потому что, как вы правильно говорите, это характер файлов PDF, вам нужно искать внутри них. – KenS