He hecho una prueba con un ODT muy simple con un solo campo llamado “nombre”, generé el PDF y guarde varias copias con nombres diferentes.
Lo vamos a hacer con Python y requerimos instalar primero pdfminer.six
pip install --user pdfminer.six
Y usamos el siguiente código:
import uno
from pathlib import Path
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1
from pdfminer.utils import decode_text
def get_value(pdf):
with open(pdf, 'rb') as fp:
parser = PDFParser(fp)
doc = PDFDocument(parser)
res = resolve1(doc.catalog)
if 'AcroForm' not in res:
# ~ raise ValueError("No AcroForm Found")
return ''
fields = resolve1(doc.catalog['AcroForm'])['Fields']
for f in fields:
field = resolve1(f)
name, value = field['T'], decode_text(field['V'])
return value
def main():
PATH_PDF = '/home/elmau/pdf'
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.CurrentController.ActiveSheet
sheet['A1'].String = 'Nombre'
for i, p in enumerate(Path(PATH_PDF).glob('*.pdf')):
sheet[i+1, 0].String = get_value(p)
return
Y obtenemos:
Dado que ponerle el nombre a cada control implicaba entrar en sus propiedades, supongo que no lo hiciste. Así que primero hay que determinar los nombres de todos los campos para extraerlos.
Esto me parece tan útil, que se merece una extensión. Trabajando.