Extração de ficheiros PDF/A3

Tradução automática de Deepl

Em posts anteriores, explorámos a incorporação de documentos em ficheiros PDF/A-3 usando 4D Write Pro, incluindo a geração de facturas electrónicas. À medida que a faturação eletrónica se torna obrigatória em vários países europeus – como a França e a Alemanha – a capacidade de extrair ficheiros XML incorporados destes PDFs está a tornar-se crucial. Mas a utilidade do PDF/A-3 vai para além das facturas; estes ficheiros podem incorporar vários tipos de documentos que podem exigir extração.

Enquanto ferramentas como Adobe Acrobat Reader oferecem extração manual, este post introduz um método eficiente e automatizado usando 4D 20 R6 para lidar facilmente com o processo.

HDI: Extração de Arquivos PDF/A3

Um componente dedicado

Um componente dedicado foi desenvolvido para permitir a extração de todos os arquivos do recinto (na memória) e gerenciá-los da maneira que precisa uma vez que tenha feito isso. Por exemplo, um ficheiro XML pode ser analisado diretamente numa árvore DOM, enquanto um ficheiro de imagem pode ser guardado no disco, etc.

GESTOR DE COMPONENTES

Esse componente pode ser facilmente instalado graças ao gerenciador de componentes que é realmente simples de usar e faz parte de 4D 20 R6. Apenas crie um arquivo dependencies.json dentro de sua pasta Sources e digite essas simples linhas dentro. O componente será instalado assim que seu projeto for lançado. O HDI fornecido é baseado nesse mecanismo.

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

Extração

Um único método do componente permite-lhe obter a lista e o conteúdo dos documentos incluídos num ficheiro PDF.

$colAttachments:=PDF Get attachments ($PDFfile)

Este método devolve uma coleção que contém objectos, cada um descrevendo e contendo um anexo.

Estes objectos conterão atributos como name, extension, fullName, mimeType, content, etc., descritos na íntegra no HDI e na documentação do componente.

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

    Ou, claro, no caso das facturas electrónicas, pode ir diretamente para o elemento xml incluído!

    $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 

    A documentação do componente no github descreve mais funções (verificação, atualização, etc.) em pormenor.

    Um exemplo de um diálogo de extração

    A IDH fornecida demonstrará como apresentar os invólucros numa caixa de listagem com base na coleção devolvida.

    Conclusão

    Esse componente, com seu código fonte disponível no GitHub, aproveita a biblioteca QPDF (uma solução de código aberto disponível gratuitamente aqui) para fornecer um método confiável para extrair anexos de arquivos PDF/A-3 dentro de suas aplicações 4D. Está pronto para ser usado imediatamente através do gerenciador de componentes, com flexibilidade para personalização conforme suas necessidades crescem ou a biblioteca QPDF evolui.

    Roland Lannuzel
    - Proprietário do produto & Especialista 4D - Depois de estudar electrónica, a Roland entrou nas TI industriais como desenvolvedor e consultor, construindo soluções para clientes com uma variedade de bases de dados e tecnologias. No final dos anos 80, apaixonou-se pela 4D e utilizou-a para escrever aplicações comerciais que incluem sistemas de contabilidade, facturação e correio electrónico. Juntando-se à empresa em 1997, as valiosas contribuições de Roland incluem a concepção de especificações, ferramentas de teste, demonstrações, bem como formação e palestras para a comunidade 4D em muitas conferências. Ele continua a moldar activamente o futuro da 4D, definindo novas características e ferramentas de desenvolvimento de bases de dados.