pdfsandwich
je alat za Linux koji dodaje OCR sloj u PDF dokumente, slično ocrmypdf
, ali podržava dodatne opcije za obradu slika i može raditi sa više jezika. Interno koristi Tesseract OCR
i Ghostscript
za konverziju.
Instalacija
Na Debian/Ubuntu:
sudo apt install pdfsandwich
Na Arch Linuxu:
sudo pacman -S pdfsandwich
Na macOS-u (preko MacPorts):
sudo port install pdfsandwich
Na Windowsu nije zvanično podržan, ali može raditi kroz WSL.
Osnovna upotreba
Najjednostavnija OCR obrada PDF-a:
pdfsandwich input.pdf
Ovo kreira input_ocr.pdf
, koji sadrži OCR sloj.
Ako želiš da imenuješ izlazni fajl:
pdfsandwich -o output.pdf input.pdf
Najvažnije opcije i primeri
1. Podešavanje jezika za OCR
Ako PDF sadrži tekst na određenom jeziku, koristi -lang
:
pdfsandwich -lang sr input.pdf
Podržani su mnogi jezici (sr
, en
, de
, fr
, ru
, itd.).
Više jezika može se kombinovati:
pdfsandwich -lang sr+en input.pdf
Ovo omogućava prepoznavanje teksta na više jezika u istom dokumentu.
2. Podešavanje kvaliteta izlaznog PDF-a
Možeš smanjiti veličinu fajla pomoću -rgb
(smanjuje kvalitet slike):
pdfsandwich -rgb input.pdf
Ili ukloniti boje radi manje veličine fajla:
pdfsandwich -gray input.pdf
Ako želiš najkvalitetniji OCR, koristi -nopreproc
da sačuvaš originalne slike:
pdfsandwich -nopreproc input.pdf
3. Podešavanje DPI vrednosti
Standardni DPI za prepoznavanje je 300, ali ako skenirani dokument ima slabiji kvalitet, možeš povećati:
pdfsandwich -dpi 600 input.pdf
Ili ako želiš manju veličinu fajla:
pdfsandwich -dpi 150 input.pdf
4. Automatsko rotiranje stranica
Ako PDF sadrži stranice koje su rotirane, koristi:
pdfsandwich -autorotate input.pdf
Ovo automatski detektuje i ispravlja orijentaciju teksta.
5. Podešavanje margina
Ako OCR ne prepoznaje tekst pravilno zbog margina, možeš ih povećati ili smanjiti:
pdfsandwich -m 10 input.pdf
Ovde je 10
širina margine u pikselima.
6. Uklanjanje praznih stranica
Ako PDF sadrži prazne stranice koje želiš ukloniti:
pdfsandwich -remove-blank input.pdf
7. Obrada samo određenih stranica
Ako želiš OCR samo na određenim stranicama (npr. 1 do 5):
pdfsandwich -pages 1-5 input.pdf
8. Dodavanje metapodataka
Možeš dodati informacije o autoru, naslovu itd.:
pdfsandwich -title "Moj Dokument" -author "Autor" -subject "OCR Test" input.pdf
9. Pravljenje PDF-a kompatibilnog sa starijim verzijama
Ako želiš kompatibilnost sa starijim verzijama Adobe Reader-a:
pdfsandwich -pdfa input.pdf
Ovo kreira PDF/A format, koji je arhivski standard.
10. Kombinacija sa LibreOffice za konverziju u DOCX
Ako želiš OCR PDF koji se konvertuje u .docx
:
pdfsandwich -lang sr input.pdf libreoffice --convert-to docx input_ocr.pdf
Ovo prvo dodaje OCR sloj, zatim konvertuje u .docx
.
pdfsandwich
se može koristiti u Python skripti
pdfsandwich
se može koristiti u Python skripti tako što se poziva kao eksterna komanda pomoću subprocess
modula. Evo nekoliko načina kako ga možeš koristiti u Python3.
1. Osnovna upotreba sa subprocess.run()
Najjednostavniji način je da direktno pozoveš pdfsandwich
pomoću subprocess.run()
:
import subprocess # Ulazni i izlazni PDF fajlovi input_pdf = "input.pdf" output_pdf = "output.pdf" # Pokretanje pdfsandwich-a sa osnovnim opcijama subprocess.run(["pdfsandwich", "-o", output_pdf, input_pdf])
Ova komanda će izvršiti OCR i sačuvati rezultat u output.pdf
.
2. Upotreba sa dodatnim opcijama
Ako želiš da dodaš OCR na srpskom jeziku i smanjiš veličinu fajla:
import subprocess input_pdf = "input.pdf" output_pdf = "output_ocr.pdf" cmd = [ "pdfsandwich", "-o", output_pdf, # Izlazni fajl "-lang", "sr", # Jezik OCR-a "-rgb", # Smanjenje veličine PDF-a "-dpi", "300", # Rezolucija input_pdf ] subprocess.run(cmd)
3. Hvatanje izlaznih podataka (stdout
i stderr
)
Ako želiš da dobiješ povratne informacije o izvršenju komande:
import subprocess input_pdf = "input.pdf" output_pdf = "output.pdf" cmd = ["pdfsandwich", "-o", output_pdf, "-lang", "sr", input_pdf] result = subprocess.run(cmd, capture_output=True, text=True) print("STDOUT:", result.stdout) # Ako pdfsandwich daje neki izlaz print("STDERR:", result.stderr) # Ako ima grešaka
4. Provera uspešnosti komande (returncode
)
Možeš proveriti da li je komanda uspela:
import subprocess cmd = ["pdfsandwich", "-o", "output.pdf", "-lang", "sr", "input.pdf"] result = subprocess.run(cmd, capture_output=True, text=True) if result.returncode == 0: print("OCR je uspešno završen!") else: print("Došlo je do greške:", result.stderr)
5. Upotreba sa više PDF-ova (batch processing)
Ako želiš da obradiš više PDF-ova u petlji:
import subprocess import glob pdf_files = glob.glob("pdf_folder/*.pdf") # Učitaj sve PDF fajlove iz direktorijuma for pdf in pdf_files: output_pdf = pdf.replace(".pdf", "_ocr.pdf") cmd = ["pdfsandwich", "-o", output_pdf, "-lang", "sr", pdf] subprocess.run(cmd) print(f"OCR završen za {pdf}")
6. Integracija sa argparse
za CLI skriptu
Ako želiš da napraviš Python skriptu koja uzima argumente iz komandne linije:
import argparse import subprocess def run_ocr(input_pdf, output_pdf, lang="sr"): cmd = ["pdfsandwich", "-o", output_pdf, "-lang", lang, input_pdf] subprocess.run(cmd) if __name__ == "__main__": parser = argparse.ArgumentParser(description="OCR proces PDF fajlova pomoću pdfsandwich-a.") parser.add_argument("input", help="Ulazni PDF fajl") parser.add_argument("output", help="Izlazni PDF fajl") parser.add_argument("-l", "--lang", default="sr", help="Jezik OCR-a (podrazumevano: sr)") args = parser.parse_args() run_ocr(args.input, args.output, args.lang)
Pokretanje iz terminala:
python3 ocr_script.py input.pdf output.pdf -l en
Zaključak
subprocess.run()
je najlakši način da pozovešpdfsandwich
iz Pythona.- Možeš dodavati opcije (
-lang
,-dpi
,-rgb
,-remove-blank
itd.). - Možeš obrađivati više PDF-ova pomoću
glob.glob()
. - Možeš koristiti
argparse
za CLI skriptu.