[PDF] Автоматическая раскладка многостраничных PDF на листы заданного размера

  • Автор темы Автор темы MrDesigner
  • Дата начала Дата начала

MrDesigner

Топикстартер
15 лет на форуме
Сообщения
2 334
Реакции
873
Всем привет!

Неспешно ищется метод автоматизации рутинного процесса.

В заданной папке есть многостраничные pdf-файлы. Файлов может быть разное количество, страниц в каждом тоже. Все страницы имеют одинаковый размер: 350 х 500 мм.

Нужно все эти файлы со всеми страницами разложить в общий pdf-документ "сеткой" 3 х 2 шт. Размер одной страницы: 1500 х 700 мм.

OS: Windows.

ИИ предложил следующий вариант:

Установить TeX Live и pdfjam.

Описание процесса:
  1. Взять все входные PDF‑файлы.
  2. Повернуть их на 90°.
  3. Разложить по 6 страниц (3×2) на лист формата 1500×700 мм без масштабирования.
  4. Собрать во всеобъемлющий merged.pdf.
  5. Автоматически разбить общий файл на отдельные страницы с "говорящими" именами sheet_001.pdf, sheet_002.pdf, … в папке READY.
Батник, который надо положить в папку с исходными PDF‑файлами:

Код:
@echo off
setlocal enabledelayedexpansion

if not exist READY mkdir READY

rem === 1. Сборка всех PDF в один (поворот+раскладка 3x2, лист 1500x700) ===
pdfnup --nup 3x2 --paper "1500mm,700mm" --landscape --angle 90 --outfile merged.pdf *.pdf

rem === 2. Узнаём количество страниц ===
for /f "tokens=*" %%a in ('cpdf -pages merged.pdf') do set PAGES=%%a
echo Всего страниц: %PAGES%

rem === 3. Разбивка по страницам в папку READY со «счётчиком» ===
set /a i=1
:loop
if %i% leq %PAGES% (
    set "num=00%i%"
    set "num=!num:~-3!"
    cpdf -pages %i%-%i% merged.pdf -o READY\sheet_!num!.pdf
    echo Создан READY\sheet_!num!.pdf
    set /a i+=1
    goto loop
)

echo === ГОТОВО ===
pause

Есть ли более "изящный" метод, потому как ради одной команды поворота и сборки нужно устанавливать полный пакет TeX Live?

Спасибо.
 
А что, QIP это неспортивно, обязательно стоя в гамаке? 'hmmm'
И зачем даже в таком решении Tex Live?
 
Последнее редактирование:
А просто Combine Files in Acrobat, а потом QIP с помощью n-Up pages не рассматривается?
И ещё - эти многостраничные файлы - предполагается что они будут печататься? 4+4 или 4+0?
Как их потом собирать по "родным гнёздам"?
 
Последнее редактирование:
  • Спасибо
Реакции: MrDesigner
С QIP очень давно работал, спасибо за напоминание, попробуем.

И ещё - эти многостраничные файлы - предполагается что они будут печататься? 4+4 или 4+0?
Это для широкоформатной печати. 4+0, естественно.
 
это не к Combine ... он просто сложит всё в один файл
А встык или не встык - это уже к n-Up ...
А что РИП ваш к широкоформатке - сам не умеет раскладывать на рулон - примитивный импозинг там должен быть - и метки заодно там можно поставить
 
  • Спасибо
Реакции: MrDesigner
cpdf *.pdf -impose-xy "3 2" AND -slpit -o output%%%.pdf
 
Последнее редактирование:
  • Спасибо
Реакции: akropin, ~RA~ и MrDesigner
А что РИП ваш к широкоформатке - сам не умеет раскладывать на рулон - примитивный импозинг там должен быть - и метки заодно там можно поставить
Умеет. Но итоговых страниц часто бывает больше ста. Группировать по 6 штук в нестинг - лишняя трата времени.
 
нет
cpdf -impose-xy "3 4" in.pdf -o out.pdf
Impose 3 across and 4 down on to new pages of 3 times the width and 4 times the height of the input
ones.
-impose-xy просто расставляет их, Для масштабирования есть -impose-scaling и -impose-margin
 
  • Спасибо
Реакции: MrDesigner
Понял, спасибо, попробуем!
 
📂 Полный батч‑скрипт process_cpdf.bat

Код:
@echo off

setlocal enabledelayedexpansion


rem === Создаём папку READY, если её ещё нет ===

if not exist READY mkdir READY


rem === 1. Поворот всех страниц исходных PDF на 90 градусов ===

cpdf -rotateby 90 *.pdf -o rotated.pdf


rem === 2. Импозиция: 3x2 страницы без масштабирования на лист 1500x700 мм ===

cpdf rotated.pdf -impose-xy "3 2" -mediabox "0 0 1500 700" -o imposed.pdf


rem === 3. Узнаём, сколько страниц в imposed.pdf ===

for /f "tokens=*" %%a in ('cpdf -pages imposed.pdf') do set PAGES=%%a

echo Всего листов: %PAGES%


rem === 4. Разбиваем imposed.pdf на отдельные страницы sheet_001.pdf ... ===

set /a i=1

:loop

if %i% leq %PAGES% (

    rem Формируем триадную нумерацию (001, 002, 003...)

    set "num=00%i%"

    set "num=!num:~-3!"

    

    echo Сохраняем лист %i% как READY\sheet_!num!.pdf

    cpdf -pages %i%-%i% imposed.pdf -o READY\sheet_!num!.pdf

    

    set /a i+=1

    goto loop

)


echo ====================================

echo ГОТОВО!

echo Общий сборник: imposed.pdf

echo Отдельные файлы: READY\sheet_001.pdf, sheet_002.pdf, ...

echo ====================================

pause
 
можно даже без QIP - задать кастом размер вместо А0 - и в Advanced - включить CropMark
1758781820949.png
 
И да, верно, и нет, спуск получится, но ТС нужно потом на отдельные страницы разбить же
 
📂 Полный батч‑скрипт process_cpdf.bat

Код:
rem === 4. Разбиваем imposed.pdf на отдельные страницы sheet_001.pdf ... ===

set /a i=1

:loop

if %i% leq %PAGES% (

    rem Формируем триадную нумерацию (001, 002, 003...)

    set "num=00%i%"

    set "num=!num:~-3!"

 

    echo Сохраняем лист %i% как READY\sheet_!num!.pdf

    cpdf -pages %i%-%i% imposed.pdf -o READY\sheet_!num!.pdf

 

    set /a i+=1

    goto loop

)
Вот это всё не нужно

- split -o READY/imp%%%.pdf
cpdf сам всё разобъет постранично и сам всё пронумерует это его встроенная фича
Еще раз - у вас вся задача на 1 строчку
 
Последнее редактирование:
  • Спасибо
  • Огонь
Реакции: ~RA~, dastin и MrDesigner
Print Page border отключить же нужно было
Верно! Что-то вчера у меня не получалось...

Но всё равно - я за батник. Меньше телодвижений.

В нужной папке с кучей pdf запустил его - и всё.