Artigo Técnico

Exportar pastas de trabalho do Excel para PDF/A a partir do Delphi

O HotXLS exporta uma pasta de trabalho ou uma única planilha diretamente para PDF/A a partir do Delphi e do C++Builder, sem Excel e sem um driver de impressora PDF. Defina UsePDFA e escolha um perfil em TXLSPDFExport, e o arquivo exportado carrega um perfil ICC sRGB incorporado como sua intenção de saída, o bloco de identificação pdfaid em seus metadados XMP e um cabeçalho de versão de PDF apropriado para o nível de conformidade

A exigência costuma vir de uma política de retenção de registros, não de um desenvolvedor. Demonstrações financeiras, resultados laboratoriais, arquivamentos regulatórios e tudo que um órgão público precisa manter por décadas têm de ser armazenados em um formato que se apresente de forma idêntica daqui a cinquenta anos, e é isso que o PDF/A, ISO 19005, existe para garantir. Uma planilha é um cálculo vivo; uma cópia arquivada de uma planilha precisa ser uma imagem fixa dele

O que torna um PDF um PDF de arquivamento?

Três exigências fazem a maior parte do trabalho. O arquivo precisa ser autocontido, de modo que toda fonte que usa esteja incorporada e nenhum recurso externo seja referenciado. Sua cor precisa ser inequívoca, o que significa uma intenção de saída nomeando o espaço de cor para o qual o arquivo foi preparado. E ele precisa se identificar, por meio de metadados XMP que declaram o número da parte e o nível de conformidade

O HotXLS fornece as três coisas. O perfil sRGB é incorporado como um objeto de stream com três componentes e DeviceRGB como sua alternativa, referenciado a partir de uma intenção de saída GTS_PDFA1 cuja condição e identificador nomeiam ambos o sRGB IEC61966-2.1. O pacote XMP carrega as entradas de parte e conformidade pdfaid. Os bytes do perfil são compilados na biblioteca em vez de carregados em tempo de execução, de modo que não há etapa de implantação nem chance de um arquivo ausente transformar uma exportação de arquivamento em uma exportação comum

Diagrama dos três requisitos de arquivamento PDF/A e do aparato que o HotXLS grava a partir de Delphi: subsets FontFile2 incorporados, um output intent GTS_PDFA1 sRGB e identificação XMP pdfaid
Um arquivo PDF/A precisa ser autossuficiente, inequívoco em cores e autoidentificador, e HotXLS grava o aparato correspondente a partir do par de propriedades UsePDFA
uses
  lxHandleX, lxPDF;

var
  Book: TXLSXWorkbook;
  Exporter: TXLSPDFExport;
begin
  Book := TXLSXWorkbook.Create;
  Exporter := TXLSPDFExport.Create;
  try
    if Book.Open('quarterly-results.xlsx') <> 1 then
      Exit;

    Exporter.UsePDFA := True;
    Exporter.PDFAProfile := xlsPdfA2b;      // ISO 19005-2 nível B
    Exporter.DocumentLanguage := 'en-GB';
    Exporter.TagMode := xlsPdfTagsAutomatic;

    if Exporter.SaveAsPDF(Book, 'quarterly-results-archive.pdf') <> 1 then
      raise Exception.Create('archival export failed');
  finally
    Exporter.Free;
    Book.Free;
  end;
end;

Qual perfil você deve escolher?

A enumeração de perfis cobre PDF/A-1, PDF/A-2 e PDF/A-3, cada um em uma variante acessível e uma variante básica. As diferenças práticas são mais estreitas do que a lista sugere

O nível B, a variante básica, garante que a aparência visual seja reproduzível. O nível A acrescenta exigências estruturais e semânticas, principalmente uma árvore de estrutura marcada e uma ordem de leitura definida, de modo que o documento fica acessível a tecnologias assistivas. A parte 2 relaxa algumas restrições da parte 1 e permite object streams e JPEG 2000; a parte 3 adicionalmente permite arquivos incorporados arbitrários, que é o que os formatos de faturamento eletrônico usam para carregar XML legível por máquina ao lado da página legível por humanos

Para uma planilha arquivada, PDF/A-2b é o padrão pragmático: é amplamente aceito por arquivos, não exige a disciplina de marcação que o nível A impõe a uma grade de células, e permite as estruturas compactas que evitam que a exportação de uma pasta de trabalho de 200 páginas infle. Escolha a parte 3 quando o arquivo também precisar carregar os dados de origem como anexo, o que o exportador suporta por meio de AddAttachment

A regra de fonte que pega a maioria das pessoas

Todo glifo que um arquivo PDF/A desenha precisa vir de uma fonte incorporada. Esse é o motivo isolado mais comum pelo qual uma exportação, do contrário correta, falha na validação, e o modo de falha é sutil: o arquivo parece correto na máquina que o gerou, porque essa máquina tem a fonte instalada

O HotXLS incorpora subconjuntos TrueType para as fontes que usa, mas o caminho de fallback para base-14 existe para os casos em que uma fonte não pode ser resolvida, e um fallback base-14 não é incorporado por definição. Para saída de arquivamento, configure um arquivo de fonte Unicode explícito de modo que o caminho de fallback nunca seja tomado. A mecânica da subsetagem e da cadeia de fallback é descrita em subsetagem de fontes TrueType; a regra prática é testar a exportação em uma máquina que não tenha suas fontes corporativas instaladas

Diagrama da regra de fontes PDF/A nas exportações Delphi do HotXLS: fontes resolvidas viram subsets TrueType incorporados que validam em qualquer lugar, enquanto o fallback base-14 nunca é incorporado e falha em máquinas sem a fonte
Uma fonte não resolvível recorre a uma fonte base-14 que nunca é incorporada, então configure um arquivo de fonte Unicode explícito e teste em uma máquina sem suas fontes corporativas

O que o exportador garante, e o que não garante

Ser preciso aqui importa mais do que soar confiante. A exportação produz o aparato de identificação do PDF/A — intenção de saída, perfil ICC incorporado, metadados pdfaid, um cabeçalho de versão apropriado — e encaminha o texto pelo caminho de incorporação. Ela não roda um validador completo sobre sua própria saída, portanto não impõe todas as proibições da especificação, como as regras sobre transparência, sobre certos tipos de anotação e sobre conteúdo opcional

Para uma exportação de planilha, essas construções raramente aparecem, razão pela qual a taxa de sucesso prática é alta. Mas alta não é o mesmo que garantida, e para um pipeline de arquivamento genuíno a arquitetura correta é exportar e depois validar com uma ferramenta independente, tratando uma falha de validação como um erro de pipeline, não como um aviso. Uma divisão de responsabilidade comparável para documentos PDF é descrita em validação de preflight de PDF/A

O layout faz parte da fidelidade de arquivamento

Uma planilha arquivada que é tecnicamente conforme e visualmente ilegível falhou em sua verdadeira finalidade. A configuração de página pesa mais em uma exportação de arquivamento do que em uma impressão do dia a dia, porque ninguém vai poder reformatá-la depois

Três configurações se pagam sozinhas. Ajustar à largura evita a falha clássica em que uma tabela com 14 colunas de largura chega como sete páginas de duas colunas cada. Repetir linhas de cabeçalho mantém toda página legível isoladamente. E áreas de impressão explícitas excluem as anotações de trabalho que ficam à direita dos dados reais. O conjunto completo de controles de impressão e configuração de página é abordado em proteção, configuração de página e impressão

// Configuração de página pronta para arquivamento, aplicada antes da exportação
Sheet := Book.Sheets[0];
Sheet.PageLandscape := True;
Sheet.FitToWidth := 1;
Sheet.FitToHeight := 0;                  // quantas páginas de altura forem necessárias
Sheet.SetPrintArea('A1:N480');
Sheet.PrintTitleRows := '$1:$3';

// Os metadados também pertencem ao arquivo
Book.Title := 'Quarterly results 2026 Q2';
Book.Author := 'Finance';

Uma lista de verificação antes do primeiro lote rodar

Confirme que o arquivo se identifica: não descompacte nada, apenas abra o PDF em um editor de texto e procure as entradas de parte e conformidade pdfaid e a intenção de saída GTS_PDFA1. Confirme as fontes: verifique se toda fonte do documento aparece como incorporada. Confirme a aparência: compare as páginas exportadas com uma cópia impressa, porque uma configuração de ajuste à página que reduz o texto silenciosamente para quatro pontos é conforme e inútil

Depois rode um validador independente sobre uma amostra representativa e guarde o relatório. Os arquivos cada vez mais pedem a evidência de validação, não apenas o arquivo, e gerá-la no momento da exportação é muito mais barato do que reconstruí-la anos depois. Para o caminho de exportação comum, não arquivístico, e suas opções de renderização, veja exportação de planilha para PDF

A exportação de arquivamento, a configuração de página e o motor de renderização por trás delas vêm em uma única biblioteca para Delphi e C++Builder; a lista completa de recursos está na página do componente de planilha Delphi HotXLS

Diagrama da arquitetura exportar-depois-validar para a saída PDF/A Delphi do HotXLS: o exportador grava o aparato de identificação e um validador independente encaminha o arquivo para o arquivo ou levanta um erro de pipeline
O exportador constrói o aparato de identificação, enquanto um validador independente prova a conformidade, e uma validação que falha interrompe o lote em vez de registrar um aviso