PDF carregado para PDF/A-4 com preservação de texto e vetor

HPDFArchivalConversion oferece um perfil de preservação para documentos carregados cujos tipos de letra visíveis, espaços de cor e recursos de renderização possam satisfazer o PDF/A-4 sem substituir o conteúdo das páginas deles

O conversor retém operadores originais de texto, caminhos vetoriais, imagens, geometria de páginas e camadas OCR existentes de texto, achata aparências visíveis normais de anotações e widgets em Form XObjects vetoriais, repara problemas suportados de metadados e estruturas e valida o resultado serializado antes da publicação

Este perfil nunca rasteriza uma página: RasterizedPages permanece zero, incluindo quando o OCR renderiza um bitmap temporário de reconhecimento e acrescenta texto invisível pesquisável

A aceitação em runtime cobre Delphi Win32 e Win64; o Windows FPC compila a implementação a partir de fontes frescas, e os cabeçalhos públicos gerados compilam com C++Builder Win32 e Win64x

Pontos de entrada

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 primeiro a fonte, mantenha viva qualquer stream de entrada própria de quem chama 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 fonte atual editado sob uma transação de grafo e reverte a fonte após a serialização, e depois realiza todo o trabalho de conversão sobre um clone carregado independente

As streams originais descodificadas de conteúdo de páginas têm de permanecer byte-idênticas e alcançáveis a partir das páginas originais delas na ordem original delas após o recarregamento da saída

Árvores de recursos de páginas e árvores retidas de recursos de aparências normais são percorridas com limites de objetos e de recursão; programas incorporados de tipos de letra, mapas ToUnicode, imagens, perfis ICC e Form XObjects aninhados mantêm os payloads codificados originais deles, verificados com SHA-256 em streaming e verificados quanto à alcançabilidade contínua a partir das páginas de saída

Streams independentes de conteúdo enquadrar os operadores originais das páginas com guardas de estado de gráficos e contêm operadores de aparências acrescentados, evitando o caminho nativo de acrescento numa stream única que reescreveria uma stream original de conteúdo

TextAndVectorContentPreserved só se torna true depois da validação nativa da saída e das verificações de preservação passarem; é limpo quando a conversão ou a publicação em ficheiro falha

Tratamento de aparências

Fornecer uma aparência normal existente suporta texto arbitrário com tipos de letra incorporados que já esteja corretamente representado nessa aparência, incluindo Unicode; o conversor mantém essa aparência em vez de substituir por um tipo de letra do sistema

O flattening remove interação de anotações, campos editáveis, cálculos, ações e campos de assinatura mantendo aparências visíveis; cada anotação afetada e cada aparência sintetizada produz uma entrada de perdas com a página fonte dela, o índice da anotação e o número do objeto quando disponíveis

Cor, tipos de letra e perdas explícitas

O argumento exigido de ICC é um perfil de matriz/TRC sRGB aceite pelo validador existente de arquivo; todos os perfis de saída existentes têm de ter exatamente os mesmos bytes descodificados que o perfil fornecido, caso contrário a conversão é rejeitada para evitar reinterpretar a condição de saída existente

O conversor acrescenta um output intent de PDF/A sRGB apenas quando necessário, sincroniza o serializador real para um cabeçalho PDF 2.0 e invoca reparações delimitadas de metadados e de estruturas do PDF/A-4 base

Não incorpora programas visíveis de tipos de letra em falta, não recodifica texto original, não recolore operadores DeviceCMYK, não substitui uma condição de saída existente nem achata transparência de páginas num bitmap; findings não resolvidos de preflight nativo rejeitam a publicação

Fontes encriptadas têm de ser desencriptadas antes da conversão; campos de assinatura exigem AllowSignatureInvalidation explícito, e ficheiros incorporados existentes exigem RemoveEmbeddedFiles explícito, porque este perfil visa o PDF/A-4 base

Losses também reporta invalidação de assinaturas, remoção de ficheiros incorporados, remoção de dicionários Info legados e remoção de metadados proibidos de catalogs ou de apresentação

XMP existente é retido quando suportado; quando os metadados são gerados, informação suportada de título, autor, assunto e palavras-chave é transferida, enquanto campos Info legados arbitrários não têm garantia de sobreviver

OCR e orçamentos

AddOCRToImagePages tem por defeito false; ativá-lo reconhece páginas que não têm texto extraível e acrescenta texto invisível sem substituir o conteúdo original nem as camadas OCR existentes

Defina OCREngine com um motor da aplicação ou deixe-o nil para o motor incorporado delimitado de OCR ASCII, cuja cobertura de linguagens e de tipografia continua a ser a do perfil incorporado 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 OCR existentes e 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 de streams individuais, trabalho cumulativo de streams, cancelamento e checkpoints síncronos; os limites de píxeis raster aplicam-se apenas quando o OCR renderiza bitmaps de reconhecimento

Os defaults adicionais são 1,024 entradas de perdas, 1,048,576 unidades de código de texto extraídas ou esperadas e 4,000,000 tokens de conteúdo por passagem nativa de validação

O hashing de payloads de recursos conta bytes codificados contra os mesmos orçamentos de trabalho de streams; a verificação de fonte e de saída consome ambas trabalho cumulativo, pelo que coleções grandes de digitalizações podem exigir um MaxTotalDecodedBytes explicitamente aumentado, embora a verificação de recursos use um buffer de hashes fixo de 64 KiB

Os orçamentos aplicam-se após o carregamento da fonte e delimitam separadamente snapshots próprios do conversor e a saída staged; configure limites de loaders ao aceitar entrada não fidedigna

Publicação e validação

A API de streams exige um destino seekable vazio na posição zero e rejeita aliases da fonte; copia os bytes staged apenas depois de recarregamento, validação nativa, verificações de preservação e verificações de cancelamento terem sucesso

Uma falha de escrita no destino despoleta um reset de melhor esforço; uma stream personalizada arbitrária pode rejeitar esse reset, por isso use o ponto de entrada de ficheiros para publicação atómica em ficheiro

A API de ficheiros sonda por aliases da fonte, cria um ficheiro temporário exclusivo ao lado do alvo, faz flush dele e substitui o alvo com MoveFileEx apenas depois de todas as verificações passarem; falhas anteriores mantêm um alvo existente e removem o ficheiro 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 generalizada de PDFs arbitrários; a aceitação de regressão usa adicionalmente verificações independentes de pypdf e MuPDF mais validação veraPDF de PDF/A-4 sobre artefactos de aparências geradas e de OCR nativo

A regressão de corpus real inclui guias de Word e de bibliotecas com tipos de letra incorporados e uma coleção de digitalizações chinesas de 380 páginas, enquanto um relatório de comércio com tipos de letra não incorporados 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 de Delphi suprime o lançamento do leitor e inclui fixtures de regressão tanto de preservação como do raster existente; a aceitação independente de veraPDF usa o perfil real de validação de PDF/A-4

Tópicos relacionados

A conversão de arquivo raster fornece um perfil separado com perda explícita de texto e vetores originais quando a renderização nativa é suportada