Criando PDF compatível com PDF/3-A e anexando fatura ZUGFeRD em Python

Anexar ZUGFeRD ao PDF

Recomendamos os seguintes passos para anexar ZUGFeRD ao PDF:

  1. Importe a biblioteca Aspose.PDF e dê-lhe um alias de ap para conveniência.
  2. Defina o caminho para o diretório onde os arquivos PDF de entrada e saída estão localizados.
  3. Defina o caminho para o arquivo PDF que será processado.
  4. Carregue o arquivo PDF a partir da variável de caminho e crie um objeto Document.
  5. Crie um objeto FileSpecification para o arquivo XML que contém os metadados da fatura. Use a variável de caminho e uma string de descrição para criar o objeto FileSpecification.
  6. Definir o mime_type e o af_relationship propriedades do objeto FileSpecification para text/xml e ALTERNATIVE, respectivamente.
  7. Adicione o objeto fileSpecification à coleção de arquivos incorporados do objeto document. Isso anexa o arquivo XML ao documento PDF como um arquivo de metadados de fatura.
  8. Converta o documento PDF para o formato PDF/A-3A. Use o caminho para o arquivo de log, o PdfFormat.PDF_A_3A enumeração, e o ConvertErrorAction.DELETE enumeração para converter o objeto do documento.
  9. Salve o documento PDF com o ZUGFeRD anexado.
import sys
import os
import aspose.pdf as ap

def attach_invoice_zugferd_format(infile, invoice, outfile):
    document = ap.Document(infile)

    # Create a FileSpecification object for the XML file that contains the invoice metadata
    description = "Invoice metadata conforming to ZUGFeRD standard"
    file_specification = ap.FileSpecification(invoice, description)

    # Set the MIME type and the AFRelationship properties of the embedded file
    file_specification.mime_type = "text/xml"
    file_specification.af_relationship = ap.AFRelationship.ALTERNATIVE

    # Add the embedded file to the PDF document's embedded files collection
    document.embedded_files.add("factur", file_specification)

    # Convert the PDF document to the PDF/A-3A format
    log_path = outfile.replace(".pdf", "_log.xml")
    document.convert(log_path, ap.PdfFormat.PDF_A_3A, ap.ConvertErrorAction.DELETE)
    document.save(outfile)