1

Я хотел бы объединить документы PDF без потери какой-либо информации (передискретизация изображений и т.д.). Я только хочу делать сжатия без потерь, объединять шрифты и т.д.

Перед слиянием я хотел бы удалить первую и последнюю страницу каждого документа. Как я могу объединить это с процессом слияния, чтобы мне не нужно было запускать каждый файл дважды через gs?

Чтобы объединить, я использую команду из этого превосходного ответа. Я добавил dPDFSETTINGS =\prepress. Я не уверен, если это необходимо или хорошая идея.

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dPDFSETTINGS=/prepress \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dEncodeColorImages=false \
  -dEncodeGrayImages=false \
  -dEncodeMonoImages=false \
   title.pdf \
   content.pdf

Обновить:

Я попробовал команду выше (без удаления страниц) на некоторых реальных файлах, и она работает очень медленно.

gswin32c.exe -dBATCH -dNOPAUSE -o temp.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dColorConve
rsionStrategy=/LeaveColorUnchanged -dEncodeColorImages=false -dEncodeGrayImages=false -dEncodeMonoImages=false [list of pdf files] pdfmark

Выполнение вышеуказанной команды для 20 файлов размером 2 МБ создает почти 2 ГБ временных файлов, а затем выполняется очень медленно с небольшим использованием ЦП и большой нагрузкой на жесткий диск. Это занимает около 20 минут, а размер выходного файла составляет 800 МБ.

Я получаю это сообщение об ошибке: GPL Ghostscript 9.10: Отсутствует глиф CID = 0, глиф = 0028 в шрифте HiddenHorzOCR. Вывод PDF может не получиться у некоторых зрителей.

С другой стороны, pdftk запускается за 30 секунд, а размер выходного файла составляет 40 МБ. Добавление закладок с помощью gs занимает еще одну минуту и уменьшает размер файла до 30 МБ.

gswin32c.exe -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out.pdf pdftk.pdf pdfmark

Есть ли недостатки использования pdftk? Я хотел бы сохранить изображения точно такого же качества, не теряя деталей и не делая файлы чрезмерно большими. В противном случае меня это не сильно волнует, PDF-файлы в основном представляют собой отсканированные научные статьи и главы из книг. Страницы, которые я хотел бы удалить, являются титульными страницами, которые были отсканированы с каждой статьей, одна спереди и одна в конце.

1 ответ1

1

Что касается вашего обновления: pdftk сохраняет настройки качества изображения, но не метаданные, маркеры глав и т.д.

sejda - это новый набор инструментов для редактирования PDF, который может делать все, что может pdftk, и даже больше. Самое главное, что он сохраняет все настройки качества и большую часть метаданных файла. Сейда требует Java для работы.

Вот документация по действиям слияния:

$sejda merge -h

Given a collection of pdf documents, creates a single output pdf document composed by the selected pages of each input document taken in the given order.

Example usage: sejda-console merge -f /tmp/file1.pdf /tmp/file2.pdf -o /tmp/output.pdf -s all:12-14:32,12-14,4,34-:

Usage: sejda-console merge options
  [--addBlanks] : add a blank page after each merged document if the number of pages is odd (optional)
  --bookmarks -b value : bookmarks merge policy. {discard, retain, one_entry_each_doc }. Default is 'retain' (optional)
  [--compressed] : compress output file (optional)
  [--copyFields] : input pdf documents contain forms (high memory usage) (optional)
  [--directory -d value] : directory containing pdf files to merge. Files will be merged in alphabetical order. (optional)
  [--files -f value...] : pdf files to operate on: a list of existing pdf files (EX. -f /tmp/file1.pdf or -f /tmp/password_protected_file2.pdf:secret123) (optional)
  [--filesListConfig -l value] : xml or csv file containing pdf files list to concat. If csv file in comma separated value format; if xml file <filelist><file value="filepath" /></filelist> (optional)
  [--help -h] : prints usage information. Can be used to detail options for a command '-h command' (optional)
  [--matchingRegEx -e value] : regular expression the file names have to match when the directory input is used (Ex -e "test(.*).pdf"). (optional)
  --output -o value : output file (required)
  [--overwrite] : overwrite existing output file (optional)
  --pageSelection -s value : page selection script. You can set a subset of pages to merge as a colon separated list of page selections. Order of the pages is relevant. Accepted values: 'all' or 'num1-num2' or 'num-' or 'num1,num2-num3..' 
    (EX. -f /tmp/file1.pdf /tmp/file2.pdf -s all:all:), (EX. -f /tmp/file1.pdf /tmp/file2.pdf /tmp/file3.pdf -s all:12-14:32,12-14,4,34-:) to merge file1.pdf, pages 12,13,14 of file2.pdf and pages 32,12,13,14,4,34,35.. of file3.pdf. 
    If -s is not set default behaviour is to merge document completely (optional)
  --pdfVersion -v value : pdf version of the output document/s {2, 3, 4, 5, 6 or 7}. Default is 6. (optional)

Скажем, у вас есть два PDF-файла, file1.pdf и file2.pdf, каждый из которых содержит 50 страниц, и вы хотите объединить их, пропуская первую и последнюю страницы в каждом случае. Эта команда должна сделать свое дело:

sejda-console merge -f file1.pdf file2.pdf -o merge.pdf -s 2-49:2-49:

Примечание. Возможно, вам придется заменить sejda-console на sejda-console.bat если вы работаете в Windows.

Как видите, вам все равно придется вручную указывать диапазон страниц для каждого документа. Если вы хотите автоматизировать это, вы можете написать скрипт bash или что-то похожее, чтобы сначала рассчитать количество страниц PDF (например, с помощью pdfinfo libpoppler), а затем составить соответствующую командную строку sejda .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .