Files
fn_registry/python/functions/cybersecurity/extract_pdf_metadata.md
T
egutierrez eb8dbf66a1 feat(infra): auto-commit con 88 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 00:16:46 +02:00

2.9 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
extract_pdf_metadata function py cybersecurity 1.0.0 impure def extract_pdf_metadata(pdf_path: str) -> dict Lee los metadatos del Document Info de un PDF con pypdf (titulo, autor, creador, productor, fechas, numero de paginas) mas el volcado completo en `raw`. OSINT pasiva sobre documentos propios: revela quien y con que software genero el documento. Tolerante a PDFs cifrados (no falla, rellena `error`).
osint-passive
pdf
metadata
document
forensics
pypdf
extract
cybersecurity
python
false error_go_core
pypdf
name desc
pdf_path ruta al archivo PDF en disco
dict con title, author, creator, producer, creation_date, mod_date (ISO 8601 si parseables, sino valor crudo), num_pages, raw (todo el doc info) y error (None si todo fue bien, mensaje en caso contrario). true
PDF con metadatos devuelve titulo, autor y num_pages
PDF sin doc info devuelve campos None sin petar
fechas parseables se devuelven en ISO 8601
python/functions/cybersecurity/extract_pdf_metadata_test.py python/functions/cybersecurity/extract_pdf_metadata.py

Ejemplo

import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from cybersecurity.extract_pdf_metadata import extract_pdf_metadata

meta = extract_pdf_metadata(
    "/home/enmanuel/Obsidian/osint/attachments/personas/cv_objetivo.pdf"
)
print(meta["author"])        # 'Enmanuel G.'          (quien lo creo)
print(meta["producer"])      # 'Microsoft Word 2021'  (con que software)
print(meta["creation_date"]) # '2024-03-11T10:22:00+01:00'
print(meta["num_pages"])     # 3

Cuando usarla

Cuando recolectes inteligencia pasiva sobre un PDF propio o de un objetivo y necesites saber quien lo creo, con que herramienta y cuando. Usala tambien para auditar tus propios documentos antes de publicarlos: el campo author y producer suelen filtrar el nombre real del usuario, la version del software y la organizacion, datos que no quieres exponer.

Gotchas

  • Funcion impura: abre el archivo del disco. Captura la excepcion en lugar de propagarla — si el PDF esta corrupto, cifrado o no es un PDF, devuelve el dict con lo que pudo leer y un mensaje en error (no lanza).
  • PDFs cifrados: intenta abrir con password vacio (caso comun de "restriccion de copia"). Si requiere password real, error empieza por encrypted: y los campos pueden quedar None.
  • Muchas fechas de PDF vienen en formato D:YYYYMMDDHHmmSS+ZZ; se convierten a ISO 8601 cuando pypdf las parsea, sino se devuelven crudas.
  • raw serializa los valores a string para evitar tipos no JSON-friendly (IndirectObject, ByteStringObject). Los campos normalizados conservan el contenido textual.