```bash # instalar tesseract-ocr sudo apt update && sudo apt upgrade -y sudo apt install tesseract-ocr tesseract-ocr-spa poppler-utils sudo apt install tesseract-ocr-all poppler-utils ``` ```bash function getTxtFromPdf() { local pdf_path="$1" local base_name=$(basename "$pdf_path" .pdf) local tmp_prefix="pagina" # Limpiar residuos anteriores rm -f ${tmp_prefix}-*.png ${tmp_prefix}-*.txt salida_${base_name}.txt # Convertir PDF a PNG por página pdftoppm "$pdf_path" "$tmp_prefix" -png # OCR cada imagen y concatenar en un solo archivo de salida for img in ${tmp_prefix}-*.png; do echo "Procesando $img..." tesseract "$img" temp -l spa cat temp.txt >> salida_${base_name}.txt echo -e "\n\n---- FIN DE PÁGINA ----\n\n" >> salida_${base_name}.txt done rm -f temp.txt echo "OCR completado. Archivo final: salida_${base_name}.txt" } ``` ```bash getHighQualityTxtFromPdf() { # Verificar que se proporcionó al menos un argumento if [[ $# -lt 1 ]]; then echo "Error: Debes especificar la ruta del archivo PDF." >&2 return 1 fi local pdf_path="$1" local base_name base_name=$(basename "$pdf_path" .pdf) local output_file="${2:-salida_hq_${base_name}.txt}" # Permitir archivo de salida opcional local tmp_prefix="hq_pagina" local lang="spa" local dpi=1000 local oem=1 local psm=6 # Verificar existencia del archivo if [[ ! -f "$pdf_path" ]]; then echo "Error: El archivo '$pdf_path' no existe." >&2 return 1 fi # Verificar dependencias if ! command -v pdftoppm &> /dev/null || ! command -v tesseract &> /dev/null; then echo "Error: Se requieren 'pdftoppm' y 'tesseract'." >&2 echo "Instala con: sudo apt install poppler-utils tesseract-ocr tesseract-ocr-spa" >&2 return 1 fi # Limpiar residuos anteriores rm -f "${tmp_prefix}-"*.png "$output_file" 2>/dev/null echo "Convirtiendo PDF a imágenes de alta calidad (${dpi} DPI)..." if ! pdftoppm -png -r "$dpi" -aa yes -aaVector yes "$pdf_path" "$tmp_prefix"; then echo "Error al convertir PDF a imágenes." >&2 return 1 fi # Contar número total de páginas generadas local page_imgs=("${tmp_prefix}-"*.png) local total_pages=${#page_imgs[@]} if [[ $total_pages -eq 0 ]]; then echo "Error: No se generaron imágenes del PDF." >&2 return 1 fi echo "" > "$output_file" local page_count=0 for img in "${page_imgs[@]}"; do ((page_count++)) echo "Procesando página $page_count: $img" # Crear archivo temporal para esta página local tmp_txt_file tmp_txt_file=$(mktemp --suffix=.txt) # OCR con configuraciones avanzadas if ! tesseract "$img" "$tmp_txt_file" -l "$lang" --dpi "$dpi" --oem "$oem" --psm "$psm" \ -c tessedit_pageseg_mode=$psm \ -c preserve_interword_spaces=1 \ -c textord_debug_tabfind=0 \ -c textord_min_linesize=2.5 2>/dev/null; then echo "Advertencia: OCR falló en $img. Reintentando con configuración básica..." >&2 tesseract "$img" "$tmp_txt_file" -l "$lang" --dpi "$dpi" 2>/dev/null || continue fi # Agregar texto al archivo final cat "${tmp_txt_file}.txt" >> "$output_file" # Separador de página if [[ $page_count -lt $total_pages ]]; then echo -e "\n\n---- FIN DE PÁGINA $page_count ----\n\n" >> "$output_file" fi # Limpieza rm -f "$img" "${tmp_txt_file}.txt" done echo "Realizando post-procesamiento..." sed -i 's/fi/fi/g; s/fl/fl/g; s/ff/ff/g; s/ffi/ffi/g; s/ffl/ffl/g' "$output_file" sed -i '/^[[:space:]]*$/d' "$output_file" sed -i 's/[[:space:]]\+/ /g' "$output_file" echo -e "\n==============================" echo " OCR COMPLETADO EXITOSAMENTE " echo "==============================" echo "Archivo final: $output_file" echo "Páginas procesadas: $page_count" echo "Tamaño final: $(du -h "$output_file" | cut -f1)" } ```