Spaces:
Sleeping
Sleeping
app.py
CHANGED
@@ -20,13 +20,22 @@ def ejecutar_comando(comando, mensaje_exito="", mensaje_error=""):
|
|
20 |
logging.error(error_message)
|
21 |
raise RuntimeError(error_message)
|
22 |
|
23 |
-
def reparar_pdf(
|
24 |
"""Repara un PDF usando qpdf."""
|
25 |
-
comando = f"qpdf --linearize '{
|
26 |
ejecutar_comando(
|
27 |
comando,
|
28 |
-
mensaje_exito="
|
29 |
-
mensaje_error="Error al reparar el PDF"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
)
|
31 |
|
32 |
def procesar_pdf_con_ocr(pdf_subido, idioma="spa"):
|
@@ -40,18 +49,22 @@ def procesar_pdf_con_ocr(pdf_subido, idioma="spa"):
|
|
40 |
shutil.copy(pdf_subido.name, safe_input_pdf)
|
41 |
|
42 |
reparado_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
|
|
|
43 |
output_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
|
44 |
|
45 |
# Reparar el PDF
|
46 |
reparar_pdf(safe_input_pdf, reparado_pdf)
|
47 |
|
48 |
-
#
|
49 |
-
|
|
|
|
|
|
|
50 |
logging.info(f"Ejecutando comando: {comando}")
|
51 |
ejecutar_comando(
|
52 |
comando,
|
53 |
-
mensaje_exito="OCR completado",
|
54 |
-
mensaje_error="Error
|
55 |
)
|
56 |
|
57 |
# Verificar que el archivo de salida se haya creado
|
@@ -87,4 +100,4 @@ def interfaz_ocr():
|
|
87 |
return app
|
88 |
|
89 |
if __name__ == "__main__":
|
90 |
-
interfaz_ocr().launch()
|
|
|
20 |
logging.error(error_message)
|
21 |
raise RuntimeError(error_message)
|
22 |
|
23 |
+
def reparar_pdf(input_pdf, output_pdf):
|
24 |
"""Repara un PDF usando qpdf."""
|
25 |
+
comando = f"qpdf --linearize '{input_pdf}' '{output_pdf}'"
|
26 |
ejecutar_comando(
|
27 |
comando,
|
28 |
+
mensaje_exito="PDF reparado correctamente.",
|
29 |
+
mensaje_error="Error al reparar el PDF."
|
30 |
+
)
|
31 |
+
|
32 |
+
def convertir_pdf_a_compatible(input_pdf, output_pdf):
|
33 |
+
"""Convierte el PDF a un formato compatible usando pdftocairo."""
|
34 |
+
comando = f"pdftocairo -pdf '{input_pdf}' '{output_pdf}'"
|
35 |
+
ejecutar_comando(
|
36 |
+
comando,
|
37 |
+
mensaje_exito="PDF convertido a un formato compatible.",
|
38 |
+
mensaje_error="Error al convertir el PDF a un formato compatible."
|
39 |
)
|
40 |
|
41 |
def procesar_pdf_con_ocr(pdf_subido, idioma="spa"):
|
|
|
49 |
shutil.copy(pdf_subido.name, safe_input_pdf)
|
50 |
|
51 |
reparado_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
|
52 |
+
convertido_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
|
53 |
output_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
|
54 |
|
55 |
# Reparar el PDF
|
56 |
reparar_pdf(safe_input_pdf, reparado_pdf)
|
57 |
|
58 |
+
# Convertir el PDF a un formato compatible
|
59 |
+
convertir_pdf_a_compatible(reparado_pdf, convertido_pdf)
|
60 |
+
|
61 |
+
# Ejecutar OCR en el PDF convertido
|
62 |
+
comando = f"ocrmypdf -l {idioma} --force-ocr --deskew --output-type pdf '{convertido_pdf}' '{output_pdf}'"
|
63 |
logging.info(f"Ejecutando comando: {comando}")
|
64 |
ejecutar_comando(
|
65 |
comando,
|
66 |
+
mensaje_exito="OCR completado correctamente.",
|
67 |
+
mensaje_error="Error al ejecutar el OCR."
|
68 |
)
|
69 |
|
70 |
# Verificar que el archivo de salida se haya creado
|
|
|
100 |
return app
|
101 |
|
102 |
if __name__ == "__main__":
|
103 |
+
interfaz_ocr().launch()
|