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špdfsandwichiz Pythona.- Možeš dodavati opcije (
-lang,-dpi,-rgb,-remove-blankitd.). - Možeš obrađivati više PDF-ova pomoću
glob.glob(). - Možeš koristiti
argparseza CLI skriptu.
