Создать выходной файл PDF, чередуя страницы двух файлов

Создать выходной файл PDF, чередуя страницы двух файлов

У меня есть файл pdf, назовем его A, состоящий из множества страниц. Затем у меня есть второй файл pdf, назовем его B, состоящий из одной страницы.

Моя цель — получить выходной файл, назовем его O, со следующим шаблоном:

O[1] = A[1]
O[2] = B[1]
O[3] = A[2]
O[4] = B[1]
O[5] = A[3]
O[6] = B[1]
O[7] = A[4]
O[8] = B[1]
...

Другими словами, я хочу чередовать страницы A со страницей B. Чтобы дать вам представление, файл A содержит слайды курса, который я посещал, я создал файл B с одной страницей, заполненной горизонтальными линиями.

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

Я могу сделать это, импортировав каждую отдельную страницу в LibreOffice, но мне нужен скрипт (возможно, pdftk?), который можно было бы легко запустить для разных файлов.

решение1

Речь идет о сопоставлении страниц, здесь B какстранный/ректои А какдаже/оборотная сторона(учитывая точные требования OP), за исключением того, что доступных страниц B недостаточно: их придется дублировать достаточное количество раз в первой операции.

Если страницы А (таким образомоборотная сторона) должны быть видны слева на страницах B, тогда должен быть один охранникректопервая страница: например, дополнительная страница B.

  • подсчитайте количество страниц в книге А. Допустим, там 10 страниц.

    Это означает, что понадобится одна дополнительная первая страница B для общего количества 10+1 = 11 (или, как показано ниже, от 0 до 10). Если есть способ автоматизировать этот подсчет, его следует использовать как верхнее значение для цикла ниже. Я не знаю такого способа.

  • сгенерировать достаточное количество страниц B (уникальная страница B1) в цикле оболочки для копирования из первой pdftkкоманды и пропускания их черезстандартный выводко второй pdftkкоманде, которая будет использоватьстандартный вводдля части B и сопоставлю их по части A.

    pdftk B=B.pdf cat $(for page in $(seq 0 10); do echo B1; done) output - | pdftk A=A.pdf B=- shuffle B A output O.pdf
    

    или то же самое разделение в более читаемой форме:

    pdftk B=B.pdf \
          cat $(for page in $(seq 0 10); do echo B1; done) \
          output - | \
    pdftk A=A.pdf \
          B=- \
          shuffle B A \
          output O.pdf
    

    Примечание: если это не совсем понятно, после развертывания цикла оболочки это преобразуется в:

    pdftk B=B.pdf cat B1 B1 B1 B1 B1 B1 B1 B1 B1 B1 B1 output - | pdftk A=A.pdf B=- shuffle B A output O.pdf
    

Если порядок страниц между A и B поменять местами (чтобы начать печать со страницы A, а не со страницы B), вероятно, следует сгенерировать на одну страницу меньше в B (последняя страница B, вероятно, не понадобится) и изменить shuffle B Aна shuffle A Bв последней команде.

Здесь(ре)реализация Javapdftk, который был включен в последние дистрибутивы.

Связанный контент