PDF carregado para PDF/A-4 com preservação de texto e vetores
HPDFArchivalConversion oferece um perfil de preservação para documentos carregados cujas fontes visíveis, color spaces e recursos de rendering podem satisfazer o PDF/A-4 sem substituir o conteúdo das páginas deles
O conversor retém operadores originais de texto, paths de vetores, imagens, geometria de páginas e camadas existentes de texto OCR, achata aparências visíveis normais de anotações e widgets em Form XObjects vetoriais, repara problemas suportados de metadados e estrutura, e valida o resultado serializado antes da publicação
Este perfil nunca rasteriza uma página: RasterizedPages permanece zero, inclusive quando o OCR renderiza um bitmap temporário de reconhecimento e anexa texto invisível pesquisável
A aceitação em runtime cobre Delphi Win32 e Win64; o FPC do Windows compila a implementação de fontes frescas, e os headers públicos gerados compilam com C++Builder Win32 e Win64x
Entry points
function HPDFConvertLoadedToPDFA4Preserving(Source: THotPDF;
Destination: TStream; const SRGBProfile: TBytes;
const Options: THPDFArchivalPreservationOptions;
out Report: THPDFArchivalPreservationReport): Boolean;
function HPDFConvertLoadedToPDFA4PreservingFile(Source: THotPDF;
const TargetFileName: string; const SRGBProfile: TBytes;
const Options: THPDFArchivalPreservationOptions;
out Report: THPDFArchivalPreservationReport): Boolean;
Carregue a origem primeiro, mantenha qualquer stream de entrada de posse do chamador vivo, e dê ao conversor acesso exclusivo ao documento durante a operação
Options := THPDFArchivalPreservationOptions.Default;
if not HPDFConvertLoadedToPDFA4PreservingFile(Source, TargetFileName,
SRGBProfile, Options, Report) then
raise Exception.Create(Report.Conversion.Diagnostic);
Prova de preservação
O conversor faz um snapshot do grafo atual editado da origem sob uma transação de grafo e reverte a origem após a serialização, e depois executa todo o trabalho de conversão num clone carregado independente
Streams originais decodificados de conteúdo de páginas precisam permanecer byte-idênticos e alcançáveis a partir das páginas originais delas, na ordem original delas, após o reload da saída
Trees de recursos de páginas e trees retidas de recursos de aparências normais são percorridas com limites de objetos e recursão; programas de fontes embutidas, mapas ToUnicode, imagens, profiles ICC e Form XObjects aninhados retêm seus payloads codificados originais, verificados com SHA-256 em streaming e checados quanto à continuidade de alcançabilidade a partir das páginas de saída
Streams independentes de conteúdo delimitam os operadores originais das páginas com guardas de graphics state e contêm operadores de aparências anexados, evitando o path nativo de append em stream único que regravaria um stream original de conteúdo
TextAndVectorContentPreserved se torna true somente depois que a validação nativa da saída e as checagens de preservação passam; ele é limpo quando a conversão ou a publicação em arquivo falham
Tratamento de aparências
- Aparências normais visíveis
AP/Nsão mapeadas do Form BBox e Matrix delas para o Rect da anotação usando o flattening nativo de anotações, retendo as fontes e recursos próprios delas - Flags Invisible, Hidden e NoView impedem a pintura mesmo quando uma aparência normal existente está presente; anotações Popup são removidas sem pintura
- Links sem borda e sem aparência normal são removidos sem pintura apenas quando uma borda explícita de largura zero estabelece que eles não têm borda visível
SynthesizeMissingAppearancestem default true e invoca a geração nativa de aparências de markup ou campos; subtipos não suportados, retângulos inválidos ou geração com falha rejeitam a conversão- Aparências textuais ausentes suportam valores ASCII com um encoding de fonte nativa compatível; valores textuais hexadecimais, Unicode ou mascarados exigem uma aparência normal explícita
- Aparências textuais sintetizadas são checadas contra os valores de origem delas no texto pesquisável recarregado após a normalização de whitespace; um encoding de fonte incompatível rejeita a publicação
Fornecer uma aparência normal existente suporta texto arbitrário de fontes embutidas que já está representado corretamente naquela aparência, incluindo Unicode; o conversor retém aquela aparência em vez de substituir por uma fonte do sistema
O flattening remove a interação de anotações, campos editáveis, cálculos, actions e campos de assinaturas, mantendo as aparências visíveis; cada anotação afetada e cada aparência sintetizada produz uma entrada de perda com a página de origem, índice de anotação e número de objeto dela, quando disponíveis
Cores, fontes e perdas explícitas
O argument exigido de ICC é um perfil sRGB matrix/TRC aceito pelo validator de arquivamento existente; todo output profile existente precisa ter exatamente os mesmos bytes decodificados do perfil fornecido, caso contrário a conversão é rejeitada para evitar reinterpretar a condição de saída existente
O conversor adiciona um output intent sRGB PDF/A apenas quando necessário, sincroniza o serializer real para um header PDF 2.0, e invoca o reparo delimitado de metadados e estrutura do PDF/A-4 base
Ele não embute programas visíveis ausentes de fontes, não recodifica texto original, não recolore operadores DeviceCMYK, não substitui uma condição de saída existente nem achata a transparência de páginas num bitmap; achados nativos não resolvidos de preflight rejeitam a publicação
Origens criptografadas precisam ser descriptografadas antes da conversão; campos de assinaturas exigem AllowSignatureInvalidation explícito, e arquivos embutidos existentes exigem RemoveEmbeddedFiles explícito, porque este perfil mira o PDF/A-4 base
Losses também reporta invalidação de assinaturas, remoção de arquivos embutidos, remoção de dicionários Info legados e remoção de metadados proibidos de catalog ou apresentação
XMP existente é retido quando suportado; quando os metadados são gerados, as informações suportadas de título, autor, subject e palavras-chave são transferidas, enquanto campos legados arbitrários de Info não têm promessa de sobreviver
OCR e orçamentos
AddOCRToImagePages tem default false; habilitá-lo reconhece páginas sem texto extraível e anexa texto invisível sem substituir o conteúdo original nem as camadas existentes de OCR
Defina OCREngine com um engine da aplicação ou deixe nil para o engine built-in delimitado de OCR ASCII, cuja cobertura de linguagens e tipografia permanece a do perfil built-in de reconhecimento
OCROptions controla a resolução de reconhecimento e os orçamentos de palavras, enquanto o conversor força skip-pages-with-text, retenção de camadas existentes de OCR e a omissão de um grupo novo de optional content
Limits usa THPDFArchivalConversionOptions.Default para contagem de páginas, contagem de objetos, bytes de saída staged, trabalho individual de streams, trabalho cumulativo de streams, cancelamento e checkpoints síncronos; limites de pixels raster se aplicam apenas quando o OCR renderiza bitmaps de reconhecimento
Defaults adicionais são 1.024 entradas de perdas, 1.048.576 code units de texto extraído ou esperado, e 4.000.000 de content tokens por passada nativa de validação
O hashing de payloads de recursos conta os bytes codificados contra os mesmos orçamentos de trabalho de streams; a verificação de origem e saída ambas consomem trabalho cumulativo, então coleções grandes de scans podem exigir um MaxTotalDecodedBytes explicitamente aumentado, embora a verificação de recursos use um buffer fixo de hash de 64 KiB
Os orçamentos se aplicam após o carregamento da origem e delimitam separadamente os snapshots e a saída staged de posse do conversor; configure os limites do loader ao aceitar entradas não confiáveis
Publicação e validação
A API de streams exige um destino seekable vazio na posição zero e rejeita aliases da origem; ela copia os bytes staged somente depois que reload, validação nativa, checagens de preservação e checagens de cancelamento tiverem sucesso
Uma falha de gravação no destino dispara um reset best-effort; um stream customizado arbitrário pode rejeitar aquele reset, então use o entry point de arquivos para publicação atômica em arquivos
A API de arquivos investiga aliases da origem, cria um arquivo temporário exclusivo ao lado do alvo, faz flush dele, e substitui o alvo com MoveFileEx somente depois que todas as checagens passam; falhas anteriores retêm um alvo existente e removem o arquivo temporário
InitialValidationIssues, Repair, Conversion.ValidationIssues, detalhes de OCR, contagens de streams, contagens de texto extraído e perdas explícitas permanecem disponíveis para inspeção
A validação nativa cobre as regras suportadas de PDF/A-4 do HotPDF e não é uma certificação ampla de PDFs arbitrários; a aceitação de regressão usa adicionalmente checagens independentes de pypdf e MuPDF mais a validação veraPDF PDF/A-4 sobre artefatos gerados de aparências e OCR nativo
A regressão de corpus real inclui guias de Word e bibliotecas com fontes embutidas e uma coleção de scans chineses de 380 páginas, enquanto um relatório comercial com fontes não embutidas e conteúdo DeviceCMYK é um caso explícito de rejeição
Comandos de regressão
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win32
powershell -File Tests/Delphi/Run-ArchivalPreservationTests.ps1 -Platform Win64
python Tests/Delphi/Fixtures/ArchivalPreservation/verify_preserving_output.py
verapdf --format xml --flavour 4 Tests/Delphi/generated/ArchivalPreservation/appearance.pdf Tests/Delphi/generated/ArchivalPreservation/ocr.pdf Tests/Delphi/generated/ArchivalPreservation/native-appearance.pdf
O runner Delphi suprime a chamada de viewers e inclui fixtures de regressão tanto de preservação quanto do raster existente; a aceitação independente do veraPDF usa o perfil real de validação PDF/A-4
Tópicos relacionados
A conversão de arquivamento raster fornece um perfil separado com perda explícita do texto e vetores originais quando o rendering nativo é suportado