Extracción de archivos PDF/A3

Traducido automáticamente de Deepl

En entradas anteriores, exploramos la incrustación de documentos en archivos PDF/A-3 con 4D Write Pro, incluida la generación de facturas electrónicas. A medida que la facturación electrónica se vuelve obligatoria en varios países europeos, como Francia y Alemania, la capacidad de extraer archivos XML incrustados de estos PDF se vuelve crucial. Pero la utilidad de PDF/A-3 va más allá de las facturas; estos archivos pueden incluir varios tipos de documentos que pueden requerir extracción.

Mientras que herramientas como Adobe Acrobat Reader ofrecen extracción manual, este post presenta un método eficiente y automatizado que utiliza 4D 20 R6 para manejar fácilmente el proceso.

HDI: Extracción de archivos PDF/A3

Un componente dedicado

Un componente dedicado ha sido desarrollado para permitirle extraer todos los archivos adjuntos (en memoria) y gestionarlos de la manera que necesite una vez que lo haya hecho. Por ejemplo, un archivo XML puede analizarse directamente en un árbol DOM, mientras que un archivo de imagen puede guardarse en disco, etc.

GESTOR DE COMPONENTES

Este componente puede instalarse fácilmente gracias al gestor de componentes que es realmente sencillo de utilizar y forma parte de 4D 20 R6. Simplemente cree un archivo dependencies.json dentro de su carpeta Sources y escriba estas simples líneas dentro. El componente será instalado tan pronto como su proyecto sea lanzado. El IDH proporcionado se basa en este mecanismo.

{
"dependencies":
 {
  "4D-QPDF":
  {
  "github": "4d/4D-QPDF",
  "version":"*"
  }
 }
}

Extracción

Un único método del componente le permitirá obtener la lista y el contenido de los documentos incluidos dentro de un archivo PDF.

$colAttachments:=PDF Get attachments ($PDFfile)

Este método devuelve una colección que contiene objetos, cada uno de los cuales describe y contiene un documento adjunto.

Contendrán atributos como name, extension, fullName, mimeType, content, etc., descritos completamente en el IDH y en la documentación del componente.

    $path:="/DATA/TestPDFs/ManyEnclosures.pdf"
    $PDFfile:=File($path; fk posix path)
    Form.attachments:=PDF Get attachments($PDFfile)

    Por supuesto, en el caso de las facturas electrónicas, puede ir directamente al elemento xml incluido.

    $XMLattachments:=PDF Get attachments($file).query("mimeType = :1"; "text/xml")
    If ($XMLattachments.length#0)
    	$xml:=BLOB to text($XMLattachments[0].content; UTF8 text without length)
    	$dom:=DOM Parse XML variable($xml)
    End if 

    La documentación del componente en github describe más funciones (comprobación, actualización, etc.) en detalle.

    Un ejemplo de diálogo de extracción

    El IDH proporcionado demostrará cómo mostrar los recintos en un cuadro de lista basado en la colección devuelta.

    Conclusión

    Este componente, con su código fuente disponible en GitHub, aprovecha la biblioteca QPDF (una solución de código abierto disponible gratuitamente aquí) para proporcionar un método fiable para extraer adjuntos de archivos PDF/A-3 dentro de sus aplicaciones 4D. Está listo para usar desde el principio a través del gestor de componentes, con flexibilidad para la personalización a medida que crecen sus necesidades o evoluciona la biblioteca QPDF.

    Roland Lannuzel
    - Propietario de Producto y Experto en 4D - Después de estudiar electrónica, Roland se dedicó a la informática industrial como desarrollador y consultor, construyendo soluciones para clientes con una variedad de bases de datos y tecnologías. A finales de los años 80 se enamoró de 4D y lo ha utilizado para escribir aplicaciones de negocio que incluyen sistemas de contabilidad, facturación y correo electrónico.Eventualmente se unió a la compañía en 1997, las valiosas contribuciones de Roland incluyen el diseño de especificaciones, herramientas de prueba, demos, así como la formación y hablar con la comunidad 4D en muchas conferencias. Continúa dando forma activamente al futuro de 4D definiendo nuevas características y herramientas de desarrollo de bases de datos.