Mam kilka plików PDF, które zawierają dwie „prawdziwe” strony na jednej stronie PDF; Chciałbym je pokroić na pół i położyć każdą połowę na osobnej stronie. Zasadniczo potrzebuję czegoś, co robi dokładnie odwrotność pdfnup
(lub psnup
). Jak można to osiągnąć?
Platformą jest Linux, preferowane oprogramowanie typu open source; ponieważ mam ich mnóstwo, aby zrobić coś, co da się napisać w skrypcie (w przeciwieństwie do GUI), byłoby miło, więc mogę po prostu podać ich listę i przeżuć.
Istniejący skrypt nie jest jedyną opcją; jeśli istnieje przykładowy kod do manipulowania plikami PDF w podobny sposób za pomocą biblioteki innej firmy, prawdopodobnie mogę włamać go do robienia tego, co chcę.
linux
pdf
ghostscript
womble
źródło
źródło
Odpowiedzi:
Możesz to rozwiązać za pomocą Ghostscript.
pdftk
sam 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 tutaj .
Twoja sprawa jest jeszcze prostsza. Wygląda na to, że masz coś podobnego do tego:
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:
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:
Drugi krok
Następnie odpowiednie sekcje:
Zwróć uwagę na przesunięcie ujemne, ponieważ przesuwamy stronę w lewo, utrzymując nieruchomy obszar wyświetlania.
Wynik:
Ostatni krok
Teraz łączymy strony w jeden plik. Moglibyśmy to zrobić również za pomocą ghostscript, ale użyjemy
pdftk
tego, ponieważ jest szybszy dla tej pracy:Gotowy. Oto pożądany wynik. 4 różne strony o wymiarach 421 x 595 pkt.
Wynik:
źródło
421
->-421
). ;-)Istnieje narzędzie pdfposter, którego można użyć do tworzenia plików PDF z kilkoma stronami dla jednej strony wejściowej (układanie lub krojenie stron). Jest podobny do narzędzia
poster
, które robi to samo w przypadku plików PostScript.źródło
Tak więc po dużo więcej wyszukiwaniu (wydaje się, że „strony wycinane PDF” są znacznie lepszym wyszukiwaniem), znalazłem mały skrypt o nazwie,
unpnup
który używaposter
, konwersji PDF / PS ipdftk
robienia dokładnie tego, czego potrzebuję. To trochę długa droga, ale znacznie przewyższa inne metody, które znalazłem (takie jak użycie imagemagick), ponieważ nie rasteryzuje stron przed ich wypluciem.Na wypadek, gdyby mobileread z jakiegoś powodu zniknął, rdzeń skryptu (licencjonowany na licencji GPLv2 lub nowszej przez Haralda Hackenberga
<hackenberggmx.at>
) jest następujący:źródło
PDF => EPS => PDF
trasę i idzie bezpieczniejPDF => PDF => PDF
.Odpowiedź Kurta Pfeifle'a była bardzo pomocna w mojej podobnej sytuacji. Pomyślałem, że mogę udostępnić moją modyfikację rozwiązania innym ...
Ja również miałem zeskanowany plik PDF, który miał 2 strony na każdym arkuszu. Był to skan 11 x 8,5 (cala) broszury zszytej siodłowo, która została zszyta podczas skanowania, więc: strona 1 PDF = tylna i przednia okładka; PDF strona 2 = strony 2 i 3 itd. Czyta się dobrze na ekranie, ale nie można go wydrukować, a następnie zszyć, aby wykonać więcej kopii broszury.
Musiałem być w stanie wydrukować to na dwustronnej kopiarce; tzn. zamień go z powrotem w „narzucony” plik PDF, gotowy do drukowania. Tak więc, korzystając z rozwiązania Kurta, stworzyłem ten (ahm) „jednowierszowy”, aby ponownie przekonwertować go na pół strony, w odpowiedniej kolejności. Będzie działać dla dowolnej WYSOKOŚCI i SZEROKOŚCI, a także dla dowolnej liczby stron. W moim przypadku miałem 40-stronicową broszurę (20 zeskanowanych stron w pliku PDF.)
Musisz tylko zmienić kilka pierwszych parametrów w tym poleceniu, aby określić HEIGHT i WIDTH oraz ORIG_FILE_PATH. Pozostała część polecenia oblicza różne rozmiary i wywołuje gs dwa razy, a następnie pdftk. Policzy nawet strony w skanie, a następnie wygeneruje poprawną specyfikację sortowania (dla podanego przeze mnie scenariusza).
Daje pewien postęp w tym, co robi, co będzie wyglądać następująco:
Następnie, aby uzyskać impozycję strony potrzebną do wydrukowania broszury, wystarczy „wydrukować” zamówienie.pdf na niestandardowym rozmiarze strony dokładnie takiego rozmiaru, jakiego potrzebujesz (w moim przykładzie 5,5 x 8,5), wysyłając go do „tworzenia broszury” ”(w moim przypadku użyłem Utwórz broszurę Christopha Vogelbuscha dla Maca ze strony http://download.cnet.com/Create-Booklet/3000-2088_4-86349.html ).
Wynikowy plik PDF powróci teraz do pierwotnego rozmiaru strony 11 x 8,5 z 2 stronami na arkusz, ale kolejność będzie taka, że możesz wydrukować go dwustronnie, z krótką krawędzią i voilà! otrzymasz wydruk, który możesz skopiować, zszyć i zszyć zeszytowo, odtwarzając oryginalną broszurę bez rozbierania (a nawet koniecznego oglądania) oryginału.
Mam nadzieję, że to komuś pomoże!
-do
źródło
Na podstawie powyższej odpowiedzi piptas :
W systemie Windows do dzielenia plików PDF o rozmiarze listu na początku z jednym obrazem okładki, poniższe działały dla mnie świetnie (zwróć uwagę na użycie [-612 0] w drugim kroku, wartość dodatnia utworzyła puste strony, ponieważ popchnęła w niewłaściwy sposób .)
gswin32c -o left-sections.pdf -sDEVICE=pdfwrite -dFirstPage=2 -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f input.pdf
Zwróć uwagę, którego użycie
-dFirstPage=2
nakazuje gs rozpocząć przetwarzanie na stronie 2.gswin32c -o right-sections.pdf -sDEVICE=pdfwrite -dFirstPage=2 -g6120x7920 -c "<</PageOffset [-612 0]>> setpagedevice" -f input.pdf
Spowoduje to utworzenie odpowiednich sekcji.pdf w ten sam sposób. A teraz zdjęcie okładki:
gswin32c -o cover.pdf -sDEVICE=pdfwrite -dLastPage=1 -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f input.pdf
Następnie, ponieważ nie chciałem łączyć się z pdftk przy użyciu ręcznego wprowadzania strony, podzieliłem lewą i prawą sekcję na osobne pliki PDF w nowym katalogu.
Następnie dołączam pliki PDF w tym katalogu alfabetycznie (i na szczęście oznacza to, że są one posortowane we właściwej kolejności!), A także ponownie uruchamiam wynik za pomocą ghostscript, aby naprawić „Ostrzeżenie: Numer generacji poza zakresem 0..65535, przy założeniu 0. ” błędy generowane przez pdftk, który ghostscript o nazwie „itext-paulo-155 (itextpdf.sf.net-lawagie.com)” - zdarzyło mi się również zmniejszyć rozmiar pliku o połowę w moim użyciu. Przy 4,5 MB oryginału wynik pdftk wynosił 6,7 MB, a przetwarzanie gswin32c zmniejszyło go do 3,2 MB.
I skończone! Usuń folder plik_wejściowy, cover.pdf, input_temp.pdf, right_sections.pdf i left_sections.pdf. ;-)
źródło
jeśli potrzebujesz tylko wydrukować pliki PDF z lewej strony wszystko w jednym dokumencie, a pliki PDF z prawej strony wszystko w jednym dokumencie, to załatwi następujący skrypt oparty na odpowiedzi Kurta Pfeifle'a (działa na dowolnej wysokości i szerokość):
następnie uruchom go tak:
źródło