Konwertuj PDF 2 strony na stronę na 1 stronę na stronie

12

Jak przekonwertować plik PDF z 2 stronami na stronę na 1 stronę na stronie?

użytkownik13910
źródło
To jest absolutnie szalone! Czy nie ma możliwości zmiany ustawień strony w pliku PDF, aby były jednostronne zamiast dwustronnych?
Nathan Fellman
@Nathan Fellman: Szalony, tak. Ale szalone rzeczy czasem dają ci najwięcej zabawy ;-)
Kurt Pfeifle,
Możliwy duplikat Jak mogę podzielić strony PDF na środek?
Skippy le Grand Gourou
@SkippyleGrandGourou Nie rozumiem, jak to pytanie jest powiązane. Czy pytania nie próbują zrobić dwóch różnych rzeczy ze stronami?
Ben N
@BenN: Oba pytania dotyczą sposobu „utworzenia dwóch nowych stron z istniejącej pojedynczej strony”, aby zacytować drugą. Najczęściej głosowaną odpowiedzią jest prawie copypasta.
Skippy le Grand Gourou

Odpowiedzi:

24

OK, problem został już rozwiązany za pomocą programu Acrobat (pełna wersja, nie Reader). Ale co zrobić, jeśli nie masz dostępu do programu Acrobat? Czy można to zrobić również za pomocą Ghostscript i pdftk?

Jak rozwiązać ten problem za pomocą Ghostscript ...

... i dla zabawy nie używajmy pliku wejściowego ze stronami „podwójnymi”, ale pliku „potrójnego”. Tak naprawdę otrzymałem dzisiaj taki plik PDF pocztą elektroniczną. To była ulotka złożona w programie Leporello . Rozmiar arkusza to A4 poziomo (842pt x 595pt), był on złożony i ułożony w następujący sposób:

Front side to be printed, page 1 of PDF
+--------+--------+--------+   ^
|        |        |        |   |
|   5    |   6    |   1    |   |
|        |        |        | 595 pt
|        |        |        |   |
|        |        |        |   |
|        |        |        |   |
+--------+--------+--------+   v
         ^        ^
        fold     fold
         v        v
+--------+--------+--------+   ^
|        |        |        |   |
|   2    |   3    |   4    |   |
|        |        |        | 595 pt
|        |        |        |   |
|        |        |        |   |
|        |        |        |   |
+--------+--------+--------+   v
Back side to be printed, page 2 of PDF
<---------- 842 pt -------->

Chcę utworzyć 1 plik PDF z 6 stronami, z których każda ma niezwykły rozmiar 280,67p x 595 pt.

Pierwszy krok

Najpierw wyodrębnij lewe sekcje z każdej strony wejściowej:

gswin32c.exe ^
    -o left-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [0 0]>> setpagedevice" ^
    -f myflyer.pdf

Co zrobiły te parametry?

  • -o ...............:Plik wyjściowy z nazwami. Niejawnie używa również -dBATCH -dNOPAUSE -dSAFER.
  • -sDEVICE=pdfwrite : chcemy PDF jako format wyjściowy.
  • -g................:ustawia rozmiar nośnika wyjściowego w pikselach. Domyślna rozdzielczość pdfwrite to 720 dpi. Dlatego pomnóż przez 10, aby uzyskać dopasowanie do PageOffset.
  • -c "..............:prosi Ghostscript o przetworzenie podanego fragmentu kodu PostScript tuż przed głównym plikiem wejściowym (który musi nastąpić -f).
  • <</PageOffset ....:ustawia przesunięcie obrazu strony na nośniku. (Oczywiście w przypadku lewej strony przesunięcie o [0 0]nie ma żadnego rzeczywistego efektu).
  • -f ...............: przetworzyć ten plik wejściowy.

Jaki wynik osiągnęła ostatnia komenda?

Ten:

Output file: left-sections.pdf, page 1
+--------+  ^
|        |  |
|   5    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: left-sections.pdf, page 2
+--------+  ^
|        |  |
|   2    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

Drugi krok

Zróbmy teraz analogiczne czynności dla sekcji środkowych:

gswin32c.exe ^
    -o center-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [280.67 0]>> setpagedevice" ^
    -f myflyer.pdf

Wynik:

Output file: center-sections.pdf, page 1
+--------+  ^
|        |  |
|   6    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: center-sections.pdf, page 2
+--------+  ^
|        |  |
|   3    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

Trzeci krok

Ostatnie właściwe sekcje:

gswin32c.exe ^
    -o right-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [561.34 0]>> setpagedevice" ^
    -f myflyer.pdf

Wynik:

Output file: right-sections.pdf, page 1
+--------+  ^
|        |  |
|   1    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: right-sections.pdf, page 2
+--------+  ^
|        |  |
|   4    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

Ostatni krok

Teraz łączymy strony w jeden plik:

pdftk.exe ^
  A=right-sections.pdf ^
  B=center-sections.pdf ^
  C=left-sections.pdf ^
  cat A1 B2 C2 A2 B1 C1 ^
  output single-files-input.pdf
  verbose

Gotowe. Oto pożądany wynik. 6 różnych stron o wymiarach 280,67 x 595.

Wynik:

+--------+  +--------+  +--------+  +--------+  +--------+  +--------+   ^
|        |  |        |  |        |  |        |  |        |  |        |   |
|   1    |  |   2    |  |   3    |  |   4    |  |   5    |  |   6    |   |
|        |  |        |  |        |  |        |  |        |  |        | 595 pt
|        |  |        |  |        |  |        |  |        |  |        |   |
|        |  |        |  |        |  |        |  |        |  |        |   |
|        |  |        |  |        |  |        |  |        |  |        |   |
+--------+  +--------+  +--------+  +--------+  +--------+  +--------+   v
< 280 pt >  < 280 pt >  < 280 pt >  < 280 pt >  < 280 pt >  < 280 pt > 
Kurt Pfeifle
źródło
1
Cholera jasna, niesamowita sztuka tutaj!
Ivo Flipse
Działa to dla mnie dobrze, ale musiałem ustawić PageOffset na liczbę ujemną, aby uzyskać inne sekcje.
jonchang
Możesz użyć Pythona do większych plików PDF: f = open("order.dat","w") for i in [a+1 for a in xrange(63)]: f.write("A{0} B{0} ".format(i)) f.close()Spowoduje to utworzenie pliku order.dat z „A1 B1 A2 B2 ... A63 B63”. Następnie możesz skopiować i wkleić go pdftk.
Suuuehgi,
4

Właśnie miałem ten sam problem. Natknąłem się na briss, otwarte narzędzie Java GUI do oddzielania i przycinania stron pdf:

http://sourceforge.net/projects/briss/

Na Linuksie działało to bardzo dobrze, mimo że interfejs użytkownika nie jest całkowicie trywialny. Działa nawet z plikiem pdf z kilkoma stronami o różnych rozmiarach!

Matthias
źródło
3

@peims, dzięki. Oto wersja twojej metody krok po kroku. Próbowałem go na pliku, który chciałem przekonwertować dla mojego Kindle DX, i działa idealnie:

  • Użyj pełnej wersji programu Acrobat v9, aby przyciąć lewą stronę strony i zapisać ją jako „left.pdf”:
    • Użyj narzędzia przycinania, aby zaznaczyć lewą stronę strony.
    • Kliknij prawym przyciskiem myszy i wybierz „Ustaw Cropbox”.
    • Wybierz „Dokument .. Strony przycinania” i zastosuj przycięcie do całego dokumentu.
  • Powtórz z prawymi stronami, zapisz jako „right.pdf”.
  • Na tym etapie masz dwa dokumenty: „left.pdf” ze stronami po lewej stronie i „right.pdf” ze stronami po prawej stronie.

Następnie użyj pdftk.exe (z http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ ), aby przeplatać wyniki w jednym pliku. Skopiuj „pdftk.exe”, „left.pdf” i „right.pdf” do „D: \” i wykonaj:

  • D:> pdftk D: \ left.pdf wyjście impulsowe% 05d_A.pdf
  • D:> pdftk D: \ right.pdf wyjście impulsowe% 05d_B.pdf
  • D:> pdftk * _ ?. pdf cat output łącznie.pdf

Uwaga: jeśli skopiujesz pliki do „C: \”, nie będzie działać pod Win 7 z powodu uprawnień bezpieczeństwa. Jeśli nie masz D: \, utwórz katalog „C: \ x”, aby zakończyć operację.

Te wyniki byłyby zwykle wystarczające. Istnieją jednak dwa dodatkowe kroki w celu poprawy wydajności.

  • (opcjonalny ostatni krok 1) Na tym etapie dokument jest ogromny (mój dokument powiększył się z 7 MB do 80 MB), więc możesz zmniejszyć rozmiar pliku, używając:
    • „Advanced..PDF Optimizer” lub:
    • „Advanced..Preflight” z ustawieniem „Compatible with Acrobat 5”.
  • (opcjonalny ostatni krok 2) Wszystkie strony mają różne rozmiary. Powtórz kadrowanie na wszystkich stronach, aby wszystko miało jednolity rozmiar.
Contango
źródło
2

Możesz zduplikować dokument, a następnie przyciąć strony, tak aby tylko parzyste numery stron były wyświetlane w jednym pliku, a tylko nieparzyste numery stron w drugim. Następnie podziel pliki na pojedyncze strony i połącz ponownie, aby utworzyć jeden dokument z pojedynczymi stronami na stronie ...

Możesz to zrobić za pomocą wielu metod, na przykład:

  1. Użyj narzędzia przycinania Adobe Acrobat , aby wyciąć jedną stronę podwójnej strony i zastosować przycięcie na wszystkich stronach.
  2. Podziel pliki na poszczególne strony za pomocą polecenia „burst” w pdftoolkit
  3. Zmień nazwy plików sekwencyjnych za pomocą narzędzia do zmiany nazw plików (np. ReNamer )
  4. Ponownie połącz strony za pomocą polecenia „cat” w pdftoolkit
dłonie
źródło
2

Używam następującego skryptu do przetwarzania zeskanowanych książek na komputerach Mac i Linux. Może to wymagać dużej ilości pamięci.

#!/bin/bash
#
# This script processes scanned books. After scanning the books have been cropped with
# Preview. This does kind of a "soft crop" that we need to make a bit "harder". 
#
# The second step is to take each page of the PDF and split this into two two pages, 
# because each page of the scanned document actually contains two pages of the book.
#
#

FILE=`mktemp`.pdf
FILE2=`mktemp`.pdf
FILE3=`mktemp`.pdf

echo "Making a temporary copy of the input file."

cp $1 $FILE

#
# Start cropping
#

echo "Cropping the PDF"

# The first regex removes all boxes but CropBox. The second regex renames the  CropBox as MediaBox

perl -pi.bak -e 's/\/(Media|Bleed|Art|Trim)Box[\n\l\f\s]*\[(.+?)\]//msg;' $FILE
perl -pi.bak -e 's/CropBox/MediaBox/g;' $FILE

echo "Validating the PDF"

#Run PDFTK to ensure that the file is OK

cat $FILE | pdftk - output $FILE2

#
# Done cropping, start splitting the pages
#

echo "Splitting the pages in two and changing to 200 dpi with imagemagick. Output goes to $FILE3"

convert -density 200  $FILE2 -crop 50%x0 +repage $FILE3

#
# Done spliting, copy the result in a new file
#


mv $FILE3 $1.pages.pdf
mronkko
źródło
1

Dzięki za świetne referencje. Miałem podobny problem, ale chciałem podzielić się tym, co dla mnie zadziałało.

Miałem tabloid pdf w orientacji poziomej, z tekstem portretowym tylko po lewej stronie. Zasadniczo tabloid 2-up brakuje jakiejkolwiek treści po prawej stronie strony. Podobny punkt początkowy, ale tabloid ma wymiary 792 × 1224 (portret), 1124 x 792 (krajobraz), a definicja punktu dla potrzebnej tabloidu 1/2 to 612 x 792 punktów.

"C:\Program Files\gs\gs9.10\bin\gswin64c.exe" -o left2.pdf -sDEVICE=pdfwrite -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f "RFP.pdf"

Dostałem treść, której potrzebowałem, w portret 8,5 x 11, o wiele bardziej czytelny.

Charlie
źródło
0

Rozumiem, że plik PDF pokazujący dwie strony (obok siebie na jednym arkuszu) musi zostać przekonwertowany na jedną stronę na arkusz, w wyniku czego powstają dwa arkusze pliku PDF. Innymi słowy, jeśli na 15 arkuszach znajduje się łącznie trzydzieści stron, musimy przekonwertować plik PDF na plik PDF zawierający trzydzieści arkuszy, z których każdy pokazuje jedną stronę. Jeśli to problem, użyłem Adobe Acrobat XI PRO „narzędzie do wyodrębniania strony”, określając numery stron od 1 do 30

RN SONI
źródło