У меня есть куча файлов PDF, которые содержат две "настоящие" страницы на одной странице PDF; Я хотел бы нарезать их пополам и поместить каждую половину на отдельную страницу. По сути, мне нужно что-то, что делает полную противоположность pdfnup
(или psnup
). Как можно достичь этого подвига?
Платформа Linux, с открытым исходным кодом; так как у меня есть большая куча из них, было бы неплохо сделать что-то, что может быть написано в сценарии (в отличие от графического интерфейса), так что я могу просто дать ему список их и сделать это.
Существующий сценарий также не единственный вариант; если есть пример кода для управления PDF-файлами аналогичным образом со сторонней библиотекой, я, вероятно, смогу взломать его и сделать то, что я хочу.
linux
pdf
ghostscript
Уомбл
источник
источник
Ответы:
Вы можете решить это с помощью Ghostscript.
pdftk
один не может сделать это (насколько мне известно). Я дам вам шаги командной строки, чтобы сделать это вручную. Это будет легко запрограммировать как процедуру, также с различными параметрами для размеров страницы и номеров страниц. Но вы сказали, что можете сделать это сами ;-)Как решить эту проблему с помощью Ghostscript ...
... и ради забавы, я недавно сделал это не с помощью входного файла с двойными страницами, а с тройными. Вы можете прочитать ответ для этого случая здесь .
Ваш случай еще проще. Кажется, у вас есть что-то похожее на это:
Вы хотите создать 1 PDF с 4 страницами, каждая из которых имеет размер 421 пт х 595 пт.
Первый шаг
Давайте сначала извлечем левые разделы из каждой входной страницы:
Что сделали эти параметры?
Во-первых, знайте, что в PDF 1 дюйм == 72 балла . Тогда остальное:
-o ...............:
Имена выходного файла. Неявно также использует-dBATCH -dNOPAUSE -dSAFER
.-sDEVICE=pdfwrite :
мы хотим PDF в качестве выходного формата.-g................:
устанавливает размер выходного носителя в пикселях. Стандартное разрешение pdfwrite - 720 точек на дюйм. Следовательно, умножьте на 10, чтобы получить соответствие для PageOffset.-c "..............:
просит Ghostscript обработать данный фрагмент кода PostScript непосредственно перед основным входным файлом (который должен следовать-f
).<</PageOffset ....:
устанавливает смещение изображения страницы на носителе. (Конечно, для левых страниц сдвиг[0 0]
не имеет реального эффекта.)-f ...............:
обработать этот входной файл.Какой результат достигла последняя команда?
Вот этот:
Второй шаг
Далее правые разделы:
Обратите внимание на отрицательное смещение, так как мы смещаем страницу влево, оставляя область просмотра неподвижной.
Результат:
Последний шаг
Теперь мы объединяем страницы в один файл. Мы могли бы сделать это и с ghostscript, но мы будем использовать
pdftk
вместо этого, потому что это быстрее для этой работы:Выполнено. Вот желаемый результат. 4 разных страницы размером 421х595 пт.
Результат:
источник
421
->-421
). ;-)Существует инструмент pdfposter, который можно использовать для создания PDF-файлов с несколькими страницами для одной входной страницы (мозаика или разделка страниц). Это похоже на инструмент
poster
, который делает то же самое для файлов PostScript.источник
Итак, после гораздо большего поиска (кажется, что «PDF-вырезанные страницы» - намного лучший поиск), я нашел небольшой скрипт,
unpnup
который используетposter
преобразование PDF / PS иpdftk
делает именно то, что мне нужно. Это немного долгий путь, но он намного превосходит другие методы, которые я нашел (например, использование imagemagick), потому что он не растеризует страницы перед тем, как их выплюнуть.На случай, если mobileread по какой-то причине исчезнет, ядро сценария (лицензированное по GPLv2 или более поздней версии Харальдом Хакенбергом
<hackenberggmx.at>
) выглядит следующим образом:источник
PDF => EPS => PDF
маршрута и идет более безопаснымPDF => PDF => PDF
путем.Я нашел ответ Курта Пфайли очень полезным для моей аналогичной ситуации. Я думал, что мог бы поделиться своей модификацией решения с другими ...
У меня тоже был отсканированный PDF, в котором было по 2 страницы на каждом листе. Это был отсканированный в брошюру буклет размером 11 x 8,5 (дюйм), который был оставлен сшитым при первоначальном сканировании, поэтому: страница PDF 1 = задняя и передняя обложка; Страница PDF 2 = страницы 2 и 3 и т. Д. На экране это хорошо читается, но вы не можете распечатать его, а затем сшить, чтобы сделать больше копий буклета.
Мне нужно было распечатать это на дуплексном копире; то есть превратить его НАЗАД в «навязанный» PDF, готовый к печати. Таким образом, используя решение Курта, я сделал это (гм) "однострочным", чтобы преобразовать его обратно в полстраницы, в правильном порядке страниц снова. Он будет работать для любой высоты и ширины, а также для любого количества страниц. В моем случае у меня был 40-страничный буклет (20 отсканированных страниц в PDF.)
Вам нужно только изменить первые несколько параметров в этой команде, чтобы указать HEIGHT, WIDTH и ORIG_FILE_PATH. Оставшаяся часть команды вычисляет различные размеры и дважды вызывает gs, затем pdftk. Он даже посчитает страницы вашего сканирования и затем выдаст правильную спецификацию сортировки (для сценария, который я дал).
Он выводит некоторый прогресс в том, что он делает, и будет выглядеть так:
Затем, чтобы получить верстку страницы, необходимую для печатного буклета, вы просто «печатаете» файл order.pdf на нестандартный размер страницы именно того размера, который вам нужен (в моем примере, 5,5 x 8,5), отправляя его в «создание буклета "инструмент (в моем случае я использовал« Создание буклета Кристофа Фогельбуша для Mac »по адресу http://download.cnet.com/Create-Booklet/3000-2088_4-86349.html ).
Полученный PDF-файл теперь вернется к исходному размеру страницы 11 x 8,5 с 2 страницами на листе, но порядок будет таким, что вы можете напечатать его двухсторонним, переплетом по короткому краю и вуаля! у вас будет распечатка, которую вы сможете фотокопировать, а также сложить и вышить крестиком, воспроизводя оригинальный буклет, даже не разбирая (или даже не видя) оригинал.
Надеюсь, это поможет кому-то!
-с
источник
Основываясь на ответе пипт выше:
В Windows для разделения PDF-файлов размером с букву с одним изображением обложки для меня отлично подойдет следующее (обратите внимание на использование [-612 0] на втором шаге, положительное значение создает пустые страницы, потому что оно выдвигается неправильно) .)
gswin32c -o left-sections.pdf -sDEVICE=pdfwrite -dFirstPage=2 -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f input.pdf
Обратите внимание на использование
-dFirstPage=2
которого указывает gs начать обработку на странице 2.gswin32c -o right-sections.pdf -sDEVICE=pdfwrite -dFirstPage=2 -g6120x7920 -c "<</PageOffset [-612 0]>> setpagedevice" -f input.pdf
Это создает right-section.pdf таким же образом. А теперь изображение на обложке:
gswin32c -o cover.pdf -sDEVICE=pdfwrite -dLastPage=1 -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f input.pdf
Далее, поскольку я не хотел объединяться с pdftk с помощью ручного ввода страниц, я разделил левый и правый разделы на отдельные PDF-файлы в новом каталоге.
Затем я присоединяюсь к PDF-файлам в этом каталоге в алфавитном порядке (и, к счастью, это означает, что они отсортированы в правильном порядке!), И я снова запускаю результат через ghostscript, чтобы исправить «Предупреждение: номер поколения выходит за пределы диапазона 0,65535, предполагая 0.» ошибки, вызванные pdftk, который ghostscript назвал "itext-paulo-155 (itextpdf.sf.net-lawagie.com)" - это также привело к уменьшению размера файла в два раза при моем использовании. При оригинальном 4,5 МБ результат pdftk составил 6,7 МБ, а повторная обработка gswin32c уменьшила его до 3,2 МБ.
И мы сделали! Не стесняйтесь удалять папку input_file, cover.pdf, input_temp.pdf, right_sections.pdf и left_sections.pdf. ;-)
источник
если вам просто нужно вывести все pdf с левой стороны, все в одном документе, и pdf с правой стороны, все в одном документе, то следующий скрипт, основанный на ответе Курта Пфайфла, сделает свое дело (работает для любой высоты и ширина):
затем запустите его так:
источник