Как разместить несколько PDF-файлов на одной странице (например, четыре на одной / 4 на 1) с сохраненными аннотациями?

У меня есть PDF-документ (слайды) с аннотации, выполненные пером. Что касается раздаточного материала, я хочу напечатать их в формате 4-на-1 и, следовательно, конечно , включая аннотации.

В StackOverflow есть несколько решений, объясняющих, как можно получить эту распечатку 4-на-1, но по умолчанию эти решения не сохраняют аннотации. Проблема здесь, кажется, в том, что аннотации находятся на другом уровне PDF, который игнорируется в этих стандартных преобразованиях, которые объединяют несколько страниц в одну.

Таким образом, вопрос в том, как можно выполнить печать «несколько страниц на одной» без игнорирования / отбрасывания аннотаций.

2
задан 30 August 2021 в 09:23

1 ответ

Описание работает для:

Ubuntu          21.04
pdfjam          3.03
GPL Ghostscript 9.53.3 (2020-10-01)

Я создал этот вопрос после того, как нашел решение - чтобы облегчить задачу другим (поскольку некоторые команды, которые я нашел, были устаревшими и т.д.)

Ключевым моментом в поиске решения является знание того, что "сохранение" аннотаций называется "сглаживанием", которое, по сути, помещает слой аннотаций в "стандартный" слой (слои).

Таким образом, у нас есть три шага:

  1. сглаживание: pdf2ps -q -sOutputFile=- input.pdf | ps2pdf - out-flat.pdf
  2. объединение 4on1: pdfjam --nup 2x2 out-flat.pdf --outfile out-4on1.pdf --landscape

Для меня шаг 1 дал PDF, который был значительно больше оригинала, поэтому альтернативным третьим шагом может быть сжатие:

  1. сжатие: gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -q -o out-4on1-compressed.pdf out-4on1.pdf

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

Поскольку мне придется делать это регулярно, я создал для этого удобный скрипт. Надеюсь, он будет полезен и другим!

#!/bin/sh

# argument 1: input filename
# argument 2: compression rate (optional)

# remove file ending to be able chaning the filename
filename=$(basename -- "$1")
extension="${filename##*.}"
prefix="${filename%.*}"

# compile the annotations inte the main layer(s)
pdf2ps -q -sOutputFile=- $1 | ps2pdf - $prefix-flattened.pdf

# put 4 slides into one per page, landscape mode
pdfjam --nup 2x2 $prefix-flattened.pdf --outfile $prefix-4on1-largeFile.pdf --landscape

# compress
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/${2:-ebook} -q -o $prefix-4on1.pdf $prefix-4on1-largeFile.pdf

# delete intermediate files
rm ./$prefix-flattened.pdf
rm ./$prefix-4on1-largeFile.pdf

Не забудьте сделать файл скрипта исполняемым (например, через chmod +x 4on1-script.sh). Сценарий удаляет все промежуточные файлы. Также он создает полезное имя файла, для которого требовалось "идентифицировать" префикс файла. Его первый аргумент - имя входного файла. Второй аргумент необязателен и определяет качество сжатия. Значение по умолчанию - ebook, другие значения:

  • screen: выбирает вывод с низким разрешением, аналогичный настройке Acrobat Distiller "Screen Optimized".
  • ebook: выбирает вывод со средним разрешением, аналогичный настройке Acrobat Distiller "eBook". (выбирается здесь)
  • принтер: выбирает вывод, аналогичный настройке Acrobat Distiller "Print Optimized".
  • prepress выбирает вывод, аналогичный настройке Acrobat Distiller "Prepress Optimized".
  • по умолчанию выбирает вывод, предназначенный для использования в самых разных областях, возможно, за счет большего размера выходного файла.

Если вам нравится это решение, подумайте также о тех, на которых я основывал это решение:

5
ответ дан 4 September 2021 в 09:26

Другие вопросы по тегам:

Похожие вопросы: