Chciałbym przekształcić pdf z kolorowym tekstem i obrazami w inny pdf tylko z czarno-białym, aby zmniejszyć jego wymiary. Ponadto chciałbym zachować tekst jako tekst, bez przekształcania elementów stron w obrazki. Próbowałem następującego polecenia:
convert -density 150 -threshold 50% input.pdf output.pdf
znaleziono w innym pytaniu, w linku , ale robi to, czego nie chcę: tekst na wyjściu jest przekształcany w kiepski obraz i nie można go już wybrać. Próbowałem z Ghostscript:
gs -sOutputFile=output.pdf \
-q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-sColorConversionStrategy=/Mono \
-sColorConversionStrategyForImages=/Mono \
-sProcessColorModel=/DeviceGray \
$1
ale wyświetla mi następujący komunikat o błędzie:
./script.sh: 19: ./script.sh: output.pdf: not found
Czy istnieje inny sposób utworzenia pliku?
bash
pdf
imagemagick
ghostscript
color-management
BowPark
źródło
źródło
Odpowiedzi:
Przykład gs
gs
Polecenia używasz powyżej ma końcowego znaku$1
, który jest zazwyczaj przeznaczona dla przechodzącej argumenty wiersza polecenia do skryptu. Więc nie jestem pewien, co tak naprawdę próbowałeś, ale zgaduję, że próbowałeś umieścić to polecenie w skrypciescript.sh
:I uruchom tak:
Nie wiesz, jak skonfigurować ten skrypt, ale musi on być wykonywalny.
Coś zdecydowanie nie wydaje się być właściwe w tym skrypcie. Kiedy spróbowałem, zamiast tego dostałem ten błąd:
Alternatywa
Zamiast tego skryptu użyłbym tego z pytania SU.
Następnie uruchom go w następujący sposób:
źródło
sProcessColorModel
co powinno byćdProcessColorModel
zamiast.Znalazłem tutaj skrypt , który może to zrobić. Wymaga
gs
tego, co wydaje się mieć, ale takżepdftk
. Nie wspominałeś o swojej dystrybucji, ale na systemach opartych na Debianie, powinieneś być w stanie ją zainstalowaćMożesz znaleźć RPM dla tego tutaj .
Po zainstalowaniu
pdftk
zapisz skrypt jakograypdf.sh
i uruchom go w następujący sposób:Stworzy plik o nazwie
input-gray.pdf
. Podaję tutaj cały skrypt, aby uniknąć gnicia linków:źródło
Miałem też zeskanowane kolorowe pliki PDF i pliki w skali szarości, które chciałem przekonwertować na bw. Próbowałem przy użyciu
gs
z kodu wymienionych tutaj , a jakość obrazu jest dobra z tekstem pdf nadal. Jednak ten kod gs konwertuje tylko na skalę szarości (zgodnie z pytaniem w pytaniu) i nadal ma duży rozmiar pliku.convert
przy bezpośrednim stosowaniu daje bardzo słabe wyniki.Chciałem bw pdf z dobrą jakością obrazu i małym rozmiarem pliku. Wypróbowałbym rozwiązanie Terdona, ale nie mogłem dostać
pdftk
się do centOS 7 używając yum (w momencie pisania).Moje rozwiązanie wykorzystuje
gs
do wyodrębnienia plików bmp w odcieniach szarości z pliku pdf,convert
do progowania tych plików bmps do plików bw i zapisania ich jako plików tiff, a następnie img2pdf do skompresowania obrazów tiff i scalenia ich w jeden plik pdf.Próbowałem przejść bezpośrednio do formatu tiff z pliku pdf, ale jakość nie jest taka sama, więc zapisuję każdą stronę na bmp. W przypadku jednostronicowego pliku pdf
convert
robi świetną robotę od bmp do pdf. Przykład:W przypadku wielu stron
gs
może łączyć wiele plików pdf w jeden, aleimg2pdf
daje mniejszy rozmiar pliku niż gs. Pliki tiff muszą być rozpakowane jako dane wejściowe do img2pdf. Pamiętaj, że w przypadku dużej liczby stron pośrednie pliki bmp i tiff mają zwykle duży rozmiar.pdftk
lubjoinpdf
byłoby lepiej, gdyby mogli scalić skompresowane pliki pdf zconvert
.Myślę, że istnieje bardziej eleganckie rozwiązanie. Jednak moja metoda daje wyniki o bardzo dobrej jakości obrazu i znacznie mniejszym rozmiarze pliku. Aby odzyskać tekst w bw pdf, uruchom ponownie OCR.
Mój skrypt powłoki używa gs, convert i img2pdf. W razie potrzeby zmień parametry (liczba stron, rozdzielczość skanowania, wartość progowa% itp.) Wymienione na początku i uruchom
chmod +x ./pdf2bw.sh
. Oto pełny skrypt (pdf2bw.sh):źródło
RHEL6 i RHEL5, które oba bazują na Ghostscript w wersji 8.70, nie mogły korzystać z powyższych form poleceń. Zakładając, że skrypt lub funkcja oczekująca pliku PDF jako pierwszego argumentu „$ 1”, powinny być bardziej przenośne:
Gdzie plik wyjściowy będzie poprzedzony „grey_”.
RHEL6 i 5 mogą używać CompatibilityLevel = 1.4, co jest znacznie szybsze, ale miałem na celu przenośność.
źródło
sColorConversionStrategyForImages
przełącznika.Widzę wiarygodne wyniki czyszczenia zeskanowanych plików PDF w dobrym kontraście z tym skryptem;
źródło