¿Cómo puedo reparar / reparar un archivo PDF dañado?

80

¿Alguien tiene alguna recomendación o procedimiento para reparar un PDF dañado? Cuando abro el archivo aparece "Hubo un error al abrir este documento. El archivo está dañado y no se puede reparar". Parece que hay una miríada de herramientas, pero ninguna que pueda describir como acreditada. ¿Hay alguna solución basada en Linux de código abierto para esto posiblemente?

Tim Alexander
fuente
Las herramientas de PDF de código abierto tienden a ser bastante malas, me temo. ¿Que estas usando?
Satanicpuppy
no me gustó el aspecto de ninguna de las herramientas, ya que se parecía a la miríada de "limpiadores de registro" que son inútiles. He estado probando Adobe Pro y acabo de empezar a buscar si Ghostscript o PDFForge tienen algún interruptor de reparación.
Tim Alexander
Ghostscript está bien, pero ciertamente no es mejor que Acrobat. Son huesos completamente desnudos.
Satanicpuppy
66
@Satanicpuppy No estoy de acuerdo :: Utilizo ghostscript para reconstruir archivos PDF dañados o de baja calidad con bastante frecuencia y funciona muy bien.
Eddie B

Respuestas:

100

Ghostscript reparará su PDF dañado automáticamente ... si puede abrirlo en primer lugar (es decir, si no está dañado sin posibilidad de reparación). Pero después, aún tendrá que volver a verificar el resultado ...

En Linux, intente este comando:

 gs \
  -o repaired.pdf \
  -sDEVICE=pdfwrite \
  -dPDFSETTINGS=/prepress \
   corrupted.pdf

En Windows, prueba este:

 gswin32c.exe ^
  -o repaired.pdf ^
  -sDEVICE=pdfwrite ^
  -dPDFSETTINGS=/prepress ^
   corrupted.pdf
Kurt Pfeifle
fuente
2
Ghostscript hace un trabajo fantástico al representar archivos PDF ... Utilizo regularmente gs para reconstruir archivos PDF para mejorar la calidad de la fuente.
Eddie B
1
La / preimpresión hace que la calidad sea realmente buena en comparación con / screen. Gracias.
Dolanor
Me aparece "Se produjo un error al leer una tabla XREF". Qué significa eso?
Geremia
Significa que la tabla de contenido interna (lo que los archivos PDF deben contener como tabla XREF ) tuvo un error, apuntando a un desplazamiento de bytes incorrecto para un objeto PDF. Es muy probable que Ghostscript reparó ese error e insertó una tabla XREF correcta en la salida. Puede verificar esto ejecutando la salida a través de Ghostscript una vez más y ver si este mensaje aún aparece.
Kurt Pfeifle
37

Tenía un archivo PDF dañado print.pdf, que Ghostscript no podía abrir, pero los visores gráficos habituales de Linux PDF (Okular, Evince) se abrieron bien. (En mi caso, el archivo tenía basura al inicio en lugar de un encabezado PDF, cuando se abrió en un editor hexadecimal).

Estos visores de PDF usan Poppler como un procesador de PDF de fondo. Para que pueda reparar el PDF utilizando las herramientas de línea de comandos de Poppler. En Ubuntu estos están en el poppler-utilspaquete. Solía:

pdftocairo -pdf print.pdf print_repaired.pdf

que generó un archivo PDF con encabezados correctos, que herramientas como Ghostscript ahora aceptaban.

Caracol mecánico
fuente
3
+1 leyó mi PDF de Quartz generado sin quejas, e inmediatamente comenzó a generar resultados. Ghostscript, Adobe Acrobat Pro y otros insistieron en reconstruir mi pdf de 120GB primero.
Orwellophile
Esto no funcionó para al menos un PDF extraño que encontré, pero parece un buen comienzo.
Brian Peterson
1
Funciona perfectamente en un PDF en el que Ghostscript quería eliminar algunos elementos arbitrarios en las páginas.
Andrea Lazzarotto
Ghostscript no pudo leer el documento, pero esto funcionó a las mil maravillas. Por cierto, hice esto en Windows usando el nuevo subsistema de Linux, ¡genial!
HyLian
24

mutool( página del proyecto , página de manual ) reparará archivos PDF rotos sin imprimirlos .

  • Instalación, por ejemplo, en Ubuntu: sudo apt-get install mupdf-tools
  • Ejecútelo así: mutool clean input.pdf output.pdf
mutool clean [options] input.pdf [output.pdf] [pages]

  The clean command pretty prints and rewrites the syntax of a PDF file.
   It can be used to repair broken files, expand compressed streams,
   filter out a range of pages, etc.
  If no output file is specified, it will write the cleaned PDF to
   "out.pdf" in the current directory.

Alternativamente, hay algunas herramientas y marcos que pueden descomponer / descompilar archivos PDF en sus componentes sin representarlos. Estos podrían ser útiles para extraer texto, guiones e imágenes. Consulte esta respuesta para obtener una lista de tales herramientas: https://reverseengineering.stackexchange.com/q/1526/8210 . Por ejemplo, puedes probar la respuesta principal actual Origami , tiene un visor basado en GTK.

jmiserez
fuente
3
Esta solución funciona "mejor" que las soluciones ofrecidas anteriormente o mejor clasificadas, ya que no "imprime" el archivo PDF y mantiene activos los enlaces, elementos en los que se puede hacer clic, etc. Para mí, parece una solución más elegante que usar ghostscript o el cairo.
Speredenn
1
Desafortunadamente, mutool cleanno corrige todos los posibles errores. Tengo un archivo que tiene varios errores en la fuente y las secuencias de contenido, y mutool mantendrá esos errores.
Dominik Honnef
1
@DominikHonnef Siempre puede probar herramientas / marcos que descomponen el PDF y le permiten ver todas las partes sin renderizarlas. Eso debería permitirle obtener texto, scripts, imágenes, etc. directamente. Consulte esta respuesta para obtener una lista de herramientas: reverseengineering.stackexchange.com/q/1526/8210
jmiserez
¡Lo único que funcionó para mí!
jamadagni
Esto funcionó mejor ya que esto no hace que el pdf examine el documento.
riccs_0x
10

Tenía un archivo pdf dañado, porque el archivo php utilizado para descargarlo tenía algunos errores (en HTML) y caracteres NUL al final.

La solución fue abrir el pdf con Notepad ++ y eliminar todo el texto después de la línea.

%%EOF
Oriol
fuente
tenía lo mismo, Adobe Reader no se abrió, pero el complemento PDF nativo para Mac, Chrome y Firefox mostró bien el archivo PDF. La razón también fue "NUL" adicional en la última línea agregada durante la carga.
Tilo
Tenía un PDF con dos %%EOF. Eliminé todo después del primero %%EOFusando un editor hexadecimal. Ahora todo funciona bien.
Adrian