Jak przekonwertować plik PDF z 2 stronami na stronę na 1 stronę na stronie?
Jak przekonwertować plik PDF z 2 stronami na stronę na 1 stronę na stronie?
Odpowiedzi:
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?
... 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.
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 >
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 >
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 >
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 >
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
.
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!
@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:
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:
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.
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:
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
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.
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
Krop (Python) i PDFscissors (Java) nie zostały jeszcze wspomniane, sprawdź je, jeśli masz notatki z wykładu pdfnup-ped, które chcesz przywrócić do właściwej prezentacji PDF ..