pdfsandwich je alat za Linux koji dodaje OCR sloj u PDF dokumente

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.

By Abel

Leave a Reply

Your email address will not be published. Required fields are marked *