Как преобразовать 1-страничный PDF-файл в двухстраничный PDF-файл?

44

Я хотел бы напечатать PDF-файл, чтобы на первой странице были первые две страницы, на задней - третья и четвертая, и так далее.

-----------------          -----------------
|       |       |          |       |       |
|       |       |          |       |       |
|   1   |   2   |          |   3   |   4   |    . . .
|       |       |          |       |       |
|_______|_______|          |_______|_______|

 page 1 - front             page 1 - back

Поскольку мой принтер, использующий Linux, не поддерживает двустороннюю печать вручную, я подумал, что, возможно, я мог бы отредактировать PDF соответствующим образом.

Но как?

mokasin
источник
Я не думаю, что это возможно, у вас есть только PDF?
Майкл К
Это возможно в Linux, используя pstops из пакета psutils и / или pdftk. Какую операционную систему вы используете?
Ремс
@ Ivo Flipse: хар, я думал точно так же :) так что, твой комментарий тоже получает +1.
Акира
@Ivo Flipse, @rems: Вы можете оценить больше ASCII-произведений здесь: superuser.com/questions/54054/… и superuser.com/questions/235074/… ... @mokasin: эти ссылки могут дать вам представление о том, как решить задача, которую вы просили.
Курт Пфайфл

Ответы:

23

В дополнение к тому, что было упомянуто, PDFjam включает инструмент командной строки, pdfnupкоторый делает это. (Он использует пакет pdfpages для PDFLaTeX, который вы также можете использовать.)

Если вы предпочитаете графический интерфейс, jPDFtweak является еще одним вариантом.

радостный
источник
Отлично. Как раз то, что я искал.
Мокасин
1
Пример использования: pdfnup --nup 2x1 mypdf.pdf. Это печатает 2 страницы бок о бок на листе в альбомной ориентации, чтобы быть напечатанным перевернутым по короткому краю. Смотрите man pdfnupдля более подробной информации.
Габриэль Стейплз
Я тоже решил добавить ответ: как конвертировать 1 1-pg pdf в альбомную форму с двумя копиями на одной странице (отлично подходит для печати листовок): superuser.com/a/1452008/425838
Габриэль Скобы
24

Используйте pdfnup:

$ pdfnup file.pdf

Это создаст новый файл PDF точно так, как вы просили.

Joaquin
источник
pdfnup показывает параметры командной строки, используемые с pdfjam, и поэтому вы можете настроить их оттуда. (например: если вы не хотите иметь альбомную ориентацию. вы можете удалить опцию --landscape при вызове pdfjam)
Тревор Бойд Смит
6
Точнее pdfnup --nup 2x1 --suffix test file.pdfсоздам file-test.pdfс 2 страниц в 1.
lolesque
1
sudo apt install texlive-extra-utilsустановить эти утилиты на Ubuntu.
Сарке
У меня есть одна страница а4, которую я хочу напечатать в двух экземплярах а5 на листе. Как мне это сделать? Примеры использования pdfnup выше не дублируют первую страницу, но вместо этого оставляют вторую часть a5 первого листа a4 пустой.
Нордлёв
2

Это достаточно старый вопрос, чтобы думать, что имеющиеся у нас варианты в то время отсутствовали, но, возможно, оно заслуживает современного решения.

Программы просмотра PDF в Linux обычно используют параметры / свойства печати, чтобы установить макет страницы, и там можно распечатать несколько страниц на листе / стороне. Идея состоит в том, чтобы использовать их для печати в формате PDF .

Evince может сделать это, также qpdfview . Больше здесь.


qpdfview

введите описание изображения здесь

введите описание изображения здесь


Evince

введите описание изображения здесь


PDF Studio Viewer

введите описание изображения здесь

Другие программы просмотра PDF должны иметь аналогичные параметры.


источник
1

Существуют бесплатные инструменты командной строки с открытым исходным кодом для преобразования PDF-файлов в читательские, буклетные и т. Д.

Я потерял приложение, которое использовал, так что никакой помощи там нет, но из быстрого поиска я вижу программу под названием pdfshuffler ( http://sourceforge.net/projects/pdfshuffler/ ), которая может быть тем, что вам нужно. Имеет графический интерфейс, поэтому вряд ли будет автоматическим, но это интерфейс для другого инструмента ...

Горацио
источник
0

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

Амирали Санатиния
источник
0

@mokasin: Вы не сказали, какой читатель PDF вы используете. Если вы используете версию Acrobat / Adobe Reader для Linux: есть возможность напечатать «2-вверх» прямо в диалоговом окне печати. Вы также можете распечатать только нечетные или четные страницы, поэтому комбинирование этого поможет вам достичь желаемого результата.

Курт Пфайфл
источник
0

Это программное обеспечение, которое я тестировал в операционной системе Solaris 11.2, может создать такую ​​схему, которая называется 2-up, обычно используемая для раздаточного материала в аудиториях или на собраниях. Возможно изготовление других схем; например, раздавать 3 или 4 или более страниц на одном листе или на обеих сторонах листа. Его можно запустить из терминала, так как это JAR-файл, или просто запустить графический интерфейс для облегчения доступа. Помимо Solaris также совместимы другие дистрибутивы Linux, которые запускают программное обеспечение как «исполняемые» с привилегиями суперпользователя. Помните, что не используйте «Открыть архив». Он также работает на любых Windows и Mac, где уже установлена ​​Java Runtime Environment (JRE), как это происходит в большинстве случаев. Программное обеспечение является Dysprosium Imposition и является бесплатным для загрузки и использования.

Любое Тело
источник
0

Для тех, кто хочет взять 1 или 2 pg pdf и превратить его в pdf с 2 копиями этого бок о бок в альбомной ориентации ( отлично подходит для печати листовок ), сделайте:

  1. Превратите ввод в 1 или 2 pg pdf в вывод, содержащий дублированную копию этих страниц (1-pg pdf -> 2-pg pdf, 2-pg pdf -> 4-pg pdf и т. Д.):

    pdfunite in.pdf in.pdf out.pdf
    
  2. Объедините этот файл с дубликатами-копиями в файл формата 2 страницы на сторону в альбомной ориентации, например, для печати листовок:

    pdfnup out.pdf
    

Или все в одной строке:

pdfunite in.pdf in.pdf out.pdf && pdfnup out.pdf

Обратите внимание, что out.pdfэто вход для pdfnup. Полученный выходной файл pdfnupбудет называться « out-nup.pdf ».

Кроме того, просмотрите выходные данные pdfnupкоманды, и вы увидите подробный вид команды, которую она фактически выполняет, что дает вам некоторое представление о параметрах, которые вы можете передать ей. Видимо pdfnupиспользует pdfjamпод капотом:

pdfjam: эффективный вызов для этого прогона pdfjam:

/usr/bin/pdfjam --suffix nup --nup '2x1' --landscape -- out.pdf -

Пример:

Оригинальный PDF (1 обычный pg в книжной ориентации ), " in.pdf ": введите описание изображения здесь

Итоговый PDF (2 стр. Бок о бок в альбомной ориентации ), « out-nup.pdf »:
- теперь можно разрезать пополам по центру, чтобы получить листовки введите описание изображения здесь

Простая функция Bash: make_flyer

Скопируйте и вставьте эту функцию bash в конец файла "~ / .bashrc", чтобы получить доступ к простой и удобной в использовании команде make flyer:

# Description: outputs a landscape-oriented flyer pdf ("my/pdf/input--flyer.pdf") for each 1 or more pg input pdf ("my/pdf/input.pdf")
#   - 1-pg input PDFs are converted to a 1-sided landscape, printable flyer that you cut down the center to make 
#     2 flyers
#   - 2-pg input PDFs are converted to a 2-sided landscape, printable flyer (flip on short edge when printing 
#     double-sided), and also cut down the middle to make 2 flyers
#   - **3+ pg input PDFs**: using `pdfnup` directly in this case would make more sense, since this function will
#     otherwise unneccessarily create 2 copies
#   - 3 and 4-pg input PDFs are converted to a single piece of paper, double-sided, flipped on short edge, x 2 copies. 
#     No cutting is necessary
#   - 5+ pg input PDFs simply require half as much paper to print is all since you get 2 pages per side of paper;
#     they do NOT print like booklets, but rather just as a landscape-printed, flipped-on-short-edge bundle of pages
#     (like a deck of slides). You get *2 copies* per print though, so just print half the pages. 
make_flyer() {
    num_args=$# # see: https://stackoverflow.com/questions/4423306/how-do-i-find-the-number-of-arguments-passed-to-a-bash-script/4423321#4423321
    suffix="flyer"

    loop_cnt=0
    for inputpdf in "$@"
    do
        ((loop_cnt++))
        echo "==== CONVERTING PDF $loop_cnt OF $num_args ===="
        echo "     INPUT:  \"$inputpdf\""

        # Strip off the .pdf extension from the input path, while retaining the rest of the path
        # - See: https://stackoverflow.com/questions/12152626/how-can-i-remove-the-extension-of-a-filename-in-a-shell-script/32584935#32584935
        input_path_base="$(echo "$inputpdf" | rev | cut -f 2- -d '.' | rev)"
        input_file_base="$(basename "$inputpdf" .pdf)"
        temp_pdf="${input_path_base}-.pdf" # is "input_path_base-.pdf"

        echo "     OUTPUT: \"$(pwd)/${input_file_base}--${suffix}.pdf\""

        # Convert a single 1-pg pdf into a temporary 2-pg pdf
        pdfunite "$inputpdf" "$inputpdf" "$temp_pdf"

        # Lay out the temporary 2-pg pdf into a side-by-side 1-sided flyer to print; creates "input_path_base--flyer.pdf"
        # Note that `pdfnup` places the output from this operation in the location from where you call this script
        # (ie: in your `pwd` [Present Working Directory])!--NOT the location where temp_pdf is located!
        pdfnup "$temp_pdf" --suffix $suffix

        # Delete the temporary 2-pg pdf, called "input_path_base-.pdf", thereby leaving only the original 
        # "input_path_base.pdf" and the new "input_path_base--flyer.pdf"
        rm "$temp_pdf"
    done
}
alias make_flyer_help='echo -e "Ex usage: make_flyer \"path/to/inputpdf.pdf\" - Creates a landscape-side-by-side flyer version called \"inputpdf--flyer.pdf\"\n          *in your pwd* from a 1 or 2 pg input pdf called \"path/to/inputpdf.pdf\". Accepts multiple arguments. Ex:\n          make_flyer \"path/to/inputpdf1.pdf\" \"path/to/inputpdf2.pdf\""'

Пример использования:

make_flyer "path/to/inputpdf1.pdf" "path/to/inputpdf2.pdf"

См. Справочную информацию:

make_flyer_help

Выход:

$ make_flyer_help   
Ex usage: make_flyer "path/to/inputpdf.pdf" - Creates a landscape-side-by-side flyer version called "inputpdf--flyer.pdf"  
          *in your pwd* from a 1 or 2 pg input pdf called "path/to/inputpdf.pdf". Accepts multiple arguments. Ex:  
          make_flyer "path/to/inputpdf1.pdf" "path/to/inputpdf2.pdf"

Ссылки:

  1. https://superuser.com/a/948095/425838
  2. https://stackoverflow.com/a/11280219/4561887

Связанный:

  1. https://askubuntu.com/questions/214538/printing-in-booklet-format/1095789#1095789

Bash Рекомендации:

  1. Bash Как передать аргументы в функцию bash: https://bash.cyberciti.biz/guide/Pass_arguments_into_a_function
  2. Конкатенация строк в Bash: https://linuxize.com/post/bash-concatenate-strings/
  3. Bash выполнить cmd, хранящийся в виде строки! https://stackoverflow.com/questions/2005192/how-to-execute-a-bash-command-stored-as-a-string-with-quotes-and-asterisk
  4. Перебрать Bash по всем входным данным в cmd: https://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-a-bash-script/255913#255913
  5. Bash передавая параметры в функцию: https://stackoverflow.com/questions/6212219/passing-parameters-to-a-bash-function/6212408#6212408
  6. Как преобразовать 1-pg pdf во флаер [мои собственные ответы!]: Как преобразовать 1-страничный PDF-файл в 2-страничный PDF-файл на листе?
Габриэль Стейплс
источник