Jak mogę podzielić strony PDF na środek?

37

Czy ktoś zna dobry sposób na podzielenie stron pdf na dwie nowe strony?

Żeby było jasne, nie próbuję rozdzielać już istniejących stron z pdf; Próbuję utworzyć dwie nowe strony z istniejącej pojedynczej strony.

YGA
źródło
Dlaczego chcesz to zrobić? coraz mniejsze strony?
akira
Cóż, MS Office nie jest darmowym oprogramowaniem, ale jeśli masz MS Office 2007, możesz po prostu zapisywać dokumenty jako pliki PDF i robić, co chcesz ...
Owen
Zobacz także stackoverflow.com/q/13345593/321973
Tobias Kienzler,

Odpowiedzi:

26

Wypróbuj BRISS .

alternatywny tekst

Pozwala podzielić każdą stronę na tyle podstron, ile chcesz, definiując regiony za pomocą GUI. Grupuje wszystkie podobne strony w grupy, dzięki czemu możesz raz zdefiniować regiony dla tej grupy.

Jest wieloplatformowy, darmowy i open-source.

frabjous
źródło
Wydaje się, że zwiększa to rozmiar pliku (razy „liczbę stron wyjściowych na stronę wejściową”), ponieważ używa oryginalnej zawartości strony i pola przycinania dla każdej przyciętej strony. Jeśli potrzebujesz małego rozmiaru pliku, możesz wydrukować plik wyjściowy do PS, a następnie przekonwertować na PDF, ale wtedy możesz stracić jakość (na przykład z powodu czcionek bitmapowych).
tanius
36

Możesz to rozwiązać za pomocą Ghostscript. pdftksam nie może tego zrobić (o ile mi wiadomo). Dam ci kroki linii poleceń, aby to zrobić ręcznie. Będzie to łatwe do skryptu jako procedury, również z różnymi parametrami rozmiarów stron i numerów stron. Ale powiedziałeś, że możesz to zrobić sam ;-)

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

... i dla zabawy, ostatnio zrobiłem to nie z plikiem wejściowym zawierającym strony „podwójne”, ale z „potrójnymi”. Możesz przeczytać odpowiedź na ten przypadek w innej odpowiedzi .

Twoja sprawa jest jeszcze prostsza. Wygląda na to, że masz coś podobnego do tego:

+------------+------------+   ^
|            |            |   |
|      1     |      2     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
             ^
            fold
             v
+------------+------------+   ^
|            |            |   |
|      3     |      4     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
<---------- 842 pt -------->

Chcesz utworzyć 1 plik PDF z 4 stronami, z których każda ma rozmiar 421 pkt x 595 pkt.

Pierwszy krok

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

gs \
    -o left-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [0 0]>> setpagedevice" \
    -f double-page-input.pdf

Co zrobiły te parametry?

Po pierwsze, wiedz, że w PDF 1 cal == 72 punkty . Reszta to:

  • -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 dla 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
+------------+  ^
|            |  |
|     1      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

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

Drugi krok

Następnie odpowiednie sekcje:

gs \      
    -o right-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [-421 0]>> setpagedevice" \
    -f double-page-input.pdf

Wynik:

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

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

Ostatni krok

Teraz łączymy strony w jeden plik. Moglibyśmy to zrobić również za pomocą ghostscript, ale użyjemy pdftktego, ponieważ jest szybszy dla tej pracy:

pdftk \
  A=right-sections.pdf \
  B=left-sections.pdf \
  shuffle A B \
  output single-pages-output.pdf
  verbose

Gotowe. Oto pożądany wynik. 4 różne strony o wymiarach 421 x 595 pkt.

Wynik:

+------------+ +------------+ +------------+ +------------+   ^
|            | |            | |            | |            |   |
|     1      | |     2      | |     3      | |     4      |   |
|            | |            | |            | |            | 595 pt
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
+------------+ +------------+ +------------+ +------------+   v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->
Kurt Pfeifle
źródło
3
Ładny! Powinieneś naprawdę użyć tego w każdej odpowiedzi, jeśli chcesz otrzymywać upvotes za darmo!
Ivo Flipse
2
Drugim krokiem pracował tylko dla mnie, kiedy stosuje się ujemny offset: "<</PageOffset [-421 0]>> setpagedevice". Myślę, że to zależy od orientacji oryginalnego pliku. Niemniej jednak doskonała odpowiedź. :)
moraes
1
Dla mnie drugi krok działał również ze znakiem minus
Rafareino
9

Dzięki @marttt i ich odpowiedziom w systemach Unix i Linux .

Możesz użyć mutool(który wchodzi w skład mupdf):

mutool poster -x 2 input.pdf output.pdf

Możesz także użyć, -yjeśli chcesz wykonać podział pionowy.

Peque
źródło
To proste rozwiązanie, dzięki. Niestety nie ma możliwości przesunięcia zawartości strony w celu dostosowania marginesów - w tym celu należy zastosować metodę opisaną przez Kurta Pfeifle.
Ján Lalinský
0

Aby rozwinąć odpowiedź @ Kurta (ponieważ nie mam wystarczającej liczby punktów reputacji do skomentowania), najpierw upewnij się, że wymiary, których używasz, nie są oparte na wymiarach Crop Box, jeśli różnią się od wymiarów Media Box. Rozmiar wyjściowy jest oparty na wymiarach skrzynki multimediów, ale wydaje się, że przesunięcie używa wymiarów ramki przycinania.

W przypadku strony rozkładanej, która miała pole multimediów 20,0833 x 13,833 i pole przycinania 19,25 x 13,0, które były takie same jak pole przycinania w moim dokumencie, aby podzielić go na dwie strony w systemie Ubuntu, po lewej stronie:

gs -o left.pdf -sDEVICE=pdfwrite -g7230x9960 -c "<</PageOffset [0 0]>> setpagedevice" -f gatefold.pdf

Prawa strona:

gs -o right.pdf -sDEVICE=pdfwrite -g7230x9960 -c "<</PageOffset [-693 0]>> setpagedevice" -f gatefold.pdf

A potem zszyłem je pdftk left.pdf right.pdf output final.pdf.

Alternatywą byłoby ustawienie pola przycinania na takie samo jak pole multimediów; wówczas offset wynosiłby -723. Ale następnie przycinanie musiałoby zostać zresetowane, aby przyciąć, aby strony były wyświetlane płynnie. W przeciwnym razie ustaw nośnik jako przycięty.

motorbaby
źródło
Uwaga: po podzieleniu stron za pomocą tych opcji poleceń pola multimediów nie zmieniają się. Zmienia się tylko uprawa. Jeśli podzielisz jedną stronę na wiele stron, nowe strony zachowają wymiary pola multimediów ze starej strony. Musisz zmodyfikować wymiary pola multimediów. Chociaż nie wiem, jak ustawić pole multimediów, aby przyciąć bez uwzględnienia liczb w poleceniu.
motorbaby
Ups Mam na myśli, że nowe strony zachowują wymiary pola przycinania ze starej strony.
motorbaby
Znaleziono błąd w plikach PDF programu Acrobat. Wizualnie wymiary cropBox można zobaczyć w polu Ustaw strony w programie Acrobat. Ale wymiary cropBox po użyciu Ghostscript do podziału folderu bramy utrzymały stare wymiary strony na innym poziomie. Można to zobaczyć w informacjach o analizie wstępnej w programie Acrobat. Po tymczasowym dopasowaniu przycięcia w programie Acrobat po prawej stronie lewej strony do dowolnej liczby, a następnie przywróceniu go do 0, inne wymiary pola (spadu, grafiki i przycięcia) również uległy zmianie. To rozwiązało problem polegający na tym, że dane cropBox nadal pokazywały stare wymiary strony. Prawa strona była trochę inna.
motorbaby