Combinar varios pdf's con datos en una única hoja de cálculo

¡Saluton! Tengo un modelo de formulario rellenable pdf, creado y exportado desde Write. Lo publiqué y he recibido cientos de documentos ya completados con datos básicos, me gustaría saber cómo poder volcar los datos de todos los pdf’s de un mismo formulario en una única hoja de cálculo. La opción existe desde el Acrobat Pro (En mi versión Pro 9 Formularios-administrar datos de formulario - Combinar archivos de datos en hoja de cálculo).
Quisiera no necesitar el Acrobat para esta operación, ya que no lo he utilizado para crear el formulario. Seguramente tiene que poderse. Graciass!!

  • LibreOffice 7.5.4
  • S.O. Windows 10
  • Ubuntu 22.04

Por favor, edita el post e informa sistema operativo y versión de LibreOffice.

Si subes uno de ejemplo lo miro, si los documentos tienen datos sensibles, genera uno de pruebas con otros datos,

Puede que lo siguiente sea útil:

En Linux, tienes pdftk

sudo apt install pdftk

Con el que puedes unir todos tus archivos pdf en uno, ejecutando en una terminal dentro del directorio donde se encuentran los pdfs:

pdftk *.pdf cat output final.pdf

Tambien puedes descomprimir el archivo pdf para su posterior edición:

pdftk final.pdf output final_desc.pdf uncompress

Para extraer datos de un archivo pdf tienes a tabula

 https://github.com/tabulapdf/tabula/releases/download/v1.2.1/tabula-jar-1.2.1.zip

Como usarla:

 https://consejoderedaccion.org/sello-cdr/tabula-toma-datos-pdf

Gracias, lo pondré en práctica en casa (donde tengo el Linux) a ver si lo consigo… ya os contaré :smiley:

Hola, Me parecía una solución muy cómoda, pero he probado Tabula, y , al menos en mi caso, no detecta los datos insertados a través del control del texto del formulario, solo las etiquetas. Quizás si se ha creado el pdf a través de una tabla sí funcionaría bien, pero no es mi caso. Seguiré probando. Gracias! Paso el formulario ejemplo - ya que veo por aquí es posible (además se puede “abrir con” Writer para modificar, está exportado en formato hibrido)
Formulario.pdf (109.8 KB)

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:
image

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. :grinning:

Graciassss Mau! Voy a por ello, esto lo necesito en mi centro de trabajo (usamos Windows) a ver si consigo hacerlo fácil y os cuento. Sí merece una extensión porque es la gran necesidad de quien crea formularios. Parecen en desuso porque está el formato web, pero para temas internos siguen siendo útiles. Os seguiré contando! :kissing_heart:

En el Capítulo 7, Vincular bases de datos, apartado Importar registros PDF, de la Guía de Base, tienes explicado el procedimiento y una macro para crear el formulario y para luego leerlo a una base de datos. Pasar los datos de Base a Calc es tan simple como copiar y pegar, pero en todo caso, no creo que sea muy difícil adaptar la macro para importar los datos en Calc.

Si bien es posible hacerlo en W, la extensión te lo va a resolver mucho más fácil…

1 Like

¿Lo vas a hacer? Seguro que será más fácil! :grinning:

Muchas gracias, hay mucho aquí para mirar y entender… habrá que buscar el tiempo, parece muy completo… :thinking: