Mam zeskanowany plik pdf, który zeskanował dwie strony na jednej stronie wirtualnej (strona w pliku pdf).
Rozdzielczość jest dobrej jakości. Problem polega na tym, że muszę powiększać podczas czytania i przeciągać od lewej do prawej.
Czy istnieje jakaś komenda ( convert
, pdftk
...) lub skrypt, który można przekonwertować plik PDF z normalnych stron (jedna strona z książki = jedna strona w pliku PDF)?
pdfnup
, zpdfjam
pakietu.Odpowiedzi:
Oto mały skrypt Pythona korzystający z biblioteki PyPdf, która dobrze wykonuje to zadanie. Zapisz go w skrypcie o nazwie
un2up
(lub cokolwiek chcesz), spraw, aby był wykonywalny (chmod +x un2up
) i uruchom go jako filter (un2up <2up.pdf >1up.pdf
).Zignoruj wszelkie ostrzeżenia o wycofaniu; tylko opiekunowie PyPdf muszą się tym zajmować.
Jeśli dane wejściowe są zorientowane w nietypowy sposób, może być konieczne użycie różnych współrzędnych podczas obcinania stron. Zobacz Dlaczego mój kod nie podzielił poprawnie każdej strony na zeskanowanym pliku pdf?
Na wszelki wypadek przydatna jest moja wcześniejsza odpowiedź, która wykorzystuje kombinację dwóch narzędzi plus pewną ręczną interwencję:
Oba narzędzia są potrzebne, ponieważ o ile wiem, strony pdf nie są w stanie zastosować dwóch różnych transformacji do tej samej strony w jednym strumieniu. W wywołaniu do
pdftk
zamień 42 na liczbę stron w dokumencie wejściowym (2up.pdf
).Jeśli nie masz pdfjam 2.0, wystarczy mieć instalację PDFLaTeX z pakietem pdfpages (na Ubuntu: potrzebujesz texlive-latex-zalecany i być może (na Ubuntu: texlive-fonts-zalecany ), i użyj następującego sterownika plik
driver.tex
:Następnie uruchom następujące polecenia, zastępując 42 liczbą stron w pliku wejściowym (które należy wywołać
2up.pdf
):źródło
pdfjam
polecenia.q.mediaBox.lowerRight = (w, h/2)
Tylko dodatek, ponieważ miałem problemy ze skryptem Pythona (i kilkoma innymi rozwiązaniami): dla mnie
mutool
działało świetnie. Jest to prosty i mały dodatek dostarczany z eleganckimmupdf
czytnikiem. Możesz więc spróbować:Dla podziałów poziomych, wymienić
y
zx
. I oczywiście możesz połączyć te dwa, aby uzyskać bardziej złożone rozwiązania.Naprawdę się cieszę, że to znalazłem (po latach codziennego użytkowania mupdf :)
mutool
jest dostarczany z mupdf od wersji 1.4: http://www.mupdf.com/newsInstalowanie
mupdf
imutool
ze źródła:Lub przejdź do strony pobierania, aby znaleźć nowszą wersję.
źródło
mutool
został stworzony do tego. Uważaj też-y
, myślę, że w większości przypadków to, czego chcesz-x
.Imagemagick może to zrobić w jednym kroku:
źródło
-density 400
parametr, ma on jeszcze lepszą jakość.Polecenie Konwertuj ImageMagick może pomóc przyciąć plik na 2 części. Zobacz http://www.imagemagick.org/Usage/crop/
Gdybym był tobą, napisałbym skrypt (powłoki) w następujący sposób:
Dla każdej strony przytnij pierwszą połowę i umieść ją w pliku o nazwie $ {PageNumber} A
Przytnij drugą połowę i umieść ją w pliku o nazwie $ {PageNumber} B.
Otrzymasz 1A.pdf, 1B.pdf, 2A.pdf, 2B.pdf itp.
źródło
Na podstawie odpowiedzi Gillesa i tego, jak znaleźć liczbę stron w formacie PDF, którą napisałem
Więc mogę biegać
gdzie 50 dla dostosowania marginesu i 1,2 dla skali.
źródło
Oto odmiana kodu PyPDF opublikowanego przez Gillesa. Ta funkcja będzie działać bez względu na orientację strony:
źródło
Najlepszym rozwiązaniem było mutool patrz wyżej:
podział:
ale musisz obrócić strony w lewo:
źródło
Na podstawie odpowiedzi Benjamina z AskUbuntu poleciłbym użycie narzędzia GUI o nazwie gscan2pdf .
Zaimportuj zeskanowany plik PDF do gscan2pdf. Pamiętaj, że pliki PDF inne niż obraz mogą nie działać. Skany są w porządku, więc nie musisz się martwić.
Może to chwilę potrwać, w zależności od rozmiaru dokumentu. Poczekaj, aż się załaduje.
Naciśnij Ctrl + A, aby zaznaczyć wszystkie strony, a następnie obróć je (Ctrl + Shift + C) , jeśli to konieczne.
Przejdź do Narzędzia >> Oczyść . Wybierz Układ jako podwójne i # strony wyjściowe = 2 .
Naciśnij OK i poczekaj, aż zadanie zostanie zakończone.
Zapisz plik PDF. Gotowy.
źródło
Rozwiązanie Moraes nie działało dla mnie. Głównym problemem były obliczenia x5 i x6. W tym przypadku należy wziąć pod uwagę przesunięcie, tj. Jeśli wartość lowerLeft nie jest na (0,0)
Oto kolejna odmiana, z dodatkowymi adaptacjami do użycia PyPDF2 i python 3:
źródło