eberhenriquez94 commited on
Commit
50737ce
verified
1 Parent(s): 15611f3
Files changed (1) hide show
  1. app.py +33 -11
app.py CHANGED
@@ -22,37 +22,59 @@ def ejecutar_comando(comando):
22
  logger.error(error_message)
23
  raise RuntimeError(error_message)
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  def crear_pdf_con_texto_incrustado(pdf_original, archivo_salida, idioma="spa"):
26
  """Procesa un PDF con OCR usando OCRmyPDF."""
 
27
  try:
28
- comando = f"ocrmypdf -l {idioma} --force-ocr --deskew --output-type pdf {shlex.quote(pdf_original)} {shlex.quote(archivo_salida)}"
29
  ejecutar_comando(comando)
30
  except RuntimeError as e:
31
  raise gr.Error(f"Error al procesar el archivo con OCR: {e}")
32
 
33
  def flujo_principal(pdf_file, idioma="spa"):
34
- """Procesa un PDF subido y realiza OCR."""
35
  if not pdf_file:
36
  raise gr.Error("No se subi贸 ning煤n archivo.")
37
 
38
- # Utilizar la ruta proporcionada por el archivo subido
39
  input_pdf = pdf_file
40
-
41
- # Crear un archivo temporal para la salida del OCR
42
- with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_output:
43
- output_pdf = temp_output.name
44
 
45
  try:
 
 
 
 
 
 
46
  # Procesar con OCR
47
- crear_pdf_con_texto_incrustado(input_pdf, output_pdf, idioma)
 
48
  return input_pdf, output_pdf
49
  except gr.Error as e:
50
  logger.error("Error durante el procesamiento del PDF.")
51
  raise e
52
  finally:
53
- # Limpiar archivos temporales si es necesario
54
- if os.path.exists(output_pdf):
55
- os.remove(output_pdf)
 
56
 
57
  # Interfaz Gradio mejorada
58
  with gr.Blocks() as interfaz:
 
22
  logger.error(error_message)
23
  raise RuntimeError(error_message)
24
 
25
+ def reparar_pdf(input_pdf, output_pdf):
26
+ """Repara un PDF usando qpdf."""
27
+ comando = f"qpdf --linearize {shlex.quote(input_pdf)} {shlex.quote(output_pdf)}"
28
+ try:
29
+ ejecutar_comando(comando)
30
+ except RuntimeError as e:
31
+ raise gr.Error(f"Error al reparar el PDF: {e}")
32
+
33
+ def simplificar_pdf(input_pdf, output_pdf):
34
+ """Simplifica un PDF usando Ghostscript."""
35
+ comando = f"gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile={shlex.quote(output_pdf)} {shlex.quote(input_pdf)}"
36
+ try:
37
+ ejecutar_comando(comando)
38
+ except RuntimeError as e:
39
+ raise gr.Error(f"Error al simplificar el PDF: {e}")
40
+
41
  def crear_pdf_con_texto_incrustado(pdf_original, archivo_salida, idioma="spa"):
42
  """Procesa un PDF con OCR usando OCRmyPDF."""
43
+ comando = f"ocrmypdf -l {idioma} --force-ocr --deskew --output-type pdf {shlex.quote(pdf_original)} {shlex.quote(archivo_salida)}"
44
  try:
 
45
  ejecutar_comando(comando)
46
  except RuntimeError as e:
47
  raise gr.Error(f"Error al procesar el archivo con OCR: {e}")
48
 
49
  def flujo_principal(pdf_file, idioma="spa"):
50
+ """Procesa un PDF subido con reparaci贸n, simplificaci贸n y OCR."""
51
  if not pdf_file:
52
  raise gr.Error("No se subi贸 ning煤n archivo.")
53
 
 
54
  input_pdf = pdf_file
55
+ reparado_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
56
+ simplificado_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
57
+ output_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
 
58
 
59
  try:
60
+ # Reparar el PDF
61
+ reparar_pdf(input_pdf, reparado_pdf)
62
+
63
+ # Simplificar el PDF
64
+ simplificar_pdf(reparado_pdf, simplificado_pdf)
65
+
66
  # Procesar con OCR
67
+ crear_pdf_con_texto_incrustado(simplificado_pdf, output_pdf, idioma)
68
+
69
  return input_pdf, output_pdf
70
  except gr.Error as e:
71
  logger.error("Error durante el procesamiento del PDF.")
72
  raise e
73
  finally:
74
+ # Limpiar archivos temporales
75
+ for temp_file in [reparado_pdf, simplificado_pdf]:
76
+ if os.path.exists(temp_file):
77
+ os.remove(temp_file)
78
 
79
  # Interfaz Gradio mejorada
80
  with gr.Blocks() as interfaz: