Кто-нибудь знает хороший способ разделить страницы PDF по середине на две новые страницы?
Чтобы было ясно, я не пытаюсь отделить уже существующие страницы из PDF; Я пытаюсь создать две новые страницы из существующей одной страницы.
Кто-нибудь знает хороший способ разделить страницы PDF по середине на две новые страницы?
Чтобы было ясно, я не пытаюсь отделить уже существующие страницы из PDF; Я пытаюсь создать две новые страницы из существующей одной страницы.
Ответы:
Попробуйте BRISS .
Он позволяет разбить каждую страницу на столько страниц, сколько вы хотите, определяя регионы с помощью графического интерфейса. Он группирует все подобные страницы в группы для вас, поэтому вы можете определить регионы для этой группы один раз.
Он кроссплатформенный, бесплатный и с открытым исходным кодом.
Вы можете решить это с помощью Ghostscript. pdftk
один не может сделать это (насколько мне известно). Я дам вам шаги командной строки, чтобы сделать это вручную. Это будет легко запрограммировать как процедуру, также с различными параметрами для размеров страницы и номеров страниц. Но вы сказали, что можете сделать это сами ;-)
... и ради забавы, я недавно сделал это не с помощью входного файла с двойными страницами, а с тройными. Вы можете прочитать ответ для этого случая в этом другом ответе .
Ваш случай еще проще. Кажется, у вас есть что-то похожее на это:
+------------+------------+ ^
| | | |
| 1 | 2 | |
| | | 595 pt
| | | |
| | | |
| | | |
+------------+------------+ v
^
fold
v
+------------+------------+ ^
| | | |
| 3 | 4 | |
| | | 595 pt
| | | |
| | | |
| | | |
+------------+------------+ v
<---------- 842 pt -------->
Вы хотите создать 1 PDF с 4 страницами, каждая из которых имеет размер 421 пт х 595 пт.
Давайте сначала извлечем левые разделы из каждой входной страницы:
gs \
-o left-sections.pdf \
-sDEVICE=pdfwrite \
-g4210x5950 \
-c "<</PageOffset [0 0]>> setpagedevice" \
-f double-page-input.pdf
Что сделали эти параметры?
Во-первых, знайте, что в PDF 1 дюйм == 72 балла . Тогда остальное:
-o ...............:
Имена выходного файла. Неявно также использует -dBATCH -dNOPAUSE -dSAFER
.-sDEVICE=pdfwrite :
мы хотим PDF в качестве выходного формата.-g................:
устанавливает размер выходного носителя в пикселях. Стандартное разрешение pdfwrite - 720 точек на дюйм. Следовательно, умножьте на 10, чтобы получить соответствие для PageOffset.-c "..............:
просит Ghostscript обработать данный фрагмент кода PostScript непосредственно перед основным входным файлом (который должен следовать -f
).<</PageOffset ....:
устанавливает смещение изображения страницы на носителе. (Конечно, для левых страниц сдвиг [0 0]
не имеет реального эффекта.)-f ...............:
обработать этот входной файл.Какой результат достигла последняя команда?
Вот этот:
Output file: left-sections.pdf, page 1
+------------+ ^
| | |
| 1 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
Output file: left-sections.pdf, page 2
+------------+ ^
| | |
| 3 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
<-- 421 pt -->
Далее правые разделы:
gs \
-o right-sections.pdf \
-sDEVICE=pdfwrite \
-g4210x5950 \
-c "<</PageOffset [-421 0]>> setpagedevice" \
-f double-page-input.pdf
Результат:
Output file: right-sections.pdf, page 1
+------------+ ^
| | |
| 2 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
Output file: right-sections.pdf, page 2
+------------+ ^
| | |
| 4 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
<-- 421 pt -->
Теперь мы объединяем страницы в один файл. Мы могли бы сделать это и с ghostscript, но мы будем использовать pdftk
вместо этого, потому что это быстрее для этой работы:
pdftk \
A=right-sections.pdf \
B=left-sections.pdf \
shuffle A B \
output single-pages-output.pdf
verbose
Выполнено. Вот желаемый результат. 4 разных страницы размером 421х595 пт.
Результат:
+------------+ +------------+ +------------+ +------------+ ^
| | | | | | | | |
| 1 | | 2 | | 3 | | 4 | |
| | | | | | | | 595 pt
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
+------------+ +------------+ +------------+ +------------+ v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->
"<</PageOffset [-421 0]>> setpagedevice"
. Я думаю, это зависит от ориентации исходного файла. Отличный ответ, тем не менее. :)
Спасибо @marttt и их ответу в Unix & Linux .
Вы можете использовать mutool
(который входит в состав mupdf
):
mutool poster -x 2 input.pdf output.pdf
Вы также можете использовать, -y
если вы хотите выполнить вертикальное разделение.
Чтобы расширить ответ @ Kurt (поскольку у меня недостаточно очков репутации, чтобы комментировать), сначала убедитесь, что используемые вами измерения не основаны на измерениях Crop Box, если они отличаются от измерений Media Box. Размер вывода основан на размерах Media Box, но смещение, похоже, использует размеры Crop Box.
Для страницы с откидной створкой, которая имела мультимедийный блок 20.0833 x 13.833 и обрезку 19.25 x 13.0, которые были такими же, как поле обрезки в моем документе, разделить его на две страницы в Ubuntu для левой стороны:
gs -o left.pdf -sDEVICE=pdfwrite -g7230x9960 -c "<</PageOffset [0 0]>> setpagedevice" -f gatefold.pdf
Правая сторона:
gs -o right.pdf -sDEVICE=pdfwrite -g7230x9960 -c "<</PageOffset [-693 0]>> setpagedevice" -f gatefold.pdf
А потом сшил их pdftk left.pdf right.pdf output final.pdf
.
Альтернативой было бы установить поле кадрирования на то же, что и поле медиа; тогда смещение будет равно -723. Но тогда придется обрезать кадрирование, чтобы страницы выглядели без шва. В противном случае установите носитель на обрезку.