¿Cómo puedo inspeccionar archivos PDF, preferiblemente con una herramienta?
Caso de uso: estoy tratando de generar archivos PDF mediante programación (usando iText). Tengo problemas para lograr ciertos diseños, pero tengo archivos PDF con el texto distribuido de la manera que quiero (generado a partir de Word). Me gustaría aplicar ingeniería inversa a cómo lo hacen.
PDF Inspector parece estar bien, pero estoy buscando algo para Windows.
no main manifest attribute, in PDF Document Inspector.jar
Respuestas:
Adobe Acrobat tiene un modo genial pero bastante bien oculto que le permite inspeccionar archivos PDF. Escribí un artículo de blog explicándolo en https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/
fuente
Además de las herramientas basadas en GUI mencionadas en las otras respuestas, hay algunas herramientas de línea de comandos que pueden transformar el código fuente PDF original en una representación diferente que le permite inspeccionar el (archivo ahora modificado) con un editor de texto. Todas las herramientas siguientes funcionan en Linux, Mac OS X, otros sistemas Unix o Windows.
qpdf
(mi favorito)Use qpdf para descomprimir (la mayoría) de los flujos de
ObjStm
objetos y también diseccionar objetos en objetos indirectos individuales:qpdf
se describe a sí misma como una herramienta que realiza "transformaciones estructurales que preservan el contenido en archivos PDF" .Luego, simplemente abra + inspeccione el
uncompressed-qpdf.pdf
archivo en su editor de texto favorito. La mayoría de los bytes previamente comprimidos (y por lo tanto, binarios) ahora serán texto sin formato.mutool
También existe la
mutool
herramienta de línea de comandos que viene incluida con el visor de PDF MuPDF (que es un producto hermano de Ghostscript, fabricado por la misma compañía, Artifex ). El siguiente comando también descomprime los flujos y los hace más fáciles de inspeccionar a través de un editor de texto:podofouncompress
PoDoFo es una biblioteca FreeSoftware / OpenSource para trabajar con el formato PDF e incluye algunas herramientas de línea de comandos, incluidas
podofouncompress
. Úselo así para descomprimir flujos de PDF:peepdf.py
PeePDF es una herramienta basada en Python que le ayuda a explorar archivos PDF. Su propósito original era la investigación y disección de malware basado en PDF, pero también lo encuentro útil para investigar la estructura de archivos PDF completamente benignos.
Se puede utilizar de forma interactiva para "examinar" los objetos y las secuencias contenidos en un PDF.
No daré un ejemplo de uso aquí, sino solo un enlace a su documentación:
pdfid.py
ypdf-parser.py
pdfid.py
ypdf-parser.py
son dos herramientas PDF de Didier Stevens escritas en Python.Su experiencia también es ayudar a explorar archivos PDF maliciosos , pero también me resulta útil analizar la estructura y el contenido de archivos PDF benignos.
Aquí hay un ejemplo de cómo extraería el flujo sin comprimir del objeto PDF no. 5 en un archivo * .dump:
Notas finales
Tenga en cuenta que algunas partes binarias dentro de un PDF no son necesariamente incompresibles (o decodificables en código ASCII legible por humanos), porque están incrustadas y utilizadas en su formato nativo dentro de los PDF. Estas partes de PDF son imágenes JPEG, fuentes o perfiles de color ICC.
Si compara las herramientas anteriores y los ejemplos de la línea de comandos dados, descubrirá que NO todas producen resultados idénticos. El esfuerzo de compararlos por sus diferencias en sí mismo puede ayudarlo a comprender mejor la naturaleza de la sintaxis y el formato de archivo PDF.
fuente
Utilizo iText RUPS (lectura y actualización de la sintaxis de PDF) en Linux. Dado que está escrito en Java, también funciona en Windows. Puede examinar todos los objetos del archivo PDF en una estructura de árbol. También puede decodificar transmisiones codificadas con Flate sobre la marcha para facilitar la inspección.
Aquí hay una captura de pantalla:
fuente
java -jar itext-rups-5.5.6.jar
->Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version
- ¿Cómo se supone que vas a ejecutar esto? Editar: lo descubrí. No debe descargar el archivo predeterminado ofrecido por SourceForge, necesita descargar el .jar que incluye dependencias.PDFXplorer de O2 Solutions hace un trabajo excelente al mostrar los componentes internos.
http://www.o2sol.com/pdfxplorer/overview.htm
(Banner gratuito que distrae en la parte inferior).
fuente
He utilizado PDFBox con mucho éxito. Aquí hay una muestra de cómo se ve el código (desde la versión 0.7.2), que probablemente provino de uno de los ejemplos proporcionados:
fuente
También hay otra opción. Adobe Acrobat Pro también puede mostrar la estructura de árbol interna del PDF.
En la parte superior, Adobe Acrobat Pro también puede mostrar la estructura interna de las fuentes del documento en el PDF, la mayoría de los demás "visores de estructura de árbol de PDF" no tienen esta opción.
fuente
El visor de objetos en Acrobat es bueno, pero PDF Canopener de Windjack Solution permite una mejor inspección con un cuentagotas para seleccionar objetos en la página. También permite realizar modificaciones en PDF.
http://www.windjack.com/products/pdfcanopener.html
fuente
PDF Analyzer es similar a PDFXplorer , pero tiene más opciones. También es gratis después de un solo registro.
fuente
Si desea trabajar mediante programación desde Python, pdfminer es una buena opción. Le permite trabajar con la estructura de PDF en la memoria como una jerarquía de objetos o serializarla como XML.
fuente
Mi sugerencia es Foxit PDF Reader, que es muy útil para realizar trabajos importantes de edición de texto en archivos PDF.
fuente