Если вы просто хотите объединить два PDF-файла без какой-либо обработки его содержимого, pdftk
это для вас. (В Mac OS X это должно быть доступно через MacPorts или Fink, для Linux есть встроенные пакеты для всех основных дистрибутивов; для Windows посмотрите здесь. ) Попробуйте это:
pdftk title.pdf content.pdf cat output book.pdf
Это добавит title.pdf к content.pdf и запишет результат в book.pdf .
pdftk
это "тупой", но очень быстрый способ объединения двух (или более) файлов PDF. До сих пор "тупой", поскольку pdftk
он никоим образом не интерпретирует поток данных PDF, он просто гарантирует, что внутренние номера объектов переставляются по мере необходимости и появляются в xref
структуре PDF (которая в основном является своего рода PDF ToC для объекты).
Ghostscript:
Если вы хотите использовать Ghostscript, основная команда для объединения этих двух файлов:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
title.pdf \
content.pdf
Однако, как вы поняли, эта простая командная строка может испортить качество вашего изображения. Причина в том, что Ghostscript не 'dump' при обработке PDF-файлов: он полностью интерпретирует их при чтении и создает совершенно новый файл при записи результата. Для создания результата он будет автоматически использовать настройки по умолчанию для большого количества деталей в общей обработке. Эти значения по умолчанию будут применяться во всех случаях, когда его вызовы не указывали Ghostscript иначе.
Таким образом, метод Ghostscript для создания нового book.pdf гораздо более «интеллектуален» (но также намного медленнее), чем pdftk
метод, используемый в России. (Это также причина, по которой Ghostscript во многих случаях способен - в пределах ограничений - «восстанавливать» b0rken-файлы PDF или встраивать шрифты в выходные PDF-файлы, которые не встроены во входные PDF-файлы, или удалять дублированные изображения, заменяя их просто ссылками и т. д. - и в целом создавал более мелкие, лучше оптимизированные файлы из раздутых входных PDF-файлов ...)
Решение состоит в том, чтобы не позволить Ghostscript использовать его значения по умолчанию: добавляя дополнительные пользовательские параметры в командную строку.
Что значит «Ghostscript» интерпретирует «ввод PDF» ?
Весь файл и его содержимое (объекты, потоки, шрифты, изображения и т. Д.) Считываются, проверяются и хранятся в своем собственном внутреннем представлении, прежде чем снова выплеснуть полученный PDF с его объектами PDF. Однако при «выплевывании» Ghostscript будет применять все свои внутренние настройки по умолчанию для сотен доступных параметров [*] .
К сожалению, это вызывает вашу «повторную обработку» изображений в соответствии с этими настройками по умолчанию, чего можно избежать или переопределить, только добавив свои собственные (желательные) параметры командной строки.
Проблемы с изображениями могут быть вызваны необходимостью Ghostscript (из-за проблем с лицензированием) перекодировать изображения JPEG2000 в кодировку JPEG. Если вы хотите избежать этого, добавьте следующее в вашу командную строку:
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
Другие связанные с изображением параметры командной строки, которые следует учитывать для включения:
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
Итак, полная командная строка Ghostscript, которая может вас порадовать, должна выглядеть так:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
title.pdf \
content.pdf
Вы также можете указать Ghostscript NOT сжимать изображения в выходном PDF-файле, используя следующую командную строку:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dEncodeColorImages=false \
-dEncodeGrayImages=false \
-dEncodeMonoImages=false \
title.pdf \
content.pdf
,
[*]:
Если вам интересно узнать полный список настроек по умолчанию, которые использует устройство pdfwrite Ghostscript , выполните следующую команду. Возвращает вам полный список:
gs \
-sDEVICE=pdfwrite \
-o /dev/null \
-c "currentpagedevice { exch ==only ( ) print == } forall"
Чтобы получить объяснения о том, что именно означают все эти параметры, вам нужно прочитать в документации Adobe «Параметры дистиллятора» . Ghostscript изо всех сил пытается подражать всем этим ...