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?


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,


@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 > 

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!


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.

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

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

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.


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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.