Jak przekonwertować 1-stronicowy PDF na 2-stronicowy PDF?

44

Chciałbym wydrukować plik PDF, aby na pierwszej stronie były pierwsze dwie strony, a na trzeciej 3 i 4 itd.

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

 page 1 - front             page 1 - back

Ponieważ moja drukarka z systemem Linux nie obsługuje ręcznego drukowania dwustronnego, pomyślałem, że może mógłbym edytować plik pdf w odpowiedni sposób.

Ale jak?

mokasin
źródło
Nie sądzę, że jest to możliwe, czy masz tylko pdf?
Michael K
Jest to możliwe w systemie Linux przy użyciu pstops z pakietu psutils i / lub pdftk. Z jakiego systemu operacyjnego korzystasz?
rems
@Ivo Flipse: har, myślałem dokładnie tak samo :), więc twój komentarz również dostaje +1.
akira
@Ivo Flipse, @rems: Możesz głosować więcej dzieł ASCII tutaj: superuser.com/questions/54054/... i superuser.com/questions/235074/ ... ... @mokasin: te linki mogą dać ci pomysł, jak rozwiązać zadanie, o które prosiłeś.
Kurt Pfeifle

Odpowiedzi:

23

Oprócz tego, co zostało wspomniane, PDFjam zawiera narzędzie wiersza poleceń, pdfnupktóre to robi. (Korzysta z pakietu pdfpages dla PDFLaTeX pod spodem, którego możesz również użyć.)

Jeśli wolisz GUI, jPDFtweak to kolejna opcja.

frabjous
źródło
Doskonały. Właśnie tego szukałem.
mokasin
1
Wykorzystanie próbki: pdfnup --nup 2x1 mypdf.pdf. Spowoduje to wydrukowanie 2 stron obok siebie na arkuszu w widoku poziomym, które zostaną wydrukowane na krótszej krawędzi. Zobacz man pdfnupwięcej szczegółów.
Gabriel Staples,
Postanowiłem również dodać odpowiedź: jak przekonwertować 1 1-pg pdf na widok poziomy z 2 kopiami tego pliku powielonymi na tej samej stronie (idealne do drukowania ulotek): superuser.com/a/1452008/425838
Gabriel Zszywki
24

Użyj pdfnup:

$ pdfnup file.pdf

Spowoduje to utworzenie nowego pliku pdf dokładnie tak, jak prosiłeś.

Joaquin
źródło
pdfnup pokazuje opcje wiersza poleceń używane w pdfjam, dzięki czemu możesz stamtąd dostosować. (np. jeśli nie chcesz mieć krajobrazu. możesz usunąć opcję --landscape, dzwoniąc do pdfjam)
Trevor Boyd Smith
6
Dokładniej pdfnup --nup 2x1 --suffix test file.pdfstworzy file-test.pdf2 strony w 1.
lolesque
1
sudo apt install texlive-extra-utilszainstalować te narzędzia w Ubuntu.
Sarke
Mam jedną stronę a4, którą chcę wydrukować w dwóch kopiach a5 na arkusz. Jak to osiągnąć? Przykłady użycia „pdfnup” powyżej nie duplikują pierwszej strony, ale zamiast tego pozostawiają drugą część a5 pierwszego arkusza a4.
Nordlöw
2

To pytanie na tyle stare, by myśleć, że opcje, które teraz mieliśmy, były w tym czasie nieobecne, ale może zasługuje na aktualne rozwiązanie.

Przeglądarki pdf w systemie Linux zwykle używają opcji / właściwości drukowania do ustawienia układu strony, gdzie można wydrukować wiele stron na arkusz / stronę. Chodzi o to, aby użyć tych do drukowania do pliku w formacie PDF .

Evince może to zrobić, również qpdfview . Więcej tutaj.


qpdfview

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj


Przejawiać

wprowadź opis zdjęcia tutaj


Przeglądarka PDF Studio

wprowadź opis zdjęcia tutaj

Inne przeglądarki plików PDF muszą mieć podobne opcje.


źródło
1

Dostępne są narzędzia wiersza polecenia typu freeware i open source do konwertowania plików PDF do stron widzących, stron widzących itp.

Zgubiłem aplikację, której używałem, więc nie ma tam żadnej pomocy, ale po szybkim wyszukiwaniu widzę program o nazwie pdfshuffler ( http://sourceforge.net/projects/pdfshuffler/ ), który może być tym, czego potrzebujesz. Ma GUI, więc prawdopodobnie nie będzie automagiczne, ale jest to interfejs dla innego narzędzia ...

horatio
źródło
0

Jeśli masz funkcję drukowania do pliku. wydruk do pliku z ustawieniem dwóch stron na stronę i stron nieparzystych. powtórz proces z parzystymi stronami. Teraz wydrukuj te nieparzyste, odwróć wydrukowane papiery i wydrukuj plik stron parzystych.

Amirali Sanatinia
źródło
0

@mokasin: Nie powiedziałeś, którego czytnika plików PDF używasz. Jeśli używasz Linuksowej wersji programu Acrobat / Adobe Reader: istnieje możliwość wydrukowania „2-stron” bezpośrednio w oknie dialogowym drukowania. Możesz także wydrukować tylko strony nieparzyste lub parzyste, więc połączenie tego pomoże ci osiągnąć pożądany efekt.

Kurt Pfeifle
źródło
0

To oprogramowanie, które przetestowałem na systemie operacyjnym Solaris 11.2, może stworzyć ten schemat, który nazywa się 2-up, zwykle używanym do rozdawania w klasach lub na spotkaniach. Możliwe jest tworzenie innych programów; na przykład rozdawanie z 3 lub 4 lub więcej stronami na jednym arkuszu lub po obu stronach arkusza. Można go uruchomić z terminala, ponieważ jest to plik JAR, lub po prostu uruchomić GUI dla ułatwienia dostępu. Oprócz Solaris inne dystrybucje Linuksa są również kompatybilne, uruchamiając oprogramowanie jako „wykonywalne” z uprawnieniami superużytkownika. Pamiętaj, aby nie używać opcji „Otwórz archiwum”. Działa również na dowolnym systemie Windows i Mac, na którym jest już zainstalowane środowisko Java Runtime Environment (JRE), jak ma to miejsce przez większość czasu. Oprogramowanie to Dysprosium Imposition, które można bezpłatnie pobrać i używać.

Każde ciało
źródło
0

Dla każdego, kto chce wziąć 1 lub 2 pg pdf i przekształcić go w pdf z 2 kopiami tego obok siebie w widoku poziomym ( idealne do drukowania ulotek ), wykonaj:

  1. Przekształć dane wejściowe pdf 1 lub 2 pg w dane wyjściowe, które zawierają zduplikowane kopie tych stron (1-pg pdf -> 2-pg pdf, 2-pg pdf -> 4-pg pdf itp.):

    pdfunite in.pdf in.pdf out.pdf
    
  2. Połącz ten skopiowany plik pdf w formacie pdf na 2 strony na stronę w widoku poziomym, na przykład do drukowania ulotek:

    pdfnup out.pdf
    

Lub wszystko w jednej linii:

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

Zauważ, że out.pdfjest to dane wejściowe do pdfnup. Wynikowy plik wyjściowy pdfnupzostanie nazwany „ out-nup.pdf ”.

Ponadto obejrzyj dane wyjściowe pdfnuppolecenia, a zobaczysz pełną formę polecenia, które jest w rzeczywistości uruchomione, co daje pewien wgląd w opcje, które możesz do niego przekazać. Podobno pdfnupużywa pdfjampod maską:

pdfjam: skuteczne wywołanie tego uruchomienia pdfjam:

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

Przykład:

Oryginalny PDF (1 zwykła strona w widoku pionowym), „ in.pdf ”: wprowadź opis zdjęcia tutaj

Końcowy plik PDF (2 strony obok siebie w widoku poziomym ), „ out-nup.pdf ”:
- teraz można go wyciąć na pół w środku, aby wydać jako ulotki wprowadź opis zdjęcia tutaj

Prosta funkcja Bash: make_flyer

Skopiuj i wklej tę funkcję bash na dole pliku „~ / .bashrc”, aby uzyskać dostęp do prostej i łatwej w użyciu komendy 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\""'

Przykładowe użycie:

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

Zobacz informacje pomocy:

make_flyer_help

Wynik:

$ 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"

Bibliografia:

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

Związane z:

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

Referencje Bash:

  1. Bash Jak przekazać argumenty do funkcji bash: https://bash.cyberciti.biz/guide/Pass_arguments_into_a_function
  2. Bash Concatenate strings: https://linuxize.com/post/bash-concatenate-strings/
  3. Bash uruchom polecenie cmd zapisane jako ciąg! https://stackoverflow.com/questions/2005192/how-to-execute-a-bash-command-stored-as-a-string-with-quotes-and-asterisk
  4. Powtórz iterację wszystkich danych wejściowych do cmd: https://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-a-bash-script/255913#255913
  5. Bash przekazuje parametry do funkcji: https://stackoverflow.com/questions/6212219/passing-parameters-to-a-bash-function/6212408#6212408
  6. Jak przekonwertować 1-pg pdf na ulotkę [mój własny ans!]: Jak przekonwertować 1-stronicowy PDF na 2-stronicowy PDF?
Gabriel Staples
źródło