Notas de versão do PDFium Delphi Component
Histórico de versões para recursos visíveis ao usuário, correções, melhorias do visualizador, geração de documentos, saída PDF/A, renderização e atualizações de documentação do PDFium Delphi Component
Última versão
- Última versão: 3.137.1; Data de lançamento:
Version 3.137.1
Corrigido (Fixed)
- As verificações online de revogação do OpenSSL preservam o status de CRL anterior, o motivo, o erro nativo e o certificado afetado quando não há evidência de OCSP ou respondedor disponível, mantendo diagnósticos precisos de CRL expirada
Version 3.137.0
Adicionado (Added)
- Compilações nativas de Free Pascal/LCL suportam Linux Qt6 e macOS Cocoa, com resolução de fontes da plataforma, armazenamento temporário privado, carregamento de documentos, edição, formulários, salvamento e renderização
- A assinatura via macOS Keychain suporta um caminho de Keychain local à consulta e exportação limitada offline da cadeia de certificados, com transportes nativos de assinatura e de carimbo de tempo para Free Pascal e Delphi
- A renderização paralela informa o caminho real do módulo, o endereço de inicialização e o resultado do unload de cada worker, rejeitando loaders nativos que reutilizem uma imagem existente do PDFium
Corrigido (Fixed)
- Os bindings Unix do PDFium preservam as larguras de callback e de buffer de unsigned-long LP64, incluindo leituras de stream personalizadas além de 4 GiB
- A renderização nativa da LCL respeita a ordem de bytes do bitmap e o layout de canais, preservando as cores na saída Cocoa e na renderização em device context
- A renderização de bitmap, tile e progressiva preserva o alfa de fundo transparente para clNone e clDefault de forma independente da consulta nativa de transparência da página
- A assinatura identifica corretamente os algoritmos de chave pública do certificado, incluindo chaves EC; a verificação CMS no macOS preserva resultados independentes de assinatura externa e de carimbo de tempo e relata explicitamente a verificação RSA-PSS não suportada
- A validação de carimbo de tempo PAdES exige um EKU id-kp-timeStamping crítico e exclusivo; o OpenSSL avalia cadeias básicas de TSA sem aplicar incorretamente o propósito de certificado S/MIME
- Os commits atômicos de arquivo no Unix mantêm a nova linha de base incremental quando um flush de diretório falha após a substituição, expondo a exceção da saída commitada e o resultado de durabilidade incompleta
Alterado (Changed)
- As futures POSIX do Delphi aceitam a prioridade de thread padrão e rejeitam solicitações de prioridade não suportadas antes de iniciar um worker
Version 3.136.0
Adicionado (Added)
- As transformações ICC opcionais do LittleCMS e a conversão de cores do documento usam componentes originais de texto, vetor e de imagem de 8 ou 16 bits, preservam as cores spot selecionadas e relatam explicitamente o conteúdo não suportado
- A redaction complexa preserva o conteúdo suportado em Form XObjects aninhados, caminhos curvos preenchidos e imagens rotacionadas, refletidas ou cisalhadas, com orçamentos de geometria finitos e relatórios detalhados de remoção
- A leitura de objetos ativos expõe orçamentos independentes de corpo de objeto e de object streams comprimidos antes da materialização e da decodificação
Segurança (Security)
- A redaction recusa texto de substituição de Tagged PDF, XFA, camadas de optional content, clipping de texto e estados de pintura não verificáveis, incluindo operadores divididos entre content streams, impedindo a exportação de semântica de conteúdo sensível não suportada
Version 3.135.0
Adicionado (Added)
- A comparação de anotações e de widgets AcroForm relata mudanças de propriedades de forma independente dos pixels da página, usando nomes estáveis, mapeamentos explícitos de páginas, relatórios de ambiguidade e limites de overlay de antes/depois
- As células de tabela suportam estilos de texto mistos e imagens com texto alternativo, continuação opcional de células mescladas entre páginas, linhas de subtotal e rótulos de continuação, preservando as relações de Tagged PDF
Corrigido (Fixed)
- A geração de layout de Tagged PDF inicializa a biblioteca nativa antes de checar as capacidades, permitindo que seja a primeira operação em um novo componente de documento
- Múltiplas substituições em um objeto de texto são ajustadas uma única vez contra seus limites originais, impondo a escala horizontal mínima geral e evitando edições intermediárias desnecessárias
Version 3.134.0
Adicionado (Added)
- O merge de navegação preserva named destinations e links internos de página através de páginas selecionadas, reordenadas e repetidas, com políticas explícitas de colisão e verificação transacional
- A substituição de texto com estilo adiciona planos de origem verificados, previews independentes, reuso de fontes nativas, fallback explícito, ajuste horizontal com limites e rollback após edições com falha ou canceladas
- A assinatura OpenSSL aceita chaves privadas e cadeias de certificados explicitamente configuradas para RSA-PSS, RSA PKCS#1 v1.5 e ECDSA, incluindo a resolução de assinante padrão fora do Windows
- A verificação OpenSSL adiciona evidências de OCSP offline autenticadas e online com limites, falhas de identidade de certificado e diagnósticos opcionais para cada assinante CMS
- O verificador Security.framework do macOS para FPC relata resultados independentes de criptografia, confiança de cadeia e revogação, com trust anchors explícitos e evidências de OCSP fornecidas
Corrigido (Fixed)
- A extração de URI de anotações de link fornece o buffer nativo completo, incluindo seu terminador, para que alvos válidos sejam retornados corretamente
Version 3.133.0
Adicionado (Added)
- O merge transacional de AcroForm suporta páginas selecionadas, rejeição de campos, renomeação, namespaces e campos compatíveis de texto/escolha compartilhados, com recursos, aparências e ordem de cálculo isolados
- O provedor opcional de códigos de barras gera Code128, QR, DataMatrix e PDF417 e reconhece imagens em tons de cinza, com dependências nativas explícitas e orçamentos de processamento finitos
Corrigido (Fixed)
- O FormField lê valores herdados do pai e aplica edições de texto de forma consistente entre widgets compartilhados, com valores persistentes de salvar/reabrir e verificações de somente leitura
- A regeneração de aparência para widgets de texto herdados restaura seus valores do pai sem deixar um valor de widget sombra, e a atribuição bem-sucedida de campo invalida os caches de página compartilhados
Version 3.132.0
Adicionado (Added)
- O alinhamento opcional de páginas identifica páginas inseridas, excluídas e movidas, com mudanças de texto Unicode com limites, regiões visuais conectadas e overlays de comparação exportáveis
- O merge de navegação transacional preserva a hierarquia de outlines, estilos, ações URI e destinos remapeados através de importações de páginas selecionadas, repetidas e reordenadas
- O provedor opcional de OCR com Tesseract suporta diagnósticos explícitos de dependências, geometria de palavras Unicode, cancelamento e orçamentos de reconhecimento, com verificação de salvar e reabrir da camada pesquisável
Segurança (Security)
- A política RSA-PSS avalia parâmetros completos de assinatura e de chave pública restrita, rejeitando DER malformado e restrições incompatíveis de hash, máscara, salt ou trailer
Corrigido (Fixed)
- A verificação de salvamento de outlines não rejeita mais bookmarks folha por causa de uma diferença de estado de expansão apenas de ramo
Version 3.131.0
Adicionado (Added)
- O WatermarkStamp agora aceita PDFs de destino e de carimbo, um intervalo de páginas de destino e saída somente com números de página, com posicionamento proporcional para tamanhos de página mistos
- O MergePDF agora faz uma prévia das páginas selecionadas de cada entrada e do intervalo de destino antes do merge, e suporta uma única entrada para extração de páginas
Corrigido (Fixed)
- O MergePDF valida cada origem antes de importar e para em entradas ilegíveis, intervalos inválidos, importações com falha ou cancelamento, em vez de salvar um merge incompleto
- O WatermarkStamp preserva seus arquivos de origem e de modelo e salva os números de página de forma confiável mesmo com os dois overlays de carimbo desativados
Alterado (Changed)
- Cada diretório de demos nativas ficou focado em 22 fluxos de trabalho completos, e SecurityAudit e XfdfLab foram movidos para Miscellaneous, com caminhos de projeto e navegação corrigidos
Removido (Removed)
- Removido o passo a passo fixo do AnnotationsLab; a criação, inspeção e troca de anotações continuam cobertas pelas amostras de XFDF e de extração de conteúdo e pelos testes de API
Version 3.130.0
Alterado (Changed)
- Cada diretório de demos nativos foi organizado em torno de 24 fluxos de trabalho completos, com nove tópicos focados de API em Miscellaneous e uma orientação separada para escolher o primeiro demo
- Os exemplos focados de anotação, acessibilidade, fonte, navegação, exportação de texto, renderização de páginas em imagens, preferências de impressão, interação e XFA continuam disponíveis, cada um com seu próprio código-fonte e entradas embutidas
Removido (Removed)
- Os projetos minimalistas CJKTextLab e RTLTextLab foram removidos; a criação de conteúdo Unicode continua disponível no CreatePDF, e as APIs de texto com shaping continuam documentadas na referência de API
Corrigido (Fixed)
- Corrigida a falha do passeio pela API de acessibilidade do C++Builder ao exportar seu script de fala
- Corrigido o exemplo de anotação do C++Builder, que usava offsets de array incorretos para as coordenadas de destaque
Version 3.129.0
Alterado (Changed)
- Cada demo nativo agora é autossuficiente: a lógica de exemplo foi movida para os projetos que a usam, os PDFs de vitrine foram embutidos nos projetos de visualização e extração correspondentes, e o diretório Demo/Shared foi removido
- Passeios por recursos offline, pré-visualizações ao vivo, formulários editáveis, relatórios já preenchidos, anexos, navegação, preferências de impressão e inspeção de XFA estático continuam disponíveis quando os projetos são copiados de forma independente
- O FontProperties agora abre com métricas reais de fonte e de caracteres já exibidas, e analisa imediatamente o primeiro objeto de texto depois de abrir outro documento
Corrigido (Fixed)
- O posicionamento e o plano de fundo da barra de experiência do PDFViewer foram alinhados entre as variantes nativas, e o FontProperties agora libera sua associação com o visualizador antes de encerrar
Version 3.128.0
Adicionado (Added)
- Adicionada uma vitrine de demo offline de seis páginas com texto real, gráficos vetoriais, imagens incorporadas, uma tabela, campos AcroForm, favoritos, links, anotações e anexos
- Adicionadas experiências de visualização em um clique para pesquisa de texto, layouts de duas páginas, leitura noturna, inspeção de documentos e exploração de formulários em todas as variantes nativas do PDFViewer
Alterado (Changed)
- O CreatePDF agora abre uma pré-visualização ao vivo de duas páginas com metadados editáveis e opções de conteúdo, objetos reais de imagem e anotação, e uma página Unicode opcional antes de salvar
- Os exemplos focados de visualização, pesquisa, extração, formulários e navegação agora abrem fluxos de trabalho já preenchidos; os exemplos de anexos, preferências de impressão e XFA estático incluem dados reais específicos de cada recurso
Corrigido (Fixed)
- Corrigidos o ciclo de vida e o tratamento de foco do visualizador durante inicialização, substituição de documentos, regeneração de pré-visualização e encerramento
- Corrigido o editor de valores do FormFill do Lazarus, que permanecia desabilitado depois que o primeiro campo era selecionado na inicialização
- Corrigidas a vinculação de documentos e os relatórios de extração do SearchAndSelect, que omitiam campos de formulário nas páginas posteriores ou consultavam cabeçalhos de arquivo indisponíveis para amostras geradas em memória
Version 3.127.0
Alterado (Changed)
- Os demos MultiPageViewer agora usam as APIs de seleção de texto e de área de transferência embutidas no visualizador, mantendo a seleção consistente entre os layouts de página e removendo o modo separado de seleção por duplo clique
- O guia de exemplos mapeia todos os 35 tópicos de demo para seus fluxos de trabalho distintos, e os exemplos de console de acessibilidade, intake e preflight do Delphi e do Lazarus compartilham suas implementações em Pascal
Adicionado (Added)
- O XfdfLab agora pode salvar o PDF depois de importar XFDF: a GUI do Delphi oferece Save PDF, e as variantes de console aceitam um segundo caminho de saída explícito
Corrigido (Fixed)
- Os demos MultiPageViewer do C++Builder e do Lazarus abrem sem propriedades de formulário não suportadas, e todos os demos MultiPageViewer desconectam seu documento antes de fechar
- O workbench de acessibilidade do Lazarus gera miniaturas JPEG das páginas para seu relatório de revisão em HTML
- Os demos ExtractImages criam um exemplo de duas páginas contendo objetos de imagem incorporados reais, de modo que o fluxo de extração padrão produz quatro imagens
- O exemplo de console de round-trip XFDF preserva o conteúdo das anotações e os dados de autor, e rejeita caminhos de saída PDF conflitantes ou já existentes antes de gravar a saída
Version 3.126.2
Corrigido (Fixed)
- A visualização de XFA completo agora funciona com as configurações padrão de seleção de texto, substitui o texto selecionado durante a digitação, respeita campos somente leitura e eventos de formulário desativados, e atualiza os handles de página exibidos após mudanças de layout dinâmico
- As bibliotecas V8 do Windows rejeitam atributos XDP malformados, atributos duplicados, uso inválido de namespace e declarações XML incompatíveis antes de alterar o stream XFA salvo
Segurança (Security)
- A análise de revisões de assinatura preserva a propriedade do conteúdo da página quando widgets e objetos de aparência referenciam o mesmo grafo de objetos, impedindo que edições posteriores na página sejam aceitas como atualizações permitidas de formulário ou anotação sob DocMDP
- Os bloqueios de FieldMDP continuam em vigor quando um campo bloqueado e uma anotação compartilham o mesmo objeto de valor indireto
Version 3.126.1
Corrigido (Fixed)
- A repaginação dinâmica do XFA agora atualiza
TPdf.PageCounteOnXfaPageCountChangedcom o total real de páginas depois que páginas são adicionadas ou removidas, mantendo a navegação do host em sincronia com o layout do formulário - As bibliotecas V8 do Windows atualizadas recalculam a geometria dos widgets de entrada após mudanças de layout dinâmico do XFA, mantendo texto e áreas de acerto de entrada alinhadas quando campos mudam de página
Version 3.126.0
Adicionado (Added)
- As bibliotecas V8 Win32 e Win64 atualizadas preservam comentários XML e processing instructions fora dos datasets ativos e pacotes de formulário ao salvar documentos XFA single-stream suportados, incluindo entradas em UTF-8 e UTF-16
Corrigido (Fixed)
- O salvamento de XFA single-stream rejeita codificação UTF-8 ou UTF-16 inválida, tags incompletas, referências de entidade inválidas e processing instructions malformadas, em vez de reescrever silenciosamente essas entradas; construções não suportadas em pacotes de dados ativos, declarações DTD e XMLDSig continuam sendo falhas explícitas de salvamento
- Copiar, recortar e colar de formulário no visualizador tentam novamente por um breve período quando outra thread ou aplicação mantém a área de transferência do Windows ocupada, deixando a contenção transitória se dissipar; um recorte que falha ainda preserva o texto original do campo
Version 3.125.3
Corrigido (Fixed)
- As bibliotecas
pdfium.dllcomuns Win32 e Win64 atualizadas agora relatam falha quando a gravação final do PDF em buffer falha, alinhando-se ao reparo entregue antes nas bibliotecas V8
Version 3.125.2
Corrigido (Fixed)
- As bibliotecas V8 do Windows atualizadas preservam o texto XFA editado ao salvar e reabrir, incluindo valores vazios, espaços em branco originais, quebras de linha e caracteres Unicode suplementares, tanto em arrays de pacotes quanto em documentos XDP single-stream suportados
- Erros de exportação de pacotes XFA e falhas finais do writer em buffer agora relatam falha de salvamento nas bibliotecas V8 atualizadas, sem limpar o estado de modificação do documento; documentos single-stream contendo construções XML não suportadas ou assinaturas XML são rejeitados
- As bibliotecas V8 atualizadas preservam a plataforma V8 e o isolate fornecidos explicitamente pela aplicação host durante a inicialização e a destruição do PDFium
- Um caminho explícito em
LibraryNameagora seleciona exatamente esse runtime em qualquer modo de engine, incluindoEnableV8Engine=True; um caminho explícito inexistente falha em vez de carregar outra biblioteca do pacote
Version 3.125.1
Corrigido (Fixed)
ValidatePdfFilesParallelnão corrompe mais a engine PDFium compartilhada: as worker threads abriam e inspecionavam documentos em paralelo, o que fazia alguns documentos falharem com erros de carregamento ou access violations e podia derrubar o processo ou quebrar operações PDF posteriores; a parte PDFium de cada documento agora é processada uma por vez, enquanto a avaliação de regras continua rodando em paralelo- Um documento que não pode ser aberto durante a validação em lote agora relata o erro real de carregamento, em vez da mensagem subsequente "não há documento PDF ativo"
Version 3.125.0
Adicionado (Added)
PdfLibraryConfigurationSupportErrorinforma se umaTPdfLibraryConfigurationpode ser usada com um build do PDFium com determinadas capacidades de Skia e Fontations
Corrigido (Fixed)
- Solicitar
prpSkiaem um build do PDFium sem Skia, oupfbpFontationsem um build sem Fontations, agora faz o carregamento da biblioteca levantarEPdfErrorem vez de atingir uma checagem nativa que parava o processo ou deixava o PDFium meio inicializado; a configuração permanece não selada, então a aplicação pode escolher outras configurações e carregar de novo
Version 3.124.0
Alterado (Changed)
- A validação PAdES agora aplica os signature suites da ETSI TS 119 312 às assinaturas RSA, em vez de aceitar qualquer algoritmo RSA:
AlgorithmPolicyStatusficapcsInvalidpara os digests MD2, MD4 e MD5 epcsIndeterminatepara SHA-1 e digests de 112 bits como o SHA-224, que não são mais aceitos para validação atual; assinaturas SHA-1 mantêm o resultado geral de integridade e são marcadas para revisão em vez de rejeitadas - Uma assinatura RSA cujo
digestAlgorithmdifere do digest fixado pelo seu algoritmo de assinatura (por exemplo sha256WithRSAEncryption sobre um digest SHA-1) agora é reportada comoppeiSignatureAlgorithmMismatche falha na integridade, assim como algoritmos de assinatura RSA usados sobre uma chave de assinante não RSA - Assinaturas RSA cujo certificado do assinante não é encontrado agora reportam
pcsIndeterminate, alinhando-se ao comportamento já existente do ECDSA; digests não reconhecidos e OIDs RSA que não são de assinatura reportampcsUnsupported - Assinaturas RSA PKCS #1 v1.5 com digests SHA3 e o identificador legado OIW sha1WithRSASignature agora são reconhecidas como RSA
Version 3.123.0
Adicionado (Added)
PdfNativeRendererTypeinforma qual renderer umaTPdfRendererPreferenceseleciona para um determinado build do PDFium, comprpDefaultresolvendo para Skia em runtimes com Skia habilitado e para AGG caso contrário
Corrigido (Fixed)
- Habilitar
BrotliEnabledouIsolatePerDocumentemConfigurePdfLibrarynão troca mais a renderização de Skia para AGG quando a preferência de renderer fica emprpDefault; os runtimes do pacote com Skia habilitado agora mantêm o renderer padrão, então a saída de página não muda mais com essas opções não relacionadas
Version 3.122.2
Corrigido (Fixed)
- Builds Free Pascal e Lazarus agora passam nomes de arquivo e senhas ao PDFium como UTF-8 em todo caminho de carregamento (arquivo, memória, stream customizado e carregamento progressivo), então documentos em pastas com nomes em chinês, japonês ou outros caracteres não ASCII, e documentos criptografados com senhas não ASCII, abrem mesmo quando o programa não usa o modo de string UTF-8 do Lazarus
Version 3.122.1
Corrigido (Fixed)
LastLoadReportagora é substituído em todo carregamento que falha: umActive:= Trueque falha, que deixa o componente inativo sem levantar exceção, e chamadas simples deLoadDocumentouLoadCustomDocumentque falham reportamplsFailedcom o texto do erro, então código em lote que reutiliza umTPdfnão vê mais o arquivo anterior reportado como carregado- A página de ajuda de
Activeagora descreve o comportamento real de falha (sem exceção, componente permanece inativo, detalhes emLastLoadReport) e queFileNamesó pode ser alterado com o componente inativo
Version 3.122.0
Adicionado (Added)
EPdfAssocFilesErroremFPdfAssocFilesinforma por queInjectAssociateFilesnão pôde injetar: sem trailer ou catalog legíveis na origem, ou umaTargetPagenegativa ou que aponta para uma página inexistente; o stream de destino permanece intacto
Alterado (Changed)
SaveAsWithAssociateFileseSaveAsWithAssociateFilesToStreamagora levantamEPdfErrorquandoTAssocFilesOptions.TargetPageestá fora de0..PageCount; esses valores antes eram anexados ao catálogo do documento, ao contrário do comportamento documentado
Corrigido (Fixed)
SaveAsWithAssociateFileseSaveAsWithAssociateFilesToStreamagora retornamFalsequando o documento salvo não pode ser analisado para injeção, em vez de gravá-lo inalterado e retornarTruesem os arquivos solicitadosSaveAsWithAssociateFilesnão trunca mais um arquivo de destino existente antes de a saída ser produzida; um salvamento rejeitado ou com falha deixa o arquivo intacto
Version 3.121.4
Corrigido (Fixed)
- Arquivos associados em nível de página (
TAssocFilesOptions.TargetPage) agora são anexados à página naquela posição na ordem de páginas do documento; antes, os arquivos podiam parar em uma página diferente quando os objetos de página eram armazenados no arquivo em uma ordem diferente da exibida, por exemplo após páginas reordenadas ou inseridas
Version 3.121.3
Corrigido (Fixed)
- Arquivos associados salvos com
SaveAsWithAssociateFilesagora mantêm intactos nomes de arquivo e descrições em chinês, japonês e outros caracteres não ASCII:/UFe/Descsão gravados como text strings Unicode do PDF, em vez de convertidos pela code page ANSI do sistema (Delphi) ou emitidos como bytes UTF-8 brutos (Free Pascal) - O nome de arquivo legado
/Fagora é sempre printable ASCII portátil, com caracteres não ASCII substituídos por_, então leitores que decodificam/Fcom a própria code page não mostram mais mojibake
Version 3.121.2
Corrigido (Fixed)
- Arquivos associados agora codificam tipos MIME como nomes PDF válidos, então valores como
text/plainnão geram mais dicionários de arquivos embutidos malformados nem impedem a validação PDF/A-3
Version 3.121.1
Corrigido (Fixed)
- Ler uma anotação e gravar as alterações de volta não cria mais fluxos de aparência rollover e down vazios quando esses fluxos estão ausentes, preservando os requisitos de aparência de anotações do PDF/A
Version 3.121.0
Adicionado (Added)
- A verificação CMS do OpenSSL consegue recuperar certificados intermediários AIA e CRLs via HTTP(S) quando
OnlineRetrievalestá habilitado, com limites compartilhados de timeout, requisições e tamanho de resposta; os certificados baixados permanecem não confiáveis até que a cadeia de confiança configurada os valide - A recuperação online usa WinHTTP no Windows e o libcurl disponível no FPC Unix, preserva a validação de certificado HTTPS e expõe configurações de transporte não suportadas por meio dos diagnósticos de capacidade existentes
Corrigido (Fixed)
- A reconstrução de cross-reference clássica aloca a tabela de saída uma única vez e preenche os slots de objetos diretamente, evitando trabalho quadrático para números de objetos esparsos grandes, mantendo os limites de recursos do parser e as gerações mais recentes de objetos
- A saída PDF/X-1a exige um perfil de impressora ICC v2 CMYK estruturalmente válido em vez de embutir silenciosamente o perfil RGB padrão; perfis inválidos falham antes que um arquivo de destino existente seja aberto para substituição
- A validação PDF/X-1a confere o perfil embutido e sua declaração de quatro componentes, e os relatórios de preflight identificam perfis de saída inválidos; os rótulos de output-condition padrão seguem o perfil fornecido, enquanto rótulos explícitos do chamador são preservados
Version 3.120.4
Corrigido (Fixed)
- O modo em lote da demo de extração de tabelas volta a processar todos os PDFs da pasta: a instância de documento compartilhada continuava ativa entre os arquivos, então o segundo arquivo e os seguintes disparavam um erro de atribuição e eram reportados como falha; cada documento agora ganha a própria instância nas edições Delphi, Lazarus e C++Builder
- O documento de exemplo da demo de watermark mantém as páginas na ordem de criação (1, 2, 3, 4) em vez de rodar a primeira página para o fim por meio de uma chamada de insert-at-index
- As demos XFA e XFDF reportam a falha de abertura de documento como mensagem em vez de uma exceção não tratada, a demo de attachments consegue iniciar um novo documento com um já carregado, e o viewer Lazarus libera o bitmap que salva
- A demo de impressão Delphi agora aplica os controles de orientação, duplex, tons de cinza, qualidade e DPI ao print job, respeita o número de cópias escolhido no diálogo de impressão, pula as páginas que falham ao renderizar e restaura a preview depois de imprimir
- Demos interativas cujo loader engolia falhas de abertura não mostram mais um estado de carregado enganoso, os arquivos de saída da extração ganham BOM UTF-8, as demos de console CJK e RTL trocam o console para UTF-8 antes de imprimir o texto extraído, e o campo de confidence faz o parse de decimais independentemente do locale do sistema
- O teste de timestamp PAdES agora realmente verifica que o validador chega ao nível B-T depois da injeção do timestamp de assinatura, com um documento de teste de ByteRange autoconsistente
- Os testes de cobertura de API e de PDF/A não tratam mais qualquer falha de carregamento como skip de ambiente quando o pdfium.dll está carregado, e um novo teste de regressão cobre a descriptografia de documentos cujos valores de string são serializados como literal strings por geradores de terceiros
Version 3.120.3
Corrigido (Fixed)
EncryptDocumentBytesnão descarta mais todos os objetos da revisão base quando o PDF de origem foi salvo incrementalmente: a cadeia de cross-reference clássica agora é percorrida por/Prevdo mais novo para o mais velho, com as entradas mais novas vencendo, a origem é rejeitada quando já está criptografada, uma palavra-chavestreamprecisa fechar um dicionário antes de ser tratada como dados de stream, e a extensão do objeto final é delimitada pelo xref da origem em vez do primeiroendobjdentro dos bytes dele- Documentos criptografados cujos valores de string são serializados como literal strings, produzidos por geradores de terceiros, agora são descriptografados em vez de falhar com um erro de autenticação
- A injeção de marcadores PDF/E não numera mais o dicionário Info sintetizado com o mesmo número do stream de perfil ICC embutido quando o trailer da origem não tem
/Info, o que fazia o xref incremental apontar/DestOutputProfilepara o objeto errado - A validação PDF/X compara o valor XMP
pdfxid:GTS_PDFXVersionsem os espaços em branco das extremidades, então XMP na forma de elemento com preenchimento legítimo não reporta mais uma divergência falsa com o Info - A validação PDF/UA reconhece XMP
pdfuaid:partna forma de atributo, expande object streams antes das varreduras de bytes como fazem os validadores das outras normas, confere o bit de criptografia/Ptambém em documentos cross-reference-stream e exige um valordc:titlenão vazio; a injeção de marcadores não emite mais uma entrada de título vazia - A injeção de marcadores PDF/VT não coleta e reescreve mais todos os objetos de página duas vezes quando a origem carrega uma hierarquia DPart quebrada que falhou na validação depois que a lista de páginas já tinha sido preenchida
- Assinar em nível PAdES B-T ou superior sem um
TsaUrlagora dispara erro em vez de produzir silenciosamente uma assinatura B-B, e o document time-stamp B-LTA deriva o próprio nonce em vez de reenviar o de quem chama - A injeção de CMS signature-time-stamp rejeita entrada com vários signatários em vez de descartar silenciosamente todos os SignerInfo depois do primeiro, a versão do SignedData vira 3 com um sid subjectKeyIdentifier,
certReq FALSEé omitido das requisições de timestamp conforme o DER, e uma falha de transporte WinHTTP no meio do corpo é reportada como erro de transporte em vez de um corpo DER truncado - A incorporação de fontes do sistema resolve a face real da TrueType Collection para a família solicitada e a extrai como uma fonte independente, então pedir uma face que não é a primeira de um
.ttc(por exemplo NSimSun) não incorpora e renderiza mais a face 0 BuildToUnicodeCMappareia glifos com caracteres de surrogate pair corretamente e emite mapeamentos suplementares como entradas bfchar, em vez de deslocar todas as entradas depois do primeiro caractere astral- Inserção de texto com shaping, texto CID e OCR conferem o resultado de inserção de página antes de registrar o objeto para rollback, então uma inserção que falha não pode mais deixar um handle pendente que seria destruído duas vezes
- A detecção da palavra-chave stream no compressor e no reparo ToUnicode aceita o final de linha com CR isolado permitido pela ISO 32000-1 7.3.8.1
Alterado (Changed)
- O build do pacote trial Win64x do C++Builder remove um
PDFiumPas.libCOFF obsoleto deixado por um build completo anterior para que os dois sabores de import library não sejam embarcados juntos, o instalador FULL exclui arquivos locais de desenvolvimento (packagefiles.xml, documentos de status) da sua regra pega-tudo, e os builds de demo pós-instalação fixam a raiz do IDE pela variávelPDFiumPas_BDS_ROOTque os scripts de build de fato leem
Version 3.120.2
Corrigido (Fixed)
- Texto colocado com
AddText,SetText, geração de layout e a camada de busca de OCR agora é extraído com os code points exatos tanto no documento em memória quanto depois de um save: espaços não voltam mais como U+00A0 e hífens não como U+00AD no build atual do PDFium - Fontes do sistema são incorporadas como fontes CID indexadas por code point, com um CID por caractere Unicode e um
CIDToGIDMapexplícito, então um glifo compartilhado por vários caracteres (espaço e non-breaking space, hífen e soft hyphen, Omega e símbolo de Ohm) faz round-trip fiel de cada um deles em qualquer viewer; fontes sem subtabela cmap Unicode mantêm o caminho de incorporação anterior
Version 3.120.1
Corrigido (Fixed)
- Documentos salvos com fontes subsetadas não corrompem mais o texto extraído ao recarregar: o ToUnicode CMap que o pdfium serializa podia mapear um CID para dois code points diferentes (espaços como U+00A0, hífens como U+00AD), e todo save completo agora repara esses mapeamentos contraditórios in place, mantendo a estrutura do CMap byte a byte idêntica, de modo que o leitor PDFium, o MuPDF e o qpdf extraem todos os caracteres originais
- Saves incrementais, sparse updates e documentos cross-reference-stream nunca são reescritos pelo reparo e passam intactos; arquivos sem mapeamento contraditório são copiados byte a byte
- O fixture de teste
sample.pdfversionado foi regerado pelo caminho de save reparado, e os testes de load policy agora localizam entradas de xref dinamicamente em vez de fixar offsets do fixture no código
Version 3.120.0
Adicionado (Added)
- Bookmarks reportam o estilo de texto do outline:
TBookmark.Stylecarrega as flags de itálico e negrito lidas pelo novo bindingFPDFBookmark_GetStyle, eBookmarkStyleFeaturesAvailablediz se o pdfium.dll carregado o exporta - Attachments expõem o relationship de associated file do PDF 2.0:
AttachmentRelationship[], o campoRelationshipdeTPdfAttachmentMetadatae deTPdfAnnotationAttachmentleem o nome/AFRelationshippelo novo bindingFPDFAttachment_GetAFRelationship, protegido porAttachmentRelationshipFeaturesAvailable GetObjectRenderedStrokePatternrasteriza o tiling pattern com que um objeto de caminho traça o contorno em um bitmap de propriedade do chamador pelo novo bindingFPDFPageObj_GetRenderedStrokePattern;StrokePatternRenderingFeaturesAvailablereporta a exportaçãoTPdfLibraryConfiguration.IsolatePerDocumentmapeia a flagm_IsolatePerDocumentda versão 7 deFPDF_LIBRARY_CONFIGpara que builds com V8 possam dar um isolate a cada documento;ConfigurePdfLibraryrejeita a flag junto com umV8Isolateexplícito
Alterado (Changed)
- Todas as 476 exportações públicas dos cabeçalhos PDFium atuais estão vinculadas; os três novos pontos de entrada carregam de forma tolerante, então implantações com um pdfium.dll mais antigo continuam funcionando, com os recursos correspondentes reportando resultados vazios ou
nil
Version 3.119.1
Corrigido (Fixed)
- A validação de trust offline do Windows também restringe a busca de revogação a dados em cache, evitando requisições de rede implícitas de CRL ou OCSP quando a busca online está desabilitada
- Falhas de revogação no Windows preservam o erro independente de trust da cadeia e expõem reasons de revogação e diagnósticos nativos nos resultados PAdES e nos evidence reports
Version 3.119.0
Adicionado (Added)
- A validação de trust PAdES e os evidence reports expõem reasons de revogação e erros nativos separados para assinaturas de documento e timestamps, incluindo campos JSON e colunas CSV anexadas
Version 3.118.0
Adicionado (Added)
- Os resultados de verificação CMS expõem
RevocationReasoneRevocationError, com diagnósticos OpenSSL para CRLs locais expiradas, indisponíveis e inválidas
Corrigido (Fixed)
- O OpenSSL reporta certificados explicitamente revogados como inválidos quando o trust da cadeia tem sucesso e a verificação de CRL local confirma a revogação, preservando resultados separados de assinatura e trust
Version 3.117.1
Corrigido (Fixed)
- Saves com versão explícita aceitam formulários multipágina válidos com cross-reference streams comprimidos com preditor, em vez de reportar incorretamente uma seção de cross-reference malformada
Version 3.117.0
Adicionado (Added)
- A detecção de tabelas lê bordas e sombreamento desenhados como retângulos preenchidos: uma caixa preenchida não mais espessa que a nova
MaxRulingThicknessvira uma linha de grade, e uma caixa preenchida maior contribui com as suas bordas, de modo que tabelas exportadas do Word, do Google Docs e de navegadores agora são encontradas como grades com linhas e linhas de legenda mescladas, em vez de fragmentos de espaço em branco.DetectFilledRulingsdesliga esse comportamento - As coordenadas das linhas de grade são ajustadas dentro de
RulingSnapToleranceantes de as grades serem montadas, o que une pedaços de borda por célula, bordas duplicadas e células sombreadas separadas por um pequeno vão em uma única tabela - Linhas de grade dentro de form XObjects participam da detecção por meio das matrizes de objeto combinadas, controlado por
IncludeFormXObjects ExtractDocumentTablesvincula fragmentos de continuação que terminam onde o conteúdo da página acaba e retomam onde o conteúdo da próxima página começa, e não apenas fragmentos que tocam as bordas da página, e mantém uma única linha transbordada como parte da sua cadeia- O TableExtractionLab expõe
DetectFilledRulingsno seu painel de opções nas variantes Delphi, Lazarus e C++Builder
Alterado (Changed)
- A detecção por espaço em branco ignora palavras que já pertencem a uma grade com linhas e exige que cada limite de coluna seja um corredor livre de texto ao longo das linhas que separa, de modo que parágrafos justificados e listas com marcadores deixam de ser relatados como tabelas
- Um candidato a continuação cuja primeira linha é uma única célula cobrindo toda a largura é tratado como uma nova tabela com legenda, e não como a continuação da anterior
MinRowsaceita 1 para grades com linhas; a detecção por espaço em branco mantém o seu piso de duas linhas, e o orçamento padrão deMaxRulingSegmentssobe para 16384, porque caixas de borda por célula chegam em quantidade muito maior do que linhas de grade desenhadas- O texto da célula é montado linha por linha a partir de caixas de palavras sobrepostas, de modo que palavras cujas caixas de glifo diferem em altura preservam a sua ordem da esquerda para a direita
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados de versão do instalador relatam 3.117.0
Version 3.116.4
Adicionado (Added)
- O TableExtractionLab ganha processamento em lote de pastas:
Batch folderexecutaExtractDocumentTablessobre cada PDF de uma pasta selecionada, lista a contagem de tabelas por documento, marca documentos sem camada de texto para OCR e impede que arquivos danificados ou bloqueados abortem a execução Export all CSVgrava cada tabela detectada como<document>-<n>-page<p>-t<i>.csvem uma subpastatablesnas execuções em lote, ou ao lado do documento carregado no caso de um único arquivo- Um seletor de presets de detecção expõe
TPdfTableExtractionOptionsajustados: Default, Compact columns (MinColumnGap4 comAlignmentTolerance5 para exportações apertadas de processadores de texto) e Compact + wide rows (MaxRowGapFactor6 para espaçamento de linha de 1.5-2x) - Documentos que não produzem tabela com o preset Default são tentados uma vez novamente com Compact columns tanto na extração de documento único quanto em lote, e as linhas do lote relatam qual preset produziu o resultado
Corrigido (Fixed)
- A extração em lote abre cada documento na sua própria instância de
TPdfem vez de recarregar um único componente compartilhado, o que elimina falhas silenciosas de carregamento que apareciam como erros de componente inativo no meio de uma execução de pasta
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados de versão do instalador relatam 3.116.4
Version 3.116.3
Alterado (Changed)
- O exemplo TableExtractionLab nas três toolchains agora grava o documento de exemplo gerado como
TableExtractionSample.pdfao lado do executável da demo em vez de mantê-lo apenas em memória; quando a pasta não é gravável, o lab volta ao comportamento anterior em memória e informa isso na linha de status TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador relatam 3.116.3
Version 3.116.2
Corrigido (Fixed)
- A biblioteca parou de compilar em releases mais antigas do Delphi. O helper de tick de 64 bits e os codecs XML de trusted list e de produção chamavam
GetTickCount64eCP_UTF8de units de RTL que só compiladores mais novos trazem, o gravador de HTML de reflow embutia um literal de string CSS além do teto de 255 elementos que esses compiladores impõem a um único literal, e o merge de datasets XFA atribuía entreTBytese um campo de dynamic array comum, o que compiladores pré-XE7 rejeitam. Compiladores mais antigos agora vinculamGetTickCount64do kernel32 e declaramCP_UTF8localmente quando a RTL não o traz, a folha de estilos vai como literais curtos concatenados, e o payload do pacote é copiado elemento a elemento
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador relatam 3.116.2
Version 3.116.1
Adicionado (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLabeDemo\Lazarus\TableExtractionLabtransformam a detecção de tabelas em um único fluxo de trabalho. O lab monta um documento de exemplo com uma tabela com linhas e células de cabeçalho mescladas, uma tabela alinhada por espaço em branco sem linhas desenhadas e uma tabela longa que quebra em um limite de página, depois executaExtractTablesouExtractDocumentTablese lista linhas, colunas, spans, sinalizações de cabeçalho, modo de detecção, confiança e grupos de continuação- O lab exporta a tabela selecionada por meio de
TPdfTable.ToCsveTPdfTable.ToJson, ajustaDetectRuledTables,DetectWhitespaceTables,DetectContinuationseMinConfidencepelo painel de opções e copia o relatório completo para a área de transferência TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados de versão do instalador relatam 3.116.1
Version 3.114.21
Corrigido (Fixed)
- A validação PDF/A relatava uma referência a arquivo externo em qualquer documento que contivesse uma anotação. A ISO 19005-1 §6.1.7 proíbe
/F,/FFiltere/FDecodeParmsno dicionário de um objeto stream, mas a verificação procurava esses nomes no arquivo inteiro, e/Ftambém é a chave de flags de anotação que a §6.5.3 exige em toda anotação. A verificação agora olha apenas dentro dos dicionários de objetos stream
Version 3.114.20
Corrigido (Fixed)
- Assinaturas RSASSA-PSS carregavam parâmetros de algoritmo malformados nos três back-ends de assinatura. A RFC 4055 etiqueta os quatro campos de RSASSA-PSS-params; o comprimento do salt era gravado como um inteiro puro, que um parser lê como o início de outro campo, e o campo final era gravado embora o seu valor seja igual ao padrão que o DER exige que seja omitido. Um verificador ou não conseguia interpretar os parâmetros ou recorria ao salt padrão de 20 bytes enquanto a assinatura usava 32, de modo que assinaturas PSS eram rejeitadas. Assinaturas PKCS#1 v1.5 e ECDSA não foram afetadas
Version 3.114.19
Corrigido (Fixed)
- Pedir um carimbo de data/hora sob um digest diferente de SHA-256 montava uma requisição que declarava esse algoritmo carregando um digest SHA-256, o que uma autoridade de carimbo de data/hora rejeita ou, pior, carimba como recebido. Apenas SHA-256 é calculado, então qualquer outro identificador agora é recusado de imediato; um identificador vazio ainda seleciona o padrão SHA-256. O exemplo PDF Viewer para Lazarus e C++Builder também vinculava um handler de expansão de bookmarks que o seu arquivo de formulário nomeia mas o seu código não define, o que falha quando o formulário é carregado; o handler foi portado do exemplo Delphi
Version 3.114.18
Corrigido (Fixed)
- Os exemplos XFA Lab e XFDF Lab para Delphi, e o exemplo XFA Lab para Lazarus, falhavam na inicialização. Cada um constrói os seus controles a partir do handler de criação do seu formulário, mas o recurso do formulário não estava presente nem vinculado, então criar o formulário principal gerava um erro de recurso não encontrado e o handler nunca executava. Os três agora carregam o arquivo de formulário e a diretiva que o embute
Version 3.114.17
Corrigido (Fixed)
- Dois recursos nativos eram maltratados quando uma operação falhava no meio do caminho. Uma renderização de miniatura que falhava liberava o bitmap de destino antes de fechar a renderização nativa, e quando a renderização estava desenhando diretamente nos pixels do próprio bitmap, a desmontagem então lia memória que já havia sido liberada. Uma alocação de bitmap que falhava em
AddBitmapdeixava o objeto de imagem recém-criado sem dono e sem como alcançá-lo novamente
Version 3.114.16
Corrigido (Fixed)
- Ler texto FDF produzia os caracteres errados acima de
0x7E. A tabela PDFDocEncoding do Anexo D.2 da ISO 32000-1 começa em0x80com o bullet, mas o mapeamento a iniciava em0x7F, de modo que o bloco inteiro até0x9Festava deslocado em uma posição: uma dagger era lida como bullet, um em dash como reticências, e assim por diante até o zcaron, que caía fora do fim por completo. O Euro em0xA0também faltava e voltava como um espaço sem quebra. Nomes e valores de campos em FDF importado agora são decodificados corretamente
Version 3.114.15
Corrigido (Fixed)
- Validar confiança em um documento cujo trailer ou catálogo não pode ser lido gravava além do fim de um array. O passe de conformidade desiste sem registrar nenhuma assinatura nesse caso, enquanto o coletor que roda em seguida trabalha direto sobre o fluxo de bytes e ainda consegue encontrar dicionários de assinatura, de modo que uma entrada era gravada por dicionário encontrado em um array que não comportava nenhuma. A contagem agora é limitada ao que o passe de conformidade produziu
Version 3.114.14
Corrigido (Fixed)
- Executar um plano de reparo PDF/A aplicava etapas que o planejador havia bloqueado. Uma etapa é bloqueada quando o documento carrega assinaturas, a etapa as invalidaria e quem chamou não permitiu isso; o executor testava apenas o nível de segurança da etapa, que não expressa essa condição, de modo que um documento assinado podia ter as suas assinaturas invalidadas por um reparo automático que o plano já havia recusado. Etapas bloqueadas agora são puladas e contadas como puladas
Version 3.114.13
Corrigido (Fixed)
- Adicionar um carimbo de data/hora de assinatura a um valor CMS cujo conjunto de certificados era maior que 127 bytes — ou seja, todo certificado real — corrompia o resultado. O helper que localiza o início de uma estrutura aninhada caminhava para trás sobre os octetos de comprimento e confundia o último com o primeiro, de modo que a fatia que ele cortava começava bem antes da estrutura solicitada. O comprimento do cabeçalho agora é derivado do comprimento do conteúdo, o que o DER afirma sem ambiguidade. As autoverificações deixaram passar porque os certificados dos seus fixtures eram pequenos o bastante para usar a forma curta
Version 3.114.12
Corrigido (Fixed)
- Atributos assinados eram emitidos na ordem em que foram construídos, em vez de ordenados pelas suas codificações, o que a X.690 §11.6 exige de um DER SET OF. Um verificador que recodifica o conjunto de atributos antes de calcular o digest — como o OpenSSL e o BouncyCastle fazem — calculava, portanto, um digest diferente e reportava uma assinatura PAdES íntegra como inválida. Assinaturas que esta library produz agora verificam nessas stacks; a validação pela camada do Windows não foi afetada, porque ela calcula o digest dos bytes como recebidos
Version 3.114.11
Corrigido (Fixed)
- Um INTEGER DER negativo mais largo que dois bytes de conteúdo era codificado com o valor errado. O gravador emula um deslocamento aritmético reinjetando o sinal após um deslocamento lógico, mas a máscara que ele usava ligava todos os bits acima do byte baixo em vez de apenas o byte que o deslocamento tinha liberado, de modo que a magnitude ainda contida nos bytes restantes era sobrescrita. O valor -100000 era codificado como -34464, por exemplo. Nonces de requisição de carimbo de data/hora e qualquer outro inteiro assinado desse tamanho agora são codificados corretamente
Version 3.114.10
Corrigido (Fixed)
- A validação PDF/A nunca relatava a parte de alfa constante da regra de transparência da ISO 19005-1 §6.4. O helper constrói a sua chave de busca prefixando uma barra, e quem chamava passava uma também, então ele procurava por
//CAe não encontrava nada. As duas verificações de alfa também aceitavam apenas os textos exatos1e1.0, o que sinalizava um/CA 1.00totalmente opaco como violação; um valor de um agora é reconhecido independente da grafia
Version 3.114.9
Corrigido (Fixed)
- A ação URI no nível de página devolvia texto embaralhado. O caminho chega da camada nativa como bytes UTF-8 e era gravado direto em uma wide string, o que emparelha os bytes em unidades de código de 16 bits e deixa o resto do buffer com o que estiver na memória.
GetPageActionURIagora decodifica os bytes da mesma forma que o caminho da ação no nível de documento já fazia
Version 3.114.8
Segurança (Security)
- Em alvos que não sejam o Windows, os bytes aleatórios por trás de cada chave de criptografia, salt e vetor de inicialização vinham da PRNG do runtime, cuja semente é uma constante a menos que o programa chame
Randomize. Todo processo produzia, portanto, a mesma chave de criptografia de arquivos, os mesmos salts/UEe/OE, os mesmos bytes de/Permse os mesmos nonces AES-GCM, o que torna a saída criptografada de um build Free Pascal em Linux ou macOS trivialmente recuperável e repete um nonce GCM sob uma chave fixa. Os bytes agora vêm de/dev/urandom, e um pool de kernel indisponível levanta exceção em vez de recorrer a fallback, como umCryptGenRandomindisponível já fazia no Windows
Version 3.114.7
Corrigido (Fixed)
- Um object stream malformado podia fazer os pontos de entrada de compressão e reparo lerem além do fim do buffer decodificado. Os offsets de membros que um stream declara agora são verificados quanto a intervalo e ordem crescente assim que o cabeçalho é interpretado, uma contagem declarada de membros maior do que o cabeçalho comporta é rejeitada antes que qualquer memória seja reservada, e o intervalo de bytes de cada membro é validado antes de o espaço em branco final ser aparado, e não depois
Version 3.114.6
Corrigido (Fixed)
- Externalizar imagens inline produzia um image XObject inutilizável. O dicionário era gravado com uma barra sobrando antes da sua primeira chave, o que abria um nome vazio e empurrava cada chave para o valor da chave anterior, e a tabela de abreviações inline mapeava Decode para
Gem vez deD, de modo que um array/Dera descartado e a abreviação de valor de DeviceGray era tomada por uma chave. Imagens retiradas de um content stream agora carregam um dicionário bem formado e mantêm o seu array Decode
Version 3.114.5
Corrigido (Fixed)
- O shaper HarfBuzz atribuía comprimentos de cluster aos glifos errados em runs da direita para a esquerda e dava comprimento um a glifos que compartilham um cluster, como marcas e componentes de ligadura. O
ClusterLengthde cada glifo agora vai do início do seu cluster ao próximo cluster em ordem lógica, em qualquer direção, de modo que o mapeamento de caractere para glifo de texto árabe e hebraico coincide com o que o back-end Uniscribe relata
Version 3.114.4
Corrigido (Fixed)
- O transporte de carimbos de data/hora via libcurl passava as suas opções numéricas e lia o código de status HTTP como valores de 32 bits, enquanto a libcurl recebe e devolve um
longde C, que tem 64 bits no Linux e no macOS. A consulta de status podia sobrescrever os quatro bytes ao lado do seu destino na pilha, e os valores de opções dependiam do que a metade superior do registrador estivesse guardando. Ambos agora usam a largura delongda plataforma, de modo que oFPdfTsaFpcé seguro em alvos LP64
Version 3.114.3
Corrigido (Fixed)
- O back-end PKCS#11 copiava os bytes brutos do rótulo de um objeto de token direto para uma string, o que no Delphi aterrissa bytes UTF-8 em unidades de código UTF-16. Um certificado selecionado por meio de
TPdfPkcs11Options.CertificateLabelnunca podia corresponder, portanto, e oEnumerateCertificatesrelatavaLabelTextembaralhado. Os rótulos agora são decodificados como o UTF-8 que o padrão define, e o PIN entregue aoC_Loginé codificado como UTF-8 em vez de ser estreitado pela codepage do host, de modo que um PIN não ASCII chega intacto ao token
Version 3.114.2
Corrigido (Fixed)
- O assinador do Keychain do macOS perguntava a
SecKeyIsAlgorithmSupportedpela operação errada ao decidir se uma chave aceita RSASSA-PSS: a consulta nomeava a operação de descriptografia em vez de assinatura, então a resposta era sempre não e toda assinatura RSA silenciosamente recorria a PKCS#1 v1.5. Uma chave que suporta PSS agora assina com PSS comoTPadesSignerOptions.PaddingSchemepede, e o argumento de operação é passado na largura que o framework declara
Version 3.114.1
Corrigido (Fixed)
- Pares de colchetes aninhados em texto da direita para a esquerda resolviam para a direção errada. A regra BD16 da UAX #9 processa os pares na ordem em que os seus colchetes de abertura aparecem, e um par resolvido pelo N0 passa a ser o contexto forte precedente para um par que se abre depois dele; os pares, porém, estavam sendo processados na ordem em que os seus colchetes de fechamento os concluíam, de modo que um par interno podia seguir a letra que ele envolve em vez do contexto que o par externo estabeleceu. Texto como uma frase árabe ou hebraica contendo um parêntese com um colchete aninhado agora é disposto da forma como o leitor espera
Version 3.114.0
Adicionado (Added)
FPdfCryptoSslverifica assinaturas PDF e tokens de carimbo de data/hora por meio do OpenSSL, o que fecha a última lacuna de plataforma na validação de assinaturas: o Linux não tinha nenhum back-end de verificação CMS.ConfigureSslCmsVerifiero instala, a libcrypto é resolvida por nome em tempo de execução de modo que nada é vinculado a ela, e tanto a série 1.1 quanto a 3.x fazem o bind- A assinatura e a cadeia de certificados são avaliadas em passes separados, de modo que uma assinatura íntegra sob uma cadeia que não alcança uma âncora de confiança é relatada como assinatura válida com confiança inválida, e não como assinatura quebrada
ConfigureSslTrustAnchorsadiciona âncoras de confiança DER ao repositório do sistema, eConfigureSslCrlsfornece as CRLs que uma verificação de revogação pode consultar. A revogação só conta como verificada quando uma CRL está de fato presente, porque o OpenSSL não busca nenhuma por conta própria; sem nenhuma fornecida, o resultado diz unsupported em vez de deixar passar uma cadeia não verificadaSslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersioneSslAbiLayoutrelatam o que fez bind e o que não fez, eConfigureSslLibraryPathaponta o back-end para uma biblioteca específica quando os padrões da plataforma não encontram uma
Version 3.113.0
Adicionado (Added)
TPdfKeychainCmsVerifierverifica assinaturas PDF e tokens de carimbo de data/hora no macOS por meio deCMSDecodere SecTrust, de modo que a validação de assinaturas não é mais exclusiva do Windows.ConfigureKeychainCmsVerifiero instala, e a mesma unit agora cobre as duas metades do suporte a macOS da forma comoFPdfCryptoWinfaz para o Windows- A verificação de revogação é respeitada: quando solicitada, uma política de revogação se junta à política básica de X.509, e desativar a recuperação online restringe a avaliação às respostas em cache. Pontos de verificação de progresso são disparados para os estágios de assinatura, cadeia, recuperação online e revogação exatamente como o back-end do Windows os relata
KeychainVerificationAvailablerelata o suporte a verificação separadamente da assinatura, já que as duas precisam de símbolos de framework diferentes e uma pode estar presente sem a outra
Version 3.112.0
Adicionado (Added)
FPdfCryptoMacassina PAdES com uma identidade do Keychain do macOS, a contraparte do repositório de certificados do Windows: o certificado e sua chave privada vêm do Keychain e a assinatura é produzida porSecKeyCreateSignature, de modo que a chave nunca sai do keystore do sistema.ConfigureKeychainSignerProvidero instala, e nenhum módulo precisa ser implantado junto com a aplicação, como um back-end de token PKCS#11 exigiria- O signer segue o certificado: uma chave EC assina com ECDSA, uma chave RSA assina com RSASSA-PSS e, onde PSS não está disponível - um macOS mais antigo ou uma chave que não o aceita - o padding recua para PKCS#1 v1.5 e o AlgorithmIdentifier emitido indica isso em vez de afirmar PSS
KeychainMissingSymbolslista todo símbolo de framework que não pôde ser resolvido, de modo que uma implantação que relata o back-end indisponível pode distinguir um framework ausente de um nome que esta binding obteve errado
Version 3.111.0
Adicionado (Added)
ConfigurePadesCmsVerifierinstala o back-end de verificação CMS que o validador PAdES usa, de modo que a verificação de assinaturas e carimbos de data/hora não está mais restrita ao Windows.IPdfCmsVerifierdeclara as duas operações que um back-end responde - detached para uma assinatura PDF, attached para um token de carimbo de data/hora - ePadesCmsVerificationAvailablerelata se há algum back-end presente
Alterado (Changed)
- Os records de resultado e opções de verificação mudaram para
FPdfCryptocomoTPdfCmsVerify*. Os nomesTWinCmsVerify*permanecem como aliases, de modo que o código existente continua funcionando e um back-end conectado fala os mesmos tipos que o do Windows - O comportamento no Windows permanece inalterado: sem verificador instalado, ele ainda usa CryptoAPI, e os pontos de verificação de progresso, opções de revogação e códigos de erro nativos são os mesmos. Onde nenhum back-end responde, cada veredito relata unsupported em vez de ficar sem verificação
Version 3.110.0
Adicionado (Added)
FPdfPkcs11assina PAdES com uma chave que permanece dentro de um token PKCS#11.ConfigurePkcs11SignerProvidero instala como back-end de assinatura, o módulo é carregado em tempo de execução por caminho, de forma que nada é vinculado estaticamente, e o mesmo código atende Windows, Linux e macOS. A enumeração de tokens que a interfaceIPdfPkcs11SignerProviderdeclara é implementada junto com ele: slots, tokens e os certificados que cada um contém- Assinar fora do Windows não precisa mais de um provider fornecido pelo host para o caso comum: um módulo de token mais
TPdfPkcs11Optionsé suficiente. RSA PKCS#1 v1.5, RSASSA-PSS e ECDSA são todos produzidos por meio do token FPdfSha1adiciona SHA-1 para um único propósito, localizar um certificado pelo thumbprint queTPadesSignerOptionscarrega. O Windows resolvia isso dentro do repositório de certificados; um token devolve os bytes do certificado e deixa a localização para o chamador. Não é um digest de assinatura e a pilha PAdES continua assinando com SHA-256 em todo o fluxo
Alterado (Changed)
- Os helpers de certificado DER que leem o OID de algoritmo de chave pública, extraem emissor e número de série e reempacotam uma assinatura ECDSA bruta mudaram do back-end do Windows para
FPdfCms, onde todos os back-ends de assinatura podem alcançá-los
Version 3.109.0
Alterado (Changed)
- O carregador da biblioteca nativa não é mais exclusivo do Windows.
LibraryNameassume como padrãopdfium.dll,libpdfium.sooulibpdfium.dylibconforme o alvo, o build com V8 é procurado sob o nome correspondente, e o carregamento e a vinculação de símbolos passam pelo carregador portátil no Free Pascal. O comportamento no Windows permanece inalterado, incluindo o layout de implantação Win32 e Win64 e o diagnóstico de incompatibilidade de arquitetura - Os diretórios de implantação em outros alvos seguem a grafia
<cpu>-<os>que as units compiladas já usam, de modo queDLLs/x86_64-linux/libpdfium.sofica ao lado deLib/FPC/x86_64-linux. O fallback para o diretório do sistema permanece exclusivo do Windows; nos demais casos o caminho de busca do carregador cobre isso
Version 3.108.0
Adicionado (Added)
TPdfHarfBuzzTextShapermolda texto bidirecional e de scripts complexos em alvos Free Pascal que não têm Uniscribe. Ele resolve os níveis de embedding comFPdfBidi, segmenta runs por script, molda cada run com libharfbuzz e posiciona os runs em ordem visual. Instale-o comConfigureTextShaper; o libharfbuzz é resolvido em tempo de execução eHarfBuzzAvailablerelata honestamente quando está ausente- O shaper não enumera fontes. O Uniscribe lê o binário da fonte a partir de um contexto de dispositivo, o que não tem equivalente portátil, de modo que o host fornece um
TPdfFontDataResolverque mapeia um nome de fonte para os bytes do arquivo de fonte e mantém essa política onde ela pertence
Version 3.107.0
Adicionado (Added)
FPdfBidiimplementa o Algoritmo Bidirecional do Unicode (UAX #9) em Pascal puro:PdfResolveBidiLevelsretorna um nível de embedding por unidade de código UTF-16,PdfBidiVisualOrderaplica a reordenação L2, ePdfBidiClassOfexpõe o Bidi_Class de um ponto de código. As regras P2-P3, X1-X10, W1-W7, N0-N2, I1-I2 e L1-L2 estão cobertas, incluindo iniciadores de isolate e pares de colchetes BD16- A unit é neutra em relação a compilador e plataforma, e é isso que permite compor texto bidirecional onde o Uniscribe não está disponível. Um motor de shaping resolve glifos para um run cuja direção já é conhecida, de modo que esta é a peça que precisa decidir a direção primeiro
Version 3.106.0
Adicionado (Added)
ConfigureTextShaperinstala o back-end de moldagem de texto pelo qual toda a biblioteca passa, comActiveTextShaper,ActiveTextShaperNameeClearTextShaperao lado. TantoShapePdfTextquantoTPdf.AddShapedTextagora usam o shaper instalado em vez de criar um do Uniscribe diretamente, de modo que um host pode fornecer seu próprio motor e um teste pode fornecer um determinístico
Alterado (Changed)
FPdfTextShapingcompila em alvos diferentes do Windows: o back-end do Uniscribe agora é o padrão da plataforma em vez da única implementação, e fica confinado ao build do Windows. Onde nenhum back-end está disponível, os pontos de entrada de moldagem relatam isso em vez de falhar ao compilar
Version 3.105.1
Segurança (Security)
- Uma resposta de carimbo de data/hora agora é limitada a 4 MB em ambos os transportes. Anteriormente, uma TSA que continuasse enviando podia fazer o buffer de recepção crescer sem limite, transformando uma chamada de assinatura em crescimento de memória sem limites
Version 3.105.0
Adicionado (Added)
- O carimbamento de data/hora RFC 3161 funciona em alvos Free Pascal diferentes do Windows: o novo back-end libcurl envia o TimeStampReq e lê o TimeStampResp, de modo que
PadesTsaAvailablerelata True e PAdES B-T, B-LT e B-LTA podem obter tokens ali. O libcurl é resolvido em tempo de execução e não é uma dependência de build; quando está ausente, o back-end relata indisponível exatamente como faz o do WinHttp. O Windows continua usando WinHttp e não é afetado - Assinar nesses alvos ainda precisa de material de chave que a biblioteca não possui: forneça-o por meio de
ConfigurePadesSignerProvidercom umIPadesSignerProvider(ouIPdfPkcs11SignerProviderpara chaves respaldadas em token), já queFPdfCryptoWiné exclusivo do Windows
Version 3.104.1
Adicionado (Added)
- O exemplo de laboratório de inspeção XFA agora também está disponível para Lazarus, de modo que as sondas de capacidade XFA, a listagem de pacotes, a exportação de pacotes e o fallback
OnXfaRuntimeMissingpodem ser exercitados a partir do build LCL
Version 3.104.0
Alterado (Changed)
- A biblioteca compila sem diagnósticos evitáveis no Free Pascal 3.2: a temporização interna lê o tique de milissegundos de
GetTickCount64em vez da chamada de 32 bits preterida, os acessadores preteridos da palavra de controle SSE são substituídos porGetMXCSReSetMXCSR, a base de deslocamento da impressão digital de conteúdo tem tipo explícito para não disparar mais uma verificação de intervalo em tempo de compilação, e endereços de scanline são comparados como ponteiros sem sinal quando um bitmap é verificado quanto ao layout top-down
Version 3.103.1
Corrigido (Fixed)
- Metadados de documento levados ao XMP mantêm seus caracteres não ASCII no Free Pascal: títulos, autores, assuntos, palavras-chave e nomes de criador que chegam a
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfReSaveAsPdfVTagora são convertidos por meio da codepage de string em vez de serem copiados byte a byte, de modo que o pacote de metadados permanece UTF-8 válido como a ISO 19005-1 6.7.2 exige, mesmo quando o programa host não roda em uma codepage UTF-8 - A exportação XFDF, as viagens de ida e volta de metadados de produção e a análise de XML de listas confiáveis usam a mesma conversão correta quanto à codepage, de modo que texto movido entre
TBytesestringnão depende mais da codepage do host
Version 3.103.0
Adicionado (Added)
TPdfEuropeanTrustedListanalisa listas confiáveis europeias autenticadas, recarrega caches com checksum pelo mesmo autenticador, aceita fontes de atualização fornecidas pelo chamador, expõe as âncoras de confiança atuais e avalia serviços de assinatura qualificados em um momento de validação solicitadoTPadesTrustValidationOptions.QualifiedTrustEvaluatoraplica uma política de confiança qualificada offline a cada signer validado sem adicionar acesso à rede ao validador PAdES
Version 3.102.0
Adicionado (Added)
BeginIncrementalSaveeCommitIncrementalSaveagora anexam revisões autenticadas a documentos criptografados com AES-256 preservando a referência/Encryptoriginal, os parâmetros de segurança, as gerações exatas de objetos e os bytes anteriores
Alterado (Changed)
- A sobrecarga de commit em arquivo agora faz flush durável e reabre estritamente um arquivo auxiliar no mesmo diretório, verifica seu limite de revisão e substitui atomicamente o alvo, revertendo a sessão após qualquer falha
Version 3.101.0
Alterado (Changed)
SaveAsRedactedagora preserva as porções seguras de texto com interseção parcial, caminhos retangulares e imagens alinhadas aos eixos, e depois remove nomes de recursos que não são mais referenciados por escopos de página, Form XObject, pattern, appearance e recursos aninhados
Version 3.100.0
Alterado (Changed)
OptimizeImagesagora seleciona reamostragem box, bilinear, bicúbica, Lanczos ou bilevel a partir da escala, da classe de conteúdo, do detalhe medido e da qualidade informada pelo chamador, com filtragem consciente de alfa e um orçamento estrito de memória de trabalho
Version 3.99.0
Adicionado (Added)
GraftPdfAcroFormimporta campos hierárquicos de AcroForm, widgets, appearances, ordem de cálculo, recursos padrão, ações e valores por meio de mapeamentos explícitos de páginas e políticas de colisãoTPdfCrossDocumentGraftMapreutiliza objetos indiretos importados por identidade de origem, preservando ciclos, referências compartilhadas, gerações exatas da origem e semântica transacional de falha
Version 3.98.0
Adicionado (Added)
TPdfOutlineEditorcria, move, exclui, estiliza, expande e redireciona itens de outline, remapeia destinos explícitos por meio de resultados de planos de página e anexa uma revisão incremental verificada de forma independente
Version 3.97.0
Adicionado (Added)
TPdfTreeEditorlê, valida, atualiza, balanceia, divide, mescla, serializa e salva incrementalmente estruturas arbitrárias de NameTree e NumberTree de PDF, preservando referências indiretas reutilizáveis e valores brutos de entradas
Version 3.96.0
Adicionado (Added)
TPdfParserResourceBudgetfornece uma política de processo thread-safe para recursão, tokens, objetos, bytes decodificados, taxa de expansão, alocação e prazos em parsers de PDF personalizados, com snapshots imutáveis por operação e padrões configuráveis
Version 3.95.0
Alterado (Changed)
ValidatePdfXagora valida dicionários ativos de PDF/X, metadados, output intents, fontes, recursos proibidos, transparência, espaços de cores e page boxes por meio de leituras esparsas limitadas em documentos não criptografados com xref válido
Version 3.94.0
Alterado (Changed)
ValidatePdfRagora valida dicionários ativos de PDF/R, páginas, filtros de imagem, metadados e marcadores de rodapé por meio de leituras esparsas e em janela limitadas em documentos não criptografados com xref válido
Version 3.93.0
Alterado (Changed)
ValidatePdfEagora valida dicionários ativos de PDF/E, metadados, output intents, formulários e recursos proibidos por meio de leituras esparsas limitadas em documentos com xref válido
Version 3.92.0
Alterado (Changed)
ValidatePdfVTagora realiza análise avançada de escopo, visibilidade, encapsulamento e uso de Forms aninhados de XObjects recorrentes por meio de leituras esparsas limitadas em documentos com xref válido
Version 3.91.0
Adicionado (Added)
TPdfSparseDictionaryReaderpode resolver a geração ativa de um objeto e decodificar um stream direto sob um limite de bytes fornecido pelo chamador
Alterado (Changed)
ValidatePdfVTagora usa leituras esparsas limitadas para verificações de metadados PDF/VT, DPart, OutputIntent, Info, página e dicionários comuns no caminho normal de xref válido
Version 3.90.0
Adicionado (Added)
TPdfSparseDictionaryReadermantém um índice esparso de xref e object-stream aberto para leituras repetidas e limitadas de dicionários de objetos indiretos
Alterado (Changed)
InjectPdfVTMarkersagora valida e preserva uma hierarquia DPart de PDF/VT existente com leituras de origem limitadas, enquanto hierarquias malformadas continuam pelo fallback de reconstrução
Version 3.89.0
Adicionado (Added)
ReadPdfSparsePageDictionariesretorna identidades de objetos de página e bytes de dicionário limitados na ordem da árvore de páginas por meio do índice esparso de objetos
Alterado (Changed)
InjectPdfVTMarkersagora sintetiza a hierarquia DPart de PDF/VT e anexa objetos de marcador com leituras de origem limitadas quando o PDF salvo ainda não contém uma hierarquia DPart
Version 3.88.0
Adicionado (Added)
ReadPdfSparseCatalogSubDictlê um subdicionário do catálogo, direto ou indireto, por meio do índice esparso de objetos, usado pela injeção de marcadores PDF/UA paraMarkInfoeViewerPreferences
Alterado (Changed)
InjectPdfUaMarkersagora resolveMarkInfoeViewerPreferencesdo catálogo por meio de consulta esparsa e anexa a revisão PDF/UA com leituras de origem limitadas no caminho normal de xref
Version 3.87.0
Adicionado (Added)
AppendPdfSparseUpdatetransmite uma revisão esparsa sobre um PDF salvo: bytes da origem verbatim, corpos de objetos fornecidos pelo chamador em deslocamentos registrados e um único bloco incremental de xref/trailer encadeado por/PrevNormalizePageViewRectnormaliza dois cantos mapeados do espaço da página no retângulo visível restrito à página, ou relata que nada da página está visível- A injeção de marcadores PDF/E sintetiza um objeto Info novo com
/ISO_PDFEVersionquando o documento de origem não tem dicionário Info
Alterado (Changed)
- A injeção de marcadores PDF/E, PDF/X e PDF/R agora resolve catálogo, Info e trailer por meio de consulta esparsa e anexa revisões por meio de
AppendPdfSparseUpdatecom leituras de origem limitadas no caminho normal de xref - O callback de preenchimento de formulários
FFI_GetPageViewRectagora relata a parte da página realmente visível noTPdfViewassociado em vez de sempre a página inteira, recaindo nas dimensões da página para documentos headless TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.87.0 de forma consistente
Corrigido (Fixed)
- Os pontos de controle de segmentos de caminho expostos desde a binding
FPDFPath_GetBezierControlPointsnunca foram preenchidos: a exportação nativa só responde para o índice de ponto final de cada cúbica de três entradas, de modo que a consulta agora acontece uma vez por curva e todas as três entradas carregam os pontos de controle da curva
Version 3.86.0
Adicionado (Added)
ReadPdfSparseRevisionInfoexpõe fatos limitados de revisão mais recente, catálogo, criptografia, ID de documento e estrutura tagged para pós-processadores de streamComposePdfSparseUpdateIdpreserva ou deriva identificadores de documento de atualização incremental sem materializar o PDF de origem completo
Alterado (Changed)
InjectPdfAMarkersagora resolve o catálogo e o trailer por meio de consulta esparsa, copia entradas grandes em blocos limitados e anexa a revisão PDF/A sem alocar um array de bytes do tamanho da origem no caminho normal de xref- A injeção de marcadores PDF/A preserva o estilo de saída clássico ou xref-stream, as gerações de catálogo e Info, os identificadores do trailer, o comportamento de recusa de criptografia e as regras de rebaixamento para Level A
Version 3.85.0
Adicionado (Added)
SanitiseActiveContentPdfStreamaceita um workspace de poda de propriedade do chamador para armazenamento personalizado limitado ou respaldado em disco
Alterado (Changed)
- A sanitização de conteúdo ativo agora atualiza o catálogo e o trailer por meio de consulta esparsa, janelas limitadas de parser e cópia de intervalos de tamanho fixo em vez de ler o PDF completo em um único array de bytes no caminho normal de xref
TPdf.SaveAsSanitisedaplicaSaveMemoryLimiteSaveTemporaryDirectoryao seu workspace de poda e relata seus diagnósticos de spill
Corrigido (Fixed)
StripMetadata=Trueagora remove uma referência/Infodo trailer mesmo quando o catálogo não tem entrada/Metadata
Version 3.84.0
Alterado (Changed)
TPdf.PdfVersionagora reutiliza o estado do parser do PDFium por meio deFPDF_GetFileVersionem vez de reanalisar o PDF de origem completo- Consultas de versão leem no máximo o cabeçalho de PDF de oito bytes para impedir que uma declaração de catálogo malformada rebaixe a versão efetiva
Version 3.83.0
Alterado (Changed)
PageLabelledPdfStreamagora resolve e atualiza o catálogo por meio de janelas de stream limitadas e do índice esparso de objetos lazy- A saída de rótulos de página copia PDFs de origem grandes em intervalos de tamanho fixo em vez de alocar um array de bytes do documento completo no caminho normal de xref
Version 3.82.0
Alterado (Changed)
ApplyDefaultOpenActionagora lê revisões clássicas, xref-stream, híbridas e object-stream por meio de um índice esparso de objetos lazy, incluindo documentos com números de objeto muito altos- O processamento de open-action padrão usa janelas de tamanho fixo e cópia de intervalos limitada em vez de carregar o PDF completo em um único array de bytes
Version 3.81.0
Adicionado (Added)
PostProcessSavedPdfaceita três workspaces seekable de propriedade do chamador para tetos de memória personalizados e processamento respaldado em disco
Alterado (Changed)
TPdf.SaveAsaplicaSaveMemoryLimiteSaveTemporaryDirectorya todos os workspaces de pós-processamento do PDF salvo e inclui seus spills nos diagnósticos- O reparo nativo incremental de xref-stream usa janelas de cauda e dicionário de tamanho fixo com cópia de intervalos limitada em vez de arrays de bytes do arquivo inteiro e realocações repetidas do arquivo completo
Version 3.80.0
Adicionado (Added)
ReadAttachmentMetadatacaptura nomes de anexos, descrições, subtipos MIME, tamanhos decodificados e legibilidade em uma única enumeração nativa limitadaExtractAttachmentsToStreamsgrava um lote em streams de propriedade do chamador com limites de bytes por arquivo e agregados, blocos de gravação configuráveis, cancelamento e resultados por item
Alterado (Changed)
- A extração em lote retém no máximo um anexo decodificado na memória do PDFium Delphi Component em vez de materializar cada payload do lote
Version 3.79.0
Adicionado (Added)
TPdfCacheGovernor,TPdf.CacheBudgetBytes, consultas de uso por tipo e telemetria coordenam a memória de cache retida por meio de um único orçamento global de bytes LRU thread-safeTPdfTileCachee o cache de fontes do sistema de todo o processo podem se juntar a um governor escolhido pelo chamador com contabilidade exata de bitmaps e bytes de fontes
Alterado (Changed)
- Cenas de página analisadas, miniaturas, dados de estrutura, snapshots de texto e snapshots de objetos de página agora competem sob um orçamento padrão de 256 MiB do
TPdf, preservando seus limites existentes de contagem de entradas - Cenas de página ativas permanecem fixadas até a renderização ser concluída, e cenas de página nativas opacas usam uma cobrança estimada explícita porque o PDFium não expõe nenhuma API configurável de bytes de cache total
Version 3.78.0
Adicionado (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlaneTPdf.GeneratePagedLayouttransmitem comandos de layout para armazenamento seekable escolhido pelo chamador e materializam uma página por vez
Alterado (Changed)
- Layouts gerados grandes podem despejar comandos em armazenamento temporário, reter um cache de páginas LRU configurável, restaurar segmentos de cabeçalho e rodapé não contíguos e liberar texto ajustado após cada item de fluxo
Version 3.77.0
Adicionado (Added)
TPdfLayoutTable, linhas, células e opções de tabela adicionam tabelas entre páginas com trilhas de grade resolvidas, legendas, linhas de cabeçalho repetidas, linhas de corpo divisíveis, links e bordas configuráveis
Alterado (Changed)
- Tabelas tagged geradas preservam uma estrutura contínua de Table / TR / TH / TD entre páginas, mantêm grupos que atravessam linhas atômicos e associam células de dados a IDs de cabeçalho automaticamente
Version 3.76.0
Adicionado (Added)
TPdfLayoutConstraintseSetLastItemConstraintsadicionam keep-together, keep-with-next, quebras de página físicas antes / depois e controle configurável de linhas viúvas / órfãs aos layouts gerados
Alterado (Changed)
BuildPlanreutiliza cada resultado de texto ajustado para previsão de paginação e emissão de comandos, impedindo que keep-with-next repita a medição de texto
Version 3.75.0
Adicionado (Added)
TPdf.InspectPdfUaUnicodeCoveragerelata evidências limitadas no nível de objeto para mapeamentos diretos de Unicode, substituições deActualText, erros de mapeamento, valores Unicode ausentes e objetos de origem não resolvidos
Alterado (Changed)
TPdf.ValidatePdfUaagora reutiliza uma única varredura de caracteres com escopo de objeto que exclui caracteres Artifact e gerados e impede que oActualTextde um objeto de texto mascare conteúdo adjacente
Version 3.74.0
Alterado (Changed)
ValidatePdfUaPageContentTaggingeTPdf.ValidatePdfUaagora relatampvuaiArtifactInStructureTreequando um objeto de página Artifact é reivindicado por um MCID da árvore de estrutura, incluindo artifacts de paginação baseados em caminhos- A varredura de conteúdo de página PDF/UA agora faz curto-circuito somente depois que tanto conteúdo real não tagged quanto contenção inválida de Artifact foram detectados, preservando a cobertura entre páginas sem repetir verificações concluídas
Version 3.73.0
Adicionado (Added)
TPdf.InspectPdfUaLanguageCoveragerelata evidências limitadas de objetos de página e strings de estrutura para trechos em linguagem natural, incluindo idioma efetivo, origem da declaração, MCID, índice de estrutura e extratos de textoResolvePdfUaEffectiveLanguageresolve declarações de idioma de marked-content, do ancestral de estrutura mais próximo e do catálogo com evidências explícitas de validade
Alterado (Changed)
TPdf.ValidatePdfUaagora relatapvuaiNaturalLanguageUncoveredquando texto não artifact ou strings de acessibilidade não têm uma declaração/Langefetiva válida
Version 3.72.0
Adicionado (Added)
TPdf.InspectPdfAMetadatarelata evidências de equivalência tipadas por campo para todos os oito mapeamentos de Info para XMP da ISO 19005-1, incluindo valores vazios explícitos e falhas de análise de datasTPdf.NormalizePdfAMetadatarepara apenas propriedades XMP mapeadas com divergência, preservando namespaces não relacionados e alternativas de idioma não padrão
Alterado (Changed)
TPdf.ValidatePdfAagora relatapvaiInfoXmpValueMismatchquando valores de Info decodificados pelo PDFium diferem de valores XMP corretamente tipados após comparação de datas consciente de Unicode ou de fuso horário
Version 3.71.0
Adicionado (Added)
InspectPdfVT2sStreamretorna evidências de condições de impressão para cada parte MIME de PDF/VT, incluindo identidade do OutputIntent, proveniência de perfil embutido ou MIME, hashes e fatos de cabeçalho ICC e contagens de páginas e records de DPartFPdfIccProfilefornece inspeção limitada de cabeçalho e tabela de tags ICC com suporte a MD5, SHA-256, espaço de cores, versão, classe de dispositivo, ID de perfil e descrição de perfil multilíngue
Alterado (Changed)
- A validação de PDF/VT-2s agora resolve anexos MIME ICC anteriores por meio de especificações de arquivo de URL
DestOutputProfileRefe validaCheckSum,ICCVersion,ProfileCS,ProfileName, classe de dispositivo e espaços de cores de processo permitidos - Todas as partes de PDF/VT agora exigem um OutputIntent
GTS_PDFXautoritativo, empacotamento de perfil embutido ou externo apropriado à base PDF/X e a mesma condição de impressão caracterizada, enquanto anexos somente PDF/X permanecem fora das comparações de PDF/VT - A validação de PDF/VT-2 de arquivo único agora reconhece
DestOutputProfileRefcomo um perfil de destino externo em vez de relatá-lo como ausente
Version 3.70.0
Alterado (Changed)
- A validação de PDF/VT agora verifica
GTS_Scope,GTS_XID,GTS_EnveGTS_Encapsulateddiretamente em cada XObject em vez de permitir que dicionários próximos ou aninhados satisfaçam os requisitos de hints - O escopo
Recordagora resolveRecordLevela partir do dicionário indiretoDPartRoot, enquanto o escopoStreamé rejeitado em arquivos PDF/VT-1 - Streams de conteúdo decodificados de páginas e Form XObjects agora validam visibilidade de recursos
Do, contagens de ocorrênciasSingleUsee propriedade de records destinatários por meio de recursos herdados efetivos e da hierarquia DPart - XObjects encapsulados agora validam forma booleana, escopo recomendado,
Intentde Image, grupos de transparência isolados, espaços de cores de blending e dependências de conteúdo opcional diretas ou aninhadas
Version 3.69.0
Alterado (Changed)
- A validação PAdES agora rejeita entradas duplicadas de
Contents,ByteRange,SubFilter,FiltereTypeem vez de aceitar o valor escolhido pelo parser - A descoberta de assinaturas agora usa uma varredura linear de dicionário consciente de streams, reconhece tokens de nomes PDF escapados e não pode ser redirecionada por um dicionário aninhado fechado colocado antes do
ByteRangereal - A validação de
ByteRangede assinatura agora exige que a lacuna excluída corresponda exatamente ao token hexadecimal direto deContents, ainda permitindo revisões incrementais posteriores - Dicionários de assinatura agora exigem um
Filtercom valor de nome e impõem combinações consistentes de tipo e subfilterSigouDocTimeStamp
Version 3.68.0
Adicionado (Added)
TPdf.BuildPadesEvidenceReportcorrelaciona fatos de assinatura do PDFium, política CMS, status de confiança e de carimbo de data/hora, hashes do caminho de certificados, cobertura DSS/VRI e decisões de revisões posteriores para cada assinaturaTPadesEvidenceReportexporta evidências limitadas de múltiplas assinaturas como JSON ou CSV e relata telemetria de origem, assinatura, DSS, revisão e truncamento
Alterado (Changed)
- A validação de confiança PAdES agora registra identidades SHA-256 para o certificado do signer e o caminho ordenado de certificados do Windows, preservando a validação offline por padrão
- A geração de evidências reutiliza uma única captura retida de bytes da origem nas análises de conformidade, confiança, DSS e revisão em vez de copiar o PDF original para um novo stream em cada estágio
Version 3.67.0
Adicionado (Added)
TPadesSignatureFieldOptionscria nomes de campos de assinatura configuráveis, seed values obrigatórios, listas de razões e atestados legais, certificados de signer aceitáveis e bloqueios de campo- Assinatura local e remota podem produzir assinaturas de aprovação ou certificação com transforms
FieldMDPeDocMDPda ISO 32000-1
Alterado (Changed)
- Assinaturas de certificação preservam as permissões existentes do catálogo ao registrar a nova assinatura por meio de
/Perms /DocMDP
Version 3.66.0
Adicionado (Added)
RenderPageBandedToStreamgrava saída PNG ou TIFF diretamente em um stream do chamador com altura de faixa configurável, compressão PNG e limites de bytes de saídaRenderPageBandedToEncoderalimenta codecs definidos pelo chamador com faixas sequenciais da página e retorna telemetria de faixa, linha, memória, conclusão e saída
Corrigido (Fixed)
RenderPageBandedagora preserva a geometria de renderização da página inteira e recorta cada faixa solicitada em vez de reescalar a página completa em cada faixa
Version 3.65.0
Adicionado (Added)
TPdfParallelRenderReportagora relata tamanho da origem, pico de memória capturada, back-end de armazenamento e tipo de respaldo compartilhado
Alterado (Changed)
RenderPagesParallelcompartilha a origem capturada por meio de memória imutável, um mapeamento de arquivo somente leitura ou acesso aleatório deFPDF_LoadCustomDocumentem vez de alocar um segundo array de bytes do documento completo- Origens de renderização paralela despejadas permanecem sob
SaveMemoryLimite não exigem mais recarregar o PDF completo na memória endereçável do processo
Version 3.64.0
Adicionado (Added)
ImportImposedagora tem uma sobrecarga que retornaTPdfImpositionExecutionReportcom contagens de importações nativas, origens únicas, slots em branco, templates de XObject, objetos de formulário, gerações de conteúdo e páginas de saída
Alterado (Changed)
- A imposição de geometria zero envia cada página de origem ordenada por uma única chamada de
FPDF_ImportPagesByIndexantes da inserção de páginas em branco e da composição N-up nativa - A imposição de geometria personalizada reutiliza um template nativo de XObject por página de origem única, lê métricas de página em cache sem alterar a página de origem e pré-aloca armazenamento exato para o plano
Version 3.63.0
Adicionado (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransactioneRollbackPageObjectEditTransactionagrupam mutações nativas de objetos de página em um lote atômico com escopo de página e rollback de snapshot validadoPageObjectEditTransactionStatusrelata a página vinculada, o estado dirty, a contagem de mutações bem-sucedidas e a contagem de gerações de conteúdo
Alterado (Changed)
- Lotes de objetos confirmados agora invocam
FPDFPage_GenerateContentuma vez em vez de uma vez por mutação de inserção, remoção, transformação, propriedade, marca, objeto de anotação ou appearance - Salvamentos, mudanças de página, exclusões de página, transações de edição aninhadas e atualizações nativas com falha de inserção ou anotação são rejeitados antes que conteúdo adiado possa ser perdido
Version 3.62.0
Adicionado (Added)
ReadPageObjectsSnapshotcaptura fatos de objetos de página de propriedade do chamador com orçamentos de objeto, caminho, clip, marca, texto, string e prazoPageObjectsSnapshotfornece reutilização LRU consciente de revisão com capacidade configurável e telemetria de ocupação, acertos e erros
Alterado (Changed)
PageComplexityagora reutiliza o snapshot imutável de objetos de página em vez de repetir consultas nativas de enumeração de objetos, transparência, caminhos e imagens
Version 3.61.0
Adicionado (Added)
TPdfagora expõe um LRU unificado de miniaturas para pré-visualizações embutidas e renderizadas com tetos configuráveis de entradas e bytes, além de telemetria de acertos, erros, despejos, ocupação e revisãoRenderPageThumbnailaceita rotação, opções de renderização, cor de fundo eTPdfColorSchemepreservando o contrato de bitmap de propriedade do chamador
Alterado (Changed)
- Extrações e renderizações repetidas de miniaturas reutilizam resultados nativos do PDFium por meio de chaves de revisão, página, origem, tamanho, rotação, flags, fundo e esquema de cores, incluindo a ausência em cache de miniaturas embutidas opcionais
TPdfThumbnailViewsincroniza seu cache de bitmaps de páginas visíveis com as revisões de miniaturas do documento, de modo que edições não deixem pré-visualizações desatualizadas
Version 3.60.0
Adicionado (Added)
ReadTextPageSnapshotcaptura Unicode, mapeamentos UTF-16, geometria e estilo de caracteres e metadados normalizados de objetos de texto em uma única passada com orçamentos explícitos de caracteres, objetos, nomes de fonte e prazoTextPageSnapshotfornece cópias profundas de propriedade do chamador por meio de um LRU configurável consciente de revisão com telemetria de capacidade, contagem, acertos e erros
Alterado (Changed)
GetStructuredTexte oGetTextInReadingOrderde layout físico agora reutilizam o mesmo snapshot de texto e aplicam ordenação geométrica O(n log n)
Corrigido (Fixed)
- Os caches pequenos de snapshots de texto e estrutura agora despejam a página mais antiga ao armazenar novos dados sob o índice de página solicitado, impedindo aliasing de cache entre páginas
Version 3.59.0
Adicionado (Added)
LifecycleActionPolicyseleciona execução automática desativada, somente explícita ou compatível de ações de ciclo de vida de documentos e páginas PDFExecuteDocumentLifecycleActionexpõe ações de JavaScript, abertura, fechamento, salvamento e impressão de documentos, enquantoExecutePageLifecycleActionexecuta ações de abertura e fechamento de página sem alterarPageNumber
Alterado (Changed)
- Carregamentos de página headless agora recebem as mesmas ações automáticas de abertura e fechamento de página que os carregamentos orientados pelo visualizador, com páginas temporárias reutilizadas ou liberadas sob a trava de renderização
Version 3.58.0
Adicionado (Added)
ReadStructureElementseVisitStructureElementsfornecem travessia iterativa de estruturas tagged com orçamentos explícitos de profundidade, elemento, atributo e tempo, além de status de conclusão detalhadoStructureElementsForPageexpõe snapshots de página com base um sem alterarPageNumber, respaldados por um cache LRU configurável consciente de revisão com telemetria de acertos, erros e contagem
Alterado (Changed)
- Consumidores de acessibilidade, reflow, validação e visualizador agora reutilizam snapshots de estrutura de propriedade do chamador até que uma edição relevante de documento ou página os invalide
Version 3.57.0
Adicionado (Added)
- Callbacks nativos completos de host de formulários agora fornecem handles de página lazy seguros quanto ao tempo de vida, roteamento de cursor da visualização de interação, notificação de mudança de valor, retângulos de texto selecionado, eventos de URI e eventos de destino GoTo
FormHostCallbacksCompleterelata a prontidão dos callbacks, enquantoFormSelectionRectseClearFormSelectionRectsexpõem geometria de seleção limitada no espaço da página
Corrigido (Fixed)
- Os callbacks de página atual do XFA agora traduzem corretamente entre os índices de página de base zero do PDFium e o
PageNumberde base um do componente - Os callbacks de URI de AcroForm e XFA agora preservam os bytes brutos do URI e exigem aprovação explícita do host antes de qualquer lançamento externo
Version 3.56.0
Adicionado (Added)
- Snapshots indexados de
PageMetricsexpõem dimensões, rotação, rótulo, transparência e as cinco page boxes padrão de uma página sem alterar a página ativa
Alterado (Changed)
- Leituras repetidas de metadados de página reutilizam um cache nativo de snapshots invalidado automaticamente, reduzindo aberturas de página em cargas de trabalho de miniaturas, preflight e análise de documentos
Version 3.55.0
Adicionado (Added)
- A inspeção de caminhos expõe pontos de controle cúbicos de Bézier exatos quando o build do PDFium carregado fornece
FPDFPath_GetBezierControlPoints, com uma sonda opcional de capacidade para DLLs mais antigas FormFieldTypeAtPoint,TPdfView.FormFieldTypeAte as propriedades indexadas deFontFlagsexpõem fatos nativos de formulários e fontes sem handles brutosTPdf.Signaturesretorna todos os conteúdos de assinaturas nativas, ByteRanges, subfilters, razões, horários e permissões em um único snapshot de propriedade do chamador
Alterado (Changed)
- As verificações de presença de campos de formulário agora usam teste de colisão de ponto nativo direto em vez de abrir e fechar handles de anotações
Corrigido (Fixed)
- A validação de PDF/E-1 agora permite campos comuns de AcroForm, arquivos embutidos e anotações FileAttachment, ao mesmo tempo em que relata com precisão
/XFAe/NeedAppearances truede AcroForm de nível superior, incluindo valores indiretos e de object-stream
Version 3.54.0
Adicionado (Added)
FPdfProductionadiciona seleção de imagens multicodec mensurada, back-ends de processamento de cores e fontes, caminhos SVG, planos de substituição com estilo, atualizações transacionais de pacotes XFA, vetores de código de barras, modelos de Portfolio e extração segura de RichMediaFPdfStandardsExecutionadiciona medição e conversão GeoPDF, reparo transacional de PDF/A, planos de PDF/UA-2, perfis multicolor externos, evidências históricas de DSS e VRI, consultas DPart, fatos profundos de PDF/E e faixas de PDF/R com memória fixaTPdf.ImportImposedcompõe planos limitados de N-up e livreto por meio de caminhos nativos de N-up ou de XObjects de página com geometria exata de medianiz, sangramento e creep, enquantoTPdf.CompareWithrelata diferenças semânticas, geométricas e de pixels com tolerância- A assinatura PAdES agora suporta validadores de caminho e provedores HSM conectáveis, PDF MAC anexado a assinaturas,
cms-algorithm-protectione documentos de política de assinatura offline
Alterado (Changed)
- O motor de layout aceita HTML e Markdown limitados, flui entre colunas e resolve faixas de grade fixas, automáticas e fracionárias
- Viagens de ida e volta de XFDF agora retêm campos multivalor e rich-text, popups, ações, destinos, sobreposições de aparência, namespaces personalizados e estado de presença explícito
Version 3.53.0
Adicionado (Added)
ConfigurePdfLibraryfornece configuração imutável nativa de renderizador, fontes, V8, Brotli, caminho de fontes do usuário e sandbox antes do primeiro carregamento do PDFium- Atributos de estrutura nativos, relacionamentos de anotações, anexos de arquivo de anotações, valores de dicionário tipados, políticas de foco, consultas de z-order de links e formulários e diagnósticos de mapeamento TTF padrão estão disponíveis por meio de APIs de alto nível limitadas
TPdfView.ReplaceFormTextAndKeepSelectionpreserva a seleção ativa entre edições repetidas e eventos de liberação do botão direito agora chegam ao motor de formulário nativo
Alterado (Changed)
- A hora determinística do documento agora usa uma conversão de calendário UTC estável além da época fixa, produzindo os mesmos metadados em cada fuso horário do host
- Gravações de strings de anexo validam o resultado nativo e codificam chaves de dicionário como UTF-8
Version 3.52.0
Adicionado (Added)
TPdf.GetImageObjectRenderedBitmapretorna o resultado renderizado de um objeto de imagem com sua matriz atual, espaço de cor, máscaras e estado de renderização aplicadosTPdf.TextObjectGlyphWidth,TPdf.TextObjectFontSizeeTPdf.SetTextObjectFontSizeexpõem medição nativa de glifos e edição exata do tamanho de fonte do objeto de textoTPdf.TransformPageObjectClipPath,TPdf.DetachFormObjectChild,TPdf.SharePageObjectMarkeTPdf.IsAnnotationObjectSubtypeSupportedadicionam edição precisa de objetos de conteúdo e inspeção de capacidades
Version 3.51.0
Corrigido (Fixed)
- Oito membros de
TPdfque notas de versão anteriores anunciaram estavam declarados na seção private e não podiam ser chamados de fora da unitPDFium; eles agora são públicos conforme documentado:LinkAtPoint,GetTextRenderMode,GetTextObjectRenderedBitmap,IsAnnotationSubtypeSupported,ChooseRenderFlags,AttachmentHasKey,GetAttachmentStringValueeSetAttachmentStringValue
Alterado (Changed)
- A documentação de referência em inglês agora cobre todos os membros públicos de
TPdfeTPdfView: 88 membros que não tinham página de referência receberam uma, e as páginas de classe, o índice de navegação e a referência de API listam todos - Páginas de referência que antes apontavam para uma página compartilhada agora vinculam à página do próprio membro, de modo que um resultado de busca abre a descrição da API que foi pesquisada
- A referência de API documenta as enumerações e records alcançáveis a partir de assinaturas públicas, incluindo relatórios de carregamento e de stream, tipos de texto, fonte e OCR, tipos do construtor de layout, tipos de validação PAdES, tipos de lote e validação e tipos de renderização paralela
Version 3.50.0
Adicionado (Added)
- Todos os demos com GUI agora abrem com conteúdo pronto para uso em vez de um formulário vazio: demos de visualização e de laboratório carregam um documento de exemplo gerado, demos de relatório produzem um relatório concluído na inicialização e demos de processamento pré-geram entradas de exemplo para que a ação principal execute com um clique
MultiPageViewer,SplitVieweFontPropertiesgeram documentos de exemplo em memória na inicialização (uma vitrine de seis páginas, dois documentos de comparação lado a lado e uma página com múltiplas fontes para inspeção por clique)- Demos de processamento como
MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDFePrintPreferencespré-geram PDFs de exemplo ao lado do executável e pré-preenchem seus controles de entrada, com regeneração idempotente que nunca sobrescreve arquivos existentes FormFilleExtractImagescarregam automaticamente os arquivos de exemplo fornecidos em suas pastas de demo,ImageToPDFgera dois bitmaps de exemplo,WatermarkStamppré-constrói suas amostras de carimbo eXfdfLababre em um documento gerado contendo anotações de texto e de realce
Alterado (Changed)
CreatePDFagora geraSample.pdfao lado do executável na inicialização sem exibir um diálogo, de modo que o documento existe no momento em que o demo abreTPdf.AboutInfoe os metadados do instalador agora relatam Version 3.50.0 de forma consistente
Version 3.49.0
Adicionado (Added)
FORM_GetTextDirectioneFORM_SetTextDirectiondos binários do PDFium atualizados agora estão vinculados, mantendo a camada de vinculação dinâmica com cobertura total de todas as 472 exportações do PDFiumTPdf.FocusedFormFieldTextDirectioneTPdf.SetFocusedFormFieldTextDirectionexpõem a direção de texto em memória do widget em foco por meio da nova enumTPdfFormTextDirection(ftdUnknown,ftdAuto,ftdLTR,ftdRTL), com contrapartes emTPdfViewque repintam a cena da página após uma mudança de direção
Alterado (Changed)
FPDF_LIBRARY_CONFIGagora reflete o layout da versão 6 do PDFium com o campo experimentalm_BrotliEnabledpara binários compilados comPDF_ENABLE_BROTLITPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.49.0 de forma consistente
Version 3.48.0
Adicionado (Added)
- O demo
PDFVieweragora gera na memória um documento de vitrine de seis páginas na inicialização usando a API de criação, de modo que o visualizador abre com conteúdo renderizado e sem nenhum arquivo de exemplo em disco - Um painel de miniaturas construído sobre
TPdfThumbnailViewoferece pré-visualizações de páginas com navegação por clique ao lado da árvore de marcadores nos três ports do demo - A pesquisa do visualizador agora realça todas as ocorrências da página atual por meio de
HighlightSearchTextem vez de um único retângulo de resultado, com a contagem de ocorrências informada na barra de status - Os botões
Nighte2-Upda barra de ferramentas alternam com um clique o modo de renderização noturna em duotone e o modo de exibição de duas páginas
Alterado (Changed)
- A seleção de texto no visualizador agora usa o motor de seleção integrado do
TPdfViewcom seleção de palavras por clique duplo, seleção por arrasto e atalhos de área de transferência, substituindo o código de seleção feito à mão - As páginas são renderizadas com sombra projetada e rolagem suave para uma experiência de leitura moderna
TPdf.AboutInfoe os metadados do instalador agora relatam Version 3.48.0 de forma consistente
Version 3.47.0
Adicionado (Added)
FPdfBenchmarkexecuta corpora de PDF delimitados com aquecimento configurável e passagens medidas, limites de páginas e pixels, cancelamento cooperativo e status por caso de aprovado, reprovado ou ignoradoTPdfBenchmarkReportregistra tamanhos de bytes de entrada e salvos, latência de carregamento e primeira página, vazão de renderização, tempo de salvamento e reabertura, pico amostrado do conjunto de trabalho, hashes SHA-256 semânticos e de pixels, estabilidade de execuções repetidas, barreiras de hash esperado e equivalência de reabertura independente- Relatórios de benchmark exportam CSV seguro para fórmulas e JSON estruturado para CI, qualificação de release e acompanhamento longitudinal de desempenho
GetSkiaRenderCapabilities,RenderPageSkiaeRenderPageSkiaByIndexexpõem renderização nativa opcional de páginas e formulários com Skia, com reutilização do cache de páginas analisadas e sem exigência rígida de exportação da DLL- Uma ABI de saída de impressão versionada e controlada por capacidades expõe enumeração exata de chapas de spot, renderização de chapas, detecção de overprint e pré-visualização de overprint quando fornecidas pelo módulo PDFium carregado
Corrigido (Fixed)
- Builds do PDFium sem
PDF_USE_SKIAagora carregam normalmente em vez de falhar porque exportações experimentais do Skia estão ausentes
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.47.0 de forma consistente
Version 3.46.0
Adicionado (Added)
ValidatePdfRagora verifica conteúdo de página somente raster, geometria de faixas, modelos de cor, resolução efetiva, parâmetros de compactação, metadados exigidos e perfis criptografados de PDF 2.0 por meio de opções de validação configuráveisBuildPdfARepairPlantransforma evidências de validação em etapas de remediação ordenadas por dependência, com classes de segurança, proteções contra impacto em assinaturas e saída JSONBuildPdfXProductionPreflightrelata caixas de página, fontes embutidas, output intents, corantes, transparência, overprint, separações, resolução de imagens e prontidão de produção sem decodificar cargas de imagem- A validação de estrutura PDF/UA-2 agora verifica propriedade de arquivos associados, ordem de leitura, descrições, relacionamentos e descobribilidade
Alterado (Changed)
TAssociateFile.Description,TPdf.ImageInfoeTPdf.PageComplexityexpõem os metadados exigidos pelos fluxos de trabalho de arquivos associados e preflight de produçãoTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.46.0 de forma consistente
Version 3.45.0
Adicionado (Added)
TPdfXmpPacketanalisa, edita, clona e serializa XMP com reconhecimento de namespaces, incluindo namespaces desconhecidos, contêineres RDF tipados, valores URI e de recurso, qualificadores, alternativas de idioma, wrappers de pacote e preenchimento preservadoTPdf.ReadXmpPacketeSaveAsWithXmpPacketexpõem leitura de metadados de alto nível e saída atômica, com alterações em documentos assinados exigindo autorização explícita
Segurança (Security)
- O leitor XML delimitado rejeita DTDs e entidades externas e limita bytes do pacote, aninhamento, nós, atributos e referências numéricas de caracteres
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.45.0 de forma consistente
Version 3.44.0
Adicionado (Added)
TPdfValidationRuleRegistryregistra cláusulas de perfil com severidade, dependências, orientação de reparo, evidências e predicados integrados ou personalizadosTPdfValidationBudgeteTPdfValidationExecutionContextlimitam regras, falhas, objetos, recursão, evidências em UTF-8, memória reservada, tempo decorrido, falha rápida e cancelamento cooperativoValidatePdfFilesParallelvalida arquivos por meio de documentos de trabalho isolados, preservando a ordem de entrada e agregando distribuições de problemas, tempos, falhas, cancelamentos e erros de carregamento
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.44.0 de forma consistente
Version 3.43.0
Adicionado (Added)
TPdfStructureElementagora carrega fatos de namespace, mapeamento de papéis por namespace, referência, arquivo associado, anotação, widget, rótulo e aparência para a validação semântica PDF/UA-2ValidatePdfUa2StructureElementse seus validadores focados verificam namespaces e contenção ISO/TS 32005, grades de tabela delimitadas, anotações, formulários, associações Formula/MathML, arquivos associados, raízes de documento, FENote, listas, referências de TOC, títulos e legendas sem carregarpdfium.dllClassifyPdfUaNamespaceidentifica os namespaces de estrutura PDF 1.7, PDF 2.0, MathML, ARIA, DPUB, personalizados e ausentesPdfUa2StructureHasIssuefornece uma consulta de problema único segura para C++Builder sem retornar um set Pascal por valor
Alterado (Changed)
ValidatePdfUaStructureElementsaplica automaticamente o novo conjunto de regras semânticas parapuc2enquanto preserva o caminho de regras do PDF/UA-1TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.43.0 de forma consistente
Version 3.42.0
Adicionado (Added)
TPdfUaSaveOptions.PdfUa2cria saída PDF/UA-2 compdfuaid:part2,pdfuaid:rev2024 e uma versão de catálogo PDF 2.0 efetivaValidatePdfUadetectapuc2e relata metadados de revisão ausentes, arquivos não PDF 2.0, configurações de conteúdo opcional sem nome, anotações obsoletas e títulos H genéricos
Alterado (Changed)
- A validação PDF/UA agora seleciona regras específicas de perfil para ordem de tabulação, XFA e títulos, aplicáveis a PDF/UA-1 e PDF/UA-2
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.42.0 de forma consistente
Version 3.41.0
Adicionado (Added)
SetPageObjectMarkParamadiciona ou substitui um parâmetro inteiro, real, string ou blob em uma entrada de conteúdo marcado existente sem substituir a marcaRemovePageObjectMarkParamremove uma propriedade selecionada preservando o nome da marca e todas as propriedades não relacionadas
Alterado (Changed)
- Números não inteiros de conteúdo marcado agora fazem o trajeto de ida e volta como
pmpFloatem vez de serem truncados em snapshots inteiros - A falha de validação de parâmetros durante
AddPageObjectMarkremove a marca nativa parcialmente criada TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.41.0 de forma consistente
Version 3.40.0
Adicionado (Added)
ConfigureSystemFontProviderinstala um mapeador de fontes do aplicativo antes do PDFium iniciar e fornece bytes TrueType ou OpenType validados para fontes de documento ausentes ou substituídasTPdfSystemFontPolicycontrola substituição de faces, fallback nativo, limites de bytes por fonte e cache delimitado de solicitaçõesGetSystemFontProviderStatisticsrelata atividade de mapeamento, cache, fallback, rejeição, tabelas de dados e handles ativos
Alterado (Changed)
- Os callbacks do provedor expõem face, peso, estilo, charset e pitch solicitados pelo PDFium, mantendo as falhas de callback dentro da fronteira nativa
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.40.0 de forma consistente
Version 3.39.0
Adicionado (Added)
AddCidType2Textembute dados TrueType fornecidos pelo chamador com geometria CID-para-GID explícita por glifo e mapeamentos CID-para-UnicodeTPdfCidFontOptionsseleciona embutimento completo, subsetting preferido com fallback ou subsetting obrigatório e configura orçamentos delimitados de fonte, glifos e UnicodeTPdfCidFontReportrelata decisões de subset, tamanhos em bytes, glifos únicos, estado de embutimento, texto esperado, texto extraído e integridade da extração
Alterado (Changed)
- O subsetting TrueType preserva identificadores de glifo solicitados, rejeita saídas inseguras e reverte todos os objetos de página inseridos se a verificação de mapeamento ou extração falhar
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.39.0 de forma consistente
Version 3.38.0
Adicionado (Added)
BuildReflowDocumentcria uma árvore de nós semânticos reutilizável e delimitada a partir da estrutura Tagged PDF ou de inferência de layout físico em um intervalo de páginas selecionadoTPdfReflowDocument.ToHtmlemite títulos responsivos com escape, parágrafos, listas, figuras, legendas, seções de página e tabelas com semântica de cabeçalho e spanTPdfReflowOptionscontrola detecção de tabelas, seções de página, geometria, CSS, quebras de linha, intervalo de páginas, cancelamento e orçamentos de recursos
Alterado (Changed)
- O conteúdo de tabela substitui blocos de parágrafo sobrepostos durante o reflow, e o estado da página ativa é restaurado após sucesso, falha ou cancelamento
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.38.0 de forma consistente
Version 3.37.0
Adicionado (Added)
ApplyOcrSearchLayerrenderiza páginas selecionadas por meio do PDFium e envia pixels BGRA top-down delimitados a umIPdfOcrProviderfornecido pelo chamadorTPdfOcrWordcarrega texto Unicode, confiança e quadriláteros em espaço de pixels que são mapeados pela geometria nativa da página em texto pesquisável invisívelTPdfOcrReportregistra conclusão por página, ignorações por texto existente, falhas, cancelamento, pixels renderizados e palavras aceitas ou rejeitadas
Alterado (Changed)
- A inserção de OCR preserva os fluxos de imagem da digitalização original, filtra resultados malformados ou de baixa confiança, confirma uma vez por página e restaura a página ativa
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.37.0 de forma consistente
Version 3.36.0
Adicionado (Added)
ExtractTablesdetecta tabelas com linhas físicas e alinhadas por espaços em branco a partir da geometria nativa de palavras e linhas de caminho transformadasTPdfTablerelata linhas, colunas, spans mesclados, limites de página, células de cabeçalho, modo de detecção, confiança e saída direta em CSV ou JSONExtractDocumentTablesexamina todas as páginas sob orçamentos compartilhados e marca tabelas correspondentes que continuam pelos limites de páginas
Alterado (Changed)
- A extração de tabelas impõe limites configuráveis de palavras, linhas, células e tabelas e restaura a página ativa após varreduras em nível de documento
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.36.0 de forma consistente
Version 3.35.0
Adicionado (Added)
GenerateTaggedLayoutcria um novo documento de layout semântico com conteúdo marcado nativo, uma árvore de estrutura Document, mapeamentos ParentTree e IDTree e metadados de idioma do documentoTPdfLayoutSemanticsmodela títulos, seções, listas, figuras, legendas, tabelas, associações de cabeçalho, spans, texto alternativo, texto atual, idiomas e IDs de elementoTPdfLayoutDocument.AddLinkemite anotações URI Link e associa cada anotação ao seu elemento de estrutura Link por meio de mapeamentos OBJR e StructParent
Alterado (Changed)
- O texto de layout usa semântica de parágrafo por padrão, enquanto cabeçalhos, rodapés, réguas, imagens e formulários reutilizáveis tornam-se artefatos por padrão, a menos que explicitamente marcados
- A validação do plano semântico rejeita IDs duplicados, pais ausentes, ciclos, contenção inválida de lista ou tabela, figuras sem texto de substituição e IDs de cabeçalho de tabela não resolvidos antes da emissão do documento
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.35.0 de forma consistente
Version 3.34.0
Adicionado (Added)
TPdf.AddShapedTextgrava execuções de glifos RTL, bidi, contextuais e ligaduras por meio da modelagem nativa do sistema e das APIs de fonte CID Type 2 do PDFiumShapePdfTexteTPdfUniscribeTextShaperexpõem IDs de glifo posicionados, avanços, deslocamentos, clusters de origem, posições de execução visual e níveis bidi sem modificar um documento
Alterado (Changed)
- Os mapas ToUnicode gerados cobrem todos os glifos modelados, enquanto
ActualTextarmazena a string Unicode lógica original para extração em conformidade e consumidores de acessibilidade - Strings de conteúdo marcado com marcas de ordem de bytes UTF-16 agora decodificam corretamente por meio de
PageObjectMarks TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.34.0 de forma consistente
Version 3.33.0
Adicionado (Added)
TPdfLayoutCachedNodeconstrói conteúdo de layout subclassificado no primeiro uso e suporta posicionamentos escalados repetidos por meio deAddCachedNodeTPdfLayoutPlanrelata acertos e falhas do cache de medição, posicionamentos de nós em cache e XObjects nativos reutilizados
Alterado (Changed)
BuildPlanreutiliza planos correspondentes por restrições completas de página e identidades de conteúdo, fonte, estilo, origem e medidor, sem repetir a medição de textoGenerateLayoutconverte cada nó em cache único em um XObject vinculado ao destino e cria objetos Form leves para cada posicionamentoTPdf.AboutInfo, os metadados do pacote e os metadados do instalador agora relatam Version 3.33.0 de forma consistente
Version 3.32.0
Adicionado (Added)
TPdfLayoutDocumentconstrói texto quebrado, espaçadores, réguas, imagens, XObjects de página reutilizáveis, quebras de página explícitas, cabeçalhos e rodapés em um plano de páginas medidoGenerateLayoutpagina o layout completo antes de acrescentar atomicamente páginas e objetos de página nativos, com referências estáveis{page}e{pages}
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote e os metadados do instalador agora relatam Version 3.32.0 de forma consistente
Version 3.31.0
Adicionado (Added)
- Os builders de
TPdfPagePlandescrevem operações de página de excluir, mover, inserir, dividir e mesclar sem aplicá-las ValidatePagePlanretorna o mapa exato de páginas antigo-para-novo e inventaria marcadores, destinos nomeados, rótulos de página, campos de formulário, páginas marcadas, recursos importados e assinaturas afetados
Segurança (Security)
- Planos que deixariam alvos de navegação pendentes ou alterariam conteúdo assinado sem autorização explícita são rejeitados antes de qualquer operação nativa de página ser executada
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.31.0 de forma consistente
Version 3.30.0
Adicionado (Added)
SaveRecoverySnapshotgrava um pacote de recuperação limitado em tamanho e protegido por checksum, contendo a impressão digital da origem e o diário de edições de documento verificadoRestoreRecoverySnapshotreproduz um pacote de recuperação somente quando seu checksum, cadeia de diário, impressão digital da origem e impressão digital recuperada correspondemEnableRecoveryAutosaveatualiza atomicamente um arquivo de recuperação explícito após cada commit, undo ou redo alterado, sem regravar o PDF de origem
Alterado (Changed)
InspectRecoverySnapshotrelata origem de recuperação, impressões digitais, contagem de entradas, posição e armazenamento delimitado sem aplicar o pacoteImportEditJournale a restauração de recuperação agora exigem autorização explícita deAllowSignedDocumentantes de aplicar edições a um PDF assinado- O armazenamento do pacote de recuperação usa o repositório de acesso aleatório delimitado configurado e substituição write-through no mesmo diretório para diários grandes e atualizações de autosave seguras contra falhas
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.30.0 de forma consistente
Version 3.29.0
Adicionado (Added)
BeginEditTransaction,CommitEditTransactioneRollbackEditTransactionagrupam edições arbitrárias de documento nativo em transações atômicasUndoEditeRedoEditaplicam deltas inversos e diretos verificados por SHA-256 em alterações de página, objeto, anotação, anexo e metadadosExportEditJournaleImportEditJournalpersistem deltas portáteis delimitados com validação de impressão digital da origem e cadeia de digestas para reprodução posterior
Alterado (Changed)
- Os snapshots de transação usam saída nativa reproduzível, de modo que commits inalterados permaneçam vazios mesmo quando salvamentos comuns do PDFium contêm identificadores ou carimbos de data/hora não determinísticos
- Commits com falha e reprodução de diário inválida restauram atomicamente o documento carregável anterior, enquanto a contagem de entradas, os bytes armazenados e o tamanho do snapshot permanecem sob limites configurados pelo chamador
- PDFs assinados exigem autorização explícita de
AllowSignedDocumentantes que uma transação de edição de documento comece TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.29.0 de forma consistente
Version 3.28.0
Adicionado (Added)
TPdf.InspectOptionalContentenumera camadas OCG, configurações padrão e alternativas, estados de uso View/Print/Export, metadados de zoom e idioma, camadas bloqueadas, arrays de ordem, grupos de rádio, políticas OCMD, expressões de visibilidade e estado efetivo de renderizaçãoTPdf.SaveAsOptionalContentConfiguredgrava uma cópia estritamente verificada com estados de camada selecionados pelo chamador para um uso e configuração escolhidos
Alterado (Changed)
- A saída de estado de camada agora atualiza tanto os arrays de configuração
/ONe/OFFquanto os dicionários de estado Usage do OCG, de modo que o PDFium aplique a visibilidade solicitada por meio de seu contexto nativo de renderização - Gravações de configuração rejeitam grupos desconhecidos, alterações em camadas bloqueadas, conflitos de grupos de rádio, arquivos preparados criptografados e arquivos assinados sem autorização explícita, e removem regras de estado automático por padrão para manter o resultado selecionado determinístico
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.28.0 de forma consistente
Version 3.27.0
Adicionado (Added)
TPdf.RenderPageByIndexrenderiza qualquer página baseada em um em um tamanho exato de pixels sem alterar a página ativa de edição nem disparar eventos de mudança de páginaPageSceneCacheCapacity,PageSceneCacheCounteClearPageSceneCacheexpõem controle e diagnóstico delimitados do cache de cenas
Alterado (Changed)
- Renderizações de páginas indexadas, miniaturas renderizadas e extração de miniaturas embutidas agora reutilizam o estado de página analisado do PDFium por meio de um cache LRU de oito entradas por padrão
- As entradas de cena são invalidadas na ativação de página, edição, alterações na árvore de páginas, callbacks de estado de formulário, limpeza explícita e desmontagem do documento, com renderizações em andamento retidas com segurança até a liberação
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.27.0 de forma consistente
Version 3.26.0
Adicionado (Added)
TPadesSignatureAlgorithmInforelata os OIDs de digesta, assinatura, chave pública e curva nomeada de cada assinante CMS, junto com seu estado de política de algoritmo avaliado de forma independenteInspectPadesSignatureAlgorithmeEvaluatePadesSignatureAlgorithmreconhecem os perfis P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519 e Ed448
Segurança (Security)
- A validação PAdES agora rejeita divergências de curva elíptica e de digesta, OIDs de assinatura ECDSA que divergem da digesta CMS, parâmetros EC sem nome, parâmetros Ed25519 e comprimentos de saída SHAKE256 Ed448 diferentes de 512 bits
- A verificação CMS nativa permanece a fonte de validade criptográfica, enquanto algoritmos indisponíveis e curvas não reconhecidas são relatados como
pcsUnsupportedem vez de serem tratados como assinaturas inválidas TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.26.0 de forma consistente
Version 3.25.0
Adicionado (Added)
TPdf.ExportObjectGraphexporta objetos ativos clássicos, de xref-stream e de object-stream como JSON tipado delimitado, com dicionários, arrays, strings, nomes, valores escalares, referências indiretas, contagens de bytes de fluxo e digestas SHA-256 de fluxo opcionais explícitosTPdf.SaveAsObjectGraphPatcheddefine ou remove valores de nível superior de dicionário verificados por esquema por meio de valores de patch tipados de null, Boolean, inteiro, real, name, text-string e indirect-reference
Segurança (Security)
- A exportação do grafo de objetos impõe orçamentos de objetos, recursão, strings e bytes de saída, enquanto o patching valida cada operação antes da entrega e rejeita referências pendentes, operações duplicadas, entradas criptografadas, alterações protegidas de filtro ou comprimento de fluxo e documentos assinados, salvo autorização explícita
- Os patches do grafo de objetos são preparados como uma revisão incremental, materializados novamente para verificação de xref, carregados estritamente por meio do PDFium e copiados ou renomeados atomicamente somente após todas as verificações terem sucesso
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.25.0 de forma consistente
Version 3.24.0
Adicionado (Added)
TPdf.ValidatePadesTrustverifica cada assinatura detached descobrível contra oByteRangeoriginal exato, avalia a vinculação signing-certificate-v2 e a confiança atual do sistema Windows e relata estados independentes de assinatura, cadeia, revogação e carimbo de data/horaTPdf.ValidatePadesTrustAsynctira um snapshot da origem carregada original antes do despacho, relata progresso em estágios para análise, criptografia, construção de cadeia, AIA, OCSP, CRL e trabalho de carimbo de data/hora RFC 3161 e suporta cancelamento cooperativoTPadesTrustValidationOptionsseleciona confiança offline ou online, verificação opcional de revogação e carimbo de data/hora, tempo limite delimitado de recuperação de URL, um token de cancelamento e um callback de progresso
Segurança (Security)
- Os tokens de carimbo de data/hora de assinatura e Document Time-stamp agora validam sua impressão de mensagem SHA-256, assinatura CMS anexada, cadeia TSA e estado opcional de revogação de forma independente da assinatura comum do documento
- A validação de confiança nunca calcula o hash de uma cópia regravada pelo PDFium, usa por padrão recuperação de certificados somente do cache offline e relata estados sem suporte ou indeterminados em vez de tratar evidências nativas indisponíveis de confiança ou revogação como válidas
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.24.0 de forma consistente
Version 3.23.0
Adicionado (Added)
TPdf.RenewPadesArchiveTimestampeRenewPadesArchiveTimestampToStreamacrescentam um novo Document Time-stamp RFC 3161 a uma cadeia de assinaturas PAdES existente sem alterar quaisquer bytes históricosTPadesArchiveTimestampOptionscontrola acesso TSA, nonce, capacidade de token reservada e uma atualização DSS completa opcional, enquantoTPadesArchiveTimestampReportregistra os níveis de origem e resultado, comprimentos de cadeia, comprimentos em bytes e identidade do carimbo de data/hora retornado
Corrigido (Fixed)
- A saída PAdES B-LTA nova e renovada declara ESIC ExtensionLevel 2, enquanto a validação B-LT não exige mais Level 2, a menos que um Document Time-stamp esteja presente
Segurança (Security)
- A renovação calcula o hash dos bytes originais carregados exatos mais qualquer atualização DSS solicitada, rejeita origens criptografadas ou incompletas, valida o resultado B-LTA descobrível antes de gravar a saída e prepara a saída de arquivo antes da substituição
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.23.0 de forma consistente
Version 3.22.0
Adicionado (Added)
TPdf.AnalyzeSignatureRevisionsreconstrói a cadeia original de revisões incrementais e retorna alterações de objeto por assinatura classificadas contra permissões DocMDP e FieldMDPTPadesRevisionAnalysisReportdistingue atualizações permitidas de formulário, anotação, assinatura e material de validação de alterações não permitidas de página ou documento, casos não resolvidos e definições sombra suspeitas
Segurança (Security)
- A análise de revisões detecta definições de objetos sem referência, redefinições de objetos de assinatura, conteúdo ativo, cadeias de revisão malformadas e objetos compactados não resolvidos, impondo orçamentos delimitados de revisões, objetos e alterações
- A análise sempre usa o arquivo original carregado, buffer de memória, fluxo personalizado ou origem progressiva concluída, em vez de bytes regravados pelo PDFium
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.22.0 de forma consistente
Version 3.21.0
Adicionado (Added)
TPdf.PreparePadesRemoteSignaturecria um placeholder de largura fixa para assinatura detached e retorna uma solicitação persistente contendo a digesta SHA-256 do documento, oByteRangeexato, as coordenadas de reserva e a impressão digital do PDF preparadoTPdf.CompletePadesRemoteSignatureconclui sessões de assinatura HSM, em nuvem ou interrompidas após validar a solicitação persistida e o CMS retornadoTPdf.SavePadesRemoteSigningRequesteTPdf.LoadPadesRemoteSigningRequestfornecem um formato binário versionado e estável de sessão para limites de processo e de máquina
Segurança (Security)
- A conclusão rejeita PDFs preparados modificados, coordenadas de
ByteRangealteradas, placeholders não vazios reutilizados, valores CMS oversized, formas SignedData sem suporte, atributos signing-certificate-v2 ausentes e digestas de mensagem CMS que não correspondem ao documento preparado TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.21.0 de forma consistente
Version 3.20.0
Adicionado (Added)
TPadesDssOptions.Vrisgrava um dicionário indireto/Type /VRIpor assinatura, chaveado pelo SHA-1 em maiúsculas do valor/Contentsdecodificado completo, incluindo o preenchimentoTPadesDssVriseleciona material de certificado, OCSP e CRL por meio de índices validados, enquanto a assinatura PAdES B-LT e B-LTA agora cria o VRI da nova assinatura automaticamente
Alterado (Changed)
- Certificados DSS, respostas OCSP e CRLs são deduplicados por hash de conteúdo com ordenação estável de primeira ocorrência, verificações de colisão de bytes exatos e remapeamento de referências VRI antes que quaisquer bytes de destino sejam gravados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.20.0 de forma consistente
Version 3.19.0
Adicionado (Added)
TPdf.GetStructuredTextconverte a página atual em registros reutilizáveis de bloco, linha e span estilizado, preservando índices de caracteres de origem, escalares Unicode, geometria, nomes de fonte, tamanhos, pesos e ângulos de textoTPdfStructuredTextOptionsseleciona ordem de content-stream ou layout físico, enriquecimento opcional de fonte e semântica e um orçamento máximo de caracteres com falha fechada- Fragmentos Tagged PDF e de conteúdo legível heurístico enriquecem blocos com tipo de estrutura, nível de título, idioma, origem e identidade de elemento de estrutura, enquanto o texto alternativo de Figure sem correspondência permanece representado
Alterado (Changed)
- A extração de layout físico agora usa ordenação de caracteres O(n log n), buffers de linha e span de crescimento geométrico, agrupamento de linhas e colunas, construção de Unicode em buffer e cache de fontes de objetos de texto adjacentes não nulos para desempenho previsível em páginas grandes
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.19.0 de forma consistente
Version 3.18.0
Segurança (Security)
TPdf.SaveAsRedactedaplica cada retângulo/Redacta um snapshot isolado do documento, remove cada objeto de página de nível superior que cruza e pinta um retângulo de substituição opaco sem alterar o documento carregado- A saída redigida remove anotações de redação, remove opcionalmente outras anotações que cruzam, exclui anexos embutidos nativos e retira do catálogo
/AF, conteúdo ativo, formulários, metadados e objetos de revisões anteriores inalcançáveis TPdfRedactionOptionscontrola a cor de substituição, a remoção de anotações sobrepostas e um orçamento de varredura de objetos de página com falha fechada, enquantoTPdfRedactionReportregistra cada remoção e métrica de saídaTPdfSanitiseOptions.StripAssociatedFilesagora remove referências de arquivos associados em nível de catálogo por padrão
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.18.0 de forma consistente
Version 3.17.0
Adicionado (Added)
TPdf.RenderPagesParallelrenderiza simultaneamente solicitações de páginas baseadas em um, enquanto cada trabalhador possui um módulo PDFium, documento e estado de página carregados de forma independente, originados de um único snapshot do documento capturadoTPdfParallelRenderOptionscontrola DPI, contagem de trabalhadores, rotação, flags nativas de renderização, cor de fundo, limites de pixels por página e limites agregados de saída retidaTPdfParallelRenderReportpreserva a ordem das solicitações e retorna buffers BGRA ou RGBA top-down de propriedade do chamador, com sucesso, cancelamento, falha, dimensões, tempo e detalhes de diagnóstico por página- A renderização progressiva dos trabalhadores consulta
IPdfCancellationTokenentre blocos nativos, enquanto solicitações inválidas e falhas de orçamento permanecem isoladas em seus resultados correspondentes TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.17.0 de forma consistente
Version 3.16.0
Adicionado (Added)
TPdfEncryptionRevision.erR7adiciona saída ISO/TS 32003 AES-256-GCM com/V 6,/R 7,/CFM /AESV4e a extensão de desenvolvedor PDF 2.0 exigida- Cada string e fluxo criptografado recebe um IV exclusivo de 96 bits, texto cifrado de comprimento inalterado e uma tag de autenticação de 128 bits, enquanto
EncryptMetadata = Falsepreserva os bytes do fluxo de metadados DecryptAesGcmDocumentBytesvalida senhas de usuário ou proprietário, permissões criptografadas, dados PDF MAC independentes opcionais e cada tag GCM antes de retornar bytes de texto simples compatíveis com o PDFium- A saída AESV4 pode ser combinada com
TPdfEncryptOptions.EnableIntegrityProtection, de modo que a autenticação GCM por objeto e a proteção ISO/TS 32004 PDF MAC do documento inteiro coexistam - A criptografia agora usa entradas clássicas válidas de referência cruzada em vez de interpretar texto em forma de objeto dentro de dados de fluxo como objetos indiretos
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.16.0 de forma consistente
Version 3.15.0
Adicionado (Added)
TPdfEncryptOptions.EnableIntegrityProtectiongrava códigos de autenticação ISO/TS 32004 PDF MAC independentes para documentos AES-256 Standard Security Handler revisão 5 e 6TPdf.ValidatePdfMacverifica os bytes originais exatos da origem, o/ByteRangeestrito que cobre o EOF, oAuthenticatedDataCMS, a chave de arquivo derivada por senha, os atributos autenticados, a chave MAC encapsulada e o valor HMACFPdfHmacadiciona HMAC-SHA256 e HKDF-SHA256, enquantoFPdfAesadiciona primitivos RFC 3394 AES-256 Key Wrap e de desencapsulamento autenticadoTPdfMacValidationResultdistingue códigos de autenticação válidos, ausentes, inválidos e sem suporte, com texto de diagnósticoTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.15.0 de forma consistente
Version 3.14.0
Adicionado (Added)
TPdf.ValidatePadesagora verifica assinaturas CMS detached contra os segmentos/ByteRangeoriginais exatos no Windows, incluindo atributos assinados e o valor da assinaturaTPadesValidationResultexpõe o status agregado de integridade e os estados por assinatura de ByteRange, CMS,signing-certificate-v2, confiança do sistema, revogação e carimbo de data/hora, sem conflitar evidências sem suporte ou não verificadas com uma assinatura inválida- A vinculação do certificado do assinante é verificada com SHA-256, as cadeias de certificados usam avaliação de confiança do sistema Windows somente pelo cache e os códigos de erro nativos permanecem disponíveis para diagnóstico
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.14.0 de forma consistente
Version 3.13.1
Corrigido (Fixed)
TPdf.ValidatePadesagora inspeciona o arquivo original, a memória em buffer ou os bytes do fluxo personalizado, em vez de uma cópia regravada pelo PDFium que poderia invalidar offsets ou descartar dicionários de assinatura- As verificações de
/ByteRangePAdES agora aceitam assinaturas que cobrem uma revisão PDF completa anterior seguida de atualizações incrementais válidas, validando também intervalos de Document Time-stamp TPadesValidationResult.SourceStatusdistingue a validação da origem original de entrada progressiva indisponível ou incompleta, e predicados de conformidade rejeitam resultados sem bytes originaisTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.13.1 de forma consistente
Version 3.13.0
Adicionado (Added)
FPdfSha3fornece primitivos SHA3-256, SHA3-384, SHA3-512 e SHAKE256 sem dependências para ISO/TS 32001 e trabalhos criptográficos relacionados do PDF 2.x- Contextos incrementais absorvem entrada dividida arbitrariamente, enquanto SHAKE256 suporta chamadas squeeze repetidas e saída que cruza limites de taxa de sponge
- Auxiliares de uso único para array de bytes e hexadecimal em minúsculas complementam a API de streaming, com validação explícita de ciclo de vida e tamanho em Delphi, C++Builder e Lazarus
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.13.0 de forma consistente
Version 3.12.0
Adicionado (Added)
TPdf.ImportFDFimporta dados de formulário FDF de arquivos ou fluxos e aplica valores analisados pelo caminho existente de campos de widgetFdfImportFromStreameFdfImportFromFileanalisam campos hierárquicos diretos ou indiretos, strings literais e hexadecimais de PDF, PDFDocEncoding, texto Unicode, valores de nome e valores vazios explícitos sob orçamentos delimitados de recursos- A exportação FDF agora grava nomes e valores de campos não ASCII como strings de texto UTF-16BE em conformidade com os padrões e aplica escape com segurança a nomes de arquivos de origem
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.12.0 de forma consistente
Version 3.11.0
Adicionado (Added)
TPdf.DetectPageSkewrenderiza a página atual em DPI baixo e detecta o ângulo de inclinação projetando pixels escuros em ângulos de rotação candidatos, retornando o ângulo que maximiza a variância da soma das linhas (alinhamento de linhas de texto) com precisão de ~0.1 grauTPdfSkewReportexpõe o ângulo detectado, a confiança e as dimensões da amostraTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.11.0 de forma consistente
Version 3.10.0
Adicionado (Added)
TPdf.GetTextInReadingOrderextrai o texto da página atual em ordem bruta de content-stream ou em ordem de layout físico (de cima para baixo, da esquerda para a direita) por meio deFPDFText_GetCharBox+ extração de caracteres ordenada por posição, de modo que texto multicoluna e visualmente reordenado seja lido naturalmente- O enum
TPdfReadingOrderseleciona entreroContentOrdereroPhysicalLayout TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.10.0 de forma consistente
Version 3.09.0
Adicionado (Added)
TPdfImageOptimizeOptions.PreserveBilevelignora imagens bilevel de 1 bit (digitalizações ImageMask / line-art) duranteOptimizeImages, de modo que a subamostragem por vizinho mais próximo não destrua suas bordas nítidasTPdfImageOptimizeOptions.MinDimensionignora imagens menores que o limite (tipicamente ícones ou elementos decorativos que não se beneficiam de redução adicional)TPdfImageOptimizeOptions.Defaultfornece o ponto de partida recomendado (destino de 150 DPI, razão 1.5, bilevel preservado, dimensão mínima 8)TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.09.0 de forma consistente
Version 3.08.0
Adicionado (Added)
TPdfTileCachefornece um cache LRU delimitado de ladrilhos de página renderizados, chaveado por revisão do documento, página, zoom, rotação, flags de renderização e retângulo de dispositivo, de modo que ladrilhos inalterados não sejam renderizados novamente em repinturas e ladrilhos obsoletos de um salvamento anterior sejam removidos automaticamenteTTileKeyexpõe a chave de cache composta com uma fábricaCreateestática e um comparadorEqualsTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.08.0 de forma consistente
Version 3.07.0
Adicionado (Added)
TPdf.GetAnnotationFontColoreTPdf.SetAnnotationFontColorencapsulamFPDFAnnot_GetFontColoreFPDFAnnot_SetFontColor, antes vinculadas mas nunca usadas, expondo leitura e escrita da cor do texto do widget para edição de campos de formulário sem tocar diretamente no dicionário da anotaçãoTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.07.0 de forma consistente
Version 3.06.0
Adicionado (Added)
TPdf.RenderPageBandedrenderiza a página atual em faixas horizontais por meio de um callback, permitindo que pôsteres e páginas de engenharia sejam exportados sem nunca alocar um bitmap de destino completo — cada faixa é renderizada em umTBitmaprecém-criado com a altura de faixa solicitada e é liberado após o retorno do callbackTPdfBandCallbackexpõe o contrato por faixa (índice da faixa, deslocamento top-y, bitmap) com um retorno Boolean que permite aos chamadores cancelar a renderização em faixas antecipadamenteTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.06.0 de forma consistente
Version 3.05.0
Adicionado (Added)
TPdf.RenderPageProgressiveWithColorSchemeconduz o laço nativo de renderização progressiva com um esquema de cores para baixa visão por meio deFPDF_RenderPageBitmapWithColorScheme_Start, permitindo que chamadores substituam as cores de preenchimento / traçado de caminho e de preenchimento / traçado de texto para acessibilidade, mantendo o laço Continue com reconhecimento de cancelamentoTPdfColorSchemeexpõe os quatro campos de substituiçãoTColor, com umDefaultque delega às cores integradas do PDFium quando todos os campos sãoclDefaultTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.05.0 de forma consistente
Version 3.04.0
Adicionado (Added)
TPdf.ExportFDFserializa valores de campos de formulário como um documento FDF (ISO 32000-1 §12.7.11) ao lado do caminho XFDF existente, reutilizando o mesmo modelo de dadosTXfdfField, de modo que os chamadores coletem campos uma vez e emitam qualquer um dos formatosFdfExportToStreameFdfExportToFileemFPdfXfdfexpõem o serializador FDF de baixo nível para chamadores que constroem coleções de campos independentemente de umTPdfcarregadoTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.04.0 de forma consistente
Version 3.03.0
Adicionado (Added)
TPdf.SaveAsSanitisedgrava uma cópia limpa de revisão única que retira o conteúdo ativo do catálogo (/OpenAction,/AAdo catálogo,/Names,/AcroForm,/Metadata) e depois poda objetos inalcançáveis, de modo que os corpos órfãos de JavaScript, ações e anexos desapareçam do corpo do arquivoTPdfSanitiseOptionsexpõe controles de remoção independentes por vetor, além de uma passagem opcional de poda por alcançabilidade;TPdfSanitiseReportregistra a contagem de entradas removidas, a contagem de objetos podados, as contagens de bytes e qualquer erroTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.03.0 de forma consistente
Version 3.02.0
Adicionado (Added)
TPdf.SaveAsPageLabelledgrava uma cópia PDF completa cuja árvore de números/PageLabelsdo catálogo é substituída pelos intervalos fornecidos, aplicando estilos de numeração decimais, romanos em maiúsculas/minúsculas e letras em maiúsculas/minúsculas, com strings de texto de prefixo e números iniciais opcionais conforme ISO 32000-1 §12.4.2TPdfPageLabelRange,TPdfPageLabelRanges,TPdfPageLabelStyleeTPdfPageLabelReportexpõem o modelo de intervalos, o enum de estilos e as contagens de bytes/intervalos por salvamento- Entradas existentes de
/PageLabelsdo catálogo são detectadas e rejeitadas, a menos queReplaceExisting=Trueseja passado; nesse caso, a entrada antiga é removida antes que os novos intervalos sejam injetados TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.02.0 de forma consistente
Version 3.01.0
Adicionado (Added)
TPdf.FlattenPageRotationfixa o/Rotateatual de cada página no fluxo de conteúdo, nas caixas de página e nos retângulos de anotação, e depois redefine/Rotatepara 0 — encapsulandoFPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotation, de modo que o layout visual seja preservado sem depender da dica de exibição de rotaçãoTPdfFlattenRotationOptionsexpõe controles por página de transformação de anotação, troca de caixa de página e atualização automática;TPdfFlattenRotationReportregistra páginas processadas, ignoradas e com falha, além do total de objetos e anotações transformadosTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.01.0 de forma consistente
Version 3.00.0
Adicionado (Added)
TPdf.StampPagesFromPdfestampa uma página de origem como uma sobreposição ou subposição Form XObject posicionada, escalada e opcionalmente rotacionada em uma ou mais páginas de destino, encapsulandoCreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndexcom políticas explícitas de caixa de página, âncora, margem, escala, rotação, mesclagem e ordem-zTPdfOverlayOptionseTPdfOverlayReportexpõem os controles de posicionamento, transformação, mesclagem e ordem-z, além das contagens por página de estampadas, com falha e ignoradasTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 3.00.0 de forma consistente
Version 2.99.0
Adicionado (Added)
TPdf.RefreshAppearanceregenera seletivamente o fluxo de aparência de um único widget por meio deFPDFAnnot_SetAP, evitando uma reconstruçãoNeedAppearancesde página inteiraTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.99.0 de forma consistente
Version 2.98.0
Adicionado (Added)
TPdfView.MouseDownagora roteia eventos de botão direito ao mecanismo nativo de preenchimento de formulário por meio deFORM_OnRButtonDown, habilitando menus de contexto e interações de widget no clique direito- Os itens 78 do mapa de rotas (mapeamento de anotações de link), 82 (apresentação de widget) e 83 (modelo de atributos de estrutura) foram confirmados como já concluídos por meio da infraestrutura existente
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.98.0 de forma consistente
Version 2.97.0
Adicionado (Added)
TPdf.SetDeterministicTimeeTPdf.RestoreActualTimepermitem que testes e builds reproduzíveis injetem um tempo fixo de criação, modificação e tempo atual por meio de callbacks nativos com suporteTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.97.0 de forma consistente
Version 2.96.0
Adicionado (Added)
TPdf.GetWidgetAdditionalActionJavaScriptlê o JavaScript de ação adicional do widget para um gatilho de evento fornecido por meio deFPDFAnnot_GetFormAdditionalActionJavaScript, sem executar nenhum scriptTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.96.0 de forma consistente
Version 2.95.0
Adicionado (Added)
TPdf.GetObjectTextextrai o texto Unicode de um objeto de página de texto por meio deFPDFTextObj_GetText, para edição precisa de conteúdo e diagnóstico de codificaçãoTPdf.GetObjectsByTyperetorna os índices de todos os objetos de página que correspondem a uma categoria (texto, caminho, imagem, formulário, sombreamento), para saída seletiva por categoriaTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.95.0 de forma consistente
Version 2.94.0
Adicionado (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValueeSetAttachmentStringValueleem, gravam e sondam valores personalizados de extensão de file-spec em anexos embutidosTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.94.0 de forma consistente
Version 2.93.0
Adicionado (Added)
TPdf.InsertObjectAtIndexinsere um objeto de página em uma posição solicitada da pilha por meio deFPDFPage_InsertObjectAtIndex, em vez de sempre acrescentarTPdf.UpdateAnnotationObjectconfirma um objeto de aparência de anotação editado por meio deFPDFAnnot_UpdateObject, de modo que alterações em objetos de página pertencentes a anotações persistam de forma confiávelTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.93.0 de forma consistente
Version 2.92.0
Adicionado (Added)
TPdf.InsertClipPathcria um caminho de recorte retangular e o insere na página atual pelos caminhos nativosFPDF_CreateClipPatheFPDFPage_InsertClipPath, complementando o inspetorPageObjectClipPathexistenteTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.92.0 de forma consistente
Version 2.91.0
Adicionado (Added)
TPdf.GetPageComplexityexamina a página atual e relata contagens de objetos de imagem, caminho e texto, além do total de segmentos de caminho, total de pixels de imagem e presença de transparência, para planejamento de renderizaçãoTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.91.0 de forma consistente
Version 2.90.0
Adicionado (Added)
TPdf.IsAnnotationSubtypeSupportedpergunta à DLL PDFium carregada quais subtipos de anotação ela suporta antes da ediçãoTPdf.ChooseRenderFlagsseleciona flags nativas de renderização (halftone, cache de imagens limitado) a partir da escala final e do tamanho de destino, para subamostragem adaptativa de imagensTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.90.0 de forma consistente
Version 2.89.0
Adicionado (Added)
TPdf.GetTextRenderModeexpõe o modo nativo de renderização de texto (preenchimento, traçado, recorte) de um objeto de página de texto, para diagnóstico de autoriaTPdf.GetTextObjectRenderedBitmaprenderiza um único objeto de texto em um bitmap isolado pelo caminho nativoFPDFTextObj_GetRenderedBitmapTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.89.0 de forma consistente
Version 2.88.0
Adicionado (Added)
TPdf.GetThumbnailagora recorre à renderização de uma substituição quando a página não tem miniatura embutida, implementando a preferência de miniatura embutida primeiroTPdf.LinkAtPointretorna se existe um link nativo em uma coordenada do espaço da página usandoFPDFLink_GetLinkAtPoint, em vez de varreduras somente por retângulosTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.88.0 de forma consistente
Version 2.87.0
Adicionado (Added)
TPdf.AuditActiveContentretorna um snapshotTPdfActiveContentAuditcom a contagem de ações JavaScript, contagem de arquivos embutidos, contagem de assinaturas, tipo de formulário XFA e permissões do documento, sem executar nenhum script ou açãoTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.87.0 de forma consistente
Version 2.86.0
Adicionado (Added)
TPdf.GetFeatureInventoryexamina cada página uma vez e retorna um registro unificado das contagens de objetos de texto, caminho, imagem, Form XObject e sombreamento, junto com fatos de anexos, assinaturas, tipo de formulário, permissões e versão de PDFTPdfFeatureInventoryagrega em um único snapshot fatos de todo o documento que antes exigiam chamadas de propriedade separadasTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.86.0 de forma consistente
Version 2.85.0
Adicionado (Added)
TPdf.SaveAsReproducibleregrava o documento de modo que dois salvamentos do mesmo estado em memória produzam saída idêntica em bytes- Carimbos de data/hora não determinísticos de
/Info(/CreationDate,/ModDate) são removidos e o/IDda origem (derivado de bytes dependentes do relógio) é omitido, enquanto a ordem e a geração dos objetos permanecem estáveis TPdfReproducibleReportrelata contagens de objetos mantidos e podados, além do número de entradas de carimbo de data/hora removidasTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.85.0 de forma consistente
Version 2.84.0
Adicionado (Added)
TPdf.SaveAsInlineImagesExternalisedregrava o documento extraindo cada imagem embutidaBI/ID/EIem um XObject de imagem reutilizável e substituindo o bloco embutido por um operador/ImN Do- Abreviações do dicionário de imagem embutida (
/W,/H,/BPC,/CS,/F, valores de espaço de cores e valores de filtro) são expandidas para seus nomes completos de image-XObject, de modo que o objeto extraído fique em conformidade com os padrões - O dicionário
/Resources /XObjectda página é atualizado com as novas referências de XObject, e o fluxo de conteúdo regravado é compactado com Flate TPdfInlineImageExternaliseReportrelata contagens de externalizadas, ignoradas e com falha, além da contagem de XObjects criadosTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.84.0 de forma consistente
Version 2.83.0
Adicionado (Added)
TPdf.SaveAsFlateRecompressedregrava o documento e recodifica fluxosFlateDecodeelegíveis com compactação máxima, substituindo um fluxo somente quando a economia medida de bytes supera um limite definido pelo chamadorTPdfFlateRecompressOptionsseleciona uma economia mínima em bytes e uma razão de economia mínima, de modo que fluxos já ótimos permaneçam intactosTPdfFlateRecompressReportrelata contagens de fluxos recomprimidos, ignorados e com falha, junto com os totais de bytes dos fluxos originais e recomprimidos- Números e gerações de objetos permanecem estáveis; somente as cargas de fluxo recomprimidas e seus valores diretos de
/Lengthmudam, de modo que toda referência cruzada sobrevivente permanece válida TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.83.0 de forma consistente
Version 2.82.0
Adicionado (Added)
TPdf.OptimizeImagespercorre todos os objetos de imagem de página e subamostra aqueles cujo DPI efetivo de posicionamento excede um destino selecionado pelo chamador, confirmando então cada página tocada pelo gerador de conteúdo nativoTPdfImageOptimizeOptionsseleciona o DPI de destino e uma razão mínima, de modo que somente imagens genuinamente superamostradas sejam recodificadasTPdfImageOptimizeReportrelata contagens de imagens otimizadas, ignoradas e com falha, junto com uma mensagem estruturada de falha- A subamostragem usa uma passagem de vizinho mais próximo sobre o buffer de bitmap nativo do PDFium, preservando o formato, o stride e o canal alfa da origem, e
FPDFImageObj_SetBitmaprecodifica o sobrevivente TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.82.0 de forma consistente
Version 2.81.0
Adicionado (Added)
TPdf.SaveAsDeduplicatedregrava o documento como uma única revisão limpa que colapsa fontes, imagens e Form XObjects compatíveis em um representante compartilhado- Uma impressão digital recursiva de conteúdo combina cada dicionário de recursos, seu subgrafo totalmente alcançável e sua carga bruta de fluxo, de modo que duplicatas se mesclam somente quando todo o seu conteúdo é idêntico
- Toda referência cruzada a uma duplicata mesclada é regravada para o representante sobrevivente, enquanto a tabela clássica de referências cruzadas reconstruída mantém os números de objetos estáveis
TPdfDedupReportrelata contagens de objetos mantidos e podados, além de contagens mescladas por categoria de fontes, imagens e Form XObjectsTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.81.0 de forma consistente
Version 2.80.0
Adicionado (Added)
TPdf.SaveAsReachableregrava o documento como uma única revisão limpa que mantém somente os objetos indiretos alcançáveis a partir do catálogo e do dicionário /Info do trailerTPdfPruneReportrelata as contagens de objetos indiretos mantidos e podados, junto com os tamanhos em bytes da origem e da saída, e motivos estruturados de falha para entrada criptografada ou malformada- Objetos órfãos inalcançáveis deixados por atualizações incrementais, mesclagens de páginas ou salvamentos reparados são varridos, enquanto a referência cruzada clássica reconstruída e o trailer preservam
/Root,/Infoe/IDsem renumerar TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.80.0 de forma consistente
Version 2.79.0
Adicionado (Added)
TPdf.CreateDocumentSearchcria uma pesquisa em todo o documento, para frente ou para trás, que retorna uma correspondência por vez, sem construir um índice de texto do documento inteiroTPdfDocumentSearchResultrelata a página baseada em um, o intervalo de caracteres, o texto correspondido e os retângulos no espaço da página para cada resultado- Sessões de pesquisa aceitam
IPdfCancellationToken, retêm somente os handles atuais de página e texto do PDFium e terminam com segurança quando o documento é fechado TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.79.0 de forma consistente
Version 2.78.0
Alterado (Changed)
TPdfRangeRequestScheduleragora antecipa transferências sobrepostas de prioridade mais baixa, de modo que dicas críticas de página do PDFium não esperem atrás de downloads em segundo plano- Bytes esparsos disponíveis externamente cancelam transferências ativas redundantes, enquanto callbacks de transporte substituídos ou duplicados retornam False sem publicar cobertura obsoleta
- A promoção de prioridade preserva históricos de repetição independentes, e a antecipação de transporte não consome mais o orçamento de repetição de caudas de intervalo não afetadas
TPdfRangeRequestStatistics.SupersededRequestCountrelata trabalho de transporte deslocado por dicas de prioridade mais alta ou cobertura fornecida externamenteTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.78.0 de forma consistente
Version 2.77.0
Adicionado (Added)
TPdf.SaveAsNormalizedContentgrava conteúdo de página com sintaxe normalizada em um fluxo ou arquivo atomicamente substituído e relata contagens de páginas normalizadas, ignoradas e mescladasNormalizePdfContentSequencefornece normalização delimitada e independente de tokens para sequências decodificadas de content-stream
Alterado (Changed)
- Arrays de
/Contentsde página agora podem ser mesclados em um único fluxo, preservando strings, nomes, cargas de imagem embutida, operadores desconhecidos e estado gráfico entre fluxos - Tokens malformados, escopos de estado desequilibrados, filtros sem suporte, entrada criptografada e regravações de documentos assinados têm políticas explícitas e relatório estruturado de status
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.77.0 de forma consistente
Version 2.76.0
Adicionado (Added)
TPdfStreamInspectorinventaria objetos de fluxo PDF físicos arbitrários e relata offsets de objetos, comprimentos brutos, cadeias de filtros, DecodeParms, marcadores de arquivo externo, estado de criptografia e caminhos nativos de imagem ou anexoCopyRawDatacopia cargas codificadas completas ou janelas de bytes validadas, enquantoDecodeDataaplica preditores ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8-bit e PNG na ordem declaradaTPdfStreamInspectOptionslimita recursos de origem, brutos, decodificados, dicionário, contagem de fluxos e razão de expansão, com relatórios estruturados para limites, dados malformados, codecs sem suporte, criptografia e falhas de gravação
Alterado (Changed)
- A resolução do comprimento de fluxo agora expõe extensões exatas para valores
/Lengthdiretos e indiretos, incluindo fluxos de comprimento zero e cargas que contêm a sequência literalendstream TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.76.0 de forma consistente
Version 2.75.0
Adicionado (Added)
TPdfLoadOptionsadiciona políticas compatível, estrita e de recuperação ao carregamento por arquivo, memória, intervalo de bytes e fluxo personalizadoTPdfLoadReportrelata a rota nativa de recuperação, a validade do xref, offsets danificados, conflitos de entradas, contagens de revisões, orçamentos de auditoria e problemas estruturados para documentos clássicos, híbridos e de xref-streamTPdf.SaveAsRepairedcria uma cópia completa de revisão única e a carrega estritamente de forma independente antes de entregar o fluxo verificado ou substituir atomicamente um arquivo de destino
Alterado (Changed)
- As sobrecargas de carregamento existentes mantêm o comportamento compatível e agora publicam a validade nativa do xref e o status de recuperação por meio de
LastLoadReport - O carregamento estrito rejeita documentos que exigiram reconstrução nativa do xref ou falharam na auditoria estrutural, enquanto a saída reparada assinada exige autorização explícita do chamador
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.75.0 de forma consistente
Version 2.74.0
Adicionado (Added)
TPdf.MergeFilesmescla listas de origens baseadas em arquivos com intervalos de páginas e senhas por origem, mantendo no máximo um documento de origem abertoTPdfBatchMergeOptionsadiciona tratamento de erros parar ou ignorar, importações por origem ou em blocos, políticas de formulário e contorno, controle de inserção, callbacks de progresso, cancelamento, cópia de preferências do visualizador e controle de reversãoTPdfBatchMergeReportrelata páginas confirmadas e revertidas, resultados por origem, chamadas nativas de importação, maior lote, pico de origens abertas, detecções de políticas, problemas e o status terminal
Alterado (Changed)
- O caminho padrão em lote realiza uma importação nativa de páginas por origem, para que o PDFium possa reutilizar objetos clonados dessa origem, fechando então a origem antes de abrir o próximo arquivo
- O modo em blocos fornece pontos de cancelamento mais finos e lotes nativos menores, enquanto origens parcialmente falhas e resultados de parada ou cancelamento podem remover todas as páginas inseridas pela operação
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.74.0 de forma consistente
Version 2.73.0
Adicionado (Added)
TPdfRandomAccessStorefornece E/S sequencial e posicionada seguras para threads, mantém conteúdo pequeno em memória delimitada e transfere uma única vez para armazenamento temporário privado em um teto selecionado pelo chamadorTPdf.SaveMemoryLimiteSaveTemporaryDirectoryconfiguram o preparo de salvamento, enquantoLastSaveSpillCounteLastSaveLargestMemoryBufferexpõem diagnósticos mensuráveis por salvamento
Alterado (Changed)
- Os buffers de preparo de salvamento, conversão de padrões, validação, criptografia, DSS e PAdES agora compartilham armazenamento de trabalho delimitado, com arquivos de transbordo exclusivos com exclusão ao fechar e limpeza de memória
- Os callbacks de bloco personalizados do PDFium serializam buscas comuns de fluxo e usam leituras posicionadas independentes de cursor quando apoiados por
TPdfRandomAccessStore - A varredura de capacidades XFA baseada em arquivo agora lê blocos sobrepostos de tamanho fixo, em vez de copiar o PDF completo para a memória
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.73.0 de forma consistente
Version 2.72.0
Adicionado (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSaveeEndIncrementalSavefornecem uma sessão de revisões que acrescenta somente objetos indiretos alterados ou recém-criadosTPdfIncrementalCommitInforelata a contagem de objetos alterados, os bytes acrescentados, os bytes totais de saída e a contagem de revisões bem-sucedidas para cada commit
Alterado (Changed)
- Cada commit sujo preserva a saída anterior completa como um prefixo exato de bytes, não emite revisão quando nada mudou e continua o formato clássico ou xref-stream da origem
- A saída incremental nativa de xref-stream é reparada com seu tipo exigido, entrada própria, comprimento, índice e terminador de objeto antes de processamento adicional
- Documentos criptografados são rejeitados antes do início de uma sessão, enquanto documentos assinados exigem permissão explícita do chamador, para que a política de assinatura não possa ser contornada acidentalmente
- A sobrecarga de arquivo conclui um arquivo temporário irmão antes de substituir atomicamente o destino e reverte o estado da sessão após qualquer falha de gravação ou substituição
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.72.0 de forma consistente
Version 2.71.0
Adicionado (Added)
TPdf.SaveAsObjectStreamgrava arquivos PDF 1.5+ com grupos de objetos compactados delimitados e um xref stream puro contendo entradas type-2 completasPackPdfObjectStreamspode modernizar entradas clássicas, híbridas, de xref-stream e de object-stream existentes após resolver a revisão ativa
Alterado (Changed)
- A ordenação de objetos local à página, larguras de campo xref adaptativas, acesso direto ao catálogo e tetos configuráveis de membros e bytes decodificados equilibram o tamanho do arquivo com o desempenho de acesso aleatório
- A sobrecarga de arquivo conclui um arquivo temporário irmão antes de substituir atomicamente o destino, enquanto opções inválidas de incremento, versão e agrupamento são rejeitadas antes do início da saída
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.71.0 de forma consistente
Version 2.70.0
Adicionado (Added)
TPdf.SaveAsLinearizedgrava um PDF verdadeiro Fast Web View em um fluxo ou arquivo usando agrupamento de objetos da primeira página, duas seções de referência cruzada e tabelas de dica do Annex F com offsets de página e objetos compartilhados- Membros ativos de object-stream são materializados automaticamente, permitindo que entradas xref-stream e object-stream se tornem saída amigável a intervalos sem alterar o conteúdo visível das páginas
Alterado (Changed)
- A sobrecarga de arquivo conclui um arquivo temporário irmão antes de substituir atomicamente o destino, enquanto a sobrecarga de fluxo retém as opções normais de salvamento do PDFium e verificações explícitas de versão
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.70.0 de forma consistente
Version 2.69.0
Adicionado (Added)
TPdfRangeRequestSchedulerconverte dicas de intervalo de bytes do PDFium em trabalho de transporte priorizado, mesclado e limitado em tamanho, sem forçar um download contíguo- Conclusão total e parcial, repetições delimitadas, deduplicação de disponibilidade esparsa, estatísticas de solicitações e cancelamento seguro por geração suportam pipelines HTTP Range e de transporte personalizado
TPdfProgressiveDocument.RangeRequestsrecebe automaticamente dicas de documento, formulário e página, promovendo somente os bytes exatos que bloqueiam uma página interativa
Alterado (Changed)
CancelProgressiveLoadagora cancela o trabalho ativo de intervalos antes da desmontagem nativa de disponibilidade e fluxo, e conclusões obsoletas de transporte são ignoradas com segurançaTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.69.0 de forma consistente
Version 2.68.0
Adicionado (Added)
TPdfProgressiveDocumentmantém viva a sessão de disponibilidade do PDFium enquanto um fluxo de acesso aleatório remoto ou crescente recebe os intervalos de bytes que o PDFium solicitaCheckDocumentAvailability,CheckFormAvailabilityeLoadAvailablePageretornam dicas mescladasTPdfDownloadRange, para que um host possa buscar somente os dados necessários para abrir e exibir uma página linearizadaAvailableByteCountsuporta downloads contíguos monótonos, enquantoOnDataAvailablesuporta caches de intervalos esparsos e fora de ordem
Alterado (Changed)
- Arquivos linearizados usam as barreiras nativas progressivas de documento, formulário e página do PDFium; arquivos não linearizados mudam automaticamente para o carregador nativo de fluxo personalizado após o arquivo completo estar presente
TPdfStreamAdapterpode expor um tamanho lógico final diferente dos bytes atualmente armazenados, preservando o limite explícito de 4 GiB doFPDF_FILEACCESSTPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.68.0 de forma consistente
Version 2.67.0
Adicionado (Added)
TPdfView.AllowFormEventsdesliga os eventos de mouse, teclado e foco que o visualizador encaminha para a camada de preenchimento de formulário, para um visualizador somente leitura ou um que conduza a interação de formulário por conta própria- Os campos de formulário ainda são renderizados normalmente com ele desligado: o carregamento e o fechamento da página ficam deliberadamente sem barreira, pois esses inicializam a camada de formulário em vez de reagir à entrada
- A opção se junta aos interruptores existentes
AllowUserPageChangeeAllowUserTextSelectione tem padrão True, de modo que o comportamento existente permanece inalterado
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.67.0 de forma consistente
Version 2.66.0
Adicionado (Added)
- Ações nomeadas que um documento levanta (ISO 32000-1 §12.6.4.11) agora chegam ao host por meio do novo evento
OnNamedAction; antes, todas elas eram descartadas - Sem tratamento, os quatro nomes padrão de navegação —
NextPage,PrevPage,FirstPage,LastPage— movem a página, prendendo na primeira e na última em vez de dar a volta TPdf.PerformNamedActionpermite que um aplicativo dispare o mesmo comportamento diretamente, retornando False para um nome que não tem significado fornecido pela biblioteca
Corrigido (Fixed)
- Um teste de criptografia media o corpo de um fluxo varrendo de trás para frente a partir de
endstream, o que ocasionalmente confundia um byte de texto cifrado com um terminador de linha e relatava uma falha intermitente; a biblioteca estava correta o tempo todo
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.66.0 de forma consistente
Version 2.65.0
Adicionado (Added)
BuildToUnicodeCMapgera o CMap ToUnicode (ISO 32000-1 §9.10.3) de que uma fonte CID precisa para que seu texto possa ser copiado, pesquisado e lido por tecnologia assistiva — sem ele o texto renderiza corretamente, mas extrai como nada- As entradas são divididas em blocos no limite de 100 por bloco que a especificação define, glifos duplicados são gravados uma vez e
.notdefé ignorado - O CMap segue a convenção CID = GID, de modo que nenhum fluxo
CIDToGIDMapé necessário ao lado dele
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.65.0 de forma consistente
Version 2.64.0
Adicionado (Added)
- Anotações de tinta e carimbo desenham a si mesmas a partir de seus próprios objetos de página em vez do fluxo de conteúdo da página, e esses objetos agora são alcançáveis:
AnnotationObjectCounteAnnotationObjectInfoos leem,AddPathToAnnotationentrega à anotação um caminho construído comCreatePatheRemoveAnnotationObjectexclui um - Construir a aparência de um carimbo não exige mais uma ferramenta externa: crie o caminho como de costume e entregue-o à anotação em vez de à página
- O PDFium aceita objetos de página somente nos subtipos tinta e carimbo, de modo que qualquer outro subtipo é recusado com uma mensagem nomeando a restrição, em vez de falhar de forma obscura
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.64.0 de forma consistente
Version 2.63.0
Adicionado (Added)
TPdf.AddStandardFontTextdesenha texto com uma das 14 fontes que todo leitor de PDF é obrigado a fornecer, sem embutir nenhum programa de fonte — o arquivo resultante é mensuravelmente menor que o mesmo texto desenhado comAddText, que embute a face do sistema que encontra- O novo enum
TPdfStandardFontnomeia todas as 14 faces, de modo que um chamador não pode digitar errado um nome de fonte base; o PDFium corresponde esses nomes exatamente e um erro de digitação produziria silenciosamente nenhuma fonte - PDF/A e PDF/X exigem que toda fonte esteja embutida, de modo que a saída destinada a esses perfis deve continuar usando
AddText
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.63.0 de forma consistente
Version 2.62.0
Adicionado (Added)
TPdf.TextObjectGlyphOutlineretorna o contorno de um glifo da fonte de um objeto de texto como segmentos de caminho, para converter texto em arte vetorial ou inspecionar um glifo que uma substituição de fonte pode ter alterado- O resultado reutiliza o tipo
TPdfPathSegmentsexistente, de modo que é lido exatamente como o contorno de um objeto de caminho desenhado - As coordenadas estão no espaço de design da própria fonte, normalizadas de modo que um em seja 1.0; o tamanho de fonte solicitado não as escala, então um chamador que queira unidades de dispositivo multiplica pelo tamanho em pontos
- Um resultado vazio significa que a fonte não expõe contorno para esse glifo, o que não é um erro; pedir um glifo de um objeto que não é de texto levanta exceção
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.62.0 de forma consistente
Version 2.61.0
Adicionado (Added)
TPdf.InspectAvailabilityrelata o que o PDFium pode dizer sobre um PDF sem carregá-lo como documento: se o arquivo é linearizado (“otimizado para web”), se uma análise completa teria sucesso, se ele contém dados de formulário e qual página um visualizador mostraria primeiro- Os novos tipos
TPdfAvailability,TPdfLinearizationeTPdfFormAvailabilitycarregam as respostas; o fluxo é lido, mas não retido, e sua posição é restaurada no retorno - Isso fecha a última lacuna na família
FPDFAvail_*, que estava vinculada e carregada, mas não tinha nenhum chamador em toda a biblioteca - Delphi, Lazarus e C++Builder cobrem cada um os fatos relatados, a garantia de posição do fluxo e a rejeição de fluxo nil
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.61.0 de forma consistente
Version 2.60.0
Adicionado (Added)
- O conteúdo marcado (ISO 32000-1 §14.6) agora é alcançável pela API de alto nível:
PageObjectMarkslê cada tag BDC e sua lista de propriedades de um objeto de página,AddPageObjectMarkgrava uma,RemovePageObjectMarkexclui uma ePageObjectMarkedContentIDrelata o MCID - Os novos tipos
TPdfContentMark,TPdfContentMarkParameTPdfMarkParamKindcarregam o nome da tag e seus parâmetros tipados (integer, float, string, blob), com o tipo de valor resolvido pelo PDFium em vez de adivinhado pelo getter que tem sucesso - Adicionar uma marca reconstrói o fluxo de conteúdo da página, de modo que a tag sobrevive a um salvamento; isso teve de ser explícito porque
SaveAsnão regenera o conteúdo por conta própria - Delphi, Lazarus e C++Builder carregam cada um seis casos, incluindo um que infla o fluxo de conteúdo salvo para confirmar que o operador BDC e sua lista de propriedades realmente chegaram
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.60.0 de forma consistente
Version 2.59.0
Adicionado (Added)
TPdfAnnotationganhaHasLinkUrieLinkUri, de modo queCreateAnnotationagora pode produzir um link web funcional: a anotação é salva com uma ação/URIapontando para o endereço fornecido- Definir um URI de link em qualquer subtipo diferente de
anLinklevanta exceção, pois somente uma anotação Link carrega um dicionário de ação - O campo é somente escrita por enquanto; ler um destino de link de volta passa pela família
FPDFLink_*, que precisa do handle do documento - Delphi, Lazarus e C++Builder verificam que os bytes salvos carregam a ação
/URIe o endereço de destino
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.59.0 de forma consistente
Version 2.58.12
Adicionado (Added)
- A validação PDF/X relata
pvxiTrimBoxWithArtBoxquando uma página contém/TrimBoxe/ArtBoxjuntos; ambos declaram a página finalizada, então um RIP não tem como saber qual deles é autoritativo (ISO 15930) - A validação PDF/X relata
pvxiPageBoxOutsideMediaBoxquando/TrimBoxou/BleedBoxse estende para fora de/MediaBox, incluindo uma caixa com origem negativa; uma caixa além do meio não pode ser imageada - Os retângulos são normalizados antes da comparação, de modo que qualquer ordem de cantos é aceita, e uma caixa que toca a borda do meio exatamente ainda valida
- Relatórios de preflight classificam ambos os problemas sob estrutura e nomeiam o remédio concreto
- Delphi, Lazarus e C++Builder cobrem os dois casos rejeitados e o caso em conformidade
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.12 de forma consistente
Version 2.58.11
Adicionado (Added)
- A validação PDF/UA relata
pvuaiTociWithoutTocquando um documento marca entradas TOCI, mas nunca marca o contêiner TOC a que elas pertencem, o que deixa a tecnologia assistiva anunciando itens de sumário sem um sumário (ISO 14289-1 §7.7) - Relatórios de preflight classificam o problema sob estrutura e recomendam envolver as entradas em um elemento TOC
- O C++Builder ganha sua primeira cobertura de testes PDF/UA ao lado dos casos Delphi e Lazarus
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.11 de forma consistente
Version 2.58.10
Adicionado (Added)
- A validação PDF/A relata
pvaiSymbolicTrueTypeEncodingquando uma fonte TrueType simbólica contém uma entrada/Encoding; a ISO 19005-1 §6.3.7 admite somente o cmap integrado da fonte, então um/Encodinga contradiria - O flag simbólico é lido do
/FontDescriptor, esteja ele escrito embutido no dicionário da fonte ou referenciado indiretamente; uma fonte não simbólica mantém seu/WinAnsiEncodingou/MacRomanEncodingexigido sem ser sinalizada - Relatórios de preflight classificam o problema sob conteúdo e recomendam remover a entrada
- Delphi e Lazarus cobrem o caso sinalizado e os dois casos aceitos; C++Builder cobre o caso sinalizado e o caso não simbólico
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.10 de forma consistente
Version 2.58.9
Adicionado (Added)
- A validação PDF/A relata os limites de implementação de contêiner do Anexo C da ISO 19005-1:
pvaiNameOverLimitpara nomes com mais de 127 bytes,pvaiArrayOverLimitalém de 8191 elementos,pvaiDictOverLimitalém de 4095 entradas epvaiNestingOverLimitalém de 28 níveis de aninhamento - Os limites são inclusivos, então um contêiner exatamente sobre um deles ainda valida; os testes fixam tanto o lado rejeitado quanto o aceito de cada fronteira
- Relatórios de preflight classificam os quatro problemas sob estrutura e nomeiam o limite concreto em cada recomendação
- Delphi e Lazarus cobrem os quatro limites mais os casos de fronteira; C++Builder cobre o limite de array e a fronteira
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.9 de forma consistente
Version 2.58.8
Adicionado (Added)
- A validação PDF/R relata
pvriPageImageMismatchquando a contagem de imagens não corresponde à contagem de páginas; a ISO 23504-1 §6.5.1 faz de cada página exatamente uma imagem de faixa, então uma página sem imagem ou com várias não está em conformidade - Testes de Delphi, Lazarus e C++Builder cobrem uma página sem imagem, uma página com duas e o caso em conformidade de uma imagem
Alterado (Changed)
- Os testes de injeção de marcadores PDF/R agora começam de uma página de origem que já contém uma imagem de faixa, já que a injeção de marcadores adiciona metadados e não pode fornecer conteúdo de página
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.8 de forma consistente
Version 2.58.7
Adicionado (Added)
- A validação PDF/R relata
pvriFontForbiddenquando uma página nomeia um recurso de fonte; uma página PDF/raster contém a imagem digitalizada e nada mais (ISO 23504-1 §6.5.2) - A validação PDF/R relata
pvriForbiddenImageFilterpara codificações de faixa fora da lista branca, de modo que/LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decodee/Cryptsão rejeitados, enquanto/CCITTFaxDecode,/DCTDecode,/JPXDecodee/FlateDecodepassam (ISO 23504-1 §6.6) - Relatórios de preflight classificam ambos os problemas sob conteúdo e recomendam o remédio concreto
- Testes de Delphi, Lazarus e C++Builder cobrem um recurso de fonte, um filtro rejeitado e uma página usando somente codificações da lista branca
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.7 de forma consistente
Version 2.58.6
Adicionado (Added)
- A validação PDF/E relata
pveiFontNotEmbeddedquando um documento mostra uso de fonte, mas não contém nenhum programa de fonte embutido, de modo que o requisito é verificado também no caminho sem DLL, além do caminho pelo PDFium - Um desenho de engenharia precisa ser renderizado de forma idêntica décadas depois, então a ISO 24517-1 não isenta nenhuma das 14 fontes padrão; a verificação se aplica igualmente a
/Type1,/TrueType,/Type0e/MMType1 - Relatórios de preflight classificam o novo problema sob conteúdo e recomendam embutir todo programa de fonte
- Testes de Delphi, Lazarus e C++Builder cobrem um descritor sem programa, um
/FontFile2embutido e um documento que não usa nenhuma fonte
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.6 de forma consistente
Version 2.58.5
Adicionado (Added)
InjectPdfEMarkersagora grava o output intent exigido pela ISO 24517-1 §6.2: um perfil ICC sRGB de destino embutido, um output intent/GTS_PDFE1que o nomeia e o array/OutputIntentsdo catálogo, tudo como parte da mesma atualização incremental- O fluxo do perfil deriva seu
/Ndo cabeçalho ICC em vez de presumir três componentes, de modo que um perfil CMYK seria descrito corretamente - A validação PDF/E relata
pveiMissingOutputIntentepveiMissingIccProfile, de modo que um candidato sem condição de cor declarada não é mais aceito - Testes de Delphi, Lazarus e C++Builder cobrem um output intent aceito, um sem perfil de destino e um catálogo sem nenhum output intent
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.5 de forma consistente
Version 2.58.4
Adicionado (Added)
- A validação PDF/X agora relata
pvxiFontNotEmbeddedpor uma varredura de bytes, de modo que uma fonte não embutida é capturada no caminho sem DLL, em vez de somente pela verificação apoiada no PDFium - Ao contrário do PDF/A, as 14 fontes padrão não são isentas no PDF/X, de modo que qualquer uso de fonte sem um programa de fonte embutido é relatado
- A verificação permanece conservadora: dispara somente quando o arquivo mostra uso de fonte, mas não contém nenhum
/FontFile,/FontFile2ou/FontFile3, porque contar descritores contra programas produz falsos positivos em descritores compartilhados - Testes de Delphi, Lazarus e C++Builder cobrem um descritor sem programa, um programa embutido e um documento que não usa nenhuma fonte
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.4 de forma consistente
Version 2.58.3
Adicionado (Added)
- A validação PDF/X agora relata
pvxiColorSpaceForbiddenquando um candidato PDF/X-1a contém/DeviceRGB,/CalRGBou/Lab, que a ISO 15930-1 §6.2 exclui de seu intercâmbio CMYK - A verificação é restrita somente ao PDF/X-1a, de modo que PDF/X-3 e posteriores continuam permitindo RGB e os espaços independentes de dispositivo que eles emparelham com o output intent
- Somente tokens de nome de espaço de cores inequívocos são testados; um fluxo
ICCBasedprecisa de seu/Nresolvido e permanece com a camada de modelo de objetos - Testes de Delphi, Lazarus e C++Builder cobrem um espaço RGB sinalizado, um espaço Lab sinalizado, um par CMYK e tons de cinza aceito e o caso permitido no PDF/X-3
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.3 de forma consistente
Version 2.58.2
Adicionado (Added)
- A validação PDF/X agora relata
pvxiTransparencyForbiddenpara um grupo de transparência ou um soft mask ativo, que a ISO 15930-1 §6.2 (PDF/X-1a) e a ISO 15930-3 §6.3 (PDF/X-3) proíbem - A verificação é restrita à conformidade detectada, de modo que PDF/X-4 e PDF/X-6 continuam permitindo transparência e um arquivo cujo nível não pôde ser identificado nunca é sinalizado por uma regra que pode não se aplicar a ele
- Um soft mask explicitamente desligado com
/SMask /Nonenão é tratado como transparência PdfHasActiveSMaskmudou deFPdfPdfapara a interfaceFPdfPdfCommon, de modo que todo validador possa compartilhar uma única regra de soft mask- Testes de Delphi, Lazarus e C++Builder cobrem um grupo sinalizado no X-1a, um soft mask sinalizado no X-3, um soft mask desativado e o caso permitido no X-4
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.2 de forma consistente
Version 2.58.1
Adicionado (Added)
- A validação PDF/X agora verifica a forma do output intent exigido pela ISO 15930-7 §6.2.4:
pvxiOutputIntentSchemerelata um subtipo presente que não é/GTS_PDFXepvxiOutputIntentMissingIdentifierrelata um/OutputConditionIdentifierausente - O subtipo é correspondido como um token de nome completo, de modo que um nome mais longo como
/GTS_PDFXVersionnão passa mais, enquanto uma grafia com escape#xxdo mesmo nome ainda passa - Um output intent que não contém nenhum subtipo é deixado em paz, porque sua ausência já é relatada pelos problemas em nível de marcador
- Relatórios de preflight arquivam ambos os problemas sob a categoria de output intent e sugerem a correção
- Testes de Delphi, Lazarus e C++Builder cobrem o subtipo aceito, um subtipo PDF/A, um token de nome mais longo, um subtipo ausente e um identificador de condição ausente
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.58.1 de forma consistente
Version 2.58.0
Alterado (Changed)
- Todos os 35 callbacks que o PDFium invoca de seus próprios frames C++ (preenchimento de formulário, XFA, plataforma JavaScript, pausa de renderização progressiva e leitura e escrita de fluxo) agora contêm qualquer exceção Pascal e retornam o valor de falha documentado, em vez de se desdobrar pela fronteira de linguagem
- Um manipulador de eventos que levanta exceção, uma alocação com falha ou um erro inesperado dentro de um callback, portanto, não podem mais derrubar o processo nem deixar o PDFium em um estado indefinido
Corrigido (Fixed)
- O registro de um timer de formulário vazava sua entrada quando o timer subjacente não podia ser criado
Adicionado (Added)
- Testes de Delphi, Lazarus e C++Builder agora cobrem o salvamento em um fluxo de destino que recusa gravações e afirmam que o documento permanece utilizável e salvável depois
Version 2.57.8
Corrigido (Fixed)
- Versões mais antigas do Delphi (XE5 e anteriores) paravam de compilar a biblioteca de avaliação com
E2003 Undeclared identifier: 'GetTickCount64'emFPdfPades.pas, porque a unit Windows enviada com esses compiladores não exporta o símbolo - Os mesmos compiladores também falhavam em
GetUserDefaultLocaleNameemPDFium.pase na atribuição deTBytesparaarray of ByteemGetXfaFormPackets, de modo que o callback de locale XFA e o snapshot de pacotes agora também compilam nesses compiladores
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.8 de forma consistente
Version 2.57.7
Alterado (Changed)
- Toda regravação do lado do salvamento agora trunca o fluxo de destino antes de gravar, em vez de somente rebobiná-lo, de modo que um buffer fornecido pelo chamador que já continha um documento mais longo não possa manter uma cauda obsoleta além do novo
%%EOF - Testes de Delphi, Lazarus e C++Builder agora cobrem o salvamento em um fluxo pré-preenchido
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.7 de forma consistente
Version 2.57.6
Corrigido (Fixed)
- A varredura de objetos que precede a criptografia aceitava sequências de dígitos de qualquer comprimento, então um número longo em qualquer lugar do arquivo podia transformar-se em um número de objeto negativo ou falso e adicionar uma entrada fantasma à tabela de referências cruzadas reconstruída
- Números de objeto acima do limite do Anexo C da ISO 32000-1 e gerações acima de 65535 agora são rejeitados como cabeçalhos de objeto, em vez de truncados
Adicionado (Added)
- Testes de Delphi, Lazarus e C++Builder agora afirmam a contagem exata de entradas em uso da tabela reconstruída
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.6 de forma consistente
Version 2.57.5
Corrigido (Fixed)
- Criptografar com
EncryptMetadata = Falsegravava/EncryptMetadata falseno dicionário Encrypt, mas ainda cifrava o fluxo de metadados do documento, então um leitor que seguisse essa declaração encontrava XMP ilegível - Um fluxo
/Type /Metadataagora é copiado sem alterações quando a criptografia de metadados está desligada, enquanto todos os outros fluxos ainda são criptografados
Adicionado (Added)
AnsiNameTokenMatchesKeyagora faz parte da interfaceFPdfPdfCommonpara comparações de nomes com reconhecimento de delimitadores- Testes de Delphi, Lazarus e C++Builder agora cobrem os dois modos de criptografia de metadados
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.5 de forma consistente
Version 2.57.4
Corrigido (Fixed)
- A tabela de referências cruzadas reconstruída durante a criptografia omitia a cabeça obrigatória da lista livre do objeto 0 exigida pela ISO 32000-1 §7.5.4, então sua primeira subseção começava um objeto atrasada
- Toda entrada reconstruída declarava geração 0; objetos gravados com geração superior agora a mantêm, de modo que a tabela concorda com os cabeçalhos de objeto para os quais aponta
Adicionado (Added)
- Testes de Delphi, Lazarus e C++Builder agora cobrem a entrada de cabeça da lista livre e a preservação de geração na tabela reconstruída
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.4 de forma consistente
Version 2.57.3
Corrigido (Fixed)
- A saída criptografada descartava a palavra-chave
streamde todo objeto de fluxo, então o arquivo salvo não era mais sintaxe PDF válida e leitores estritos relatavam o conteúdo da página nem como fluxo nem como array de fluxos - A regravação de
/Lengthcorrespondia/Lengthcomo uma subcadeia simples, então um dicionário de fluxo contendo/Length1(qualquer fonte embutida) tinha seu nome de chave corrompido, enquanto o comprimento real permanecia obsoleto - Um fluxo que declarava seu comprimento indiretamente como
/Length N 0 Rtinha o número de objeto sobrescrito com o novo comprimento; a entrada agora é substituída pelo comprimento criptografado direto - Um dicionário de fluxo sem nenhum
/Lengthagora recebe um, em vez de deixar o leitor sem comprimento
Adicionado (Added)
AnsiFindDictKeyTokenagora faz parte da interfaceFPdfPdfCommonpara buscas de chaves de dicionário de nível superior com reconhecimento de delimitadores- Testes de Delphi, Lazarus e C++Builder agora cobrem a preservação de
/Length1, a substituição de comprimento indireto e a concordância do tamanho do corpo do fluxo
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.3 de forma consistente
Version 2.57.2
Corrigido (Fixed)
SaveAsEncryptedeSaveAsEncryptedToStreamcomRevision = erR6produziam documentos que rejeitavam a própria senha correta em cerca de um arquivo em cada quatro, porque o contador de rodadas do algoritmo 2.B da ISO 32000-2 §7.6.4.3 começava uma rodada abaixo e a rodada extra alterava os valores/U,/O,/UEe/OE- Documentos criptografados R6 agora reabrem com a senha de usuário ou proprietário em qualquer leitor em conformidade, e ainda rejeitam uma senha errada
Adicionado (Added)
- As suítes de teste Lazarus e C++Builder ganharam cobertura de criptografia antes exclusiva do Delphi: comprimentos de chave R6, campos do dicionário Encrypt, um trajeto de ida e volta repetido de criptografia e reabertura e rejeição de senha errada
Alterado (Changed)
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.2 de forma consistente
Version 2.57.1
Alterado (Changed)
- Digitar em um campo de formulário, mover o cursor e alternar caixas de seleção agora repinta somente a área que o PDFium relata como danificada, em vez de todo o visualizador
- As caixas de dano são normalizadas para o eixo Y da página voltado para cima, alargadas em um pixel para que as bordas de widget suavizadas permaneçam limpas e recortadas na área cliente visível
- Uma caixa de dano completamente rolada para fora da janela de exibição não agenda mais uma repintura, enquanto uma vista inativa ou uma página não mapeada ainda recorre a uma repintura completa
- Testes de Delphi, Lazarus e C++Builder agora cobrem invalidação delimitada de formulário, caixas de página invertidas, caixas fora da tela e segurança de vistas inativas
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.1 de forma consistente
Version 2.57.0
Adicionado (Added)
TPdfThumbnailView.Orientationsuporta layouts de miniaturas verticais e horizontais preservando o padrão vertical existenteFirstVisiblePageIndex,LastVisiblePageIndexeEnsureCurrentPageVisibleexpõem e controlam a janela de miniaturas com índices de página baseados em um
Alterado (Changed)
- Alterar
CurrentPageIndexagora rola a miniatura selecionada para a vista em qualquer orientação - Os testes Delphi, Lazarus e C++Builder agora cobrem padrões de orientação, comutação, faixas visíveis e visibilidade da página selecionada
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.57.0 de forma consistente
Version 2.56.2
Alterado (Changed)
HighlightSearchText,AddSearchTextHighlighteClearHighlightagora invalidam apenas os retângulos de dispositivo para as faixas de pesquisa que foram adicionadas ou removidas em vez de repintar toda a vista- Substituir realces pelas mesmas correspondências ou anexar correspondências duplicadas não agenda mais uma repintura desnecessária
- Os testes Delphi, Lazarus e C++Builder agora cobrem invalidação delimitada, atualizações idempotentes, limpeza e segurança de vistas inativas
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.56.2 de forma consistente
Version 2.56.1
Alterado (Changed)
TPdfThumbnailViewagora reutiliza bitmaps renderizados para páginas que permanecem visíveis entre repinturas e posições de rolagem adjacentes- O cache retém apenas a faixa de páginas visíveis atual e libera entradas precisamente quando as páginas saem dessa faixa, o documento atribuído muda ou as dimensões das miniaturas mudam
- Os testes Delphi, Lazarus e C++Builder agora cobrem reutilização de cache, poda de janela, invalidação por tamanho, substituição de documento e destruição do componente
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.56.1 de forma consistente
Version 2.56.0
Adicionado (Added)
TPdfView.CutSelectedFormTextToClipboardeTPdfView.PasteFormTextFromClipboardfornecem edição da área de transferência Unicode para o widget de formulário editável focado
Alterado (Changed)
- Editores de formulário focados agora tratam os atalhos de teclado padrão copiar, cortar, colar e selecionar tudo antes de encaminhar a entrada de texto ao PDFium
- Cortar e colar rejeitam campos somente leitura e sessões sem permissão de preenchimento ou modificação de formulário, enquanto cortar copia com sucesso antes de remover o texto selecionado
- Os testes Delphi, Lazarus e C++Builder agora cobrem comportamento sem foco, trajeto de ida e volta de atalhos e rejeição somente leitura
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.56.0 de forma consistente
Version 2.55.0
Adicionado (Added)
TPdfView.AddSearchTextHighlightanexa correspondências únicas de outro termo de pesquisa à sobreposição de página atual, permitindo que várias consultas permaneçam destacadas juntas
Alterado (Changed)
HighlightSearchTextpermanece o ponto de entrada de substituição e agora compartilha o scanner aditivo, enquanto faixas de caracteres duplicadas são ignoradas eClearHighlightremove o conjunto acumulado completo- Os testes Delphi, Lazarus e C++Builder agora cobrem acumulação de consultas distintas e supressão de faixas duplicadas
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.55.0 de forma consistente
Version 2.54.0
Adicionado (Added)
TPdfagora expõe snapshots completos de objetos de página, atualizações de estilo em lote, transformações afins de objetos, segmentos de caminho, clip paths e filhos Form XObject- A inspeção de caracteres agora inclui cores de preenchimento e traçado, nome e flags da fonte, limites de glifos soltos, matrizes efetivas, handles de objeto de texto e conversão de índice de caractere para texto
- Anotações agora fazem o trajeto de ida e volta da geometria da borda e dos fluxos de aparência normal, rollover e down
- Novos acessores de miniaturas brutas e decodificadas, transformações de conteúdo de página e anotação, e
RenderPageWithMatrixfornecem caminhos diretos avançados de renderização e edição
Alterado (Changed)
- Alterações de estilo de objetos de página podem ser confirmadas como um único lote para que PDFium regenere o conteúdo da página apenas uma vez
- A renderização matricial usa o caminho de bitmap zero-copy existente quando o layout do bitmap de destino é compatível
Version 2.53.1
Corrigido (Fixed)
- A legenda do menu Copiar embutido em chinês agora usa pontos de código Unicode independentes de codificação e é exibida corretamente em builds Lazarus
- Toolchains Delphi mais antigos podem compilar
FPdfAsyncquando sua unitWinapi.Windowsomite a declaraçãoGetTickCount64
Version 2.53.0
Adicionado (Added)
- Novo fixture de testes
Tests.ApiCoveragecobrindo APIs TPdf públicas que anteriormente não tinham cobertura de testes de ponta a ponta:GetPageBox/SetPageBox(leitura/escrita MediaBox/CropBox, erros de caixa ausente e trajeto de ida e volta de salvamento),FlattenPage/FlattenAllPages(valor de retorno e preservação da contagem de páginas),GenerateFormAppearances(sem ação em documentos sem formulário),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 com trajeto de ida e volta por senha — verifica que o arquivo criptografado se recusa a abrir sem a senha e abre com ela), validação de limites deDeletePage(página 0 e fora da faixa levantamEPdfError) e as sentinelas de anotaçãoHasContents/HasAuthorintroduzidas em v2.38.0 (verificando queDefault(TPdfAnnotation)as deixa emFalse)
Version 2.52.0
Adicionado (Added)
TPdfView.CopySelectedFormTextToClipboardcopia a seleção de texto dentro do widget AcroForm focado para a área de transferência do Windows comoCF_UNICODETEXT
Alterado (Changed)
- Operações de cópia de texto de página e formulário focado agora compartilham o mesmo gravador defensivo da área de transferência Unicode e deixam a área de transferência inalterada quando sua seleção está vazia
- Os testes Delphi, Lazarus e C++Builder agora cobrem chamadas de cópia de formulário inativas ou não focadas e um trajeto de ida e volta de seleção de formulário focado pela área de transferência do Windows
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.52.0 de forma consistente
Version 2.51.0
Adicionado (Added)
TPdfView.SelectLineAtseleciona a linha de texto visual contendo uma página baseada em um e um índice de caractere baseado em zero sem exigir entrada do mouse
Alterado (Changed)
- A seleção de linha programática, a seleção por triplo clique e
Shift+HomeouShift+Endagora compartilham um modelo de limite de linha por caixa de caracteres - Os testes Delphi, Lazarus e C++Builder agora cobrem seleção de linha estável e índices de página ou caractere inválidos
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.51.0 de forma consistente
Version 2.50.0
Adicionado (Added)
TPdf.LoadDocumentagora aceita uma janelaIndexbaseada em zero eCountem um bufferTBytes, permitindo que PDFs incorporados carreguem sem alocar uma fatia temporária de matriz de bytes
Alterado (Changed)
- O carregamento por faixa de bytes rejeita janelas negativas ou fora dos limites antes de alterar o estado do documento e preserva as opções de tempo de vida do buffer armazenado e emprestado existentes
- Os testes Delphi, Lazarus e C++Builder agora cobrem janelas de PDF incorporado e argumentos de faixa de bytes inválidos
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.50.0 de forma consistente
Version 2.49.1
Adicionado (Added)
TPdfView.FitModeagora suportapfmFitHeightpara ajustar a página atual à altura visível do viewport, permitindo rolagem horizontal quando necessário
Corrigido (Fixed)
- Os modos de ajuste agora convergem após uma alteração de barra de rolagem modificar a área cliente, mantendo os resultados fit-page, fit-width e fit-height consistentes entre VCL e LCL
- Os testes de visualização Delphi, Lazarus e C++Builder agora cobrem a seleção de
pfmFitHeighte viagens de ida e volta de enumeração TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.49.1 de forma consistente
Version 2.49.0
Adicionado (Added)
- A superfície de binding pública do PDFium agora cobre todas as 470 funções exportadas nos cabeçalhos revisados, incluindo acesso à descrição de anexos através de
FPDFAttachment_SetDescriptioneFPDFAttachment_GetDescription TPdfagora expõe descrições de anexos, validade de referência cruzada, deslocamentos de fim de trailer, revisão do security handler, carregamento em memória de 64 bits, intervalos de bytes de assinatura, intervalos de texto de links web e snapshots estendidos de dados de imagem, filtro, metadados e perfil ICC- Os assistentes de formulário agora suportam foco nativo de campo, consultas e atualizações de opção de escolha foccada, encaminhamento de roda do mouse, traços de tinta graváveis e sobreposições de formulário após renderização progressiva
Alterado (Changed)
FormFieldCount, índices de campos de formulário e ordem de tabulação agora descrevem apenas anotações widget em vez de incluir anotações de página não relacionadas- Páginas
TPdfheadless agora entram e saem do ciclo de vida da página form-fill para que o foco nativo e as APIs de campo focado funcionem sem umTPdfView - As exportações de descrição de anexo são controladas por capacidade para que aplicativos usando uma build mais antiga do PDFium ainda possam carregar a biblioteca e detectar o recurso indisponível
Corrigido (Fixed)
- A renderização progressiva de página agora pinta os controles de formulário quando o preenchimento de formulário está habilitado
- Os testes Delphi, Lazarus e C++Builder agora cobrem os novos diagnósticos de documento, descrições de anexos, caminhos de tinta, comportamento de formulário, intervalos de bytes de assinatura, intervalos de links web e metadados de imagem
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.49.0 de forma consistente
Version 2.48.0
Adicionado (Added)
TPdfMatrixagora expõe fábricas, clonagem e atribuição, diagnósticos de estado finito e invertibilidade, comparação baseada em tolerância, acesso de translação, relatório de determinante e decomposição afim- Composição prepend, rotação sensível a pivô, escala, inclinação e inversões, mais mapeamento de retângulos stretch, contain e cover suportam fluxos de trabalho local-space e layout ajustado sem aritmética manual de coeficientes
- Acesso inverso não mutante, mapeamento inverso de pontos, transformadas de vetores e quadriláteros, lotes dinâmicos de pontos e retângulos, variantes in-place e limites transformados em um passo expandem a superfície geométrica reutilizável
Alterado (Changed)
- Translação, escala e inversões de eixo agora atualizam apenas os coeficientes afetados em vez de rotear através da multiplicação afim geral
- A transformação de retângulo normaliza sua entrada uma vez, usa um caminho exato especializado axis-aligned quando possível e calcula limites girados gerais sem registros de ponto temporários
- Transformadas de lote de pontos e retângulos alocam um array de resultados ou reutilizam o armazenamento do chamador, enquanto os limites de pontos transformados são acumulados em um passo sem um array intermediário
Corrigido (Fixed)
- O mapeamento de retângulos rejeita resultados de tamanho zero, não finitos e com overflow de
Singleantes de publicar uma matriz inutilizável - Os testes Delphi, Lazarus e C++Builder agora verificam ordem de composição, invariantes de pivô, viagens de ida e volta inversas, retângulos ajustados, decomposição e comportamento de geometria em massa
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.48.0 de forma consistente
Version 2.47.0
Adicionado (Added)
FPdfAsyncagora fornece razões e mensagens de cancelamento estruturadas, registros de callback removíveis, fontes baseadas em timeout, espera de cancelamento e operações try-cancel atômicas através de interfaces estendidas que preservam a API originalTPdfFuture<T>.RunExadiciona dispatch de resposta e prioridade de worker configuráveis enquanto envelopes de resultado expõem IDs de operação, validade de valor, nomes de classe de exceção, medição de tempo de conclusão e helpers de conclusão reutilizáveisTPdfAsyncExecutoradiciona um pool de worker fixo reutilizável com quatro faixas de prioridade FIFO, backpressure opcional de fila limitada, handles de tarefa canceláveis, espera sensível a timeout, snapshots de tarefa, estatísticas agregadas e desligamento graceful
Alterado (Changed)
- Trabalhos assíncronos repetidos podem reutilizar threads worker e operações de fila O(1) em vez de criar uma thread para cada tarefa, enquanto a conclusão sincronizada permanece disponível para hosts UI
- Falhas de executor e future preservam diagnósticos de classe e mensagem de exceção, o cancelamento mantém sua razão original e exceções de callback permanecem isoladas do ciclo de vida do worker e do desligamento
- Os testes Delphi, Lazarus e C++Builder agora cobrem a superfície estendida de cancelamento, metadados future, controle de tarefa, backpressure, ordenação de prioridade, estatísticas, falha e desligamento
Corrigido (Fixed)
- Proprietários de cancelamento concorrentes agora recebem um resultado determinístico de primeiro escritor em vez de depender de uma sequência separada de observação e cancelamento
- A espera idle da thread principal processa respostas de tarefas sincronizadas, impedindo que um worker concluído deixe o executor permanentemente não-idle durante um desligamento coordenado
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.47.0 de forma consistente
Version 2.46.0
Adicionado (Added)
FPdfAsn1agora expõe classes de identificador, codificação e decodificação de high-tag-number de 64 bits, registros TLV analisados, janelas de leitor filho zero-copy, decodificadores de primitiva tipados e slices de conteúdo ou valor codificado- Os writers DER agora suportam o intervalo INTEGER de 64 bits sem sinal completo, conteúdo INTEGER arbitrário validado, ENUMERATED, seleção automática de UTCTime ou GeneralizedTime, tags application e private, SEQUENCE multi-valor e saída SET OF canonicamente ordenada
ValidateDerretorna erros de validação sensíveis a offset aplicando limites configuráveis de nesting, contagem de nós, comprimento de conteúdo, contagem de erros, root e ordenação SET opcional
Alterado (Changed)
- A concatenação DER e a composição multi-valor usam uma alocação de saída, buffers de writer expõem operações de reserve, count, capacity e ownership-transfer, e a ordenação SET OF agora usa merge sorting
O(n log n) - Valores BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime e GeneralizedTime recebem verificações de forma canônica durante codificação, decodificação tipada ou validação
- O pacote runtime Lazarus agora exporta
FPdfAsn1e as suítes de teste Delphi, Lazarus e C++Builder exercitam a mesma superfície DER pública
Corrigido (Fixed)
- Números de tag context-specific maiores que 30 não são mais truncados nos cinco bits baixos do identificador
- Identificadores high-tag malformados, comprimentos definidos não minimais, UTF-8 inválido, padding BIT STRING diferente de zero, campos de tempo inválidos, roots trailing e violações de limite de recurso são rejeitados deterministicamente
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.46.0 de forma consistente
Version 2.45.0
Adicionado (Added)
FPdfPreflightReportagora atribui severidade Info, Warning ou Error a cada problema e expõe APIs de severidade, status, categoria, issue-code, lookup, search, flattening e filtering em nível de standard e de relatório- Relatórios preflight agora exportam SARIF 2.1.0, JUnit XML, NDJSON e XML nativo através de métodos
To*eSave*ToFilecorrespondentes para pipelines de CI, automação e streaming - Fingerprints de relatório SHA-256 estáveis identificam resultados de validação equivalentes independentemente de caminhos de origem e timestamps de geração
Alterado (Changed)
- Relatórios JSON, CSV, text, Markdown e HTML agora incluem severidade e resumos de status estendidos; HTML adiciona legendas de tabela acessíveis e um resumo de status
- A construção de coleções de issue e standard usa crescimento geométrico de capacidade, resultados de consulta são pré-dimensionados, o escaping JSON escreve em um buffer de saída limitado e todos os arquivos de relatório usam um writer UTF-8 direto
- Resumos de categorias de issue usam ordenação determinística, timestamps incluem milissegundos, JSON carrega
formatVersion: 2e células CSV neutralizam fórmulas de planilha
Corrigido (Fixed)
- A exportação JSON agora preserva pares Unicode suplementares válidos e substitui unidades de código surrogate UTF-16 isoladas em vez de emitir dados escalares malformados
- A exportação HTML agora escapa apóstrofos e visualizações de relatório filtradas possuem arrays de issue independentes em vez de compartilhar armazenamento de resultado mutável
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam Version 2.45.0 de forma consistente
Version 2.44.0
Adicionado (Added)
- Indicadores e destinos agora expõem estado aberto, contagens de descendentes, alvos de ação, modos de exibição de destino e até quatro parâmetros de exibição
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissioneUserHasPermissionfornecem instantâneos tipados de inspeção de documento e consultas de permissãoExtractThumbnail(PageNumber)renderiza uma página solicitada sem alterar a página ativa, e os resultados de carimbo de hora RFC 3161 expõem detalhes de política, horário de geração e nonce
Alterado (Changed)
- Os caminhos de indicadores, JavaScript, metadados, destinos e miniaturas usam buffers validados de duas passagens, crescimento geométrico de coleções e travessia segura contra ciclos
- O pós-processamento de salvamento resolve o catálogo ativo, a árvore de páginas e a ação de abertura por meio da revisão xref atual, armazena em cache os fluxos de objetos decodificados e examina dicionários PDF com limites léxicos
- A análise de PDF compartilhada agora impõe cabeçalhos de objeto exatos, gerações, chaves de dicionário, comprimentos de fluxo, geometria de preditor, intervalos de inteiros e limites de comentário, string literal e string hexadecimal
- A validação de resposta RFC 3161 agora vincula nonce e
messageImprintSHA-256, exige um assinante estruturalmente válido e aplica regras estritas de comprimento DER, OID, INTEGER e GeneralizedTime
Corrigido (Fixed)
- Documentos incrementais não selecionam mais catálogos duplicados inativos nem sufixos de referência malformados ao adicionar uma ação de abertura padrão
- Tokens de carimbo de hora com comprimentos DER de forma longa retêm o token codificado completo, enquanto ordenações malformadas de campos opcionais CMS e conjuntos vazios de assinantes são rejeitados
- Compilações limpas do Delphi agora gravam campos de semente de nonce PAdES por meio de cópias de bytes seguras quanto ao alinhamento e passam bytes de resposta XFA com o tipo de ponteiro nativo exato
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador agora relatam a Version 2.44.0 de forma consistente
Version 2.43.0
Adicionado (Added)
- Registros de campo e anotação XFDF agora expõem sinalizadores de presença que distinguem um valor XML omitido de um valor explicitamente vazio
Alterado (Changed)
- A importação XFDF aceita elementos e atributos com prefixo de namespace, conteúdo misto de texto e CDATA, referências a entidades e valores significativos em espaços em branco, ao mesmo tempo em que rejeita referências inválidas a escalares Unicode
- A importação e exportação XFDF usam correspondência de campos indexada e buffers geométricos limitados, melhorando a taxa de transferência e o comportamento de pico de alocação para formulários profundamente aninhados, grandes coleções de anotações, listas de traços, vértices e quadriláteros de marcação
- As validações PDF/A e PDF/UA usam crescimento limitado para grandes coleções de páginas, fluxos, nomes de estrutura e RoleMap; a resolução RoleMap de PDF/UA agora segue matrizes diretas e objetos indiretos de nome ou matriz com geração exata
Corrigido (Fixed)
- Idas e voltas XFDF agora preservam caminhos de campos profundamente aninhados, valores de campo explicitamente vazios, conteúdos de anotação explicitamente vazios e a distinção entre conteúdos ausentes e vazios
- Cargas inválidas de buffer de memória e atribuições de página fora do intervalo são rejeitadas sem deixar um estado parcial de documento ou página, e uma recarga de página nativa com falha preserva a página ativa anterior
- Identificadores de conteúdo marcado grandes e buffers de metadados de assinatura são limitados e validados antes da alocação ou acesso nativo
Version 2.42.0
Adicionado (Added)
TPdfMatrixagora forneceInvert,TryInvert,TransformPointeTransformRectpara mapeamento de coordenadas, teste de acerto, limites normalizados e tratamento explícito de matrizes singularesTPdf.WrapTextganhou uma sobrecargaBreakLongWordsque divide CJK e outros textos sem espaços, mantendo válidos os pares substitutos UTF-16TPdfAnnotation.AttachmentPointSetsexpõe todos os quadriláteros em anotações de marcação de várias linhas, enquanto o campoAttachmentPointsexistente permanece um alias para o primeiro conjunto
Alterado (Changed)
- A extração de texto, a construção de conteúdo legível, a pesquisa de palavras e o mapeamento de deslocamento de texto falado agora usam alocação limitada e caminhos de pesquisa binária, reduzindo alocações repetidas e varreduras lineares em páginas grandes
- A serialização ASN.1 e a geração de PDF criptografado agora usam buffers de saída geométricos; a ordenação de objetos criptografados usa classificação
O(n log n)e as linhas xref são gravadas diretamente no buffer final WrapTextpreserva limites de linha CR, LF e CRLF e reutiliza um objeto de medição nativo para toda a operação- A importação e exportação XFDF preservam todos os quadriláteros de marcação; a importação também aplica cores RGB/interiores e analisa coordenadas decimais de forma independente da localidade do processo
Corrigido (Fixed)
- Chamadores legados podem novamente atualizar conteúdo e autor de anotações atribuindo strings não vazias sem definir as sentinelas
HasContentseHasAuthormais recentes - Strings de anotação explicitamente vazias agora usam um buffer nativo válido terminado em zero, de modo que limpar
/Contents,/Te outras chaves de texto opcionais não passa mais um ponteiro nil para o PDFium
Version 2.41.0
Alterado (Changed)
- Os relatórios de preflight
SaveJsonToFile,SaveMarkdownToFileeSaveTextToFileagora gravam em UTF-8 no Delphi (alinhando-se aoSaveHtmlToFileexistente), em vez de usar a página de código ANSI do sistema; caracteres não-ASCII em caminhos de arquivos, recomendações e notas de escopo ficavam corrompidos no Delphi ao serem salvos por esses métodos SaveCsvToFileagora grava em UTF-8 com um prefixo BOM para que o Excel para Windows detecte automaticamente a codificação; sem o BOM, o Excel trata um CSV em UTF-8 como página de código 1252 e corrompe caracteres não-ASCII
Corrigido (Fixed)
- A demonstração
ExtractImagesvazava objetosTBitmapem cache emFExtractedImagesquando o formulário era fechado sem limpá-los explicitamente; o formulário agora substituiDestroypara chamarClearExtractedImages, liberando todos os bitmaps em cache
Version 2.40.0
Alterado (Changed)
TPdf.RenderPage(HDC, ...)agora mascara exceções FPU/SSE ao redor da chamada deFPDF_RenderPage, correspondendo aTPdfView.RenderPage(HDC)(corrigido na v2.25.0) e a todos os pontos de entrada de renderização que retornam bitmaps; a sobrecarga direta para DC do nívelTPdfanteriormente deixava exceções FPU sem mascarar em compiladores anteriores ao D12
Corrigido (Fixed)
ColorToARGBagora retorna um pixel totalmente transparente (alfa 0) paraclNoneeclDefaultem vez de tratar o valor sentinela como uma cor RGB literal; o comportamento anterior produzia um preenchimento escuro e quase opaco quando o chamador passavaclNoneesperando "nenhuma cor"
Version 2.39.1
Corrigido (Fixed)
- Salvamentos explícitos em PDF 1.3 agora removem entradas
/SMask /None,/AIS falsee/TK trueque apenas repetem o estado gráfico inicial, enquanto continuam rejeitando estados de transparência não padrão
Version 2.39.0
Alterado (Changed)
CreatePDFeImageToPDFagora usam destinos de salvamento confirmados e relatam sucesso apenas quando o métodoSaveAsé concluído com êxitoBatchExport,PDFtoJpgeSplitPDFagora alocam diretórios de saída exclusivos para que execuções repetidas e entradas com o mesmo nome preservem resultados anterioresSplitViewagora realiza a pesquisa circular uma vez sem deixar estados de página ocultos após cancelamento ou ausência de correspondência; além disso, aborta trabalhos de impressão incompletos em vez de enviar saídas parciais
Corrigido (Fixed)
MergePDFagora rejeita tokens de intervalo de páginas malformados e caminhos de saída que sobrescrevem a origem, conta as páginas realmente importadas e recusa salvar um resultado vazio- As demonstrações de
Attachmentdo Delphi e C++Builder agora confirmam salvamentos no mesmo caminho por meio de substituição de arquivo segura contra rollback, evitando que uma falha de renomeação remova o PDF original
Version 2.38.0
Alterado (Changed)
SetAnnotationDataagora protege as gravações de/Contentse/Authorcom sentinelasHasContents/HasAuthoremTPdfAnnotation, correspondendo ao padrãoHasName/HasSubject/HasIconexistente; anteriormente, esses dois campos eram gravados incondicionalmente, de modo que atribuir um registroDefault(TPdfAnnotation)para atualizar apenas cores ou flags sobrescrevia silenciosamente o conteúdo e o autor existentes da anotação com strings vazias;GetPageAnnotationagora define as sentinelas para que um ciclo de leitura-modificação-gravação preserve os valores originais
Corrigido (Fixed)
GenerateFormAppearancesagora lê o valor do checkbox/botão de rádio por meio deFPDFAnnot_GetFormFieldValue(que percorre até o dicionário do campo pai segundo a ISO 32000-1 §12.7.5) em vez deFPDFAnnot_GetStringValue(Annot, 'V', ...)(que lê o dicionário do widget); o widget geralmente não carrega/V, logo o/ASnunca era sincronizado com o estado marcado, fazendo com que um checkbox/rádio achatado fosse renderizado como desmarcado
Version 2.37.0
Alterado (Changed)
ParseTsaUrlagora limita a porta entre1..65535após a análise; um valor de porta excessivo poderia sofrer wrap-around devido à truncagem deDWORDe acabar em uma porta válida- O método de análise XFDF
ParseFieldagora aceita um parâmetro de profundidade (padrão 0, limitado a 64) e retorna um campo vazio no limite; isso impede que uma cadeia maliciosa e aninhada de 100 000 níveis de<field>cause estouro de pilha
Corrigido (Fixed)
- A requisição HTTP da TSA agora se protege contra um corpo de requisição vazio antes de passar
@ReqDer[0]paraWinHttpSendRequest; a desreferenciação de um array dinâmico de comprimento zero acessaria um ponteiro inválido;BuildTimeStampReqsempre retorna uma SEQUENCE não vazia, mas o local de chamada agora defende o contrato
Notas (Notes)
- O comentário do cabeçalho de
FPdfTsaWinsobre a verificação de revogação HTTPS foi corrigido: o WinHttp valida a cadeia de certificados do servidor por padrão, mas **não** realiza a verificação de revogação por CRL/OCSP a menos que seja explicitamente habilitado viaWinHttpSetOption; o texto anterior afirmava que a verificação de revogação "vinha de graça", o que era enganoso
Version 2.36.0
Alterado (Changed)
- As requisições HTTP da TSA agora enviam um cabeçalho
Content-Lengthexplícito, além dos cabeçalhosContent-TypeeAccept; o WinHttp o sintetiza a partir do comprimento total, mas alguns proxies RFC 3161 exigem um cabeçalho explícito e rejeitam a requisição com411 Length Requiredsem ele - A exportação XFDF agora descarta caracteres de controle C0 (exceto TAB/LF/CR, que já são escapados) em vez de emitir uma sequência inválida de barra invertida e hexadecimal; o escape
\-01Fanterior não é XML válido (a barra invertida não tem significado especial em XML), portanto, qualquer leitor em conformidade rejeitaria o documento como malformado InjectAssociatedFilesagora grava/Subtypeno dicionário do stream EmbeddedFile quando o chamador forneceTAssociateFile.MIMEType; o campo estava declarado e documentado, mas o injetor anteriormente usava o valor fixo/Type /EmbeddedFilee o ignorava (a ISO 32000-2 §7.11.4 permite/Subtypeno stream)
Corrigido (Fixed)
- A importação XFDF ignorava o primeiro byte de conteúdo após um BOM UTF-8 e o primeiro byte quando nenhum BOM estava presente:
BytesToAnsi(Bytes, 4, ...)(com BOM) eBytesToAnsi(Bytes, 1, ...)(sem BOM) usavam offsets iniciais com erro de um byte porqueBytesToAnsirecebe um índice de array baseado em 0; as chamadas agora usam3e0 ExtractSignatureValuetinha dois bugs de recuo comifpendente ondeR.Position:= CNera executado incondicionalmente para os ramos opcionais decertificates [0]esignedAttrs [0]; os ramos agora estão encapsulados embegin/endpara que a posição avance apenas quando o TLV opcional for realmente lido (mesma classe de bug corrigida emAddSignatureTimestampToCmsna v2.22.0)
Version 2.35.0
Alterado (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvaileTFPDFAvail_IsFormAvailagora recebemhints: PFX_DOWNLOADHINTSem vez devar hints: FX_DOWNLOADHINTS, tornando o modo somente consultanullptrdocumentado (verificar disponibilidade atual sem solicitar mais dados) acessível a partir do Delphi; o cabeçalho do PDFium permite explicitamente quehintsseja nulo; a vinculação anterior comvartornava isso impossívelTFPDF_SetSystemFontInfoagora recebepFontInfo: PFPDF_SYSFONTINFOem vez devar pFontInfo: FPDF_SYSFONTINFO, permitindo que os chamadores passemnilpara instruir o PDFium a parar de usar uma interface de fonte de sistema previamente registrada (o caminho de desativação documentado)TPdfThumbnailView.Paintagora calculaVisibleRowscom a mesma fórmula deUpdateScrollBarRange(ClientHeight div RowHeight), garantindo que o número de linhas pintadas corresponda ao tamanho de página da barra de rolagem; a fórmula anterior exclusiva de pintura ((ClientHeight - FMarginY) div RowHeight + 1) podia diferir por uma linha em alturas limítrofes, desperdiçando renderização em uma linha fora da página ou perdendo a última linha visível
Version 2.34.0
Adicionado (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— API de alto nível que salva o documento e depois o criptografa com AES-256-CBC do PDF 2.0 (V=5/R=5/R=6); recebe umTPdfEncryptOptionscom senha de usuário/proprietário, permissões e revisão, delegando paraEncryptDocumentBytes- Criptografia de string literal StrF:
EncryptDocumentBytesagora criptografa strings literais do tipo(...)em objetos que não são de stream (dicionário Info, etc) para strings hexadecimais AES-256-CBC, correspondendo ao formato de criptografia de stream (IV de 16 bytes + texto cifrado PKCS7); strings hexadecimais do tipo<...>permanecem inalteradas
Version 2.33.0
Adicionado (Added)
- Injetor de criptografia AES-256-CBC para todo o documento na unidade
FPdfEncrypt.pas;EncryptDocumentBytesrecebe um PDF em texto simples e uma senha, criptografa cada objeto stream indireto (IV de 16 bytes + AES-256-CBC PKCS7 sob a chave do arquivo), atualiza/Length, anexa o objeto de dicionário/Encrypte reconstrói uma tabela de referência cruzada clássica completa + trailer com/Encrypte/ID; completa a pilha de criptografia do PDF 2.0 (bloco AES + GCM + SHA-512/384 + derivação de chave R6 + dicionário + varredura de documento) - Função auxiliar
EncryptStreamPayload— formato de stream AES-256 do PDF 2.0 (IV anexado ao início do texto cifrado AES-CBC-PKCS7), reutilizável por chamadores que gerenciam seus próprios layouts de objeto
Version 2.32.0
Adicionado (Added)
- Função de hash SHA-512 / SHA-384 (FIPS 180-4) na nova unidade
FPdfSha512.pas; implementada em Pure-Pascal; necessária para a iteração de hash de senha R6 do PDF 2.0, que se ramifica com base em um valor mod-3 de 128 bits para selecionar SHA-256/384/512 a cada rodada; verificada com testes de resposta conhecida da FIPS-180-4 - Derivação de chave de criptografia do PDF 2.0 e gerador de dicionário Encrypt na nova unidade
FPdfEncrypt.pas; implementa o algoritmo 2.B da ISO 32000-2 §7.6.4.3 (esquema de hash R6: AES-128-CBC + seleção iterativa de SHA-256/384/512), deriva a chave de criptografia de arquivo de 32 bytes além das entradas/O,/U,/OE,/UE,/Perms, e constrói o dicionário Encrypt V=5/R=5/R=6 com/CFM /AESV3; usa buffers de bytes no estilo TBytes
Version 2.31.0
Adicionado (Added)
- Primitivas de cifra de bloco AES (FIPS 197) na nova unidade
FPdfAes.pas; cifras de bloco AES-128 e AES-256 em Pure-Pascal, além de auxiliares de modo CBC e um backend CSPRNG; testes de resposta conhecida do Apêndice C.2 / C.3 da FIPS-197 verificam a correção; esta é a base criptográfica para a pilha de criptografia do PDF 2.0 - Criptografia autenticada AES-GCM (NIST SP 800-38D) na nova unidade
FPdfAesGcm.pas; implementa GHASH (multiplicação GF(2^128)), GCTR e a construção GCM AEAD no topo das primitivas de bloco AES; os casos de teste NIST GCM 1 e 3 (AES-128) correspondem exatamente ao texto cifrado e tag autoritativos; o caso de teste 13 (AES-256) realiza a viagem de ida e volta completa; GCM é o modo ISO/TS 32003 para PDF 2.0 - Validação de integridade de ParentTree e ClassMap do PDF/A Level A (ISO 19005-1 §6.8.3);
pvaiParentTreeMissingsinaliza um StructTreeRoot sem a árvore de números /ParentTree;pvaiClassMapUnresolvedsinaliza uma referência de classe /C sem um /ClassMap
Version 2.30.0
Adicionado (Added)
- Injeção de arquivos associados (
InjectAssociatedFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); a nova unidadeFPdfAssocFilesanexa arrays/AFde referências de especificações de arquivos ao catálogo ou a qualquer dicionário de página, cobrindo todos os oito valores de/AFRelationshipda Tabela 45 da ISO 32000-2; reutiliza o padrão de atualização incremental comprovado porInjectPadesDssMarkers - Suporte ao PDF/X-6 (ISO 15930-9:2020);
TPdfXConformanceadicionapxc6; o injetor e validador passam essa informação através da identificaçãopdfxid:GTS_PDFXVersion; PDF/X-6 é o sucessor baseado em PDF 2.0 do PDF/X-4 para troca completa - O PDF/A proíbe a ação
/Thread(lacuna na lista de permissões da ISO 19005-1 §6.6.1); a lista de ações proibidas agora cobre Thread ao lado de Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition e Hide
Corrigido (Fixed)
- O caminho de validação do PDF/A-4e agora honra as mesmas verificações de estrutura etiquetada, MarkInfo e quebra de palavras do Level A; o downgrade do lado de salvamento da v2.29.0 cobria
PdfAIsLevelE, mas três validações deValidatePdfAComplianceverificavam apenasPdfAIsLevelA, de modo que um documento PDF/A-4e sem estrutura etiquetada passava silenciosamente - Desvio de teste de
/BaseStateem OCG: o passe de pós-processamento da v2.28.0 ampliou corretamente a aceitação para/ONou/OFF(ISO 32000-1 Tabela 8.70), mas os testes de Delphi e C++ ainda esperavam que/OFFfosse rejeitado; os testes agora usam um valor verdadeiramente inválido (/Undefined) e um novo teste positivo fixa a aceitação de/OFF - Superposição de correspondência geoespacial de
/Subtype /GEO:ContainsDictionarySubtype('GEO')correspondia a qualquer dicionário que carregasse o token, incluindo não relacionados como um/ViewerPreferences << /Subtype /GEO >>disperso; a nova funçãoContainsMeasureDictionarySubtypeexige adicionalmente/Type /Measureou uma chave irmã exclusiva de Measure, de modo que dicionários que não sejam Measure não disparam mais o requisito de ExtensionLevel 3 da ADBE
Version 2.29.0
Adicionado (Added)
- Suporte ao PDF/A-4 (ISO 19005-4:2020) no validador, injetor XMP e camada do modelo de objeto do Pdfium;
TPdfAConformanceadicionapac4base,pac4fepac4e; o nível base é PDF 2.0 (ISO 32000-2) e substitui os níveis herdados A/B/U por base + F (formulário) + E (acessibilidade);ValidatePdfAlê um pacote XMPpdfaid:part=4(a base omite o elemento de conformidade),SaveAsPdfAo emite eSignPadesWithPdfAaceitapac4basecomo um contêiner de arquivamento de longo prazo - Vinculação de
FPDFBookmark_GetColor— a última exportação pública do PDFium não vinculada (469/469);TBookmarkganha os camposHasColoreColorpreenchidos a partir do array/Cdo favorito (ISO 32000-1 §12.3.3); a vinculação usa carregamento tolerante para que DLLs mais antigas anteriores à exportação continuem funcionando - Verificação da versão do cabeçalho do PDF/E-1 (ISO 24517-1 §5)
pveiBadPdfVersion— o PDF/E-1 é baseado no PDF 1.6 e um cabeçalho diferente de 1.6 agora é sinalizado - Divergência de versão de criptografia do PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— a criptografia é permitida apenas em um cabeçalho%PDF-2.0; um corpo 1.x que carregue/Encryptagora é sinalizado (anteriormente era uma instrução sem efeito) - Dicionário MediaBox inválido no PDF/R-1
pvriBadMediaBox— oMediaBoxde cada página deve ser[0 0 w h];PdfRHasNonZeroMediaBoxOriginé um scanner ASCII independente de localidade que ignora dicionários MediaBox com referências indiretas - Elemento
pvaiRoleMapUnresolveddo PDF/A Level A (ISO 19005-1 §6.8.3.4) — um RoleMap presente, mas incompleto, que deixa tipos de estrutura personalizados/Ssem mapeamento agora é sinalizado, fechando a lacuna deixada pela verificação de presença existentepvaiRoleMapMissing
Corrigido (Fixed)
PdfVersionToName(20)retornava"1.0"em vez de"2.0", corrompendo a entrada/Versiondo catálogo e as mensagens do validador para cada salvamento de PDF 2.0; o formatador agora divide major.minor explicitamente para códigos de versão>= 20- O codificador de INTEGER negativo em
FPdfAsn1.pasfalhava ao compilar no Delphi 12 (E2015emInteger(-(V<0))), bloqueando todo o projeto de testes; corrigido usandoInt64(-Ord(V<0))para a máscara de extensão de sinal - A lista de anotações proibidas do PDF/A agora inclui
/RichMediaem todas as partes (anteriormente omitido; a ISO 32000-1 §12.5.6.35 proíbe isso no PDF/A)
Version 2.28.0
Adicionado (Added)
TPdfVersionagora incluipv20para PDF 2.0 (ISO 32000-2);DecodePdfVersion(20)retornapv20em vez depvUnknown, eEncodePdfVersion(pv20)emite 20 para que a versão de um documento PDF 2.0 não seja perdida na leitura e possa ser gravada explicitamente
Alterado (Changed)
DecodeDateagora analisa strings de data PDF com campos finais opcionais segundo a PDF Reference 3.8.3, em vez de exigir o formato completo de 23 caracteresD:YYYYMMDDHHmmSSOHH'mm'; datas truncadas em conformidade, comoD:20260712,D:20260712153000eD:20260712153000Zagora são aceitas (anteriormente eram rejeitadas por uma verificação rígida deLength=23); o desvio de fuso horário agora é validado em relação ao intervalo real de UTC-12..UTC+14 em vez de> 23FPdfMeasure.MeasureTextagora codifica o nome da fonte comoAnsiStringno FPC /UTF8Encodeno Delphi, correspondendo a outros locais de chamada de FPDF_BYTESTRING da biblioteca, em vez de uma conversão simples paraAnsiStringque corrompia nomes de famílias não-ASCII por meio da página de código atual do sistema
Corrigido (Fixed)
- O caminho de valor negativo em
TDerWriter.Integerfalhava ou produzia DER malformado: o loopwhile V <> -1 do V := V shr 8deixavaInnervazio paraValue = -1(causando erro de intervalo no subsequenteInner[Length(Inner)-1]) e produzia bytes em excesso para outros valores negativos; o codificador agora extrai bytes de complemento de dois com shifts de extensão de sinal e para corretamente quando o restante é apenas extensão de sinal; os campos INTEGER do CMS/PAdES são positivos, então isso afeta apenas os chamadores que passam valores negativos, mas o caminho agora está correto TPdf.GetCharacterOrigineTPdfView.GetCharacterOriginignoravam o valor de retorno deFPDFText_GetCharOrigine retornavam um ponto não inicializado em caso de falha; o resultado agora é inicializado com zero e uma leitura com falha retorna a origem, correspondendo ao contrato deGetCharacterRectangle
Version 2.27.0
Alterado (Changed)
- As demos
PDFViewereMultiPageViewerdo Delphi, C++Builder e Lazarus agora encapsulam as pesquisas de documentos uma única vez, aceitamEntereF3para o próximo resultado, redefinem o contexto de pesquisa quando as opções de correspondência mudam e reservamEscpara cancelar uma pesquisa ativa ou um trabalho de impressão em andamento - A impressão dos visualizadores agora segue a rotação atual do visualizador e seleciona a saída em retrato ou paisagem de acordo, de modo que a rotação da barra de ferramentas se reflita nas páginas impressas
- As três demos
ViewerInteractionLabagora suportam os atalhosCtrl+A,Ctrl+C,Enter,F3eEscsem interceptar os comandos nativos de seleção e cópia dos controles de edição
Corrigido (Fixed)
- O cancelamento de impressão nos visualizadores do C++Builder e do Lazarus agora aborta o trabalho da impressora em vez de enviar as páginas renderizadas antes do cancelamento, e o Lazarus sai explicitamente de cada loop aninhado de cópia, página e agrupamento
- O botão Cancelar do
MultiPageViewerdo Delphi agora está conectado ao seu manipulador, e os campos de pesquisa doMultiPageViewerno C++Builder/Lazarus retêm a edição nativa das teclas de seta, Home e End
Version 2.26.0
Alterado (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnaile seus equivalentes emTPdfViewagora adquirem o render lock em torno da chamadaFPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmap, correspondendo aRenderPage/RenderTile; são chamadas do lado de renderização do PDFium que antes executavam sem o lock e podiam entrar em condição de corrida com umUnloadPage/ReloadPagesimultâneo no mesmo documentoTPdf.RenderPageThumbnailagora respeita a entrada/Rotateda página: o ajuste é recalculado a partir das dimensões rotacionadas para páginas com/Rotate 90ou270, de modo que a proporção da miniatura corresponda ao que o visualizador mostra, em vez de usar as dimensões intrínsecas (não rotacionadas) retornadas porFPDF_GetPageSizeByIndex
Corrigido (Fixed)
TPdfView.GetCharacterRectangleignorava o valor de retorno deFPDFText_GetCharBoxe passava umTPdfRectanglenão inicializado paraPageToDevicequando o PDFium relatava falha; o retângulo agora é inicializado com zeros e umGetCharBoxcom falha retornaRect(0,0,0,0)- O comprimento do buffer do caminho URI e do caminho de arquivo em
GetLinkAnnotationsestava com um erro de uma unidade: a segunda chamada deFPDFAction_GetURIPath/GetFilePathpassavasize(que inclui o NUL final) como comprimento do buffer para um buffer alocado comsize-1; a chamada agora passasize-1, de modo que não possa gravar além da alocação em uma compilação do PDFium que não se auto-limita
Version 2.25.0
Alterado (Changed)
TPdf.AddText,SetText,AddPatheInsertFormObjectFromXObjectagora invalidam a página de texto em cache e as anotações de link antes de regenerar o conteúdo da página, correspondendo aSetTextPositionseRemoveObject; anteriormente, uma chamadaGetText/GetWebLinks/FindFirstapós editar a página retornava texto e dados de link desatualizados, capturados antes da edição, e o handleFPDF_TEXTPAGEretido era usado após a regeneração do conteúdo, com comportamento indefinidoTPdfView.RenderPage(HDC, ...)agora adquire o render lock e mascara as exceções FPU/SSE em torno da chamadaFPDF_RenderPage, correspondendo a todos os demais pontos de entrada de renderização; a sobrecarga anterior, que gravava diretamente no DC, podia entrar em condição de corrida com umUnloadPage/ReloadPagesimultâneo no mesmo documento e deixava as exceções FPU sem máscara em compiladores anteriores ao D12- A demo
PrintPDFdo Delphi agora chamaPrinter.Abortao cancelar, em vez de deixar o blocofinallychegar aPrinter.EndDoc, o que enviava as páginas renderizadas antes do cancelamento; a demo Lazarus já tratava isso corretamente
Corrigido (Fixed)
TPdf.GetCharacter,TPdf.GetCharcodee seus equivalentes emTPdfViewtruncavam os pontos de código do plano astral (emoji, CJK Extension B) retornados porFPDFText_GetUnicodepara os 16 bits baixos por meio deWideChar(), produzindo uma surrogate órfã que corrompia o processamento posterior do texto; caracteres acima de U+FFFF agora retornam U+FFFD (caractere de substituição); useGetTextpara obter a codificação UTF-16 completa dos caracteres astraisGetWebLinkschamavaSetLength(Rectangles, FPDFLink_CountRects(...))sem proteção contra um retorno-1, o que gerava umEOutOfMemoryem uma página malformada; uma contagem negativa agora é limitada a zeroTPdf.Destroyagora apaga a stringPasswordda memória (viaUniqueString+FillChar) antes que o buffer com contagem de referência seja liberado, de modo que a senha não permaneça legível no heap após a destruição do componente
Version 2.24.0
Adicionado (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachmenteDeleteAttachmentagora validam o índice de página/anexo e geramEPdfErrorpara um valor fora do intervalo, correspondendo ao comportamento existente dos acessores de anotação; anteriormente, um índice fora do intervalo era passado diretamente ao PDFium e produzia uma operação silenciosa sem efeito ou comportamento indefinido
Corrigido (Fixed)
- Vazamentos de handle de page-object em caso de falha em
TPdf.AddText,AddBitmapeAddJpegImage: quandoFPDFText_SetText,FPDFImageObj_SetBitmap,FPDFImageObj_SetMatrixouFPDFImageObj_LoadJpegFileInlinegerava exceção depois que o objeto era criado, mas antes deFPDFPage_InsertObjectentregá-lo à página, o handle nativoFPDF_PAGEOBJECTvazava; cada caminho agora destrói o objeto na exceção antes de reemitir TPdf.UnloadPagedescartava um handleFPathem andamento (definido porCreatePath, mas ainda não consumido porAddPath) ao defini-lo comonilsem chamarFPDFPageObj_Destroy; o handle agora é destruído, de modo que um caminho criado e depois abandonado (ou interrompido por uma troca de página) não vaze maisTPdf.InsertFormObjectFromXObjectomitia a chamadaUpdatePage(FPDFPage_GenerateContent) que cada inserção irmã (AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject) executa, de modo que um Form XObject inserido dessa forma desaparecia na próxima recarga ou salvamento;UpdatePageagora é chamado após a inserção
Version 2.23.0
Corrigido (Fixed)
- A validação de
/BaseStatede conteúdo opcional agora aceita/OFFalém de/ON(a ISO 32000-1 Tabela 8.70 permite ambos); a verificação anterior rejeitava configurações legítimas de/OCProperties /D /BaseState /OFFcom um erro de “conteúdo opcional malformado”, mesmo quando o arquivo era conforme - A validação de
/Intentde conteúdo opcional agora aceita/Designe arrays de nomes como[/View /Design], e não apenas o/Viewliteral; a ISO 32000-1 Tabela 8.70 define/Intentcomo um nome ou array de nomes extraídos de/Viewe/Design, e a verificação anterior de valor único rejeitava em excesso a saída das ferramentas de autoria padrão - A detecção do dicionário Geospatial Measure para o gate ExtensionLevel 3 de
/Extensions /ADBEno PDF 1.7 não exige mais/Type /Measure, que a ISO 32000-1 Tabela 254 marca como opcional; produtores de GeoPDF que omitem/Type(PDFBox, QGIS, FME) antes contornavam o gate e produziam silenciosamente saída PDF 1.7 não conforme; o detector agora corresponde apenas a/Subtype /GEO
Version 2.22.0
Alterado (Changed)
- Os cálculos de zoom de ajuste do
TPdfView(GetPageZoom,GetPageWidthZoom,GetPageHeightZoom) agora usamClientWidth/ClientHeightem vez deWidth/Heightda janela, de modo quepfmFitPage/pfmFitWidth/pfmFitHeightdimensionem a página para a área visível em vez do quadro externo, incluindo barras de rolagem e bordas, eliminando a barra de rolagem redundante que aparecia quando a página ajustada era ligeiramente maior que a área cliente AddSignatureTimestampToCmsagora gera umExceptionexplícito identificando o campo ilegível do CMS SignerInfo (version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm) em vez de sair silenciosamente comExite deixar uma análise parcial seguir como se fosse um CMS assinado completo; também foi corrigido o blocobegin/endausente em torno do ramo opcionalsignedAttrs [0], que deixavaR.Positionsem avançar
Corrigido (Fixed)
- Vazamento de handle de chave privada CNG em
ResolveWinSigner: quandoCryptAcquireCertificatePrivateKeytinha sucesso, mas a extração subsequente de emissor/número de série ou oTWinCmsSigner.Creategerava exceção, oNCryptKeyHandlenunca era liberado, porque sua propriedade só é transferida para o assinante em um construtor bem-sucedido; a configuração pós-aquisição agora é encapsulada, de modo que o handle seja liberado viaNCryptFreeObjectao primeiro sinal de falha EcDsaP1363ToDeragora rejeita uma metaderoustotalmente zerada, em vez de emitir umINTEGER 0; assinaturas ECDSA comr = 0ous = 0são inválidas (RFC 4754 §6 / FIPS 186-4 §6 exigem1 ≤ r, s ≤ n-1) e, de outra forma, seriam aceitas como genuínas por um verificador leniente
Version 2.21.12
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.5 a PDF 1.7 agora rejeitam estruturas
/OCPropertiesmalformadas no catálogo, incluindo entradas obrigatórias/OCGsou/Dausentes, valores de configuração padrão inválidos e entradas de estado que não são arrays
Version 2.21.11
Corrigido (Fixed)
- Salvamentos explícitos de versão PDF agora rejeitam entradas
/Annotsde página diretas ou indiretas cujos dicionários de anotação omitem a entrada obrigatória/Subtypeou/Rect
Version 2.21.10
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.7 agora exigem que dicionários geoespaciais
/Type /Measure /Subtype /GEOe anotações de projeção declarem/Extensions /ADBEcom/BaseVersion /1.7e/ExtensionLevel 3ou mais recente
Version 2.21.9
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.7 agora exigem que anotações RichMedia e ações
RichMediaExecutedeclarem/Extensions /ADBEcom/BaseVersion /1.7e/ExtensionLevel 3ou mais recente
Version 2.21.8
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.7 agora exigem que streams PRC 3D declarem
/Extensions /ADBEcom/BaseVersion /1.7e/ExtensionLevel 1ou mais recente, em vez de tratar PRC como um recurso nativo do PDF 1.7
Version 2.21.7
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.4 e anteriores agora rejeitam entradas
/SMaskInDataem XObjects de imagem, incluindo valor explícito0, porque canais de máscara suave JPEG 2000 embutidos requerem PDF 1.5 ou mais recente
Version 2.21.6
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.4 e anteriores agora rejeitam XObjects de imagem de 16 bits, que requerem PDF 1.5 ou mais recente; destinos PDF 1.5 a PDF 1.7 preservam os dados de imagem
/BitsPerComponent 16
Version 2.21.5
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.4 e anteriores agora rejeitam os valores
/PageLayout /TwoPageLefte/TwoPageRightdo catálogo do documento, que requerem PDF 1.5 ou mais recente; destinos PDF 1.5 a PDF 1.7 preservam o layout de duas páginas solicitado
Version 2.21.4
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.3 agora rejeitam entradas
/Langno catálogo do documento, que requerem PDF 1.4 ou mais recente; destinos PDF 1.4 a PDF 1.7 preservam o identificador de idioma
Version 2.21.3
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.3 agora rejeitam árvores de nomes
/EmbeddedFilesdo documento, que requerem PDF 1.4 ou mais recente, sem rejeitar streams de arquivos embutidos referenciados por especificações de arquivo mais antigas
Version 2.21.2
Corrigido (Fixed)
- Salvamentos explícitos de PDF 1.3 agora rejeitam streams de metadados ativos, que requerem PDF 1.4 ou mais recente, preservando-os para destinos PDF 1.4 a PDF 1.7
Version 2.21.1
Corrigido (Fixed)
- A validação de referência híbrida agora aplica entradas suplementares
/XRefStmantes dos marcadores xref clássicos da mesma revisão, de modo que anotações comprimidas e outros objetos com controle de versão não sejam mais ignorados quando a tabela de compatibilidade os marca como livres
Version 2.21.0
Alterado (Changed)
- Todos os exemplos de visualizador Delphi, C++Builder e Lazarus podem abrir um PDF passado como primeiro argumento de linha de comando, e os exemplos
MultiPageViewerdo C++Builder e Lazarus fornecem atalhos explícitos de selecionar tudo e copiar
Corrigido (Fixed)
- Os exemplos de visualizador agora rejeitam destinos de página inválidos de favoritos e links, preservam erros de carregamento, validam a entrada de zoom manual de forma consistente, imprimem a página preenchida do formulário em vez de repetir a página visível, e abortam trabalhos de impressão Delphi cancelados em vez de enviar saída parcial
Version 2.20.0
Alterado (Changed)
- Todos os exemplos de visualizador Delphi, C++Builder e Lazarus agora fornecem atalhos consistentes para abrir, pesquisar, salvar, imprimir, aplicar zoom e navegar entre páginas, enquanto cada variante
ViewerInteractionLabtambém suporta saltos de página, zoom manual validado de 10–600%, logs de interação persistentes e verificações de ida e volta de coordenadas de clique
Version 2.19.1
Corrigido (Fixed)
- A validação explícita de versão PDF agora segue a cadeia de revisão clássica, híbrida ou de stream xref ativa, incluindo entradas de objetos comprimidos, de modo que objetos substituídos, liberados e não referenciados não causem mais falhas falsas de versão de recurso
Version 2.19.0
Alterado (Changed)
- Os exemplos de anexo, extração de imagem, extração de texto, conversão de página e divisão do C++Builder e Lazarus agora usam pastas de saída dedicadas ou arquivos finalizados com segurança, nomes estáveis com preenchimento de zeros, atualizações de progresso responsivas e resumos de conclusão com contagens de erros por item
Corrigido (Fixed)
- O
CJKTextLabdo C++Builder agora mede o texto por meio das funções de edição exportadas do PDFium, e oMergePDFevita uma sobrecarga de mensagem VCL ambígua, restaurando compilações limpas no RAD Studio 37
Version 2.18.3
Corrigido (Fixed)
- O carimbo de tempo de documento B-LTA do PAdES agora é registrado como um campo de assinatura detectável — um Widget invisível acessível por meio dos
/Annotsda primeira página e dos/Fieldsdo AcroForm (ETSI EN 319 142-1 §5.4.3) — em vez de um objeto órfão inacessível que validadores de enumeração de campos de assinatura não conseguiam encontrar; anotações e campos existentes são preservados
Version 2.18.2
Corrigido (Fixed)
- A assinatura PAdES e a escrita de referência cruzada clássica agora geram um erro claro quando um deslocamento de bytes excede a largura de campo fixo de 10 dígitos (~9,3 GB), em vez de deixar silenciosamente o marcador
/ByteRangenão escrito (produzindo uma assinatura inválida) ou ultrapassar a linha xref de 20 bytes (ISO 32000-1 §7.5.4); a saída de stream de referência cruzada usa campos binários de 8 bytes e não é afetada
Version 2.18.1
Corrigido (Fixed)
- A assinatura PAdES agora resolve referências indiretas de
/Annots,/AcroForme/Fieldsda primeira página pelo cabeçalho completo do objeto (ISO 32000-1 §7.5.3) e pelo número de geração real da referência; uma busca por substring simples antes correspondia a um número de objeto dentro de um mais longo (resolvendo5 0 Rpara15 0 obj) e uma geração codificada ignorava objetos comgen>0, corrompendo os arrays de campos de assinatura ou rejeitando documentos válidos - Quando o catálogo, a primeira página,
/Annots,/AcroFormou/Fieldsreside dentro de um stream de objetos, a assinatura agora tenta novamente em uma cópia expandida antes de falhar, em vez de rejeitar o documento imediatamente
Version 2.18.0
Adicionado (Added)
ReadPdfVersionInforeporta a versão do cabeçalho, a versão de núcleo efetiva, a substituição do catálogo e o nível de extensão de desenvolvedor Adobe a partir de um stream PDF
Alterado (Changed)
- Salvamentos explícitos de PDF 1.3 a 1.7 agora validam o catálogo, recursos de página, XFA, redação e estruturas de extensão de desenvolvedor no contexto do objeto proprietário; saída cifrada com versão explícita e normalização incremental de PDF 1.3 são rejeitadas para preservar a integridade do documento
- Salvamentos de caminho de arquivo agora escrevem em um arquivo temporário adjacente e substituem o destino somente após todos os checks de compressão, normalização e versão serem bem-sucedidos
Corrigido (Fixed)
- A saída PDF 1.3 agora carrega o recurso
/ProcSetcompleto obrigatório e remove chaves de transparência PDF 1.4 quando elas apenas repetem os valores do estado gráfico inicial do PDF 1.3 - Arquivos de referência híbrida, stream xref e stream de objetos não são mais reescritos pelo compressor xref clássico, evitando que entradas de objetos comprimidos sejam descartadas
- Nomes que se assemelham a chaves de transparência ou de recurso de catálogo dentro de strings, comentários ou mapas de recursos não relacionados não causam mais falhas falsas de versão de destino
Version 2.17.0
Adicionado (Added)
- Assinaturas PAdES agora são registradas como anotações Widget invisíveis no array
/Annotsda primeira página e no array/Fieldsdo AcroForm, preservando anotações e campos de formulário existentes
Alterado (Changed)
- Atualizações incrementais de PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT e PAdES agora preservam a representação de referência cruzada de origem: documentos com stream xref recebem uma atualização de stream xref conforme exigido pela ISO 32000-1 §7.5.8.1, enquanto documentos clássicos continuam recebendo uma tabela xref
- Deslocamentos de referência cruzada,
startxref,/Prev, valores ByteRange do PAdES e processamento de intervalo SHA-256 agora usam posições de 64 bits com hashing fragmentado, habilitando arquivos maiores que 2 GB em compilações de 64 bits - Pacotes XMP graváveis gerados agora reservam 2048 bytes de preenchimento antes da instrução de fechamento do pacote
Version 2.16.10
Corrigido (Fixed)
- A expansão de stream de objetos não ressuscita mais cópias obsoletas de objetos que uma atualização incremental migrou para fora do stream de objetos para uma definição simples (ISO 32000-1 §7.5.7); verificações de conformidade e injeção de marcadores anteriormente resolviam o catálogo ou dicionário de metadados desatualizado em tais arquivos
Version 2.16.9
Corrigido (Fixed)
- No Free Pascal, strings de texto cuja entrada não é UTF-8 válido são alargadas byte a byte como Latin-1 e escritas como strings hexadecimais UTF-16BE; os bytes altos brutos anteriormente vazavam para uma string literal, o que não é uma codificação de string de texto PDF 1.7 válida
- A decodificação de streams agora reconhece dados deflate brutos sem o wrapper zlib RFC 1950 (um defeito comum de escritores defeituosos) e os descomprime em modo raw, de modo que varreduras de conformidade não fiquem silenciosamente cegas nesses streams
Version 2.16.8
Corrigido (Fixed)
- Atualizações incrementais escritas pelo caminho de pós-processamento de salvamento agora atualizam o segundo elemento
/IDdo trailer (em alteração) conforme exigido pela ISO 32000-1 §14.4; ambos os elementos eram anteriormente copiados literalmente, de modo que ferramentas de cache e sincronização viam um identificador inalterado após cada atualização
Version 2.16.7
Corrigido (Fixed)
- O blanqueamento do corpo de stream usado por varreduras de conformidade agora exige que a palavra-chave
streamseja seguida por um fim de linha (ISO 32000-1 §7.3.8.1); a palavra dentro de uma string literal como(downstream)anteriormente blanqueava toda a estrutura seguinte até o próximoendstream, ocultando violações reais das verificações em nível de bytes - As varreduras de recursos proibidos do PDF/X e PDF/E agora também blanqueiam strings literais e comentários (§7.2.2), de modo que um valor como
/Title (see /JavaScript docs)ou um token comentado não produza mais um falso positivo deJavaScript,AcroFormouLZWDecode
Version 2.16.6
Corrigido (Fixed)
- Entradas DPM do PDF/VT agora são validadas no momento da escrita conforme documentado: nomes de chave que violam a regra NMTOKEN da ISO 16612-2 §6.6 ou a regra de prefixo de registrante do Anexo E, e nomes duplicados, são rejeitados em vez de serem escritos no dicionário DPart — um nome contendo espaço anteriormente se dividia em um par chave/valor falso e corrompía o dicionário
Version 2.16.5
Corrigido (Fixed)
- Remover uma entrada de dicionário cujo valor é uma string hexadecimal (como
/Check <...>) agora remove a entrada completa; os injetores anteriormente deixavam um valor hexadecimal órfão, produzindo um dicionário sintaticamente quebrado - Remover uma entrada cuja referência indireta usa quebras de linha entre os tokens (a ISO 32000-1 §7.3.10 permite qualquer espaço em branco) não deixa mais o número de geração e a palavra-chave
Rpara trás
Version 2.16.4
Corrigido (Fixed)
- A varredura do número máximo de objetos não exige mais que os cabeçalhos de objetos iniciem uma linha (a ISO 32000-1 §7.5.3 permite qualquer espaço em branco ou delimitador antes deles), de modo que os injetores não possam mais alocar um número de objeto que colida com um cabeçalho
N G objinline e corrompa silenciosamente o arquivo; os números de objeto são limitados pelo teto do Anexo C - Streams cujo
/Lengthé uma referência indireta agora resolvem o objeto inteiro referenciado e usam seu valor quando ele se alinha com oendstreamde fechamento; anteriormente, tais streams eram delimitados por uma busca de padrão, que truncava corpos contendo legalmente a sequência de bytesendstream— típico para anexos PDF embutidos
Version 2.16.3
Corrigido (Fixed)
- A compressão de stream passa documentos de stream de referência cruzada (arquivos PDF 1.5+ sem uma palavra-chave
trailerclássica) inalterados; o caminho de reconstrução anteriormente interpretava malstartxrefcomo o local da tabela e sintetizava um trailer estimado, o que poderia produzir um arquivo que não podia ser aberto - O compressor pula streams de metadados XMP para que um documento PDF/A mantenha seu stream de metadados obrigatoriamente não filtrado (ISO 19005-1 §6.7.2), e deixa streams de arquivos externos (
/Fcom/FFilter) intocados - A tabela de referência cruzada reconstruída varre uma cópia do documento sem streams, de modo que o conteúdo binário de stream não possa mais falsificar cabeçalhos de objetos ou inflar a tabela; o
/Sizedo trailer reconstruído agora reflete a tabela real e os números de objeto são limitados pelo teto do Anexo C - A localização da tabela de referência cruzada original aceita terminações de linha somente CR (ISO 32000-1 §7.5.1) e não pode mais corresponder às letras
xrefdentro destartxref; a varredura da palavra-chave stream ganhou a mesma proteção de caudaendstreamusada em outros lugares e agora avança além de corpos de stream ignorados
Version 2.16.2
Corrigido (Fixed)
- A análise de inteiros nos leitores PDF em nível de bytes agora aceita o sinal
+explícito permitido pela ISO 32000-1 §7.3.3 e rejeita sequências de dígitos que causariam overflow, de modo que documentos hostis ou corrompidos não possam mais envolver comprimentos e deslocamentos analisados em valores enganosos
Version 2.16.1
Corrigido (Fixed)
- O injetor PDF/UA escreve o valor
/Langdo catálogo como uma string de texto PDF adequada; ele anteriormente passava o valor pelo escapador XML, de modo que uma tag de idioma contendo&ou parênteses produzia uma entrada corrompida, e entradas não-ASCII eram escritas como UTF-8 bruto - A entrada
/ISO_PDFEVersionInfo do PDF/E usa o codificador de string de texto compartilhado, mantendo valores não-ASCII legais no PDF 1.7 - O escape XML para pacotes XMP descarta caracteres de controle que são ilegais no XML 1.0, de modo que metadados copiados de um documento de origem danificado não possam mais tornar todo o stream de metadados não bem formado
- A conversão de data de PDF para XMP valida que os campos de data são numéricos e preenche um campo de minutos ausente, evitando datas ISO 8601 malformadas no XMP gerado; em plataformas não-Windows, o carimbo de tempo de fallback agora inclui a hora do dia em vez da data simples
Version 2.16.0
Adicionado (Added)
- A decodificação de streams agora reconstrói preditores
/DecodeParms(preditores PNG 10-15 e preditor TIFF 2, ISO 32000-1 §7.4.4.4) após FlateDecode, respeitando/Colors,/BitsPerComponente/Columns; streams de objetos comprimidos com um preditor — uma escolha comum de escritores PDF 1.5+ — anteriormente exibiam bytes diferenciados, de modo que os objetos que carregavam eram silenciosamente invisíveis para varreduras de conformidade e injeção de marcadores
Corrigido (Fixed)
- A detecção FlateDecode agora analisa o valor
/Filtercomo um nome ou array em vez de uma correspondência de substring, de modo que cadeias de filtros em cascata e ocorrências da palavra dentro de valores não relacionados não disparem mais uma inflate espúria; cadeias não suportadas retornam para os bytes brutos como antes
Version 2.15.1
Corrigido (Fixed)
- O scanner de dicionários agora ignora strings literais, strings hexadecimais e comentários ao equilibrar
<</>>(ISO 32000-1 §7.2.2), de modo que dicionários contendo valores como(A >> B)ou uma string hexadecimal adjacente ao delimitador de fechamento não sejam mais truncados durante a análise de trailer, catálogo e varredura de conformidade - A extração de string literal agora decodifica o conjunto completo de escape da tabela 3 do §7.3.4.2 —
\n \r \t \b \f, octal\ddd, continuações de linha e normalização EOL sem escape — em vez de copiar a letra de escape literalmente, restaurando comparações corretas de/Producer,/GTS_PDFXVersione/ISO_PDFEVersionpara escritores que usam escapes octais - Strings literais escritas pelos injetores de marcadores agora escapam CR, LF e outros caracteres de controle para que os valores sobrevivam à normalização de fim de linha do lado do leitor byte a byte
Version 2.15.0
Corrigido (Fixed)
- Atualizações incrementais escritas pelos injetores de marcadores PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA e PDF/VT e pelos caminhos de assinatura PAdES e DSS agora preservam o identificador de arquivo permanente do documento de origem: o primeiro elemento
/IDdo trailer é transferido literalmente conforme exigido pela ISO 32000-1 §14.4 e apenas o segundo elemento (em alteração) é atualizado; anteriormente ambos os elementos eram regenerados, de modo que referências externas e fluxos de trabalho de validação de longo prazo viam uma identidade de documento diferente após cada salvamento - Assinaturas PAdES, injeção DSS e carimbos de tempo de documento B-LTA agora transferem a referência
/Infodo trailer de origem (ISO 32000-1 §7.5.6), de modo que as propriedades do documento não desapareçam mais dos painéis do leitor após a assinatura; o trailer do carimbo de tempo de documento também ganha o array/ID - O fallback
/Infodo trailer para documentos de stream de referência cruzada agora localiza o dicionário de stream XRef corretamente e preserva o número de geração da referência; ele anteriormente nunca correspondia em arquivos PDF 1.5+ conformes, descartando silenciosamente o/Info
Version 2.14.4
Corrigido (Fixed)
- A data
/Mdo dicionário de assinatura escrita porTPdf.SignPadeseSignPadesBytesagora carrega o prefixo obrigatórioD:e o marcador de deslocamento UTCZexigidos pela ISO 32000-1 §7.9.4; validadores rigorosos anteriormente rejeitavam a hora de assinatura como uma string de data malformada
Version 2.14.3
Corrigido (Fixed)
- Pesquisas de chave de dicionário no leitor PDF compartilhado agora correspondem a tokens de nome inteiros (ISO 32000-1 §7.3.5); anteriormente, um stream cujo dicionário listava
/Length1antes de/Length(típico para streams FontFile) era truncado para a contagem de bytes errada, cegando silenciosamente varreduras de conformidade de PDF/A, PDF/UA e outras que leem streams de fonte, CMap ou metadados - Pesquisas de chave
/Encrypt,/Root,/Sizee/Infono trailer não correspondem mais a chaves mais longas com o mesmo prefixo (como/EncryptMetadata) - A expansão de stream de objetos não confia mais em um valor
/Ncorrompido ou hostil: valores não inteiros agora produzem 0 em vez de um número não inicializado, e um limite superior derivado de/Firstevita alocações excessivas ao varrer documentos malformados
Version 2.14.2
Corrigido (Fixed)
- Os injetores de marcadores PDF/X, PDF/VT, PDF/UA, PDF/E e PDF/R agora passam documentos de origem cifrados inalterados em vez de acrescentar seções de atualização em texto simples; o comportamento anterior produzia arquivos cujo trailer mais recente perdia a entrada
/Encrypt(ISO 32000-1 §7.5.6), de modo que leitores conformes liam o corpo cifrado como texto simples TPdf.SignPades,SignPadesByteseInjectPadesDssMarkersagora geramEPadesCryptoquando o documento de origem está cifrado, em vez de emitir silenciosamente um arquivo corrompido ou inverificável; remova a criptografia antes de assinar ou incorporar material DSS
Version 2.14.1
Corrigido (Fixed)
TPdf.SignPadeseSignPadesBytesagora preenchem retroativamente todos os quatro campos/ByteRangedo dicionário de assinatura; anteriormente os três últimos campos permaneciam em seus marcadores zero, de modo que as assinaturas produzidas declaravam um intervalo de bytes vazio e falhavam na verificação em validadores conformes- Os dicionários de carimbo de tempo de documento B-LTA do PAdES recebem a mesma correção de preenchimento retroativo do
/ByteRange ValidatePadesComplianceagora aceita o layout de assinatura padrão onde o espaço do intervalo de bytes contém o valor hex/Contents, e verifica que o segundo segmento de intervalo termina exatamente no fim do arquivo; anteriormente apenas intervalos sem espaço passavam na verificação de cobertura
Version 2.14.0
Adicionado (Added)
TPdf.ExportXFDFserializa todos os valores de campo de formulário e anotações em todas as páginas para um documento XFDF (ISO 19444-1), emitindo<fields>para valores de formulário hierárquicos e<annots>para todos os subtipos de anotação suportados (text, highlight, underline, strikeout, squiggly, line, circle, square, caret, polygon, polyline, stamp, ink, freetext, fileattachment, sound, link, redact)TPdf.ImportXFDFlê um documento XFDF de volta para o PDF carregado, recriando anotações nas páginas correspondentes e aplicando valores de campo às suas anotações widget- O registro
TPdfAnnotationganhou os camposName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), pontos finais de linha, vértices de polígono/polilinha e gestos de lista de tinta para que viagens de ida e volta XFDF preservem os metadados completos de anotação - Novo exemplo
XfdfLabnos conjuntos de demo Delphi, C++Builder e Lazarus demonstra a viagem de ida e volta de exportação/importação
Version 2.13.6
Corrigido (Fixed)
ValidatePdfAagora trata streams/Metadatado catálogo sem/Type /Metadataou/Subtype /XMLcomo metadados XMP ausentes por meio depvaiMissingXmpMetadata- Relatórios de preflight PDF/A agora classificam
pvaiMissingXmpMetadatacomo Metadados e recomendam um stream/Metadatado catálogo com/Type /Metadata,/Subtype /XML, XMP não filtrado e marcadorespdfaid
Version 2.13.5
Corrigido (Fixed)
ValidatePdfAagora reporta anotações Widget sem dicionário de aparência e anotações PDF/A-2 / PDF/A-3 que exigem mas carecem de/APpor meio depvaiAnnotationApDictViolation- Relatórios de preflight PDF/A agora categorizam
pvaiAnnotationApDictViolationcomo conteúdo que a injeção de marcadores não consegue reparar
Version 2.13.4
Corrigido (Fixed)
ValidatePdfAagora reporta imagens inline de PDF/A-2 e PDF/A-3 cujo valor/Iou/Interpolateétruepor meio depvaiImageDictionaryViolation, correspondendo à cobertura existente do dicionário de XObject de imagem- Relatórios de preflight PDF/A agora categorizam
pvaiImageDictionaryViolationcomo conteúdo que a injeção de marcadores não consegue reparar
Version 2.13.3
Corrigido (Fixed)
ValidatePdfAagora reporta imagens inline de PDF/A-1 que usam filtros/LZWDecodeou/LZWabreviado dentro de streams de conteúdo por meio depvaiInlineImageLzwForbidden, correspondendo à cobertura existente de imagens inline de PDF/A-2 e PDF/A-3- O scanner de filtros de imagem inline agora avança além de nomes de recursos iniciais como
/GS1, evitando travamentos ao varrer streams de conteúdo mais amplos de PDF/A-1
Version 2.13.2
Adicionado (Added)
TPdf.SetFocusedFormFieldTextescreve texto no buffer de edição do campo de formulário atualmente focado viaFORM_ReplaceSelection, simétrico aoFocusedFormFieldText. Para campos de texto/combo AcroForm, o valor é confirmado em/Vao perder o foco e persiste; para campos de texto XFA, a escrita fica no buffer em memória apenas (o PDFium não expõe API pública para reconciliar valores XFA de volta ao pacote de datasets, portanto não persiste entre salvamentos)- A plataforma host JavaScript agora é anexada sempre que o motor V8 está disponível, independentemente de o documento ser XFA — de modo que JavaScript AcroForm embutido (scripts de nível de documento, cálculos de campo,
app.alert) também possa ser executado. Anteriormentem_pJsPlatformera conectado apenas para documentos XFA, deixando JS AcroForm silenciosamente desabilitado
Alterado (Changed)
- O anexo de plataforma JavaScript agora é independente da decisão XFA em
InitializeFormFill— a tabelam_pJsPlatformé construída sempre queV8FeaturesAvailableé verdadeiro, aplicada após a configuração de versão/callback XFA em vez de aninhada dentro dela
Version 2.13.1
Adicionado (Added)
- Novos eventos de host expõem informações que os callbacks de preenchimento de formulário da v2.13.0 anteriormente suprimiam:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Cada evento tem como padrão o comportamento sem operação existente quando não atribuído, de modo que hosts existentes não são afetados - A propriedade somente leitura
TPdf.XfaFormPacketsretorna um snapshot único de todos os pacotes XFA (TXfaPacketList), cumprindo os tiposTXfaPacket/TXfaPacketListanteriormente declarados mas não utilizados - Os códigos de erro PDFium específicos de XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTagora estão vinculados e expostos por meio deLastPdfError, substituindo o genérico "Erro desconhecido" para falhas de carregamento/layout XFA
Alterado (Changed)
FFI_DoURIActionWithKeyboardModifieragora consultaOnXfaUriActionantes de executar via shell uma URI de um campo XFA, dando ao host um direito de veto (segurança: um campo XFA malicioso poderia anteriormente lançar URLs arbitrárias incondicionalmente). Manipuladores não atribuídos preservam o padrão anterior deShellExecuteWDecodeFormFieldTypeagora roteia tipos de campo XFA por meio deIsXfaFormFieldem vez de um case explícito de 8 ramificações, mantendo o enum alinhado comFPDF_FORMFIELD_XFA_*por offset ordinal
Corrigido (Fixed)
ValidatePdfAagora reporta declarações PDF/A-1 que usam streams de referência cruzada PDF 1.5 ou streams de objetos com o novopvaiPdfA1Pdf15Structure, continuando a permitir streams de objetos para PDF/A-2 e PDF/A-3
Version 2.13.0
Adicionado (Added)
- Suporte completo ao runtime XFA (XML Forms Architecture):
TPdf.InitializeFormFillagora conecta todos os 14 callbacksFPDF_FORMFILLINFOversão 2 (FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier) e anexa umIPDF_JsPlatformpara que umapdfium.dllhabilitada para XFA possa renderizar e executar scripts em formulários XFA dinâmicos - Nova unidade
Lib\FPdfXfa.pasdeclarando as constantes XFA (FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) e os tiposTXfaPacket/TXfaSaveFormatque anteriormente eram apenas referenciados em comentários - Leitor de pacote estático XFA em
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNamemaisGetXfaTemplate/GetXfaDatasets/GetXfaConfigextraem os pacotes XFAtemplate,datasetseconfigcomo XML bruto sem precisar de um runtime habilitado para XFA — útil para auditoria de conformidade e migração de dados - Sondas de capacidade:
XfaFeaturesAvailableglobal, e por documentoTPdf.XfaRuntimeAvailable(seFPDF_LoadXFArealmente teve sucesso) eTPdf.XfaStaticReadable(se as exportações do leitor de pacotes resolvem) TPdfFormFieldTypeestendido comfiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField, comDecodeFormFieldTypemapeando os novos valoresFPDF_FORMFIELD_XFA_*- Eventos de host JavaScript em
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrleOnXfaRuntimeMissingpermitem que o host personalize diálogos JS e navegação XFA, ou reaja quando um documento XFA não pode executar o motor - Novo exemplo Delphi
XfaLabdemonstrando detecção de XFA, extração de pacotes, sondagem de capacidades e o caminho de fallback sem runtime
Alterado (Changed)
TPdf.LoadDocumentagora pré-varre a entrada em busca de marcadores XFA (/XFAno dicionário AcroForm, ou/NeedsRenderingno catálogo) e, quando encontrado, seleciona automaticamentepdfium.v8.dlldefinindoEnableV8Engine := Trueantes que a biblioteca singleton seja carregada pela primeira vez; uma vez que umpdfium.dllsimples seja carregado, o processo não pode trocar, de modo queOnXfaRuntimeMissingsinaliza esse casoTPdf.GetPageCountagora reflete a contagem de páginas que o motor XFA reporta viaFFI_PageEventapós repaginação dinâmica, em vez de apenas a árvore de páginas PDF estática- Quando um documento XFA é aberto mas o runtime não está disponível,
InitializeFormFillagora fixaversion=1exfa_disabled=1em vez de solicitar a versão 2 com callbacks não atribuídos, o que anteriormente arriscava uma desreferência de ponteiro de callback inválido
Version 2.12.2
Corrigido (Fixed)
ValidatePdfAComplianceagora reporta namespaces XMP personalizados usados sempdfaExtension:schemasenquanto ainda aceita metadadospdfaidpadrão sem declarações de extensão- A validação de arquivo embutido PDF/A-3 agora exige entradas
/Fe/UFde nível superior nos dicionários filespec e ignora chaves de stream/EFaninhadas ao verificar esses nomes
Version 2.12.1
Corrigido (Fixed)
ValidatePdfAComplianceagora decodifica tokens de nome PDF escapados antes de corresponder nomes proibidos de JavaScript, LZWDecode, Type1 e relacionados, de modo que nomes ofuscados mas semanticamente idênticos sejam reportados corretamente- As verificações de imagem inline PDF/A agora rejeitam valores
/Filtere/Fque usam/LZWDecode,/LZWabreviado ou/Crypt, incluindo formas de array e nome escapado - A validação PDF/A agora reporta streams de metadados com filtros de stream proibidos, perfis ICC OutputIntent cujo valor
/Nde componentes está ausente ou inconsistente, e specs de arquivo embutido PDF/A-3 com/AFRelationshipausente ou inválido
Version 2.12.0
Adicionado (Added)
- Requisições HTTP ao TSA agora definem timeouts explícitos de 30 s para cada fase (resolução/conexão/envio/recebimento) via
WinHttpSetTimeouts, de modo que uma autoridade de carimbo de tempo lenta ou inacessível não possa travar o thread de assinatura indefinidamente em vez de depender dos padrões implícitos do WinHttp - Derivação de nonce por requisição para pedidos de carimbo de tempo PAdES B-T / B-LTA quando o chamador omite
TPadesSignOptions.Nonce: um fold SHA-256 de contador monotônico + relógio de parede +GetTickCount64+ id de processo substitui o fallback fixo anterior de$100000000, de modo que duas requisições emitidas no mesmo milissegundo não reutilizem mais o mesmo nonce anti-replay PdfInflateagora limita a saída descomprimida a 256 MiB para evitar que um stream comprimido com zlib esgote a memória em uma entrada hostil ou corrompida (uma “zlib bomb”); o limite é generoso para qualquer stream PDF real
Alterado (Changed)
- A mesclagem de sobreposição do
TPdfView(destaque de pesquisa, seleção de texto, palavra de leitura, seleção ampla) não usa maisGetPixel/SetPixelVpor pixel; o retângulo agora é mesclado por meio de umTBitmapoff-screen de 32-bpp eScanLineem uma única passagem, eliminando milhares de cruzamentos do kernel GDI por paint e tornando grandes seleções responsivas FPdfAsn1.TDerReader.ReadIntegeragora rejeita campos INTEGER com mais de 8 bytes (e negativos de 8 bytes cujo bit de sinal exigiriashl >= 64), retornando 0 em vez de computar um valor errado por comportamento de shift indefinido na entrada ASN.1 CMS/PAdESParseTimeStampRespnão ecoa mais o nonce da requisição de volta comoTPadesTimestamp.Nonce; até que o walker TSTInfo que verifica o nonce retornado seja implementado, o campo fica em 0 para sinalizar "não verificado" em vez de dar aos chamadores falsa confiança de que a resposta de carimbo de tempo é fresca
Corrigido (Fixed)
PointsToPixelsretornava sua entrada inalterada para qualquer DPI: o divisor eraPointsPerInch(a constante 72) em vez do literal 72, colapsando a fórmula paraResult := Points. Qualquer chamador externo que realize dimensionamento de pontos→pixels de dispositivo por meio deste helper agora obtém o corretoPoints × PixelsPerInch / 72PdfMaxObjNumsubestimava em documentos que usam streams de objetos (ObjStm PDF 1.5+): objetos comprimidos dentro de um/ObjStmnão carregam marcadorN 0 obj, de modo que a varredura de bytes brutos os perdia, e injetores que alocamMaxObj+1para novos objetos colidiriam com membros ObjStm ocultos e corromperiam silenciosamente o arquivo. A varredura agora expande primeiro os streams de objetos para que todo número de objeto seja visívelInjectPdfAMarkersnão forja mais uma declaração de conformidade PDF/A em um documento cifrado: o PDF/A (ISO 19005-1 §7.1) proíbe criptografia, e o injetor anteriormente copiava a fonte com os marcadores mesmo que a próxima validação a rejeitasse. QuandoHasEncryptestá definido, a fonte agora é passada inalterada. O caminho normalTPdf.SaveAsPdfAjá remove a criptografia (saRemoveSecurity) antes da injeção, portanto isso afeta apenas chamadores diretosPdfReadStreamBytesagora recusa um/Lengthmaior que o arquivo inteiro antes de alocar o buffer de resultado, fechando um caminho de alocação antecipada em um comprimento indireto corrompido ou hostil
Version 2.11.0
Adicionado (Added)
- O registro
FPDF_FILEHANDLERdo PDFium agora declara seus seis callbacks (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) como campos reais em vez de comentários, correspondendo ao layout do cabeçalho C. Os callbacks de transferência de arquivo XFA FFI (FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL) que retornam ou consomemPFPDF_FILEHANDLERainda ficam não implementados na camada de preenchimento de formulário Pascal, mas o tipo agora está estruturalmente correto para qualquer caminho futuro de envio/upload XFA - O carregamento e descarregamento da biblioteca PDFium (
LoadLibrary/UnloadLibrary) agora são serializados por uma seção crítica global de processo, de modo que dois threads de workerTPdfFuture<T>(ou um worker competindo com o thread principal) não possam observarPDFiumLibrary=0e fazer double-bind, ou liberar a DLL enquanto outro thread está no meio do bind - Uma seção
initialization/finalizationagora chamaUnloadLibraryno descarregamento da unidade, garantindo queFPDF_DestroyLibraryseja executado (junção de thread de worker, descarte de isolate V8, desmontagem de fonte/cache) em vez de depender do OS para recuperar a DLL
Alterado (Changed)
TPdf.SetActiveagora suprime qualquer exceção durante o carregamento (anteriormente apenasEPdfError), de modo que um erro de stream ou violação de acesso durante a configuração de formulário/página deixeActive=Falseem vez de um componente parcialmente carregado com estado indeterminado- Codificação de caracteres consistente para argumentos de chave de metadados do PDFium:
TPdf.GetMetaTextagora usa o mesmo splitAnsiStringFPC /UTF8EncodeDelphi queGetViewerPreferencee os caminhos de carregamento, em vez de um castAnsiString(Tag)simples - Helpers
BytesToAnsi,AnsiToBytes,WriteByteseWriteStrdeduplicados:FPdfCompressagora os importa deFPdfPdfCommon(seus aliasesWriteBytesToStream/WriteAnsiToStreamsão aposentados) e a sobrecarga redundante de três argumentos deBytesToAnsiemFPdfPdfaé removida.FPdfAsn1mantém sua cópia local por design para manter a camada de criptografia livre da unidade de camada de conformidade
Corrigido (Fixed)
- Vazamento de recurso em
TPdf.LoadDocument(arquivo, memória,TBytes,TMemoryStream, stream personalizado) eTPdf.CreateDocument: seInitializeFormFillouReloadPagegerava exceção apósFPDF_LoadDocument/FPDF_CreateNewDocumentter sido bem-sucedido, o handle nativoFPDF_DOCUMENTera vazado porqueFActiveainda era False naquele ponto. Cada caminho agora envolve a configuração pós-carregamento emtry/excepte fecha o documento em caso de falha, deixando o componente limpo e inativo - Diagnósticos mais amigáveis de carregamento de DLL do PDFium:
CheckLoadLibrarydetectaERROR_BAD_EXE_FORMAT(193) e reporta uma incompatibilidade de arquitetura 32/64 bits apontando para a compilação correspondenteDLLs/Win32ouDLLs/Win64, em vez de transmitir apenas o erro genérico do OS.CheckGetProcAddressagora indica que apdfium.dllimplantada é mais antiga que o binding quando uma exportação obrigatória está ausente, em vez do texto genérico do OS "procedimento não encontrado"
Version 2.10.1
Corrigido (Fixed)
- Padronização do sid do SignerInfo PAdES: o identificador do signatário agora usa a forma
issuerAndSerialNumberda RFC 5652 §5.3 (issuer Name + serialNumber, ambos extraídos literalmente do DER do certificado do signatário), substituindo o marcador anterior não padrãosubjectKeyIdentifier+ SHA-256-do-certificado-completo que o Adobe Acrobat e outros validadores conformes rejeitavam. Um novo caminhador de TbsCertificate DER (ExtractIssuerAndSerial) lê a SEQUENCE do issuer e o INTEGER do número de série como bytes TLV brutos — números de série costumam exceder o intervalo doInt64, portanto o TLV bruto é obrigatório. A formasubjectKeyIdentifierpermanece apenas como fallback quando a análise do DER do certificado falha
Alterado (Changed)
TCmsSignerId.SerialNumber: Int64substituído porSerialDer: TBytes(o TLV do serialNumber bruto). O construtor do CMS incorpora o TLV fatiado literalmente emIssuerAndSerialNumber, evitando o overflow deInt64em números de série de CA de 20 bytes (limite superior da RFC 5280 §4.1.2.2)
Version 2.10.0
Adicionado (Added)
- Validação de longo prazo PAdES B-LT: quando
TPadesSignOptions.Level >= plB_LT,SignPadesBytesacrescenta uma atualização incremental que carrega um dicionário/DSScom o certificado do signatário e a cadeia intermediária completa (a raiz autoassinada é excluída conforme a RFC 5652 §10.2.3), mais o marcador/Extensions /ESICLevel 1 (EN 319 142-1 §5.4.2) - Carimbo de tempo de arquivo PAdES B-LTA: quando
Level >= plB_LTAeTsaUrlestá definido, é acrescentado um dicionário de assinatura Document Time-stamp (/SubFilter /ETSI.RFC3161) cujo/ByteRangecobre o arquivo inteiro; o marcador ESIC é promovido a Level 2. Isso completa os quatro níveis baseline do PAdES (B-B, B-T, B-LT, B-LTA) - Coleta da cadeia de certificados:
ResolveWinSigneragora chamaCertGetCertificateChaine preencheTPadesResolvedSigner.ChainCertDercom os certificados de CA intermediários, de modo que o/DSS /Certsdo B-LT carrega todos os certificados necessários para validar a assinatura sem buscas externas.CertFreeCertificateContextagora está vinculado, fechando o vazamento de um-contexto-por-assinatura mencionado em v2.8.0 - Fluxo de integração com PDF/A:
TPdf.SignPadesWithPdfAconverte primeiro o documento para PDF/A (o nível mais alto que a biblioteca emite hoje) e depois aplica a assinatura PAdES solicitada — o padrão de contêiner de arquivo de longo prazo que o EN 319 142-1 Annex A.7 recomenda
Version 2.9.0
Adicionado (Added)
- Carimbo de tempo confiável PAdES B-T:
TPadesSignOptionsganha os camposLevel,TsaUrleNonce. QuandoLevel >= plB_TeTsaUrlestá definido,SignPadesBytesextrai o valor da assinatura do CMS construído, solicita um carimbo de tempo RFC 3161 sobre ele, e incorpora o TimeStampToken retornado como o atributo não assinado do SignerInfosignature-time-stamp— o passo de tempo confiável do B-T (EN 319 142-1 §6.3 req o) FPdfTsa: cliente RFC 3161 multiplataforma —BuildTimeStampReq(versão 1, messageImprint SHA-256 sobre o valor da assinatura, nonce, certReq=true),ParseTimeStampResp(aceita PKIStatus 0/1, rejeita 2+, extrai o ContentInfo do TimeStampToken literalmente), eRequestTimestamp(construir+POST+analisar numa única operação).PadesTsaAvailablerestringe a funcionalidade em plataformas sem um backend HTTPFPdfTsaWin: backend Windows WinHttp, vinculado dinamicamente a partir de winhttp.dll (zero novas dependências em tempo de compilação; HTTPS negociado pelo repositório de certificados do Windows). Espelha o padrão de vinculação dinâmica deFPdfCryptoWinFPdfCms:ExtractSignatureValuepercorre um CMS construído para recuperar os octetos da assinatura bruta (a entrada de hash da TSA), eAddSignatureTimestampToCmsreconstrói o ContentInfo com um novounsignedAttrs [1](0xA1) que carrega o atributo de carimbo de tempo. O validador de stage-1 reconhece o resultado como uma assinatura B-T
Version 2.8.0
Adicionado (Added)
- Pilha de assinatura PAdES B-B: quatro novos blocos construtivos em Pascal puro/multiplataforma (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) mais um backend Windows CNG (FPdfCryptoWin) permitem queTPdf.SignPades/SignPadesToStreamproduzam uma assinatura PAdES B-B de ponta a ponta. O certificado do signatário é resolvido por impressão digital SHA-1 a partir do repositório Current User “MY”; RSA-PSS (recomendado), RSA PKCS#1 v1.5 e ECDSA são todos suportados viaNCryptSignHash FPdfSha256: SHA-256 FIPS 180-4 autossuficiente (Init/Update/Final + auxiliares de operação única). O FPC 3.2.2 não traz nenhuma unidade SHA-2, portanto a biblioteca possui uma para manter todos os caminhos de código do CMS num único tipoTSHA256Digestsem ramificações na RTLFPdfAsn1: codificador DER (TDerWriter) e leitor (TDerReader) cobrindo SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/tags específicas de contexto, com a codificação de comprimento definido e o tratamento de tags IMPLICIT que o CMS exigeFPdfCms: construtor CAdES SignedData (BuildSignedData) que emite os atributos assinados content-type, message-digest e signing-certificate-v2 que o baseline do PAdES exige, com signing-time e commitment-type-indication opcionais. O digest dos signedAttrs é calculado sobre a forma marcada como SET (0x31) e reemitido com a tag IMPLICIT [0] (0xA0) conforme RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: abstração do backend criptográfico comPadesCryptoAvailable/ResolvePadesSigner, e a implementação Windows que vincula dinamicamente crypt32.dll / ncrypt.dll (nenhuma nova dependência de DLL em tempo de compilação). As assinaturas ECDSA são recodificadas da forma IEEE P1363 r¦s do Windows para oECDSA-Sig-ValueDER que o CMS exigeSignPadesBytes: injeção de assinatura em nível de byte — reserva um slot hex/Contentsde largura fixa, computa o/ByteRangede cobertura, faz o digest do documento, constrói e incorpora o CMS, e acrescenta a atualização incremental. O validador (v2.7.0) reconhece a saída como uma assinatura PAdES B-B
Version 2.7.0
Adicionado (Added)
- Validador estrutural PAdES (ETSI EN 319 142-1 V1.2.1): a nova unidade
FPdfPadese o métodoTPdf.ValidatePadesinspecionam dicionários de valor de assinatura alcançáveis a partir de/ByteRange, percorrem oSignedDatado CMS dentro de/Contentso suficiente para confirmar a forma detached do CAdES, e detectam os quatro níveis baseline (B-B, B-T, B-LT, B-LTA) mais dicionários Document Time-stamp (/SubFilter /ETSI.RFC3161) - Conjunto de problemas PAdES em nível de cláusula: 26 enums
ppei*cobrem a aceitabilidade do/SubFilter(adbe.pkcs7.sha1eadbe.x509.rsa_sha1sinalizados como proibidos), a cobertura de arquivo do/ByteRange, a proibição de/Cert, a forma doSignedDatado CMS (signatário único, eContent detached, intervalo de versão), os atributos assinados exigidos (content-type,message-digest,signing-certificate/v2), digests proibidos (MD5, SHA-1), a exclusão mútua entre/Reasonecommitment-type-indication(req d), o requisito de tempo confiável do B-T, o marcador B-LT/DSS+/Certs+ ESIC Level 1, e o marcador B-LTA Document Time-stamp + ESIC Level 2 - Injetor DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamacrescentam uma atualização incremental que carrega um dicionário/DSS(com arrays de stream/Certs,/OCSPs,/CRLs) e o marcador/Extensions /ESIC(Level 1 ou 2) sobre uma cópia do documento, preservando os bytes originais — o passo de incorporação do material de validação B-LT/B-LTA (cláusula 5.4.2) - Palco multiplataforma, de dependência zero: o validador e o injetor são Pascal puro e funcionam em todas as IDEs suportadas (Delphi, Lazarus, FPC, C++Builder); nenhum backend criptográfico é exigido para esta versão, e nenhuma nova dependência de DLL é introduzida
Version 2.6.0
Alterado (Changed)
- Desduplicação entre padrões: mais sete funções auxiliares duplicadas (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) foram removidas das unidades de padrão individuais e consolidadas em
FPdfPdfCommon, reduzindo cerca de ~300 linhas de ônus de manutenção por copiar-colar - Qualidade do PreflightReport: problemas de classe de conteúdo PDF/X e PDF/E que antes caíam na categoria genérica de “missing marker” agora trazem categorias Content/Metadata/Security precisas e recomendações específicas de cláusula (~15 enums em ambos os padrões)
- Cobertura de testes PDF/E e PDF/R: mais seis enums sem cobertura ganharam testes positivos (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Correção de build do Lazarus:
Tests.PdfVT(uma unidade DUnitX apenas para Delphi adicionada em v2.5.x) agora está excluída do projeto Lazarus para restaurar a compilação
Version 2.5.3
Adicionado (Added)
- Completude do OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchemesinaliza um OutputIntent cujo/Snão é/GTS_PDFX;pvviOutputIntentMissingIdentifiersinaliza um/OutputConditionIdentifierausente - Exceção de Reference XObject PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddennão dispara mais para um arquivoPDF/VT-2, que pode usar legalmente Reference XObjects numa base X-5g/5pg - Validação de caracteres de boundary MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharsinaliza uma boundary cujos caracteres caem fora do conjunto bchars ou cujo comprimento excede 70
Corrigido (Fixed)
InjectPdfVTMarkersagora grava Info/CreationDatee/ModDatea partir das opções de salvamento, de modo que o arquivo produzido faz o round-trip porValidatePdfVTCompliancesem um falsopvviInfoModDateMismatch(o injetor antes reescrevia as datas XMP mas deixava as datas do dicionário Info desatualizadas)
Version 2.5.2
Adicionado (Added)
- Consistência do Info
/ModDate(§6.3 NOTE 2, base PDF/X-4):pvviInfoModDateMismatchsinaliza um/ModDatede dicionário Info que, após normalização de data-PDF para data-XMP, não é igual axmp:ModifyDate - Conformidade de chunk inline PDF/VT-2s (Annex A.2): o validador MIME agora executa
ValidatePdfVTComplianceem cada parteapplication/pdfinline e sinaliza um corpo não-PDF/VT viavtmviInlinePdfNotPdfVT
Version 2.5.1
Adicionado (Added)
- Validação de chunking DParts (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkingsinaliza um array/DPartscujos sub-arrays não finais não têm exatamente 8192 entradas ou cujo último sub-array cai fora de 1..8192 - Consistência de RecordLevel entre streams (Annex A.2): o validador MIME PDF/VT-2s agora extrai o
/RecordLevelde cada PDF inline e sinaliza divergências viavtmviRecordLevelMismatch, complementando a verificação NodeNameList existente - Hints de objetos gráficos recorrentes (§6.7):
pvviGtsScopeInvalidValuesinaliza um/GTS_Scopefora de {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLevelsinaliza/Recordsem um/RecordLevel;pvviGtsXidNotUuidsinaliza um/GTS_XIDque não é um uuid: URI da RFC 4122;pvviGtsEnvMissingsinaliza um/GTS_Envausente quando/GTS_Scopeé Stream ou Global (§6.7.4) - Detecção de referência antecipada MIME (Annex A.2):
vtmviForwardReferencesinaliza um PDF inline que cita um nome de arquivo (via/EF /F) não introduzido por uma parte de anexo anterior na stream
Corrigido (Fixed)
ExtractNodeNameListFromPdfeExtractRecordLevelFromPdfemFPdfPdfvtMimeresolveram um off-by-one recorrente em que o deslocamento baseado em 1 retornado porAnsiFindKeyera tratado como um deslocamento de byte absoluto no PDF expandido
Version 2.5.0
Adicionado (Added)
- Document Part Metadata PDF/VT (DPM, ISO 16612-2 §6.6):
TPdfVTSaveOptionsganhouDpmEntrieseDpmTargetpara que um writer possa anexar um dicionário/DPMao nó DPart sintetizado, com validação de nomes de chave contra a regra de prefixo de segunda classe do Annex E e as regras de forma NMTOKEN / unicidade /GTS_Manageddo §6.6 no lado do validador - Troca por streaming PDF/VT-2s (Annex A): a nova unidade
FPdfPdfvtMimeforneceBuildPdfVT2sStreameValidatePdfVT2sStreampara o envelope MIMEmultipart/mixedque carrega chunks PDF/VT inline mais perfis ICC de anexo, com a regra de ordenação de cabeçalhoX-PDFVT-Stream-version: 1e a verificação de consistênciaNodeNameListentre streams TPdf.ValidatePdfVTagora executa uma contagem autoritativa de ações JavaScript viaFPDFDoc_GetJavaScriptActionCount, complementando a análise de nome/JavaScriptem nível de byte
Corrigido (Fixed)
- Correção de
TrappedPDF/VT na base PDF/X-4: o valor de enumptvUnknowné removido (o PDF/X-4 proíbe/Unknown),ptvUnspecifiedé normalizado para/Falsena gravação (um/Trappedausente também é proibido), e um novo problemapvviTrappedInvalidsinaliza um valor ausente ouUnknown ValidatePdfVTComplianceagora expande object streams (PdfExpandObjectStreams) antes de analisar, de modo que um dicionário de catálogo, OutputIntent ou Metadata armazenado dentro de um ObjStm comprimido (PDF 1.5+, típico de produtores PDF/X-4) seja alcançável pelas buscas em nível de byte
Alterado (Changed)
- PDF/VT-1 agora herda as proibições de conteúdo completas do PDF/X-4:
pvviAcroFormForbidden(/AcroFormou/XFA),pvviAdditionalActionsForbidden(/AAdo catálogo),pvviMissingTrimBoxepvviReferenceXObjectForbidden(Reference XObject, apenas X-5g/5pg) - Desduplicação entre padrões:
BuildDictObj,IccComponentCount, o perfil ICC sRGB embutido (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumePdfExpandObjectStreamsforam promovidos de cópias locais triplicadas emFPdfPdfa/FPdfPdfx/FPdfPdfvtpara uma única casa canônica emFPdfPdfCommon; o literal ICC de 3144 bytes agora existe exatamente uma vez na base de código
Version 2.4.0
Corrigido (Fixed)
InjectPdfUaMarkersnão descarta mais a referência/Infodo trailer em uma base de fluxo de referência cruzada (cross-reference-stream): oSourceTrailerInfoReflocal (que carecia do fallback de fluxo xref) foi substituído peloPdfSourceTrailerInfoRefcompartilhado (promovido a partir da cópia PDF/A que já possuía o fallback desde a v2.0.0)- O
PdfReadStreamBytescompartilhado agora lida com referências indiretas/Length N G R(portado da cópia local do PDF/A), de modo que os validadores PDF/VT, PDF/R e PDF/E não leem incorretamente nem pulam fluxos de metadados XMP produtos por ferramentas que usam Length indireto (Acrobat, Ghostscript)
Alterado (Changed)
- Deduping entre padrões: as cópias locais de
PdfReadTraileremFPdfPdfaeFPdfPdfx, as cópias locais deSourceTrailerInfoRefemFPdfPdfaeFPdfPdfua, e oPdfReadStreamByteslocal emFPdfPdfaforam excluídos — as versões compartilhadas deFPdfPdfCommonagora se aplicam em todos os lugares, o que remove cerca de ~330 linhas de código duplicado e elimina o esforço de manutenção para manter as cópias sincronizadas - Fechamento de lacunas de testes do PDF/X: sete enums de classes de conteúdo que antes possuíam cobertura zero ganharam testes positivos (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Alterado (Changed)
- O fechamento de lacunas de testes do PDF/A continua: mais três enums com cobertura zero ganharam testes positivos;
pvaiForbiddenRenderingIntent(§6.2.9) sinaliza um nome de rendering-intent não padrão em um fluxo de conteúdo;pvaiJpeg2000Violation(§6.2.2) sinaliza uma imagem JPXDecode com/NumComponentsfora de {1,3,4} no Part 2;pvaiInlineImageLzwForbidden(§6.1.10) sinaliza uma imagem inline usando o filtro LZW no Part 2
Version 2.2.0
Alterado
- Testes de regressão de cross-reference-stream: o
Validate_XrefStreamTrailer_DetectsConformanceexistente agora também verifica se a referência/Metadatado catálogo é resolvida e se o XMPpdfaid:parté lido em uma base de xref-stream (não apenas/Root+/ID); um novo testeInjectPdfA_XrefStreamBase_RoundTripsprotege o caminho de xref-stream do injetor adicionado na v2.0.0; dois testes de padrões cruzados (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) verificam se os validadores de PDF/E e PDF/R não rejeitam mais PDFs com xref-stream como não analisáveis - Quitação de dívida de testes de PDF/A: o
Validate_MinimalPdf_FlagsRequiredMarkersgarante que um PDF mínimo puro acionapvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataepvaiMissingXmpDates— fechando a lacuna de simetria com os validadores de PDF/E e PDF/X que já tinham testes equivalentes; mais dois enums com cobertura zero ganharam testes positivos:pvaiUnembeddedFontepvaiSubsetMissingCidSet
Version 2.1.0
Corrigido
- O PDF/E foi inadvertidamente deixado de fora da correção de cross-reference-stream da v2.0.0: tanto
InjectPdfEMarkersquantoValidatePdfEComplianceainda chamavamPdfReadTrailersemAcceptXrefStream, fazendo com que o injetor de PDF/E falhasse silenciosamente em saídas PDF 1.5+ (o padrão deSaveAsCopydo pdfium); ambos os locais de chamada agora passamTrue - O fallback de cross-reference-stream compartilhado de
PdfReadTraileragora traz a proteção/Type /XRefque as cópias locais de PDF/A e PDF/X já possuíam, permitindo que um deslocamentostartxrefcorrompido apontando para um dicionário não relacionado falhe de forma limpa em vez de ser analisado incorretamente como o trailer - O resolvedor de referência indireta de
/LangemValidatePdfUaCompliance(v2.0.0) estava inacessível:PdfFindObjDictencontra apenas dicionários<<, mas um objeto de string/Langé(...)ou<...>sem dicionário; substituído por uma varredura direta no corpo do objeto que localiza o token da string
Alterado
- Sete duplicatas redundantes de helpers (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj) que eram cópias idênticas em nível de bytes das versões compartilhadas de
FPdfPdfCommonforam removidas deFPdfPdfaeFPdfPdfua— as versões compartilhadas agora se aplicam em todos os lugares viauses
Version 2.0.0
Corrigido
- Falha silenciosa de padrões cruzados: o helper compartilhado
PdfReadTrailer(usado pelos injetores de marcadores e validadores de PDF/UA, PDF/X, PDF/VT e PDF/R) agora aceita um parâmetroAcceptXrefStreame recorre ao dicionário de objetos do cross-reference-stream quando nenhuma palavra-chavetrailerestá presente (PDF 1.5+); anteriormente, a saídaSaveAsCopydo pdfium (que usa um cross-reference-stream) fazia com que todos os injetores de marcadores falhassem silenciosamente — os bytes de origem eram copiados inalterados e a chamada ainda retornava sucesso; o validador PDF/R-1.0 (cuja base PDF 2.0 é sempre um cross-reference-stream) era efetivamente nulo; a implementação madura do validador PDF/A foi portada para o helper compartilhado para que todos os padrões se beneficiem - A varredura do dicionário de trailer em
InjectPdfUaMarkerseInjectPdfAMarkersagora usa oPdfDictEndciente de profundidade em vez de uma busca simples por>>, garantindo que um trailer que contenha um dicionário aninhado (por exemplo,/Encrypt << ... >>) não seja mais interrompido antes de uma entrada/Infosubsequente
Alterado
TPdf.ValidatePdfUaagora suprime opvuaiFontNotEmbeddedgenérico em nível de byte quando opvuaiPdfiumFontNotEmbeddedpreciso do modelo de objeto do Pdfium já tiver sido acionado, para que o relatório de preflight não traga mais duas linhas quase duplicadas de “incorporar fontes” para o mesmo defeitopvuaiLangInvalidFormat(§7.2) agora resolve uma referência indireta de/Lang(N 0 R) para seu objeto de string e valida o conteúdo, de modo que uma tag de idioma referenciada indiretamente não seja mais um ponto cego
Version 1.99.0
Corrigido
pvuaiLangInvalidFormat(§7.2) não ignora mais strings/Langcodificadas em hexadecimal: pares UTF-16BE (com BOMFE FF) e strings hexadecimais ASCII simples agora são decodificados e passam pela mesma verificação gramatical BCP 47 que strings literais(...), de modo que um/Langhexadecimal malformado é detectado enquanto um em conformidade (como um UTF-16BEen-US) não corre mais o risco de ser sinalizado
Alterado
pvuaiFontMissingToUnicode(§7.21.7) agora isenta/MacExpertEncodingjuntamente com/WinAnsiEncodingand/MacRomanEncoding, correspondendo às quatro condições de isenção listadas na cláusula
Version 1.98.0
Adicionado
pvuaiNeedAppearancesTrue(§7.18.4) sinaliza um AcroForm cujo sinalizador/NeedAppearancesé verdadeiro, de modo que as aparências dos widgets não são bloqueadas de forma confiável e a tecnologia assistiva não pode associá-las à árvore de estrutura; importado do validador PDF/A e limitado à presença de/AcroFormpara reduzir a área de varredura
Alterado
- Regressão do corpus veraPDF: vinculados o par pass+fail do Reference-XObject da §7.20 e os pares pass+fail CharSet/CIDSet do subconjunto da §7.21.4.2 em
Live_Corpus_ValidatePdfUaMatchesConformance; amostras de aprovação ToUnicode-forbidden-value da §7.21.7 e media-clip da §7.18.6.2 também foram vinculadas como guardas de falso positivo (suas amostras de falha usam layouts de dicionário que a varredura em nível de byte não detecta, por isso apenas o lado de aprovação está vinculado) - A lista de asserções de caminhos de aprovação do corpus ganhou 15 novos guardas de falso positivo zero, de modo que cada verificação de estrutura e de nível de byte
pvuai*ativa é agora executada contra amostras em conformidade (anteriormente apenas cerca de 30 dos 60 problemas ativos eram protegidos); o guardapvuaiLangInvalidFormatfoi omitido deliberadamente porque o verificador em nível de byte sinaliza de forma conservadora strings/Langcodificadas em hexadecimal que não consegue decodificar
Version 1.97.0
Corrigido
- Endurecimento do
ValidatePdfUaStructureElements: a busca na cadeia paiEnclosingTableagora carrega um contador de saltos (limitado pela contagem de elementos), evitando que um cicloParentIndexmalformado em um array sintético de elementos de estrutura trave o chamador; a alocação de array de ID de marked-content doValidatePdfUaPageContentTaggingagora está limitada a um milhão de entradas, evitando uma alocação de vários GB em caso deMarkedContentIDmalformado ou malicioso
Alterado
- O comentário de documentação do enum
pvuaiOrderedListMissingListNumberingagora descreve com precisão o que a verificação faz: sinaliza um elementoLcujo valor deListNumberingestá fora do conjunto da Tabela 347 do ISO 32000-1 (um atributo ausente não é sinalizado); o comentário anterior sugeria que ele também detectava listas ordenadas sem o atributo, o que a implementação não faz - As duas amostras de falha de corpus do desalinhamento de WMode
7.21.3.3-t02agora estão vinculadas emLive_Corpus_ValidatePdfUaMatchesConformance— desde a v1.95.0 o stream CMap é descompactado via FlateDecode, de modo que a comparação dicionário versus conteúdo agora ocorre em uma parte legível; o comentário antigo “não vinculado” foi removido
Version 1.96.0
Adicionado
- Consistência entre padrões:
TPdf.ValidatePdfUaganha duas verificações portadas do validador PDF/A;pvuaiAnnotationFlagsViolation(§7.18.1) sinaliza uma anotação não isenta contendo o sinalizador Hidden / Invisible / NoView, o que interrompe o fluxo de leitura da tecnologia assistiva;pvuaiActionTargetMissing(§7.18.5) sinaliza uma ação GoToR / URI / SubmitForm que não possui sua chave de destino obrigatória (/F+/D, /URI, /F), deixando o link inutilizável por tecnologia assistiva
Corrigido
- Mesclagem de árvore de estrutura entre páginas: o loop de acumulação
AllElemsemTPdf.ValidatePdfUaagora rebaseia oParentIndexde cada elemento do array local da página para o array mesclado; sem isso, os elementos filhos da página 2 mantinham um índice local da página que apontava para a fatia da página 1, corrompendo silenciosamente todas as verificações dependentes de ParentIndex (estrutura de tabela/lista, contagem de filhos H da §7.4.4, EnclosingTable) - Análise do RoleMap:
PdfReadRoleMapPairsnão encerra mais a varredura completa de chave/valor quando um valor é uma referência indireta (N 0 R) ou um array ([...]) — ambas formas válidas de RoleMap conforme o ISO 32000-1 14.8.5.1; agora ele apenas pula essa entrada (usandoContinueem vez deBreak), eliminando falsos positivos depvuaiRoleMapUnresolvedem tipos mapeados após uma entrada indireta ou de array
Alterado
FPdfPreflightReport: 18 valores ativos deTPdfUaValidationIssueque anteriormente caíam na categoria e recomendação genérica de “marcador ausente” agora possuem categorias precisas (Estrutura / Conteúdo / Metadados / Segurança) e recomendações específicas por cláusula; também foi corrigido o erro de digitaçãopuaNone / pua1→pucNone / puc1emPDFSpecComplianceMatrix.md
Version 1.95.0
Alterado
- Recall e análise de integridade de
TPdf.ValidatePdfUa: a verificaçãopvuaiCMapWModeMismatchda §7.21.3.3 e a verificaçãopvuaiToUnicodeForbiddenValueda §7.21.7 agora descompactam streams CMap / ToUnicode comprimidos comFlateDecodeantes de fazer a varredura (anteriormente apenas streams não compactados eram avaliados, um falso negativo conhecido); os auxiliares compartilhadosPdfInflate/PdfReadAndDecodeStreamforam promovidos deFPdfPdfa/FPdfPdfxparaFPdfPdfCommonpara que cada unidade de conformidade compartilhe a mesma cópia
Adicionado
pvuaiSubsetCharSetEmpty(§7.21.4.2) sinaliza umFontDescriptorde subconjunto Type 1 que possui uma chave/CharSetcujo valor de string está vazio — a verificaçãopvuaiSubsetMissingCharSetexistente apenas detectava a chave ausente; um/CIDSetvazio não é sinalizado, pois uma fonte sem CIDs pode legitimamente conter um bitmap vazio
Version 1.94.0
Adicionado
- A auditoria de segunda passagem de
TPdf.ValidatePdfUafechou seis lacunas da ISO 14289-1 identificadas por uma revisão cláusula por cláusula e uma nova varredura de APIs nativas do Pdfium já envelopadas, mas não utilizadas pelo caminho do PDF/UA;pvuaiHeadingFormatInvalid(§7.4.3) sinaliza tags de cabeçalho definidas pelo usuário que começam com H, mas contêm separadores, espaços ou algarismos romanos em vez de dígitos arábicos puros;pvuaiMissingDocumentOutline(§7.17, recomendação) sinaliza um documento de várias páginas que não possui um sumário de marcadores (documentos de uma única página são isentos);pvuaiStructElementLangInvalid(§7.2) sinaliza um valor/Langde elemento de estrutura que não é uma tag BCP 47 válida;pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) sinaliza um elemento de estrutura Widget que não possui o proprietário de atributo PrintField;pvuaiLinkNotInStructureTree(§7.18.5) sinaliza um documento cujas anotações/Subtype /Linknão estão expostas como elementos de estrutura Link;pvuaiPdfiumAnnotationMissingContentsepvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) adicionam uma varredura precisa de anotações no modelo de objetos do Pdfium que isenta anotações ocultas, fora da caixa de corte (crop box), Popup e Widget — eliminando os falsos positivos da heurística em nível de byte, que não consegue ler os sinalizadores/Fou/Rect
Version 1.93.0
Adicionado
TPdf.ValidatePdfUaagora sobrepõe uma etapa do modelo de objetos do Pdfium sobre o inspetor em nível de byte, espelhando a arquitetura da rodada 7 do PDF/A: percorre os objetos de texto de cada página viaFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) e analisa cada caractere viaFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) andFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — mais preciso do que as heurísticas em nível de byte, que só disparam quando há zero programas de fontes presentes ou quando nenhum/ToUnicodeaparece; a varredura possui atalhos em três níveis: o loop de página encerra quando todos os três problemas da camada do Pdfium já foram definidos, o loop por objeto encerra na primeira fonte não incorporada e a varredura de caracteres pula a etapa de.notdefse oUnicodeMapErrorjá tiver ocorrido; o PDF/UA era o último validador de padrão PDF sem uma camada de modelo de objetos do Pdfium
Version 1.92.0
Adicionado
- Criado o
Tests.PdfR— o primeiro arquivo de teste para o validador PDF/R-1 (FPdfPdfr), cobrindo validação de cabeçalho, proibição de ObjStm, detecção de marcadores rasterizados e uma proteção de arquivo limpo contra falsos positivos; todas as seis suítes de teste de padrão PDF agora possuem arquivos de teste dedicados: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = 212 testes no total
Version 1.91.0
Adicionado
ValidatePdfEeValidatePdfVTganharam verificações no nível de conteúdo anteriormente disponíveis apenas nos validadores PDF/A, PDF/UA e PDF/X:pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(apenas PDF/E),pveiEmbeddedFilesForbidden(apenas PDF/E),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbiddenepvviOpiForbidden;TPdf.ValidatePdfEeTPdf.ValidatePdfVTtambém ganham uma camada de modelo de objetos do Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) que percorre objetos de texto de página viaFPDFFont_GetIsEmbedded, realizando atalho na primeira fonte não incorporada encontrada
Version 1.90.0
Adicionado
TPdf.ValidatePdfXagora sobrepõe uma etapa do modelo de objetos do Pdfium sobre o inspetor em nível de byte: percorre os objetos de texto de cada página viaFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddede relata uma fonte não incorporada comopvxiPdfiumFontNotEmbedded— mais preciso do que a heurística em nível de byte, que só dispara quando há zero programas de fontes presentes; a varredura faz atalho na primeira fonte não incorporada encontrada
Alterado
- Varredura da árvore de estrutura de
TPdf.ValidatePdfUa: a chamadaValidatePdfUaPageContentTaggingpor página (que constrói um mapa de reivindicação de ID de marked-content e realiza verificação cruzada de cada objeto de texto/imagem) agora é pulada nas páginas subsequentes uma vez quepvuaiUntaggedContentjá tenha sido encontrado — os elementos de estrutura ainda são coletados para as verificações entre páginas (Unique ID de nota, sequência de cabeçalhos), mas a etapa cara de marcação de conteúdo por página é encerrada mais cedo
Version 1.89.0
Alterado
- Desempenho da camada do modelo de objetos do Pdfium do
TPdf.ValidatePdfA: a varredura de páginas/objetos agora possui atalhos em três níveis — o loop de página encerra quando todos os problemas aplicáveis da camada do Pdfium já tiverem sido encontrados, o loop por objeto encerra quando ambos os problemas por objeto (incorporação de fonte + transparência) estiverem definidos, e a varredura de caracteres de página de texto pula a etapa de.notdefquando oUnicodeMapErrorjá tiver ocorrido; as verificações de disponibilidade de APIAssigned()e os sinalizadores de conformidade são armazenados em booleanos locais uma vez antes do loop em vez de serem reavaliados em cada página/objeto/caractere; em um documento grande não conforme, a varredura agora pode parar após a primeira página em vez de analisar todas as páginas; em um documento em conformidade, o custo adicional por página é menor (sem chamadasAssignedrepetidas)
Version 1.88.0
Adicionado
ValidatePdfXganhou oito novos valores deTPdfXValidationIssueno nível de conteúdo cobrindo as restrições de intercâmbio de impressão que o PDF/X impõe além dos marcadores de formato de arquivo:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(sem/TrimBoxem qualquer página) epvxiTrappedNotSet(/Trappedausente ou/Unknown); o validador PDF/X anteriormente verificava apenas os marcadores XMP/OutputIntent; esta é sua primeira etapa de nível de conteúdo; os auxiliares compartilhadosPdfStructureBytes/PdfHasName/PdfCountNameforam adicionados aFPdfPdfCommonpara que todas as unidades de conformidade possam utilizá-los
Version 1.87.0
Adicionado
- A validação PDF/UA agora cobre as regras de fontes compostas da ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchsinaliza fontes Type0 cujo CMap incorporado e o CIDFont descendente discordam nos camposRegistry/Orderingou cujoSupplementdo CIDFont excede o do CMap;pvuaiCMapNotEmbeddedsinaliza CMaps referenciados por nome (comoEncodingouUseCMap) que não são CMaps predefinidos da Tabela 118 da ISO 32000-1; epvuaiCMapWModeMismatchsinaliza CMaps incorporados cujoWModeno dicionário difere do WMode presente no conteúdo do stream
Corrigido
- A verificação
pvuaiCidFontMissingCidToGidMapda §7.21.3.2 não detectava dicionários CIDFontType2 cujo par de chave/valorSubtypeestivesse separado por uma quebra de linha; agora também sinaliza um valor de nomeCIDToGIDMapdiferente deIdentity
Version 1.86.0
Adicionado
- A validação PDF/UA agora cobre as regras de codificação TrueType da ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidsinaliza fontes TrueType não simbólicas cujaEncodingestá ausente ou não é nemMacRomanEncodingnemWinAnsiEncoding(diretamente ou viaBaseEncoding); epvuaiSymbolicTrueTypeEncodingsinaliza fontes TrueType simbólicas que carregam um nome deEncodingnão padrão
Version 1.85.1
Alterado
- A verificação de ordem de tabulação
pvuaiMissingTabsOrderda ISO 14289-1 §7.18.3 agora é executada por página: cada página que contenha anotações deve declarar/Tabs /Sem seu próprio dicionário de página, de modo que uma página irmã conforme não mascare mais uma página sem essa declaração
Version 1.85.0
Adicionado
- A validação PDF/UA agora distingue formulários XFA dinâmicos de estáticos conforme a ISO 14289-1 §7.15:
pvuaiXfaDynamicsinaliza formulários cuja configuração XFA definedynamicRendercomorequired
Alterado
- O sinalizador candidato antigo para qualquer XFA,
pvuaiXfaPresent, foi descontinuado e não é mais emitido (XFA estático está em conformidade com a §7.15); o valor do enum permanece para compatibilidade de API
Version 1.84.0
Adicionado
- A validação PDF/UA agora detecta conteúdo real sem marcação exigido pela ISO 14289-1 §7.1:
pvuaiUntaggedContentsinaliza objetos de texto e imagem renderizados que não estão nem reivindicados pela árvore de estrutura da página (via seus IDs de conteúdo marcado) nem marcados como Artefato - Novos auxiliares no nível de página
GetPageContentMarkInfoseValidatePdfUaPageContentTagging, com o registroTPdfPageContentMarkInfo, para uso direto
Version 1.83.0
Adicionado
- A validação PDF/UA agora aplica o modelo de cabeçalhos da ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedsinaliza documentos que misturam a tag genéricaHcom cabeçalhos numeradosH1..Hn, epvuaiHeadingMultipleInNodesinaliza nós de estrutura que contêm mais de um cabeçalho filhoH
Version 1.82.0
Adicionado
- A validação PDF/UA agora resolve o RoleMap exigido pela ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardsinaliza entradas do RoleMap que redefinem um tipo de estrutura padrão, epvuaiRoleMapUnresolvedsinaliza tipos de estrutura não padrão utilizados cuja cadeia no RoleMap está ausente, incompleta ou cíclica — cadeias indiretas que alcançam um tipo padrão são aceitas, e entradas não utilizadas do RoleMap nunca são avaliadas - Novos auxiliares
PdfUaIsStandardStructType,PdfReadRoleMapPairs(com decodificação de escapes de nome PDF#hh) eValidatePdfUaRoleMapUsage, para uso direto
Version 1.81.0
Adicionado
- A validação PDF/UA agora cobre a marcação de listas da ISO 32000-1 exigida pela ISO 14289-1 §7.6:
pvuaiListStructureInvalidsinaliza itens LI fora de um contêiner L e partes Lbl/LBody fora de um item LI, aceitando listas aninhadas e o uso legítimo de Lbl dentro dos elementos Note e BibEntry
Version 1.80.0
Adicionado
- A validação PDF/UA agora cobre a marcação de tabelas da ISO 32000-1 exigida pela ISO 14289-1 §7.5:
pvuaiTableStructureInvalidsinaliza células TH/TD fora de uma linha TR e linhas ou grupos de linhas fora de seu contêiner Table;pvuaiTableHeaderMissingScopesinaliza células de cabeçalho cuja relação não pode ser determinada nem por um atributo Scope nem por uma associação Headers/ID; epvuaiTableHeadersUndefinedIdsinaliza referências Headers em documentos que não definem nenhum ID de elemento de estrutura TPdfStructureElementexpõe os atributos de tabelaScope,HasHeaders,HeadersIds,ColSpaneRowSpan, resolvidos durante a varredura da árvore de estrutura
Alterado
- A varredura da árvore de estrutura agora lê todos os atributos de layout e de tabela em uma única passagem pelos dicionários de atributos de cada elemento, em vez de uma varredura por atributo
Version 1.79.1
Novidades
- Portado o exemplo
AnnotationsLabpara Lazarus e C++Builder, juntando-se ao exemplo de console existente para Delphi
Correções
TPdf.CreateAnnotationpodia lançar “Cannot set attachment points” para anotações de marcação que usam quad points (Highlight, Underline, StrikeOut, Squiggly) porque a nova anotação não tinha ainda um slot quad para substituir; agora ele anexa o primeiro quad em vez disso
Version 1.79.0
Novidades
- Novo exemplo de console em Delphi
AnnotationsLab: cria anotações de Texto, Realce (Highlight), Quadrado (Square) e Círculo (Circle), grava-as em um PDF, depois recarrega o arquivo e enumera a lista de anotações da página
Version 1.78.0
Novidades
- Novos
TPdf.MeasureTexteTPdf.MeasureTextWidth: medem a largura e altura renderizadas de uma string para uma dada fonte e tamanho (unidades de usuário do PDF, 1 unidade = 1/72 polegada) sem adicionar conteúdo a uma página, tornando possível lógicas de layout e quebra de palavra (word-wrap) sobre oAddText; fornecido pela unidade standaloneFPdfMeasurecomo um class helper - Novo
TPdf.WrapText: word wrap guloso baseado noMeasureTextWidthque divide o texto em espaços e agrupa palavras em linhas não mais largas que uma determinada largura (unidades de usuário do PDF); uma palavra única demasiadamente longa recebe sua própria linha (sem quebra dentro da palavra), retornando as linhas quebradas como um array
Version 1.77.0
Novidades
ValidatePdfAganhou três novos valores deTPdfAValidationIssuecobrindo as cláusulas previamente avaliadas como “NO” ou “reader behaviour” pela auditoria de gap anterior (ordinais anexados, valores existentes não foram alterados):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — um caractere que resolve para Unicode 0 sem um erro de mapeamento, o sintoma em tempo de execução de uma referência a um glifo.notdef; detectado através da camada do object-model do Pdfium),pvaiWordBreakMissing(Nível A 6.8.3.2 — uma string de exibição de fluxo de conteúdo maior que 20 caracteres sem espaço, uma provável violação de palavras mescladas; heurística grossa que evita falsos positivos CJK), epvaiLinkActionMissingTarget(6.6.3 — uma ação GoToR/URI/SubmitForm que carece de sua chave de alvo de exibição para que um leitor não possa apresentá-la)
Version 1.76.0
Adicionado (Added)
ValidatePdfAganhou três novos valoresTPdfAValidationIssue(ordinais adicionados, valores existentes inalterados):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — um token/BaseFontou/FontNamecontendo bytes ≥ 0x80 que não formam um UTF-8 válido),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — uma imagem inline em um stream de conteúdo de página usa o filtro LZW ou Crypt) epvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — uma fonte TrueType não-simbólica cujo dicionário Encoding carrega/Differences)
Version 1.75.0
Adicionado (Added)
ValidatePdfAganhou três novos valores deTPdfAValidationIssue(ordinais adicionados, valores existentes inalterados):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — um token numérico excedendo o limite de número inteiro com sinal de 32 bits 2.147.483.647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — um valor/BMfora do conjunto padrão de modos de mesclagem ISO 32000-1 §11.3.5; complementa o PDF/A-1pvaiTransparentColorSpaceque apenas permite Normal/Compatible) epvaiHexStringOddDigits(6.1.6 — uma string hexadecimal<...>com um número ímpar de dígitos hexadecimais)
Version 1.74.0
Adicionado (Added)
ValidatePdfAganhou três novos valores deTPdfAValidationIssue(ordinais adicionados, valores existentes inalterados):pvaiPermissionsViolation(6.1.12 — um dicionário/Permscontendo/DigestLocation,/DigestMethodou/DigestValuejuntamente com/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — uma ação de transição Trans, detectada através do padrão action-dict/S /Transpara evitar falsos positivos com/Transparency) epvaiPdfiumObjectTransparency(PDF/A-1 6.4 — um objeto de página carrega transparência real segundoFPDFPageObj_HasTransparency, estendendo a camada object-model do Pdfium introduzida na v1.73.0 para detectar efeitos blend-mode/soft-mask que a verificação de nomes em nível de byte pode perder)
Version 1.73.0
Adicionado (Added)
TPdf.ValidatePdfAagora sobrepõe uma passagem object-model do Pdfium sobre o inspetor em nível de byte: percorre os objetos de texto de cada página viaFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddede relata uma fonte renderizada não incorporada comopvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), e carrega cada página de texto para verificarFPDFText_HasUnicodeMapErrore relatar um mapeamento Unicode quebrado comopvaiPdfiumUnicodeMapError(6.3.8). Estas são verificações que o inspetor em nível de byte não pode fazer — ele apenas vê tokens de nomes, não handles de fontes resolvidos ou estado de mapeamento por caractere — e são mescladas no resultado em nível de byte. A função autônoma em nível de byteValidatePdfACompliancepermanece inalterada
Version 1.72.0
Adicionado (Added)
ValidatePdfAganhou cinco novos valores deTPdfAValidationIssue(ordinais adicionados, valores existentes inalterados):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — o catálogo não deve conter/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — um OutputIntent não deve conter/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — uma especificação de arquivo com/EFtambém deve conter/UF),pvaiXmpPacketBytesAttr(6.7.5 — o cabeçalho do pacote XMP não deve conter o atributo descontinuadobytes=ouencoding=) epvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — o bit ToggleNoView/Fda anotação, valor 512, é proibido)
Version 1.71.0
Alterado
ValidatePdfUaagora acionapvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): o iterador da árvore de estrutura resolve o atributo de layoutListNumberingem cada elementoLpor meio da API de atributos do Pdfium e sinaliza qualquer valor fora do conjunto da Tabela 347 da ISO 32000-1 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). Um atributo ausente não é sinalizado, já que a lista pode não ser ordenada; isso fecha a última lacuna residual da ISO 14289-1 registrada no final da rodada 5
Version 1.70.0
Adicionado
ValidatePdfUaganhou quatro novos valores deTPdfUaValidationIssue(ordinais adicionados, valores existentes inalterados):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — umFontDescriptorde subconjunto CID deve declarar/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — um CMap ToUnicode não deve mapear nenhum código paraU+FEFFouU+FFFE; fluxos não compactados são verificados em busca das formas de saída<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langdeve ser uma tag RFC 1766 / BCP 47 válida; uma gramática permissiva aceitaen,en-US,zh-Hans,es-419e sinaliza valores claramente não conformes) epvuaiOrderedListMissingListNumbering(7.6 — retido para integridade da API; ainda não acionado pelo validador porque distinguir de forma confiável listas ordenadas de não ordenadas requer o valor do atributoListNumbering, o qual o iterador da árvore de estrutura não expõe)
Version 1.69.0
Adicionado
ValidatePdfUaganhou dois novos valores deTPdfUaValidationIssue(ordinais adicionados, valores existentes inalterados):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — um elemento de estrutura Widget deve estar aninhado dentro de um elementoForm; o iterador da árvore de estrutura agora verifica o tipo pai direto de cada Widget) epvuaiSubsetMissingCharSet(7.21.4.2 — umFontDescriptorde subconjunto Type 1 deve declarar/CharSet, identificado pelo prefixo de seis letras+do nome do subconjunto em/FontName)
Version 1.68.0
Adicionado
ValidatePdfUaganhou dois novos valores deTPdfUaValidationIssue(ordinais adicionados, valores existentes inalterados):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — um dicionário de ação de URI não deve conter/IsMapcom valortrue, pois isso desativa o destino do link acessível) epvuaiHeadingSequenceViolation(7.4.2 — cabeçalhos numerados devem começar emH1e uma sequência descendente não deve pular um nível intermediário, ex.H1→H3é uma violação). A verificação de cabeçalho é a primeira regra PDF/UA em nível de árvore de estrutura no validador:ValidatePdfUaStructureElementsagora percorre a lista de elementos tipados e verifica a sequênciaH1…H6(eH7+segundo 7.4.3) na ordem do documento
Version 1.67.0
Adicionado
ValidatePdfUaganhou cinco novos valores deTPdfUaValidationIssue(ordinais adicionados, valores existentes inalterados):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — uma anotação de Link deve conter uma descrição alternativa via/Contents),pvuaiAnnotationMissingContents(7.18.1 — qualquer anotação não isenta sem/Contentsdeve ter uma descrição alternativa; Popup e Widget são isentos),pvuaiEmbeddedFileMissingName(7.11 — um dicionário de especificação de arquivo deve conter/Fe/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — um dicionário de dados de clipe de mídia deve conter/CTe/Alt) epvuaiCidFontMissingCidToGidMap(7.21.3.2 — uma CIDFont Type 2 incorporada deve conter/CIDToGIDMap)
Version 1.66.0
Adicionado
ValidatePdfUaganhou cinco novos valores deTPdfUaValidationIssue(ordinais adicionados, valores existentes inalterados):pvuaiRoleMapMissing(ISO 14289-1 7.1 — um documento com tags com tipos de estrutura não padrão deve conter um/RoleMap),pvuaiOptionalContentAsKey(7.10 — um dicionário de configuração de conteúdo opcional não deve conter a chave de estado automático/AS),pvuaiXfaPresent(7.15 — uma presença/XFAdo AcroForm é sinalizada, já que XFA dinâmico é proibido),pvuaiTrapNetAnnotation(7.18.2 — anotações/TrapNetsão proibidas) epvuaiReferenceXObject(7.20 — XObjects de Referência, baseados no marcador/Ref, são proibidos)
Corrigido
ValidatePdfUanão acusa mais falsos positivos depvuaiEncryptionPresentem todos os arquivos criptografados: o PDF/UA permite criptografia desde que a chave/Pdo dicionário de criptografia tenha o bit de posição 10 (valor 1024) definido, o que concede acesso à tecnologia assistiva (7.16). A violação exata agora é relatada por meio do novopvuaiEncryptionPBitMissing;pvuaiEncryptionPresentfoi retido no enum para compatibilidade de API, mas não é mais acionado pelo validador em nível de byte
Version 1.65.0
Adicionado
ValidatePdfAganhou cinco novos valores deTPdfAValidationIssue(ordinais adicionados, valores existentes inalterados):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — uma CIDFont Type 2 incorporada deve conter/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — umFontDescriptorde subconjunto Type 1 deve conter/CharSet),pvaiSubsetMissingCidSet(6.3.5 — umFontDescriptorde subconjunto CID deve conter/CIDSet),pvaiWidgetActionForbidden(6.6.1 — uma anotação de Widget não deve conter/Aou/AA) epvaiOptionalContentAsKey(ISO 19005-2 6.9 — um dicionário de configuração de conteúdo opcional não deve conter a chave de estado automático/AS, agora relevante porque o PDF/A-2 permite conteúdo opcional)
Version 1.64.0
Adicionado
ValidatePdfAganhou oito novos valores deTPdfAValidationIssue(ordinais adicionados, valores existentes inalterados):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — o cabeçalho%PDF-x.ydeve ser seguido por um comentário%com pelo menos quatro bytes maiores que 127),pvaiExternalStreamRef(6.1.7 — um dicionário de fluxo não deve conter/F,/FFilterou/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — o OutputIntent/Sdeve ser/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 — InfoCreationDate/ModDatetambém devem aparecer comoxmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — Nível A requer/MarkInfocom/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — o dicionário de anotação/APdeve conter apenas/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Anexo E.2 — cada filespec associado deve conter/AFRelationship) epvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — uma imagem JPEG2000 deve declarar 1, 3 ou 4 componentes)
Corrigido
ValidatePdfAnão acusa mais falsos positivos depvaiAnnotationFlagsViolationem documentos que usam um nome de recurso de fonte de uma única letra, como/Font << /F 5 0 R >>; a varredura da flag/Fagora é restrita a um contexto de anotação (/Subtypede um tipo de anotação), correspondendo ao comportamento documentado (6.5.3)ValidatePdfAagora relata o requisito de arquivo associado do PDF/A-3 por arquivo: um documento é sinalizado apenas quando um/Type /Filespecincorporado que faz referência a um fluxo incorporado via/EFnão possui/AFRelationship, em vez da verificação anterior tudo-ou-nada aplicada a todo o documento (ISO 19005-3 Anexo E.2)- Adicionada a ação obsoleta
/SetStateao conjunto de ações proibidas juntamente com/SetOCGState, para que o nome da ação da Referência PDF seja capturado diretamente (6.6.1)
Version 1.63.0
Adicionado (Adicionado)
- Adicionados
TPdf.MeasureTexteTPdf.MeasureTextWidth: medem a largura e a altura de renderização do texto em uma fonte e tamanho especificados sem adicionar conteúdo à página (em unidades de usuário PDF, 1 unidade = 1/72 polegada), permitindo cálculos de layout e quebra automática de linha sobreAddText; fornecido pela unidade independenteFPdfMeasurecomo class helper
Alterado (Alterado)
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFeDemo\Lazarus\MergePDFaprimorados para as três IDEs: seleção de intervalo de páginas por arquivo, caminho de saída opcional, deduplicacão, log de execução, botão de cancelar e resumo de mescla; marcadores e metadados são importados a partir da primeira fonte- Os demos de
CreatePDFpara as três IDEs incluem agora uma opção "Texto europeu" para escrever texto acentuado em tcheco, francês, alemão, espanhol, português, polaco e turco, para verificar a seleção de fontes e o tratamento Unicode (o antigo exemploEuropeanTextfoi integrado) - Removidos os exemplos
ExtractTextPageseEuropeanText: a funcionalidade de extração de texto página a página deExtractTextPagesjá é coberta pelas opções de intervalo de páginas e separador de páginas deExtractText; a renderização multilingúe deEuropeanTextfoi integrada emCreatePDF
Version 1.62.2
Corrigido (Corrigido)
- Os cabeçalhos de C++Builder (
.hpp) foram regenerados para todas as versões e plataformas do RAD Studio (Win32/Win64/Win64x); eles haviam se desviado das fontes Pascal, deixando assinaturas de função desatualizadas e units ausentes que chegavam aos usuários de C++Builder pela distribuição de código-fonte
Version 1.62.1
Corrigido (Corrigido)
- A compilação do código-fonte foi restaurada no RAD Studio 12 Athens e anteriores: uma atribuição de
TArray<Byte>no caminho de validação de PDF/UA usava uma conversão implícita de array exclusiva do Delphi 13 que falhava ao compilar em IDEs mais antigas
Version 1.62.0
Adicionado (Adicionado)
TPdf.RenderPageThumbnailrenderiza qualquer página pelo índice em um bitmap ajustado à proporção, sem alterar a página atual do documento, a página carregada nem dispararOnPageChange
Corrigido (Corrigido)
TPdfThumbnailViewnão controla mais oPageNumberdo documento host durante a pintura; antes, cada repaint recarregava páginas, disparavaOnPageChangee descartava a página de texto, o que podia atrapalhar umTPdfViewvinculado e provocar loops de repaint. As miniaturas agora são renderizadas porRenderPageThumbnailsem esses efeitos colaterais- A validação de conformidade PDF/X agora inspeciona documentos com cross-reference streams (PDF 1.6, típico de PDF/X-4) e objetos armazenados em compressed object streams, em vez de classificar esses arquivos como não conformes de forma global; o marcador
GTS_PDFXVersioné lido tanto da forma de elemento quanto da forma de atributo RDF no XMP - A validação de PDF/R agora relata
pvriInfoXmpMismatchquando o dicionário Info e o XMP discordam sobre Producer ou Creator; antes, o problema era apenas declarado, mas nunca era sinalizado - Os timers de form-fill são rastreados por solicitação, então um documento que executa vários timers ao mesmo tempo, por exemplo um intervalo JavaScript ao lado do piscar do cursor do campo, mantém todos eles em vez de perder tudo exceto o mais recente
- A pintura de
TPdfViewe seus métodos públicosRenderPage/RenderTileagora mantêm o bloqueio de renderização do documento, serializando em relação à renderização em worker thread do mesmoTPdf, já que o PDFium não é thread-safe - Texto não ASCII gravado em metadados PDF/X, PDF/R e PDF/VT (OutputIntent condition names, Creator, Producer) agora é codificado como uma string UTF-16BE conforme a ISO 32000-1 §7.9.2.2 em vez de UTF-8 bruto, que leitores compatíveis interpretariam errado
- Os auxiliares de conformidade leem corretamente fluxos de metadados incorporados cujo
/Lengthé uma referência indireta, carregam os bytes de origem comReadBufferpara que uma leitura curta falhe de forma limpa e rejeitam um offsetstartxrefnegativo em vez de arriscar uma leitura fora do intervalo
Version 1.61.0
Alterado (Alterado)
- Correções de declaração FFI/ABI que podem exigir recompilação do código que implementa os callbacks afetados: o callback de form-fill
FFI_OpenFileagora carregacdecl(Win32 stack convention), e o parâmetrovaluedeFPDFAnnot_SetStringValueeFPDFAttachment_SetStringValueagora éFPDF_WIDESTRING(UTF-16LE) para corresponder aos cabeçalhos do PDFium - Os callbacks de progressive-load
FX_FILEAVAIL.IsDataAvaileFX_DOWNLOADHINTS.AddSegmentagora recebem offsetssize_t, esize_ttem largura de ponteiro no Free Pascal / Lazarus Win64, que antes era truncada para 32 bits, corrigindo chamadas de API de data-availability eoutsize_tno FPC Win64
Corrigido (Corrigido)
- Segurança de memória: um use-after-free do timer de form-fill ao destruir um
TPdfcom um cursor AcroForm ativo; umFPDF_CloseDocumentduplo no caminho de erro deImportNPagesToOne; exceções Pascal escapando dos callbacksFPDF_FILEWRITE/FPDF_FILEACCESSatravés da fronteira C durante salvamento e inserção de JPEG; e um estouro de inteiro na extração de texto ao ler de um índice inicial até o fim da página TPdfFuture<T>agora entrega com confiabilidade seu callback de resultado; a resposta antes quase sempre era descartada, e podia até tocar uma thread liberada, porque o worker se liberava antes de a resposta enfileirada executar- A saída de PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT e PDF/UA agora grava entradas de cross-reference com exatamente 20 bytes, conforme exigido pela ISO 32000-1 §7.5.4
- A injeção de marcadores de conformidade não destrói mais um dicionário quando a chave removida, por exemplo
/Trapped, era a última entrada, o que antes engolia o>>de fechamento e produzia um objeto malformado - Os fluxos de perfil ICC do OutputIntent agora declaram a contagem de componentes
/Nnecessária para PDF/X e PDF/VT, já presente para PDF/A; documentos de origem criptografados são descriptografados antes de os marcadores de PDF/X, PDF/E, PDF/R, PDF/VT e PDF/UA serem injetados, então a saída fica válida em vez de ser corrompida silenciosamente - O BOM xpacket UTF-8 no XMP gerado é emitido como bytes exatos, corrigindo corrupção em instalações Delphi cujo ANSI code page não é Latin-1; os trailers de atualização incremental agora preservam a referência
/Infodo documento SaveAscom compressão não truncará mais fluxos cujo/Lengthé uma referência indireta, e as tabelas de cross-reference reconstruídas agora usam entradas de 20 bytes, números de geração reais e descartam o ponteiro/Prevobsoleto- A validação de conformidade lê marcadores de versão XMP em forma de atributo para PDF/E e PDF/X, então arquivos PDF/X-4 serializados como atributos são reconhecidos, exige o identificador exato
PDF/E-1, lê corretamente fluxos de metadados com/Lengthindireto e não confunde mais a chave/IDou/StructTreeRootde um elemento de estrutura ao verificar o trailer de PDF/UA; um offsetstartxrefmalformado não gera mais erro de intervalo TPdfThumbnailView: a última página agora pode ser alcançada com a barra de rolagem, a página atual do documento host é restaurada depois que as miniaturas são desenhadas e o tratamento padrão de mouse-leave é disparado novamente- Bitmaps de páginas e imagens em tons de cinza não são mais renderizados com paleta errada;
TPdfViewnão fica mais com uma referência pendurada quando seuTPdfé liberado primeiro - Relatórios de preflight: o HTML é salvo como UTF-8 para corresponder ao charset declarado, e o escaping de strings JSON produz sequências
\ucorretas para caracteres não ASCII no Free Pascal - Builds trial: a caixa de diálogo de lembrete da versão trial agora aparece em vez de ser suprimida antes de poder ser exibida
TPdfStreamAdapteragora rejeita fluxos maiores que 4 GiB com um erro claro em vez de truncar silenciosamente o comprimento passado para o PDFium
Version 1.60.1
Alterado (Alterado)
- As demos AccessibilityReader para Delphi, Lazarus e C++Builder agora executam leitura em voz alta em
TPdfReadingSession: cada página é montada em um único bloco falado comBuildSpokenTextFromWords, posições de palavra do SAPI alimentamFeedSpokenPosition, e a sessão avança pelas páginas e controla o cursor de palavras da visualização, substituindo a orquestração manual que cada demo tinha antes - O acompanhamento de karaoke no nível de palavra nas demos agora também funciona quando o NVDA é o mecanismo de fala:
EstimatePacingregula o cursor de leitura pelo tempo decorrido da fala, enquanto antes o NVDA lia em voz alta sem nenhum rastreamento de palavra - Pause e Resume nas demos agora também funcionam com NVDA:
ResumeRestartsChunkrelê a página atual desde o início durante Resume, enquanto o SAPI mantém seu pause e resume nativos no lugar
Version 1.60.0
Adicionado (Adicionado)
- Renderização ao vivo para baixa visão em
TPdfView: as novas opções de renderizaçãoreInvertereNightDuotonerecolorem cada tile de página renderizado, com inversão total de cores ou uma paleta night duotone, antes de as sobreposições de busca, seleção, leitura e cursor de palavras serem desenhadas, levando as transformações de cor de bitmap já existentes para a visualização interativa tanto no layout de página única quanto no de páginas opostas; alternar as opções repinta imediatamente NightDuotoneInkeNightDuotonePaperconfiguram a paleta noturna, com texto âmbar sobre página preta como padrão;reInvertvence quando ambas as opções estão definidas
Version 1.59.0
Adicionado (Adicionado)
TPdfReadingSession: um componente de orquestração de leitura em voz alta independente do mecanismo de fala. Ele mantém o cursor de trecho, o cursor de palavras e o estado de reprodução (Play/PlayFrom/Pause/Resume/Stop), avança pelos trechos carregados deTPdfSpokenTextconforme o host informa que o mecanismo está ocioso viaTick, traduz deslocamentos do spoken-text de volta para caracteres da página e controla automaticamente um cursor de palavras acoplado emTPdfView; o host conecta qualquer mecanismo de fala por meio deOnSpeake dos eventos de solicitação de cancelamento / pausa / retomada, então a biblioteca não faz vínculo direto com nenhuma API de falaFeedSpokenPositionconsome posições de palavra do mecanismo, comoStatus.InputWordPositiondo SAPI;EstimatePacingcomEstimatedWordsPerMinutedefine o ritmo de mecanismos sem sinal de posição;ResumeRestartsChunkrelê o trecho atual para mecanismos sem pausa nativaOnChunkChange,OnWordChangeeOnFinisheddisparam apenas em mudanças reais, e uma visualização acoplada liberada se desassocia automaticamente, mantendo o código host sem cintilação e mais seguro contra falhas
Version 1.58.0
Adicionado (Adicionado)
EstimateSpokenWordIndexestima qual palavra um mecanismo de fala está pronunciando com base no tempo decorrido e em uma taxa de palavras por minuto, dando às palavras maiores mais tempo proporcionalmente, para que mecanismos que não informam a posição da palavra, como o cliente controlador do NVDA, ainda possam dirigir o cursor de leitura no nível da palavra; quem chama fornece o tempo decorrido, então a rotina permanece independente de relógio e fácil de testar
Version 1.57.0
Adicionado (Adicionado)
- Montagem de texto falado com mapeamento em dois domínios para rastreamento de leitura em voz alta:
BuildSpokenTextFromWordseSpokenTextAppendconstroem a string entregue a um mecanismo de text-to-speech a partir das caixas de palavras da página, enquanto registram uma tabela de intervalos, eSpokenToPageChartraduz um deslocamento de texto falado informado pelo mecanismo, comoStatus.InputWordPositiondo SAPI, de volta para o índice de caractere da página, de modo que o rastreamento de destaque por palavra continue correto quando o texto falado não for o texto completo da página, como em regiões ignoradas, leitura por unidade e substituições de pronúncia TPdfSpokenTexteTPdfSpokenSpanarmazenam a string falada e os intervalos de página de origem de onde ela foi construída; deslocamentos em separadores inseridos resolvem para a próxima palavra mapeada e deslocamentos além dos trechos mapeados informam ausência de correspondência
Version 1.56.9
Adicionado (Adicionado)
Demo\Delphi\PreflightReportadiciona uma pré-visualização do Action Plan que resume padrões não aprovados, prioridades, próximas ações, códigos de issue e recomendações em uma lista de remediaçãoDemo\Delphi\PreflightReportCliaceitaplan/actionplancomo formato de saída para execuções de arquivo único e lote, gravando a mesma lista de remediação em um arquivo de texto
Alterado (Alterado)
- Ambos os demos Delphi PreflightReport agora exibem contagens de status aprovado / ação / revisão junto ao total de padrões e problemas
Version 1.56.8
Alterado (Alterado)
ViewerInteractionLabagora inclui controles de salto de página, controles de zoom manual, registro de coordenadas por clique comDeviceToPage/PageToDevicee um log de interação mais claro para verificações de seleção, busca, rotação e navegação- As páginas readme do
ViewerInteractionLabagora documentam o fluxo de interação adicionado em todo o conjunto de readmes de demos localizadas
Version 1.56.7
Adicionado (Adicionado)
AccessibilityWorkbenchCliagora associa cada achado disparado aos critérios de sucesso do WCAG 2.1 e à área de cláusula ISO 14289-1, e exibe uma seção de cobertura de padrões nos relatóriosAccessibilityWorkbenchClicalcula uma pontuação de acessibilidade de 0 a 100 com rubrica de penalização publicada e faixa excelente / boa / precisa de melhora / ruim, apresentada por arquivo e também como média do loteAccessibilityWorkbenchCliaceitafailscore=Npara falhar a execução (código de saída 2) quando qualquer arquivo ficar abaixo de NAccessibilityWorkbenchCligrava um log SARIF 2.1.0 quando o nome do resumo do lote termina em.sarif, com uma regra por tipo de achado e tags WCAG 2.1 e PDF/UA para ingestão em CI e code scanningAccessibilityWorkbenchCliadiciona o comandoversionque exibe a versão vinculada do PDFium Delphi Component
Version 1.56.6
Adicionado (Adicionado)
IntakeWorkbenchClicalcula um hash forense SHA-256 de cada arquivo de entrada (recaindo paraunavailableem compiladores semSystem.Hash) e reporta em todos os formatosIntakeWorkbenchCliaceitapasswords=file.txtpara destravar temporariamente documentos que exigem senha a partir de uma lista de candidatos, registrando o índice do candidato correspondente sem nunca registrar o texto da senhaIntakeWorkbenchCliaceitacopyto=dirpara encaminhar cada arquivo auditado em uma subpasta por nível de risco, transformando o auditor em um classificador de entradaIntakeWorkbenchCligrava um log SARIF 2.1.0 quando o nome do resumo do lote termina em.sarif, com uma regra por sinalizador de risco e um resultado por arquivo sinalizado para ingestão em CI e code scanningIntakeWorkbenchCliadiciona o comandoversionque exibe a versão vinculada do PDFium Delphi Component
Version 1.56.5
Adicionado (Adicionado)
IntakeWorkbenchCliagora deriva ações recomendadas de pós-ingestão como accept, request-password, manual-review, quarantine e deduplicate, e expõe contagens de ações nos resumos de loteAccessibilityWorkbenchCliagora deriva ações de remediação recomendadas como pass-through, remediate-tags, run-ocr, remediate-semantics e manual-review, com contagens de ações correspondentes no lote
Alterado (Alterado)
- Ambos os demos CLI de nível de ferramenta exibem agora a ação recomendada em saída de console, texto, HTML, JSON e CSV para que operadores de lote roteiem arquivos sem campos de risco de pós-processamento adicional
Version 1.56.4
Corrigido (Corrigido)
- Ler anotações, favoritos ou anotações de link em loop não vaza mais as cadeias de texto do item anterior: os registros de resultado de
TPdfAnnotation,TBookmarkeTLinkAnnotationagora são limpos com inicialização ciente de tipos gerenciados em vez de zeração bruta de memória, para que documentos com muita anotação textual não inflem a memória do processo durante a vida útil da aplicação - Destruir um
TPdfque registrava um handlerOnUnsupportedFeatureagora o desanexa do callback global do processo do PDFium, de modo que um carregamento posterior de outroTPdfsem seu próprio handler não despache mais para o componente liberado (use-after-free)
Version 1.56.3
Corrigido (Corrigido)
AccessibilityWorkbenchClinão conta mais páginas em branco como páginas de ordem de leitura heurística, então documentos etiquetados com páginas separadoras vazias mantêm seu status de acessibilidade correto; páginas sem conteúdo legível agora são relatadas separadamente- A detecção de cabeçalho de tabela no
AccessibilityWorkbenchClinão atribui mais a uma tabela externa célulasTHpertencentes a uma tabela aninhada, e nomes de campo de formulário e fonte agora distinguem maiúsculas e minúsculas para que campos diferentes não sejam mesclados - Os inventários de host URL no
IntakeWorkbenchCliagora removem userinfo, consulta e fragmento, de modo que um link como[email protected]seja atribuído ao host real, e destinosmailto:passem a contribuir com seu domínio em vez de ficarem invisíveis IntakeWorkbenchCliescapa crases em caminhos, hosts e nomes de anexos controlados por invasores em relatórios Markdown para que a formatação do relatório não possa ser quebrada de dentro do documento
Alterado (Alterado)
AccessibilityWorkbenchClireporta falhas de varredura de fontes e campos de formulário como contadores separados, marca fontes não incorporadas que também possuem instâncias incorporadas e limita listas longas de fontes com marcador explícito de truncamento- Os resumos de lote do
IntakeWorkbenchCliadicionam uma coluna de contagem de anotações de anexos, e o censo de anotações por página fica limitado em 20000 anotações por página com o limite informado em todos os formatos
Version 1.56.2
Adicionado (Adicionado)
AccessibilityWorkbenchCliagora audita incorporação de fontes, tooltip de campos de formulário, origem da ordem de leitura, contornos do documento, estrutura de tabelas e listas, texto alternativo suspeito e detalhes de revisão por página mais completos para que relatórios accessibility em lote identifiquem mais alvos de correçãoIntakeWorkbenchCliagora relata limites de varredura de páginas, ações launch e remote-go-to, inventários de host URI, contagens de anotações, recursos de PDFium sem suporte, identificadores de documento duplicados e marcadores de risco ampliados para revisão intake automatizada
Alterado (Alterado)
IntakeWorkbenchCliaceitamaxpages=Nnos modos de arquivo único e lote para limitar a varredura de páginas por documento enquanto ainda conclui relatórios de metadata, attachment, script, XFA, signature e risk
Version 1.56.1
Corrigido (Corrigido)
- Carregar um
pdfium.dllmais antigo sem uma exportação mais recente agora falha de forma limpa: o caminho de falha redefine todos os pontos de entrada de API vinculados, então as verificaçõesAssigned()(por exemplo emFPDF_GetLastErrorouFPDF_GetSecurityHandlerRevision) informam que a biblioteca não está carregada em vez de chamar o módulo já descarregado e travar com uma violação de acesso UnloadLibraryagora limpa todas as vinculações de API do PDFium, em vez de apenas os auxiliares V8 opcionais, para que nenhum ponteiro de função obsoleto sobreviva depois que a DLL é liberada
Version 1.56.0
Adicionado (Adicionado)
- Cursor de leitura karaoke palavra por palavra em
TPdfView:TrackReadingWordAtmapeia o deslocamento de caractere da palavra atual de um mecanismo de texto para fala, como SAPIStatus.InputWordPosition, para as caixas de palavra da página, realça a palavra que o contém como uma sobreposição distinta acima do bloco de leitura, rola a palavra para a área visível e retorna o índice da palavra, para que a palavra falada acenda conforme a voz avança SetReadingWordeClearReadingWorddefinem ou limpam diretamente a palavra realçada a partir de umTPdfWordBox; redefinir a mesma palavra não faz nada, portanto o acompanhamento palavra por palavra nunca faz a visualização piscarReadingWordColoreReadingWordFollowcontrolam a cor do cursor de palavra e se a visualização rola automaticamente a palavra falada para a área visível
Version 1.55.2
Corrigido (Corrigido)
- ViewerInteractionLab agora dá mais espaço vertical às linhas da barra de ferramentas, para que Open PDF, Create Sample, navegação, pesquisa e controles de seleção não se sobreponham mais com fontes escaladas
Version 1.55.1
Corrigido (Corrigido)
- ViewerInteractionLab agora coloca Prev, Next e Rotate na segunda linha da barra de ferramentas, evitando a sobreposição inicial com Open PDF e Create Sample
Version 1.55.0
Adicionado (Adicionado)
- Ponte entre palavra e seleção para leitura "ler e selecionar":
TPdfView.SelectWordBoxeSelectWordSpanselecionam uma única caixa de palavra ou um intervalo na mesma página de caixas de palavra (dePageWordBoxes) pelos seus intervalos de caracteres, para que a palavra ou linha lida no momento também possa ser selecionada e copiada WordBoxIndexAtCharIndexmapeia um índice de caractere de volta para a caixa de palavra que o contém, conduzindo o realce palavra por palavra à medida que o cursor de leitura TTS avança
Version 1.54.0
Adicionado (Adicionado)
- Acessores de preenchimento de formulário por voz que leem o campo focado diretamente do cursor lógico:
FocusedFormFieldValue,FocusedFormFieldNameeFocusedFormFieldDetailsemTPdfeTPdfViewinformam o valor do campo atual, o nome legível por humanos (tooltip/TU, com fallback para/T) e oTPdfFormFieldInfocompleto (tipo, flags, opções) , tudo o que uma interface de voz precisa anunciar ao avançar por um formulário
Corrigido (Corrigido)
FocusedFormFieldValuelê o campo porFocusedFormFieldIndexem vez do foco interativo do pdfium, para que um preenchimento de formulários guiado por voz obtenha o valor correto mesmo sem cursor visível na tela (o atualFocusedFormFieldTextainda reflete o foco do pdfium e permanece inalterado)
Version 1.53.0
Adicionado (Adicionado)
- Suporte a realce em nível de palavra:
TPdf.PageWordBoxeseTPdfView.PageWordBoxesdividem uma página em registrosTPdfWordBox, cada um com o texto da palavra, seu intervalo de caracteres e um retângulo delimitador no espaço da página, para que um leitor de acessibilidade possa destacar cada palavra falada em sequência ("karaokê" de leitura) passando o retângulo paraSetReadingHighlight BuildWordBoxesexpõe separadamente a etapa de tokenização, convertendo o texto da página em caixas de palavra com intervalos de caracteres
Version 1.52.0
Adicionado (Adicionado)
- Os auxiliares de renderização para baixa visão
InvertPdfBitmap,GrayscalePdfBitmapeDuotonePdfBitmapaplicam transformações de cor in-place a um bitmap renderizado de 32 bits, para que um leitor de acessibilidade possa apresentar páginas invertidas / em modo escuro, em escala de cinza ou em um esquema personalizado de duas cores (por exemplo, fundo escuro com texto claro) para usuários com baixa visão - As transformações operam por pixel e se comportam de forma idêntica em VCL e Lazarus/LCL, sem alterar as dimensões do bitmap
Version 1.51.0
Adicionado (Adicionado)
- Unidades de leitura em nível de sentença para leitura assistiva com áudio:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitseTPdfView.ReadingUnitslinearizam o fluxo de conteúdo legível em registros ordenadosTPdfReadingUnitdo tamanho de sentenças, cada um trazendo o texto a ser falado junto com seu tipo semântico, página, retângulos de realce e tag de idioma, para que um aplicativo de leitor de tela possa avançar por uma página ou pelo documento inteiro uma unidade falada por vez - Navegação semântica com
NextReadingUnitOfKind, permitindo que uma interface de voz salte para o próximo ou anterior heading, figure, list item ou table cell sem percorrer manualmente o fluxo BuildReadingUnitsconverte qualquerTPdfContentFragmentsdiretamente em unidades de leitura: headings e descrições de figures/alt permanecem inteiros, enquanto paragraphs são divididos nos limites das sentenças, os pontos decimais são preservados e o cursor de leitura é um índice simples mantido pelo chamador
Version 1.50.0
Adicionado (Adicionado)
ValidatePdfAagora consegue inspecionar documentos PDF 1.5+ que armazenam o catálogo, o OutputIntent ou outros dicionários dentro de object streams comprimidos (/Type /ObjStm). Os object streams são descomprimidos e os objetos que eles carregam são resolvidos, de modo que esses documentos são validados pelo que de fato contêm, em vez de serem reportados como se não tivessem seus marcadores PDF/A
Version 1.49.5
Corrigido (Corrigido)
ValidatePdfAnão reporta mais como problema a ausência de uma descriçãopdfaExtension:schemas. O schema do identificador PDF/A (pdfaid) é bem conhecido, de modo que nem o veraPDF nem o PDF/A-2/-3 exigem uma descrição de extension-schema para ele, e sinalizar sua ausência reportava erroneamente todo PDF/A de terceiros que estava em conformidade. Documentos produzidos pela própria biblioteca continuam incluindo a descrição
Version 1.49.4
Corrigido (Corrigido)
ValidatePdfAagora detecta o nível de conformidade quando o identificador PDF/A é gravado como atributos XML (pdfaid:part="2") em vez de elementos filhos, de modo que documentos na forma de atributos não são mais reportados com nível desconhecido. Isso também corrige um efeito em cascata em que um nível não detectado fazia as verificações específicas de cada parte recaírem nas regras estritas do PDF/A-1 e sinalizarem indevidamente arquivos incorporados e transparência que o PDF/A-2 e o PDF/A-3 permitem
Version 1.49.3
Corrigido (Corrigido)
ValidatePdfAagora inspeciona documentos PDF 1.5+ cujos dados de cross-reference são um cross-reference stream (arquivos que não possuem a palavra-chavetrailer). O nível de conformidade, o/IDdo trailer e os demais marcadores são lidos a partir do dicionário do cross-reference stream, de modo que esses documentos são validados pelo que de fato contêm, em vez de serem reportados como totalmente não conformes
Version 1.49.2
Corrigido (Corrigido)
ValidatePdfAnão reporta mais um problema espúrio de fonte não incorporada em documentos que incorporam todas as suas fontes. A heurística anterior comparava o número de tokens/FontDescriptorcom os programas de fonte incorporados, mas cada fonte incorporada contribui com dois tokens/FontDescriptor(a referência ao dicionário de fonte mais o objeto descritor), de modo que todo arquivo com fontes incorporadas era sinalizado indevidamente. A verificação agora reporta apenas um documento que referencia fontes mas não incorpora nenhum programa de fonte, em coerência com a correção correspondente doValidatePdfUa
Version 1.49.1
Corrigido (Corrigido)
- A saída PDF/A agora valida como PDF/A-1b e PDF/A-1a em conformidade no veraPDF: o fluxo do perfil ICC do OutputIntent sRGB incorporado (referenciado por
/DestOutputProfile) agora declara a contagem de componentes/Nexigida (3 para o perfil RGB embutido), conforme determina a ISO 19005-1 6.2.3.2. Documentos produzidos porSaveAsPdfAfalhavam anteriormente na validação estrita do PDF/A-1 porque o fluxo do perfil de destino omitia/N; o valor é derivado do cabeçalho do perfil ICC, de modo que um perfil CMYK ou Gray fornecido pelo chamador também recebe a contagem correta
Version 1.49.0
Corrigido (Corrigido)
ValidatePdfUanão reporta mais identificação XMP ausente de forma espúria em PDFs marcados em conformidade — o identificador PDF/UA (pdfuaid:part),dc:title, as datas do XMP e o/IDdo trailer agora são lidos a partir dos bytes do documento original em vez da cópia regravada, que omite o fluxo XMP/Metadatae, para arquivos com cross-reference-stream, o/IDdo trailer- Verificação de incorporação de fontes do
ValidatePdfUacorrigida para que um documento que incorpora todas as suas fontes não seja mais reportado como tendo fontes não incorporadas; agora ela sinaliza apenas um documento que referencia fontes mas não incorpora nenhum programa de fonte ValidatePdfUaagora aceita um elemento de estruturaFormulacujo texto alternativo é fornecido por meio deActualTextem vez de uma entradaAlt(ISO 14289-1 §7.7), de modo coerente com a regra existente deFigure
Version 1.48.0
Adicionado (Adicionado)
- Seleção de texto programática em
TPdfView:SelectTextRange(por página e intervalo de caracteres) eSetSelection(por intervalos explícitos de cada página) selecionam texto a partir do código — por exemplo, para ler e destacar um trecho; ambos redesenham e disparamOnSelectionChangequando a seleção muda.SelectionRangeslê a seleção atual como intervalos de caracteres de cada página, eSelectionRectanglesretorna seus retângulos em coordenadas de página para destaque personalizado ou rolagem até a posição
Version 1.47.0
Adicionado (Adicionado)
- Navegação por campos de formulário para preenchimento de formulários por voz, tanto em
TPdfquanto emTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocuseFocusedFormFieldText. Esses recursos movem um cursor lógico de campo sobre os campos de widget da página na ordem de tabulação (retornando ao início ao chegar às extremidades), de modo que um leitor assistivo possa percorrer o formulário, anunciar cada campo por meio deFormFieldInfo[Index].AlternateName(a dica de ferramenta /TU) e preenchê-lo viaFormField[Index] - Evento
TPdfView.OnFormFieldFocusChange, disparado quando o cursor de campo se move (transportando o índice do novo campo, ou -1 quando limpo)
Version 1.46.0
Adicionado (Adicionado)
- Fluxo de conteúdo para leitura assistiva em voz:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContenteTPdfView.ReadableContentretornam uma lista ordenada de fragmentos semânticosTPdfContentFragment, cada um carregando o texto falado (glifos reais, ouActualText/Alt para figuras), um tipo de fragmento (título com nível, parágrafo, figura, item de lista, célula de tabela, link, texto simples), o idioma, a página com base em 1 e os retângulos de destaque do bloco e de cada linha. PDFs marcados são linearizados na ordem lógica de leitura a partir da árvore de estrutura; páginas não marcadas recorrem à ordem de renderização, de modo que qualquer documento possa ser lido em voz alta - Destaque de leitura sincronizado em
TPdfView:SetReadingHighlight,ClearReadingHighlighte a propriedade publicadaReadingHighlightColordestacam o bloco que está sendo lido no momento, sobreposto às camadas de busca e de seleção - Novos tipos públicos
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindeTPdfReadingOrderSource, além do novo auxiliarClassifyStructType
Version 1.45.0
Adicionado (Adicionado)
ValidatePdfUaagora também percorre a árvore de estrutura marcada ao vivo e reporta três violações de conteúdo de alta confiança que a varredura em nível de bytes não consegue detectar: um elementoFiguresem entrada Alt nem ActualText (ISO 14289-1, 7.3), um elementoFormulasem atributo Alt (7.7) e um elementoNotesem ID exclusivo (7.9). Três novos valores deTPdfUaValidationIssueexpõem essas situações:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltepvuaiNoteMissingId. A varredura da árvore é ignorada para documentos sem marcação- Novo auxiliar público
ValidatePdfUaStructureElementsaplica essas regras da árvore de estrutura a uma lista plana de elementos (como a retornada porTPdf.StructureElements), permitindo que as verificações sejam executadas ou testadas unitariamente sem carregar um documento completo
Version 1.44.5
Corrigido (Corrigido)
- A verificação de incorporação de fontes de
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) agora também detecta fontes simples não incorporadas que não carregam/FontDescriptor, principalmente as 14 fontes Type 1 padrão (Helvetica, Times, Courier e assim por diante), que o PDF/A exige incorporar sem qualquer exceção. Antes, esse tipo de fonte passava despercebido; a verificação agora também contabiliza dicionários de fontes simples (/Type1,/TrueType,/MMType1) em relação aos programas de fonte incorporados, espelhando a correção de PDF/UA da versão 1.44.3
Version 1.44.4
Corrigido (Corrigido)
ValidatePdfVTagora rejeita árvores DPart malformadas da ISO 16612-2 §6.5 quando/DPartsé um array plano de referências em vez do array of arrays exigido, ou quando um leaf DPart repete sua página/Startcomo/Endembora o intervalo contenha apenas uma páginaValidatePdfVTagora valida os nomes de/NodeNameListcomo valores XML NMTOKEN após expandir os escapes#xxde PDF name, de modo que nomes inválidos de níveis da hierarquia são reportados porpvviMissingDPartRootem vez de serem aceitos como uma estrutura DPart utilizável
Version 1.44.3
Corrigido (Corrigido)
- A verificação de incorporação de fontes do
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) agora também detecta fontes simples não incorporadas que não possuem/FontDescriptor, principalmente as 14 fontes Type 1 padrão (Helvetica, Times, Courier, entre outras), para as quais o PDF/UA não concede isenção de incorporação. Anteriormente, uma fonte nessas condições passava despercebida e um documento que a utilizasse poderia ser relatado como conforme; a verificação agora também contabiliza dicionários de fontes simples (/Type1,/TrueType,/MMType1) em relação aos programas de fonte incorporados
Version 1.44.2
Corrigido (Corrigido)
ValidatePdfVTagora mantém um marcadorpdfvtid:GTS_PDFVTVersionpresente, mas não reconhecido, comopvcUnknownem vez de reduzi-lo parapvcNone. Isso mantém strings inválidas em nível de arquivo, comoPDF/VT-2s, distinguíveis de documentos que não carregam nenhum marcador PDF/VT; PDF/VT-2s é identificado pelo cabeçalho de fluxo MIME em ISO 16612-2 Annex A, não pelo marcador XMP de um arquivo PDF- A verificação de
/DPartRootagora valida com mais rigor a tree semantics de ISO 16612-2 §6.5:/DPartRootNodee/NodeNameListdevem descrever a profundidade DPart real, os DPart parent links devem formar uma árvore,/Starte/DPartssão mutuamente exclusivos, e o/DPartde cada página deve apontar para o leaf DPart que a cobre na mesma ordem depth-first que o page tree
Version 1.44.1
Corrigido (Corrigido)
SaveAsPdfVTagora grava uma Document Part Hierarchy mínima de ISO 16612-2 §6.5 quando o PDF de origem não tem um/DPartRootutilizável. A árvore gerada vincula cada página por meio de/DPart, preserva uma hierarquia válida existente e deixa metadados mais ricos de destinatário/DPM para o fluxo chamadorValidatePdfVTagora valida a estrutura DPart utilizável, lê valores XMP de PDF/VT tanto de atributos RDF quanto de texto de elemento, e impõe o pareamento exato entre PDF/VT e a base PDF/X: PDF/VT-1 exige PDF/X-4, enquanto PDF/VT-2 exige PDF/X-4p, PDF/X-5g ou PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2não grava mais marcadores PDF/VT-2 inválidos de arquivo único. O writer de arquivo único normaliza a saída para PDF/VT-1 porque PDF/VT-2 exige semântica de conjunto de arquivos
Version 1.44.0
Adicionado (Adicionado)
ValidatePdfUaagora também reporta violações de PDF/UA em nível de conteúdo verificáveis por bytes, além dos marcadores de formato de arquivo: um programa de fonte não incorporado (ISO 14289-1, 7.21.4), uma fonte que não possui um CMap/ToUnicodequando nenhuma codificação de fonte simples isenta está presente (7.21.7), e um documento que contém anotações mas não declara ordem de tabulação/Tabs /Sna página (7.18.3)- Três novos valores de
TPdfUaValidationIssue—pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeepvuaiMissingTabsOrder— são expostos porValidatePdfUae no relatório de preflight. São heurísticas grosseiras destinadas a indicações de preflight, e não uma verificação completa da ISO 14289-1
Version 1.43.1
Corrigido (Corrigido)
SaveAsPdfUaagora aplica obrigatoriamente as entradas de catálogo/ViewerPreferences/DisplayDocTitle truee/MarkInfo/Marked true/Suspects falseexigidas pela ISO 14289-1, 7.1, mesmo quando o documento de origem já fornece esses dicionários com valores ausentes ou conflitantes. Anteriormente, os marcadores eram injetados somente quando os dicionários estavam completamente ausentes; portanto, um documento que possuía, por exemplo, um/ViewerPreferencessemDisplayDocTitleou um/MarkInfocom/Marked falsegerava um arquivo não conforme- As chaves existentes em um dicionário
/ViewerPreferencesou/MarkInfopreexistente são preservadas, e um dicionário fornecido como referência indireta é resolvido antes de as chaves obrigatórias serem aplicadas
Version 1.43.0
Adicionado (Adicionado)
- Agora
ValidatePdfAaplica as regras de PDF/A-2 / PDF/A-3 para arquivos incorporados e associados e para texto de Level U. Os arquivos incorporados continuam sendo rejeitados no PDF/A-1; no PDF/A-3, um arquivo incorporado que não tenha a chave/AFRelationshipexigida (ISO 19005-3 Anexo E) é sinalizado, ao passo que os anexos de PDF/A-2 são permitidos (sua própria conformidade não é verificada recursivamente). Um novo problemapvaiUnicodeMappingMissingreporta um documento PDF/A-2u ou PDF/A-3u cujas fontes não trazem mapeamento/ToUnicode(ISO 19005-2 6.2.11.7). Transparência e conteúdo opcional permanecem sinalizados apenas para PDF/A-1
Version 1.42.0
Adicionado (Adicionado)
- PDF/A-2 (ISO 19005-2) e PDF/A-3 (ISO 19005-3) agora têm suporte nos três níveis de conformidade — a, b e u — por meio de
SaveAsPdfA,ValidatePdfAe da propriedadePdfAConformance. A enumeraçãoTPdfAConformanceganhapac2a,pac2u,pac3aepac3u(o PDF/A-1 não possui Level u). Ao salvar, são gravados opdfaid:partcorrespondente (2 ou 3) e opdfaid:conformance(A, B ou U), mantendo o subtipo de OutputIntentGTS_PDFA1que a ISO 19005-2 conserva por compatibilidade. Uma solicitação de Level A ainda é rebaixada para o Level B correspondente (para qualquer parte) quando o documento não possui a estrutura marcada (tagged) que esse nível exige
Version 1.41.0
Adicionado (Adicionado)
- Agora
ValidatePdfAdetecta violações de PDF/A em nível de conteúdo que a injeção de marcadores não consegue corrigir, além dos marcadores estruturais que já reportava: JavaScript e outras ações proibidas, additional-actions (/AA), arquivos incorporados,LZWDecode, transparência (soft masks e transparency groups), conteúdo opcional (/OCProperties), subtipos de anotação proibidos (FileAttachment, Sound, Movie, 3D, Screen), AcroForm/NeedAppearances truee/XFA, fontes cujos descritores não possuem um programa de fonte incorporado e uma declaração de Level A feita sem a estrutura marcada (tagged) exigida pela ISO 19005-1 6.8. As verificações de transparência, conteúdo opcional e arquivos incorporados aplicam-se apenas ao PDF/A-1 (esses recursos são permitidos no PDF/A-2 e no PDF/A-3). Novos valores deTPdfAValidationIssueexpõem cada caso; os valores existentes permanecem inalterados
Version 1.40.3
Corrigido (Corrigido)
- Agora
SaveAsPdfAremove qualquer criptografia do documento de origem antes de produzir a saída PDF/A. A ISO 19005-1 6.1.3 proíbe a chave/Encryptno trailer, mas o caminho de salvamento anteriormente preservava o handler de segurança da origem, de modo que salvar um documento criptografado como PDF/A produzia um arquivo criptografado e não conforme. O salvamento PDF/A agora descriptografa o documento primeiro. Documentos não criptografados não são afetados
Version 1.40.2
Corrigido (Corrigido)
- Impedido que
SaveAsPdfAemita uma declaração falsa de conformidade com PDF/A Level A. Quando o Level A (pac1a) é solicitado, mas o documento de origem não possui os marcadores de estrutura marcada (tagged) exigidos pela ISO 19005-1 6.8 — um/StructTreeRootno catálogo e um dicionário/MarkInfocom/Marked true—, o arquivo salvo passa a ser identificado como o Level B correspondente (pdfaid:conformance=B) em vez de afirmar o Level A. A saída PDF/A-1b puramente visual não é afetada
Version 1.40.1
Corrigido (Corrigido)
- Reforçada a validação de conformidade da versão do PDF para que a ação
SetOCGState(set-optional-content-group-state) seja reconhecida como um recurso do PDF 1.5. Salvar em um destino PDF 1.2, 1.3 ou 1.4 que contenha uma açãoSetOCGStateagora é rejeitado, em conformidade com a ISO 32000-1 (Table 198); anteriormente, tal ação podia passar para a saída de versão inferior. A ação distinta e obsoletaSetStatedo PDF 1.2 continua sendo aceita a partir do PDF 1.2
Version 1.40.0
Adicionado (Adicionado)
- Vinculada a API
FPDFPageObj_AddExistingMark()do PDFium, que anexa uma marca de conteúdo existente a um objeto de página. Quando objetos de página consecutivos compartilham a mesma marca, o PDF salvo os combina em uma única marca que abrange todos eles; objetos não consecutivos recebem cópias separadas - Vinculada a API
FPDFTextObj_SetFontSize()do PDFium para alterar o tamanho em pontos de um objeto de texto existente, complementando a vinculação já existente deFPDFTextObj_GetFontSize()
Alterado (Alterado)
- Atualizadas as DLLs de runtime do PDFium incluídas (Win32 e Win64, builds padrão e V8) para o snapshot do PDFium de 2026-06-02
Version 1.39.53
Alterado (Alterado)
- Os exemplos Delphi
PDFViewer,SplitVieweMultiPageVieweragora abrem documentos no modoZoom to Pagepor padrão - A renderização inicial agora ajusta a página inteira à área do visualizador antes que o usuário escolha um nível de zoom manual
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados de versão do instalador foram atualizados para informar 1.39.53
Version 1.39.52
Alterado (Alterado)
- O
Demo\Lazarus\CreatePDFfoi aprimorado para que o exemplo introdutório agora gere um PDF de duas páginas com vector paths, table content, embedded image, text annotation, rotated text e um document-building walkthrough mais claro - Foram adicionadas páginas
README.htmlmais refinadas para todas as pastas de demos Delphi, C++Builder e Lazarus, substituindo o README de demo restante em texto puro por um guia legível no navegador - Atualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados de versão do instalador para 1.39.52
Version 1.39.51
- Os resumos em lote de
Demo\Delphi\PreflightReportCliforam aprimorados com totais de status padrão para resultados Pass, Action required e Review nos padrões selecionados - As linhas por arquivo agora incluem contagens action-required e review nos resumos TXT / HTML / JSON / CSV, facilitando a inspeção de artefatos de CI sem abrir cada relatório gerado
- Atualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados de versão do instalador para 1.39.51
Version 1.39.50
- O modo de lote por diretório de
Demo\Delphi\PreflightReportClifoi aprimorado:batchdir=folderagora coleta os caminhos PDF encontrados, ordena-os e então gera relatórios em uma ordem estável - As varreduras recursivas de diretórios agora produzem ordem de relatórios e linhas de resumo reproduzíveis, enquanto o processamento explícito de
batch=list.txtcontinua preservando a ordem do arquivo de lista - Atualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados de versão do instalador para 1.39.50
Version 1.39.49
- Os resumos em lote de
Demo\Delphi\PreflightReportCliagora registram run settings: tipo de origem, caminho de origem, estado recursivo, diretório de saída, formato do relatório, padrões selecionados e modofailon= - Os resumos JSON agora incluem um objeto
run, os resumos TXT e HTML exibem uma seção de run settings, e as linhas CSV repetem as mesmas colunas de auditoria para planilhas e CI pipelines - Atualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados de versão do instalador para 1.39.49
Version 1.39.48
- O batch output naming de
Demo\Delphi\PreflightReportClifoi aprimorado para que duplicate input file names que compartilham umoutdir=nao sobrescrevam seus generated reports - Batch runs agora acrescentam sufixos
-2,-3e posteriores quando um generated report path ja foi atribuido na mesma execucao, e summaries registram o collision-safe report path final TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.48
Version 1.39.47
- Os batch summaries de
Demo\Delphi\PreflightReportCliforam aprimorados para que as saidas TXT e JSON agora incluam aggregate totals de total files, processed files, failed files, issues e correspondenciasfailon= - CSV summaries permanecem como uma row table pura para consumers existentes, enquanto HTML summaries continuam mostrando as mesmas aggregate metrics no dashboard header
TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.47
Version 1.39.46
Demo\Delphi\PreflightReportClifoi aprimorado comsummary=batch.html/.htmpara que batch runs possam emitir um browser-readable dashboard junto dos TXT / CSV / JSON manifests- HTML summaries mostram metricas de total, processed, failed, issue e correspondencia
failon=, depois listam cada input com report links, status, counts e error text TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.46
Version 1.39.45
Demo\Delphi\PreflightReportClifoi aprimorado combatchdir=foldererecursivepara que scripts possam verificar PDF folders diretamente sem criar antes um list file- Directory batch mode reutiliza o comportamento de
outdir=,summary=,standards=efailon=do list-based batch mode; non-recursive verifica apenas a folder selecionada erecursiveinclui subfolders TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.45
Version 1.39.44
- Melhorado
Demo\Delphi\PreflightReportClicomsummary=batch.csv|json|txtpara que batch runs possam emitir um machine-readable manifest ao lado dos per-file reports - Batch summaries incluem cada input path, report path, status, standard count, passed count, issue count, estado de correspondência
failon=e error text para CI jobs e scripts externos - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.44
Version 1.39.43
- Melhorado
Demo\Delphi\PreflightReportClicombatch=list.txteoutdir=reportspara que scripts gerem preflight reports para uma lista de arquivos PDF em uma única execução - Batch mode ignora linhas vazias e linhas de comentário
#, deriva cada report name.preflight.<ext>do PDF de entrada, continua após erros por arquivo e resume processed e failed files antes de retornar - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.43
Version 1.39.42
Demo\Delphi\PreflightReportClifoi aprimorado comfailon=none|issues|action|review, permitindo que CI jobs convertam preflight results gerados em exit codes determinísticos- A CLI agora retorna exit code 2 quando uma
failon=rule selecionada corresponde após a geração do report file e do optional attached-report PDF, enquanto runtime errors continuam retornando exit code 1 - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.42
Version 1.39.41
Demo\Delphi\PreflightReportClifoi aprimorado comattach=output.pdf, permitindo incorporar um preflight report gerado como document-level attachment em uma nova PDF copy- A CLI mantém em disco o TXT / HTML / Markdown / JSON / CSV report file gerado e recusa anexá-lo de volta ao input PDF path original, reduzindo o risco de sobrescrita acidental
- Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.41
Version 1.39.40
- Adicionado
Demo\Delphi\PreflightReportCli, um Delphi console companion para gerarFPdfPreflightReportde forma scriptable sem abrir um viewer - A CLI oferece suporte a sample creation sem argumentos, além de input / output arguments, optional password, formatos de saída
text/html/md/json/csvestandards=filtering para PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.40
Version 1.39.39
FPdfPreflightReportfoi aprimorado comTPdfPreflightReport.ToMarkdowneSaveMarkdownToFile, permitindo exportar preflight reports como Markdown adequado para issue tracker- Os exemplos
PreflightReportpara Delphi, C++Builder e Lazarus foram atualizados com Markdown preview switching e acoes Save MD junto ao workflow TXT / HTML / JSON / CSV existente TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.39
Version 1.39.38
- Os exemplos
SecurityAuditpara Delphi, C++Builder e Lazarus foram aprimorados com JSON audit report export junto ao workflow TXT save / copy existente - O JSON report contém
format,generatedAt,summary,findingCounte linhasfindingsestruturadas com campos severity, area e detail TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.38
Version 1.39.37
FPdfPreflightReportfoi aprimorado comTPdfPreflightReport.ToCsveSaveCsvToFile, permitindo exportar preflight reports como spreadsheet-friendly CSV- Os samples Delphi, C++Builder e Lazarus
PreflightReportforam atualizados com CSV preview switching e Save CSV actions junto ao workflow TXT / HTML / JSON existente TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.37
Version 1.39.36
FPdfPreflightReportfoi aprimorado comTPdfPreflightReport.IssueCategoryCountse os tipos reutilizáveisTPdfPreflightIssueCategoryCounteTPdfPreflightIssueCategoryCountspara agregar marker-level issues por categoryTPdfPreflightReport.ToText,ToHtmleToJsonforam atualizados para que a saída gerada de PreflightReport inclua issue-category count summaries junto com per-standard rows e detailed issue recommendations- Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.36
Version 1.39.35
- O sample expandido
PrintDialogfoi renomeado paraPrintPreferencesem Delphi, C++Builder e Lazarus, para que o demo name agora corresponda ao workflow de PDF author print preferences, N-up printing, odd / even filtering, grayscale, cell border e duplex mapping - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.35
Version 1.39.34
Demo\Delphi\PrintPDFagora carrega PDF por arrastar e soltar, e o workflow existente deDemo\CBuilder\PrintPDFfoi documentado junto aos exemplos PrintPDF de Delphi e LazarusTPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.34
Version 1.39.33
- Adicionado
Demo\CBuilder\SplitView, completando SplitView sample matrix em Delphi, C++Builder e Lazarus - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.33
Version 1.39.32
- Adicionado
Demo\Lazarus\SplitView, levando side-by-side PDF comparison ao Lazarus com two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets e rotation - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.32
Version 1.39.31
- Adicionado
Demo\Lazarus\PrintPDF, levando o standard PDF print workflow ao Lazarus com preview navigation, page ranges, copies, collate mode, progress e cancellation - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.31
Version 1.39.30
- Adicionado
Demo\Lazarus\FontProperties, completando a matriz de exemplos FontProperties em Delphi, C++Builder e Lazarus - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.30
Version 1.39.29
- Adicionado
Demo\CBuilder\FontProperties, levando a inspeção indexada de metadados de caracteres e fontes para C++Builder junto ao exemplo Delphi - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.29
Version 1.39.28
- Adicionado
Demo\Delphi\ExtractTextPages, completando a matriz de exemplos de extração de texto por página em Delphi, C++Builder e Lazarus - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.28
Version 1.39.27
- Adicionado
Demo\Lazarus\PrintDialog, completando o PrintDialog sample matrix em Delphi, C++Builder e Lazarus - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.27
Version 1.39.26
- Adicionado
Demo\CBuilder\PrintDialog, levando o N-up printing e PDF author print preferences workflow ao C++Builder junto com o sample Delphi - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.26
Version 1.39.25
- Adicionado
Demo\CBuilder\ViewerInteractionLab, completando o ViewerInteractionLab sample matrix em Delphi, C++Builder e Lazarus - Atualizados o library build workflow e os Win64 C++Builder package outputs para que os
TPdfViewviewer interaction methods sejam vinculados corretamente nos Win64 demos - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.25
Version 1.39.24
- Adicionado
Demo\Lazarus\ViewerInteractionLab, levando o focused viewer interaction workflow ao Lazarus junto com o sample Delphi - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.24
Version 1.39.23
- Adicionado
Demo\Lazarus\SearchAndSelect, completando a SearchAndSelect sample matrix em Delphi, C++Builder e Lazarus - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.23
Version 1.39.22
- Adicionados
Demo\CBuilder\ContentExtractionLabeDemo\Lazarus\ContentExtractionLab, levando o multi-category content extraction workflow a todos os demo IDEs suportados - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.22
Version 1.39.21
- Aprimorados
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportcom um preview format selector para verificar text ou JSON output antes de salvar relatórios - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.21
Version 1.39.20
- Adicionado export JSON ao
FPdfPreflightReportpor meio deTPdfPreflightReport.ToJsoneSaveJsonToFile, com summary legível por máquina, per-standard status / priority, next action e issue detail - Atualizados
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportcom ações Save JSON além da exportação TXT / HTML - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.20
Version 1.39.19
FPdfPreflightReportfoi aprimorado comTPdfPreflightStatus, issue categories, per-standard priority e next-action guidance nos relatórios TXT / HTMLDemo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportagora mostram status, priority, issue count e next action na summary gridTPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.19
Version 1.39.18
- Adicionado
Demo\Lazarus\SecurityAudit, completando a matriz de exemplos Delphi, C++Builder e Lazarus para o workflow de auditoria PDF risk-surface somente leitura - O exemplo Lazarus enumera permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability e unsupported-feature callbacks, depois salva ou copia a finding list como TXT report
TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.18
Version 1.39.17
- Adicionado
Demo\CBuilder\SecurityAudit, levando o workflow de auditoria PDF risk-surface somente leitura para C++Builder junto ao exemplo Delphi existente - O exemplo C++Builder enumera permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability e unsupported-feature callbacks, depois salva ou copia a finding list como TXT report
TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.17
Version 1.39.16
- Adicionado
Demo\CBuilder\SearchAndSelect, levando o workflow viewer SearchAndSelect independente para C++Builder junto ao exemplo Delphi existente - O exemplo C++Builder cria ou abre PDFs, lista matches de todas as páginas com page / character-index previews, oferece Previous / Next e double-click navigation, e destaca matches da página atual com
HighlightSearchText - Ele também expõe
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangee opções spreadDisplayMode; os metadados de versão agora informam 1.39.16
Version 1.39.15
- Adicionado
Demo\CBuilder\WatermarkStamp, completando a demo matrix de Delphi, Lazarus e C++Builder para workflows reutilizáveis de Form XObject watermark e stamp - O exemplo C++Builder cria PDFs de target e stamp, reutiliza a stamp page por meio de
CreateXObjectFromPage, aplica transforms comTPdfMatrixe salva centered watermarks, corner stamps e page number labels - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.15
Version 1.39.14
- Adicionado
Demo\Lazarus\WatermarkStamp, levando para o Lazarus o workflow reutilizável de Form XObject watermark e stamp - O exemplo Lazarus cria PDFs de target e stamp, reutiliza a stamp page por meio de
CreateXObjectFromPage, aplica transforms comTPdfMatrixe salva centered watermarks, corner stamps e page number labels - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para informar 1.39.14
Version 1.39.13
- Foi adicionado
Demo\CBuilder\PreflightReport, completando a matriz de demos Delphi, Lazarus e C++Builder para o workflow reutilizável deFPdfPreflightReport - O exemplo C++Builder usa
FPdfPreflightReport.hpppara gerar standard summaries, TXT report previews, TXT / HTML report files e o comportamento Open Last Report TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.13
Version 1.39.12
- Foi adicionado
Demo\Lazarus\PreflightReport, levando para Lazarus o workflow de preflight report para PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - O exemplo Lazarus pode abrir ou criar um PDF, selecionar target standards, visualizar summary rows e TXT report output, salvar TXT / HTML reports e abrir o report salvo mais recentemente
TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.12
Version 1.39.11
- O
Demo\Delphi\SearchAndSelectfoi aprimorado com uma lista de resultados de pesquisa em todas as páginas que registra page number, character index e preview text - Foram adicionados Previous / Next match navigation e double-click result jumping, preservando o comportamento de
HighlightSearchTextna página atual TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.11
Version 1.39.10
Demo\Delphi\SecurityAuditfoi aprimorado com ações Save Report e Copy Report que exportam o summary atual e as finding rows como TXT audit report- O demo agora limpa o report export state quando o audit panel é redefinido, mantendo os reports copiados ou salvos alinhados com os findings visíveis
TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.10
Version 1.39.9
Demo\Delphi\ContentExtractionLabfoi aprimorado com source-PDF save, report copy-to-clipboard e ações all / none category selection- O demo agora invalida o report atual quando category selection muda, para que as TXT / JSON exports reflitam o extraction scope visível
TPdf.AboutInfo, Lazarus package metadata e installer version metadata foram atualizados para informar 1.39.9
Version 1.39.8
- Adicionado
Demo\Delphi\ContentExtractionLab, um workflow sample unificado de content extraction para document metadata, page text, page objects, images, attachments, links, annotations, bookmarks e font / character metrics - O exemplo pode abrir um PDF existente ou criar um synthetic PDF com conteúdo text, image, attachment e annotation, depois gerar summary rows e relatórios TXT / JSON detalhados
- Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.8
Version 1.39.7
- Adicionado
Lib\FPdfPreflightReport.pas, um helper reutilizável de relatório que reúneValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfReValidatePdfVTem um objetoTPdfPreflightReport - Adicionado
Demo\Delphi\PreflightReport, um workflow sample que abre ou cria um PDF, seleciona target standards, visualiza summary rows e issue recommendations, e salva relatórios TXT ou HTML - Os relatórios gerados descrevem explicitamente o limite da marker-level validation integrada, para que aplicações possam combiná-los com content-level preflight tools dedicadas quando necessário
- Atualizados
TPdf.AboutInfo, Lazarus package metadata, package project lists e installer version metadata para informar 1.39.7
Version 1.39.6
- Adicionado
Demo\Delphi\SearchAndSelect, uma amostra viewer workflow focada em search highlighting, text selection, selected-text preview, copy, clear e spread display modes - A amostra demonstra
HighlightSearchText, opções de busca match-case / whole-word,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardeClearSelectionsem adicionar nova API de biblioteca - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.6
Version 1.39.5
Demo\Delphi\ViewerInteractionLabfoi expandido para uma amostra de viewer UX no estilo SearchAndSelect comHighlightSearchText, opções match-case / whole-word, prévia do texto selecionado e os controles existentes de seleção / clipboardDemo\Delphi\PrintDialogfoi expandido para inspecionar PDF author print preferences:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlinge o duplex mapping visível deSetPdfPrintPaperHandlingDevMode- Adicionado
Demo\Delphi\SecurityAudit, uma amostra risk-surface somente leitura que lista permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state e V8 / XFA helper availability - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.5
Version 1.39.4
- Adicionados
Demo\CBuilder\ImageToPDFeDemo\Lazarus\ImageToPDF, completando a matriz de exemplos ImageToPDF em Delphi, C++Builder e Lazarus - Os novos exemplos demonstram seleção de múltiplas imagens, pré-visualização da imagem selecionada, uma página PDF por imagem, tamanho de página A4 portrait / landscape, escala centralizada da imagem, progresso por imagem e abertura do PDF gerado após salvar
- Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.4
Version 1.39.3
- Adicionado
Demo\CBuilder\BatchExport, levando o fluxo de exportação multiarquivo de PDF para JPG ao C++Builder junto com as amostras Delphi e Lazarus existentes - A amostra demonstra
LoadCustomDocument,IPdfCancellationTokenSource, entradaTFileStreamem streaming, progresso por arquivo e por página, tratamento de cancelamento, entradas DPI / quality / password e abertura da pasta de saída ao concluir - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.3
Version 1.39.2
- Adicionado
Demo\Delphi\WatermarkStamp, um exemplo executável de fluxo Form XObject que cria um PDF de destino e um stamp PDF reutilizável, depois aplica marcas d'água centralizadas, carimbos no canto superior direito e rótulos de número de página em todas as páginas - O exemplo demonstra
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixeFPDFPageObj_SetMatrixsem adicionar nova API de biblioteca - Atualizado
Docs\en-us\Examples.htmlpara usar o padrão atualTPdfMatrix.Handleao passar matrizes paraFPDFPageObj_SetMatrix - Atualizados
TPdf.AboutInfo, Lazarus package metadata e installer version metadata para reportar 1.39.2
Version 1.39.1
- Adicionado
Demo\Delphi\ViewerInteractionLab, uma amostra focada deTPdfViewpara modos de exibição, modos de ajuste, cores da página, rotação, seleção de texto pelo usuário, ações de clipboard e retorno de coordenadasDeviceToPage - Adicionado
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabpara que usuários de Lazarus possam executar o fluxo de validação e marker-output de PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - As unidades de standards foram listadas em
Lib\37.0\PDFiumPas.dprojeLib\FPC\PDFiumLaz.lpk, e a compilação do demo DelphiSplitViewfoi corrigida removendo uma importação duplicada deWinapi.ShellAPI - Foram corrigidos bloqueios da build em lote dos demos Delphi em
BatchExport,PDFViewer,MultiPageViewereSplitViewsem alterar seu comportamento em tempo de execução - Foi corrigida a compatibilidade da build em lote dos demos C++Builder
PDFViewereMultiPageViewer, substituindonullptrporNULLno modo de projeto atual - Atualizados
TPdf.AboutInfo, metadados do pacote Lazarus e metadados de versão do instalador para informar 1.39.1
Version 1.39.0
- Adicionado
Demo\Delphi\StandardsLab, um exemplo executável de fluxo de trabalho de padrões que carrega ou cria um PDF, executaValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfReValidatePdfVT, e mostra conformance detectada, status de aprovação e contagens de issue em uma única grade - Os botões de salvamento do StandardsLab chamam
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfReSaveAsPdfVT, tornando visível a saída marker de padrões PDF sem escrever um harness personalizado - Atualizados
TPdf.AboutInfo, metadados do pacote Lazarus e metadados de versão do instalador para informar 1.39.0
Version 1.38.0
- As sobreposições de busca e seleção de texto do
TPdfViewagora usam alpha blending real em vez de pintura com mask lógica, preservando o conteúdo da página sob os destaques - Adicionado
SetPdfPrintPaperHandlingDevModepara mapearTPrintPaperHandlingpara valores WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALeDMDUP_VERTICAL TPdfView.SmoothScrollagora anima comandos line/page da scrollbar em timer-driven segments; o thumb tracking continua imediatoTPdf.AboutInfoe metadados de versão dos instaladores atualizados para 1.38.0
Version 1.37.0
TPdfagora possui um bloqueio de renderização por instância que serializaRenderPage,RenderTile,RenderPageProgressive, recarga de página e descarregamento de documento. Renderização por worker com um componente compartilhado passa a ser prática; a aplicação ainda coordena mutações e ciclo de vida- Corrigido o wrapper bitmap zero-copy para rejeitar DIB
TBitmapbottom-up e usar buffer próprio do PDFium com cópia final, eliminando falhas de stride corruption / access violation nos testes VCL de renderização - Comportamento de seleção do
TPdfViewajustado:AllowUserTextSelectionbloqueia apenas entrada de usuário, APIs de seleção por código continuam desenhando, eSelectAllsegue o spread visível real para que a capa não selecione a página 2. Testes Delphi, Lazarus e C++Builder ampliados TPdf.AboutInfoe metadados de versão dos instaladores atualizados para 1.37.0
Version 1.36.0
- Ativada a seleção de texto para usuários finais em
TPdfView— a propriedadeAllowUserTextSelection, reservada na v1.17.0, agora conduz um pipeline completo de drag-select. Um clique esquerdo sobre um caractere de texto entra no modo de seleção (com hit-test automático); um clique esquerdo em uma área em branco continua fazendo pan como antes. O widget de preenchimento de formulário mantém prioridade, então clicar em um campo de formulário ainda focaliza o campo em vez de iniciar uma seleção - Double-click seleciona a palavra, triple-click seleciona a linha,
Ctrl+Aseleciona a página atual (ou ambas as páginas nos modos spread de exibição), eCtrl+Ccopia a seleção para o clipboard do Windows comoCF_UNICODETEXT Shift+Left/Shift+Rightestendem a seleção um caractere por vez (avançando para a página adjacente no modo spread);Shift+Home/Shift+Endestendem até a borda visual da linha usando a altura da caixa do caractere inicial como tolerância de agrupamento da linha, para que linhas com tamanhos de fonte mistos permaneçam agrupadas corretamente- Ao passar o cursor sobre o texto, o cursor muda para
crIBeam; ao sair do texto, o cursor padrão é restaurado. Enquanto um arrasto de seleção de texto está em andamento, arrastar para uma zona morta de 20 pixels em qualquer borda do visualizador aciona auto-scroll da página (tick de 50 ms, 16 px / tick, limitado aos mesmos limites usados pelo caminho de pan), para que a seleção possa se estender além da viewport atual sem soltar o mouse antes - A seleção entre páginas funciona nos modos spread de exibição (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): um arrasto iniciado na página esquerda e encerrado na direita seleciona o intervalo contínuo que atravessa ambas.SelectedTextune os trechos de cada página com CR/LF para que o texto reconstruído seja lido como conteúdo multilinha normal - Nova propriedade publicada
SelectionColor(padrãoclHighlight, a cor de seleção do sistema Windows) — independente deHighlightColor, que colore os resultados de pesquisa em amarelo. Realces de pesquisa e uma seleção ativa por arrasto podem ser exibidos simultaneamente na tela sem conflito de cores - Novo evento publicado
OnSelectionChangedispara sempre que os intervalos materializados da seleção realmente mudam — nunca em uma reaplicação idêntica, para que aplicativos host possam conectá-lo diretamente ao texto da barra de status ou ao estado habilitado de botões sem precisar de debounce - Nova API pública em
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Esses são pontos de entrada no nível de código e sempre funcionam independentemente deAllowUserTextSelection— o sinalizador controla apenas a entrada do usuário (mouse, Ctrl+C, Ctrl+A, Shift+arrows), para que hosts de quiosque possam desativar a seleção dirigida pelo usuário e ainda assim oferecer botões de barra de ferramentas "Selecionar tudo / Copiar" que acionam a mesma API - Um menu popup padrão de clique direito
Copy/复制é anexado automaticamente quando o host não atribuiu seu próprioPopupMenu— o fluxo padrão "selecionar texto, clicar com o botão direito, copiar" funciona imediatamente. O rótulo é escolhido entre inglês e chinês porSysLocale.PriLangID; hosts que precisem de localização completa (ou de um menu mais rico) só precisam atribuir seu próprioPopupMenu, e o padrão é suprimido - A seleção é limpa automaticamente em
SetPdf,SetPageNumber,SetActive(False)e transições deDisplayMode, comOnSelectionChangedisparando exatamente uma vez quando a seleção anterior não estava vazia. O subsistema de preenchimento de formulários mantém prioridade — enquanto um campo de formulário está sendo editado, todos os atalhos de teclado de seleção são adiados para que o campo recebaCtrl+C/Ctrl+A/Shift+arrowspara sua própria seleção - As suítes de regressão de Delphi e Lazarus foram ampliadas para 202 casos cada, e a suíte de C++Builder para 159 casos, cobrindo valores padrão, round-trip, comportamento da API pública, limpeza por mudança de estado, arrasto do mouse (acertando texto / área vazia), clique versus arrasto, alternância do cursor IBeam, double-click na palavra, triple-click na linha, atalhos de teclado, anexação / adiamento / rótulo do popup padrão e seleção spread entre páginas — incluindo uma verificação de round-trip de CR/LF no clipboard
Version 1.35.0
- Adicionado suporte à injeção de marcadores PDF/VT (ISO 16612-2:2010): TPdf.SaveAsPdfVT promove o documento atual a um arquivo conforme PDF/VT-1 ou PDF/VT-2 (o subconjunto PDF de impressão variável e transacional). PDF/VT é construído sobre PDF/X-4 — a ISO 16612-2 §6.2.1 exige que todo arquivo PDF/VT-1 também esteja em conformidade com PDF/X-4 — por isso o injetor grava o conjunto completo de marcadores PDF/X-4 (XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)e/Trapped, catálogo com/OutputIntentsapontando para um dicionário OutputIntent com perfil ICC incorporado) junto com as propriedades específicas de PDF/VT - A injeção específica de PDF/VT cobre XMP
pdfvtid:GTS_PDFVTVersion(= "PDF/VT-1" ou "PDF/VT-2" conforme §6.3 Table 2) epdfvtid:GTS_PDFVTModDate(mantido em sincronia comxmp:ModifyDateconforme §6.3 NOTE 1), além de uma descrição pdfaExtension:schemas que declara os namespaces pdfxid e pdfvtid (URIs NPEShttp://www.npes.org/pdfx/ns/id/ehttp://www.npes.org/pdfvt/ns/id/). O trailer carrega um array/ID - Adicionado TPdf.SaveAsPdfVTToStream para saída PDF/VT em memória, e um atalho de opções padrão
TPdf.SaveAsPdfVT(FileName)que produz PDF/VT-1 com o OutputIntent sRGB IEC61966-2.1 incluído no pacote (3144 bytes, o mesmo perfil de SaveAsPdfA / SaveAsPdfX) e/Trapped /False - Adicionado TPdf.ValidatePdfVT: verifica um PDF aberto quanto aos marcadores de conformidade PDF/VT (presença de XMP
pdfvtid:GTS_PDFVTVersioneGTS_PDFVTModDate, igualdade entrepdfvtid:GTS_PDFVTModDateexmp:ModifyDate, presença do identificador subjacentepdfxid:GTS_PDFXVersion, presença de/DPartRootno catálogo conforme §6.5,/OutputIntentscom/DestOutputProfile, trailer /ID, status de criptografia, presença dexmp:CreateDate/ModifyDate) e retorna TPdfVTValidationResult com o nível de conformidade detectado e o conjunto de problemas encontrados - Adicionada a propriedade TPdf.PdfVTConformance: retorna o nível de conformidade do documento atualmente aberto (pvc1, pvc2, pvcNone ou pvcUnknown) sem precisar chamar ValidatePdfVT explicitamente
- Novos tipos exportados na nova unidade FPdfPdfvt: TPdfVTConformance, TPdfVTTrappedState, TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions
- A hierarquia Document Part (
DPartRoot/DParttree conforme §6.5) é uma estrutura de nível de aplicação que depende do mapeamento de destinatário / intervalo de páginas no fluxo de impressão de dados variáveis. SaveAsPdfVT NÃO sintetiza automaticamente uma árvore DPart — ValidatePdfVT expõe a ausência de/DPartRootcomopvviMissingDPartRootpara que o chamador possa encaminhar arquivos PDF/VT para uma etapa separada de construção de DPart. Requisitos de nível de conteúdo do PDF/X-4 (embedding de fontes, transparência, cor gerenciada por ICC, proibições de OPI / JavaScript / Reference XObject e assim por diante) continuam sendo responsabilidade do autor do documento e do pipeline de renderização do PDFium - String TPdf.AboutInfo atualizada para informar a versão atual do produto
Version 1.34.0
- Adicionado suporte à injeção de marcadores PDF/R-1 (ISO 23504-1:2020): TPdf.SaveAsPdfR promove o documento atual a um arquivo conforme PDF/R-1 (o subconjunto de transporte por imagem raster de PDF usado em documentos digitalizados). A injeção cobre os requisitos em nível de formato de arquivo que podem ser anexados por pós-processamento — o comentário único de identificação de versão
%PDF-raster-1.0gravado entre o trailer dictionary e a palavra-chave startxref (§5), o dicionário de catálogo reduzido à white list de §6.3 (somente Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata permanecem), o Document Information Dictionary reduzido à white list de §6.4.3 (somente Creator / Producer / CreationDate / ModDate), um fluxo XMP de catálogo /Metadata com as quatro entradas da §6.4.4 Table 1, e um array /ID no trailer - Adicionado TPdf.SaveAsPdfRToStream para saída PDF/R em memória, e um atalho de opções padrão
TPdf.SaveAsPdfR(FileName)para o caso comum - Adicionado TPdf.ValidatePdfR: verifica um PDF aberto quanto aos marcadores de conformidade PDF/R-1 (o comentário de rodapé
%PDF-raster-x.y, a versão do cabeçalho, ausência de /Type /ObjStm, conformidade do catálogo com a white list, conformidade do Info dictionary com a white list, presença do fluxo de metadados XMP, trailer /ID) e retorna TPdfRValidationResult com o nível de conformidade detectado e o conjunto de problemas encontrados - Adicionada a propriedade TPdf.PdfRConformance: retorna o nível de conformidade do documento atualmente aberto (prc1, prcNone ou prcUnknown) sem precisar chamar ValidatePdfR explicitamente
- Novos tipos exportados na nova unidade FPdfPdfr: TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions.
TPdfRSaveOptions.Defaultdefine StripInfoOptionalEntries e StripCatalogOptionalEntries como True, para que o injetor produza por padrão um catálogo e um Info dictionary conformes a §6.3 / §6.4.3; chamadores podem defini-los como False para preservar entradas da origem (nesse caso a saída não satisfará essas cláusulas de PDF/R, mas os demais marcadores permanecerão anexados) - Os requisitos de nível de conteúdo continuam sendo responsabilidade do PDF de origem: estrutura de Contents por página (§6.5.1), forma MediaBox
[0 0 w h](§6.5.3), restrições de filtros (§6.2.2 — apenas FlateDecode, CCITTFaxDecode bitonal e DCTDecode em cinza/RGB de 8 bits), ausência de object streams (§6.2.4) e layout de strips conforme §6.6. Esses requisitos não podem ser impostos por pós-processamento — PDF/R é estruturalmente um subconjunto muito mais rígido que os outros padrões PDF/x e exige que os bytes de origem sejam gerados corretamente. ValidatePdfR expõe os problemas em nível de formato de arquivo que esta unidade consegue detectar; combine-o com um validador PDF/R do TWAIN Working Group para verificações completas em nível de conteúdo - String TPdf.AboutInfo atualizada para informar a versão atual do produto
Version 1.33.0
- Adicionado suporte à injeção de marcadores PDF/X (família ISO 15930): TPdf.SaveAsPdfX promove o documento atual a um arquivo conforme PDF/X-1a:2001, PDF/X-3:2002 ou PDF/X-4 por pós-processamento do PDF base com uma atualização incremental. A injeção cobre os requisitos em nível de formato de arquivo que podem ser anexados por pós-processamento — fluxo de metadados XMP com
pdfxid:GTS_PDFXVersion(epdfxid:GTS_PDFXConformancepara PDF/X-1a / PDF/X-3) mais a descrição correspondente de pdfaExtension:schemas, um Document Information Dictionary reescrito com/GTS_PDFXVersion,/GTS_PDFXConformancee/Trapped, um catálogo atualizado com/OutputIntents [N 0 R]apontando para um dicionário OutputIntent com/S /GTS_PDFXe um perfil ICC incorporado, e um array de trailer/ID - Adicionado TPdf.SaveAsPdfXToStream para saída PDF/X em memória, e um atalho de opções padrão
TPdf.SaveAsPdfX(FileName)que produz PDF/X-4 com o OutputIntent sRGB IEC61966-2.1 embutido (3144 bytes, idêntico ao perfil usado por SaveAsPdfA) - Adicionado TPdf.ValidatePdfX: verifica um PDF aberto quanto aos marcadores de conformidade PDF/X (identificador pdfxid no XMP e igualdade com o valor do Info dictionary, descrição do schema de extensão pdfxid, array /OutputIntents com /DestOutputProfile, presença de Title, trailer /ID, status de criptografia, presença de xmp:CreateDate / xmp:ModifyDate) e retorna TPdfXValidationResult com o nível detectado e o conjunto de problemas encontrados
- Adicionada a propriedade TPdf.PdfXConformance: retorna o nível de conformidade do documento atualmente aberto (pxc1a, pxc3, pxc4, pxcNone ou pxcUnknown) sem precisar chamar ValidatePdfX explicitamente. A string de versão XMP é analisada para distinguir os três níveis de conformidade
- Novos tipos exportados na nova unidade FPdfPdfx: TPdfXConformance, TPdfXTrappedState, TPdfXValidationResult, TPdfXValidationIssue, TPdfXSaveOptions.
TPdfXSaveOptions.Defaultaponta para PDF/X-4 com OutputIntent sRGB e/Trapped /False; chamadores podem sobrescreverConformance, fornecer um blob CMYK emIccProfileDatapara fluxos de impressão comercial, ou alterarOutputCondition,OutputConditionIdentifiereRegistryNamepara apontar para uma entrada específica de registro de caracterização ICC (por exemplo, FOGRA39, GRACoL2006_Coated1v2) - Os requisitos em nível de conteúdo (todas as fontes incorporadas, ausência de JavaScript, ausência de annotations visíveis, proibição de OPI, regras de transparência para PDF/X-1a / PDF/X-3 e assim por diante) continuam sendo responsabilidade do autor do documento e do pipeline de renderização do PDFium. Combine ValidatePdfX com uma ferramenta de preflight como callas pdfaPilot ou Ghent PDF Workgroup Output Suite para verificação completa de conformidade
- String TPdf.AboutInfo atualizada para informar a versão atual do produto
Version 1.32.0
- Adicionado suporte para injeção de marcadores PDF/E-1 (ISO 24517-1:2008): TPdf.SaveAsPdfE promove o documento atual a um arquivo conforme PDF/E-1 por pós-processamento do PDF base com uma atualização incremental. A injeção cobre os requisitos de nível formato de arquivo — fluxo XMP com
pdfe:ISO_PDFEVersion = "PDF/E-1"e descrição pdfaExtension:schemas, Document Information Dictionary reescrito com a entrada obrigatória/ISO_PDFEVersion (PDF/E-1)de §5, equivalência Info-XMP herdada de ISO 19005-1 §6.7 via §13.1 e array/IDno trailer (§6.2) - Adicionado TPdf.SaveAsPdfEToStream para saída PDF/E em memória e atalho
TPdf.SaveAsPdfE(FileName) - Adicionado TPdf.ValidatePdfE: verifica os marcadores de conformidade e retorna TPdfEValidationResult
- Adicionada propriedade TPdf.PdfEConformance: retorna o nível sem chamar ValidatePdfE explicitamente
- Novos tipos exportados na nova unidade FPdfPdfe: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- A reescrita do Info dictionary é uma estreia no caminho PDF/x do PDFium Delphi Component — reescreve o objeto Info existente com o mesmo número (referência /Info do trailer preservada) e sintetiza um novo se o trailer fonte não tiver /Info
- Requisitos de nível conteúdo (embedding de fontes, CMaps ToUnicode, XObjects / chaves ExtGState / forms XFA proibidos) continuam sendo responsabilidade do autor
- String TPdf.AboutInfo atualizada para reportar a versão atual do produto
Version 1.31.0
- Adicionado suporte para injeção de marcadores PDF/UA-1 (ISO 14289-1:2014): TPdf.SaveAsPdfUa promove o documento atual a um arquivo conforme PDF/UA-1 por pós-processamento do PDF base com uma atualização incremental. A injeção cobre os requisitos de nível formato de arquivo aplicáveis por pós-processamento — fluxo de metadados XMP com
pdfuaid:part = 1e a descrição pdfaExtension:schemas correspondente,dc:titleobrigatório, catalog/MarkInfo << /Marked true /Suspects false >>e/ViewerPreferences << /DisplayDocTitle true >>(apenas se a origem não tiver), catalog/Lang(quando o chamador fornece tag BCP 47) e array/IDno trailer - Adicionado TPdf.SaveAsPdfUaToStream para saída PDF/UA em memória, e um atalho com opções padrão
TPdf.SaveAsPdfUa(FileName)para o caso comum - Adicionado TPdf.ValidatePdfUa: verifica em um PDF aberto os marcadores de conformidade PDF/UA-1 (existência de StructTreeRoot, /Lang, /MarkInfo /Marked true com /Suspects = false, /ViewerPreferences /DisplayDocTitle true, identificador XMP pdfuaid:part, presença de dc:title, /ID do trailer, status de criptografia) e retorna resultado estruturado com nível de conformidade detectado e conjunto de problemas encontrados
- Adicionada propriedade TPdf.PdfUaConformance: retorna o nível de conformidade do documento aberto (puc1, pucNone ou pucUnknown) sem chamar ValidatePdfUa explicitamente
- Novos tipos exportados na nova unidade FPdfPdfua: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- Campos vazios de TPdfUaSaveOptions (Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language) são auto-preenchidos via FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage
- Requisitos de nível conteúdo (completude do tagging StructTreeRoot, texto Alt de Figure, CMaps ToUnicode, embedding de fontes, etc.) continuam sendo responsabilidade do autor — SaveAsPdfUa anexa apenas marcadores de formato. ValidatePdfUa relata a ausência de StructTreeRoot como
pvuaiMissingStructTreeRoot - String TPdf.AboutInfo atualizada para reportar a versão atual do produto
Version 1.30.0
- A saída PDF/A-1b agora satisfaz os requisitos de equivalência entre Document Information Dictionary e XMP da ISO 19005-1 (com Cor.1:2007): cada entrada do Info dictionary que o PDFium escreve no PDF base é espelhada no pacote XMP, incluindo Title (dc:title), Author (dc:creator), Subject (dc:description conforme Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) e ModDate (xmp:ModifyDate). Também é emitido xmp:MetadataDate
- O trailer de um documento PDF/A agora contém sempre um array /ID (requisito obrigatório da ISO 19005-1 6.1.3). Quando TPdf.SaveAsPdfA processa um documento cuja origem já tem file identifier, os IDs de 16 bytes permanent e changing são reutilizados; caso contrário, um ID de fallback determinístico de 16 bytes é derivado dos bytes de origem
- O XMP injetado agora embute a descrição do extension schema pdfaid exigida pela ISO 19005-1 6.7.8 (substituída por Cor.1) — pdfaid é um extension schema relativo à XMP Specification 2004, portanto todos os arquivos conformes devem declarar seus property names, value types e categories no contêiner pdfaExtension:schemas
- TPdfASaveOptions ganhou cinco novos campos opcionais: Producer, CreationDate, ModDate (strings de data PDF no formato “D:YYYYMMDDHHmmSSOHH'mm'”), DocumentId e InstanceId (strings de 16 bytes para o array /ID do trailer). TPdf.SaveAsPdfA / SaveAsPdfAToStream preenchem automaticamente os campos ausentes via FPDF_GetMetaText e FPDF_GetFileIdentifier, então o código existente continua funcionando sem alterações
- TPdf.ValidatePdfA / TPdf.PdfAConformance agora relatam três problemas adicionais: pvaiMissingTrailerId (sem /ID no trailer), pvaiMissingXmpDates (xmp:CreateDate ou xmp:ModifyDate ausente) e pvaiMissingExtensionSchema (descrição do extension schema pdfaid ausente)
- Caracteres não-ASCII em Title, Author, Subject, Keywords, Creator e Producer agora são codificados como UTF-8 no pacote XMP (XMP Specification requer UTF-8), preservando metadados multilingues através de SaveAsPdfA
- String TPdf.AboutInfo atualizada para reportar a versão atual do produto
Version 1.29.0
- Atualizadas as DLLs do PDFium incluídas (Win32 e Win64, builds padrão e com V8) para o snapshot do PDFium de 2026-05-22, incorporando correções do PDFium aos caminhos de crash de FPDFText_SetText / FPDFText_SetCharcodes e diversos endurecimentos internos do projeto PDFium
- Exposto o novo flag de salvamento FPDF_SUBSET_NEW_FONTS do PDFium em FPdfPageOps.pas, permitindo que chamadores de FPDF_SaveAsCopy solicitem o subsetting automático dos arquivos de fontes incorporadas para novos objetos de texto. As constantes existentes FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL e FPDF_REMOVE_SECURITY agora são definidas com a forma de deslocamento de bits do PDFium (o valor numérico legado 3 é preservado como FPDF_REMOVE_SECURITY_DEPRECATED para compatibilidade binária)
- Adicionado o enum FPDF_FONT_BACKEND_TYPE (FREETYPE / FONTATIONS) e o campo correspondente m_FontLibraryType em FPDF_LIBRARY_CONFIG dentro de FPdfView.pas, para que aplicações que inicializam o PDFium com o renderer Skia possam escolher o backend de fontes na inicialização
- Atualizada a assinatura de TFPDFPage_InsertObject para corresponder à exportação C do PDFium: a função C agora retorna FPDF_BOOL (TRUE em caso de sucesso, FALSE se page_object for NULL ou a transferência de ownership falhar) em vez de void. As chamadas existentes de PDFium Delphi Component continuam compilando sem alteração, já que Delphi / FPC permitem ignorar o valor de retorno de uma função
- Corrigida a string TPdf.AboutInfo para reportar a versão atual do produto (estava desatualizada em v1.27.0 desde a versão 1.28.0, que apenas alterava documentação)
Version 1.28.0
- Expandiu substancialmente a documentação dentro das páginas de toda a referência da API: cada entrada de propriedade, método, evento e função global agora contém uma Description de 3 parágrafos, uma lista de Remarks, um Example multilinhas em Delphi e um bloco See Also mais rico — cobrindo mais de 200 páginas anteriormente enxutas, incluindo todos os contadores de TPdf, getters de metadados, acessores de fontes e caracteres, propriedades de nível de página, registros indexados, métodos de nível de documento e toda a superfície de estado / exibição / eventos de TPdfView
- Ajuste fino do layout de ajuda para corresponder à linha de base visual losLab: tamanhos de h1/h2 harmonizados, estilos da grade de navegação da API consolidados na StyleSheet compartilhada, e remoção dos overrides de CSS inline por página em Navigation.html
- A documentação agora acompanha um script auxiliar (Docs\Build-Expand-Entries.ps1) que regenera o enriquecimento das páginas de entrada a partir de uma única tabela de dados, para manutenção repetível
Version 1.27.0
- Adicionado suporte à criação de PDF/A-1b: TPdf.SaveAsPdfA salva qualquer documento aberto como arquivo em conformidade com PDF/A-1b ao pós-processar o PDF base com uma atualização incremental que injeta um stream de metadados XMP, um OutputIntent ICC sRGB e um catálogo de documento atualizado — tudo sem exigir APIs extras da DLL. Funciona em qualquer plataforma suportada pelo PDFium Delphi Component
- Adicionado TPdf.SaveAsPdfAToStream para saída PDF/A em memória
- Adicionado TPdf.ValidatePdfA: verifica se um PDF aberto está em conformidade com PDF/A (marcadores XMP pdfaid, OutputIntent com perfil ICC embutido, criptografia) e retorna um resultado estruturado com o nível de conformidade detectado e um conjunto de problemas específicos encontrados
- Adicionada a propriedade TPdf.PdfAConformance: retorna o nível de conformidade do documento atualmente aberto (pac1b, pac1a, pac2b, pac3b, pacNone ou pacUnknown) sem precisar chamar ValidatePdfA explicitamente
- Novos tipos exportados: TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions (na nova unit FPdfPdfa.pas)
- SaveAsPdfA suporta um perfil ICC personalizado via TPdfASaveOptions.IccProfileData; quando deixado vazio, o perfil interno sRGB IEC61966-2.1 (HP/Microsoft, 3144 bytes) é usado automaticamente
- Substituiu a referência HTML monolítica por um sistema de ajuda web reestruturado: 302 páginas individuais de entradas da API (uma por propriedade, método, evento e função global) cobrindo TPdf e TPdfView, cada uma com descrição completa, tabela de parâmetros, exemplo de código Delphi e links See Also
- Adicionado Navigation.html: um índice abrangente de navegação da API em uma única página, organizado em seis seções (propriedades/métodos/eventos de TPdf, propriedades/métodos/eventos de TPdfView, funções globais), com uma grade flex de 5 colunas para varredura rápida
- TPdf.html e TPdfView.html reconstruídos como páginas compactas de visão geral de componentes, mantendo as seções de referência de tipos (Types, Constants, Global Variables) e direcionando para as páginas de entrada individuais de todos os membros
- Adicionada busca em texto completo via Search.js com correspondência incremental do lado cliente em todas as 312 páginas indexadas
- Atualizadas em todo o site as barras de navegação para apontar para Navigation.html
Version 1.26.0
- Adicionado Demo/Lazarus/BatchExport, a portabilidade LCL do demo Delphi BatchExport da v1.14.0. Mesmo conjunto de recursos: exportação multi-arquivo de PDF -> JPG com progresso geral por arquivo, progresso atual por página, entradas de DPI / qualidade / senha, e um lote cancelável cooperativamente baseado em IPdfCancellationToken. A pasta de saída é aberta no gerenciador de arquivos da plataforma quando a extração termina com sucesso
Version 1.25.0
- Adicionada reutilização de páginas via Form XObject ao TPdf, habilitando fluxos de marca d’água, sobreposição de modelos e “carimbar uma página sobre muitas”: CreateXObjectFromPage fabrica um handle reutilizável a partir de qualquer página de outro documento; InsertFormObjectFromXObject insere UMA cópia da página encapsulada na página atual. Retorna o FPDF_PAGEOBJECT inserido para que o chamador possa posicionar / escalar / rotacionar com FPDFPageObj_SetMatrix e os auxiliares TPdfMatrix introduzidos na v1.9.0
- A nova classe Pascal TPdfXObject encapsula o handle FPDF_XOBJECT do PDFium e o fecha automaticamente em seu destrutor, eliminando a cerimônia manual de FPDF_CloseXObject
- Expandidas as suítes de regressão de Delphi e Lazarus para 147 casos cada, e a suíte de C++Builder para 123 casos, cobrindo contratos de criação de handle e inserção de objetos de página
Version 1.24.0
- Adicionado TPdf.RenderPageProgressive — uma variante cancelável de RenderPage que dirige o loop de renderização progressiva do PDFium e consulta um IPdfCancellationToken da v1.7.0 entre as iterações, de modo que renderizações longas em alta DPI possam abortar no meio da página em vez de bloquear o chamador até a conclusão
- Retorna um valor TPdfProgressiveStatus: prsDone, prsCancelled ou prsFailed. Passe AToken = nil para renderizar até a conclusão sem nunca pausar (sem possibilidade de prsCancelled)
- Usa o mesmo caminho rápido zero-copy introduzido na v1.21.0 — o PDFium renderiza diretamente no DIB do TBitmap de destino. O mesmo fallback legacy se aplica quando o DIB não pode ser encapsulado
- Expandidas as suítes de regressão de Delphi e Lazarus para 145 casos cada, e a suíte de C++Builder para 121 casos, cobrindo nil-token (completa), token pré-cancelado (prsCancelled) e equivalência de pixels com o RenderPage síncrono em um token ativo
Version 1.23.0
- Adicionados seis novos métodos de TPdfView que expõem às aplicações a seleção de texto em widgets de formulário e Undo/Redo do PDFium: GetSelectedFormText retorna o texto atualmente selecionado dentro do widget de formulário em foco; SelectAllFormText seleciona todos os caracteres; FormUndo / FormRedo / FormCanUndo / FormCanRedo dirigem o histórico de edição do widget em foco. As APIs PDFium subjacentes já estavam vinculadas, mas não tinham ponto de entrada de alto nível. Todos os seis fazem short-circuit com segurança quando a view está inativa ou o documento não tem um widget AcroForm em foco
- Expandidas as suítes de regressão de Delphi e Lazarus para 142 casos cada, e a suíte de C++Builder para 119 casos, cobrindo o contrato sem-formulário-sem-foco para cada novo método
Version 1.22.0
- Adicionados wrappers de composição de páginas ao TPdf: ImportPagesByIndex recebe um array de índices baseado em zero para copiar páginas específicas de um documento de origem; ImportNPagesToOne retorna um TPdf novo cujas páginas são compósitos N-up deste documento; MovePages reordena páginas in-place. As APIs PDFium subjacentes já estavam vinculadas, mas não tinham ponto de entrada amigável ao Pascal
- ImportPagesByIndex aceita um array vazio para importar todas as páginas da origem (equivalente a passar nil no nível da ABI C)
- Expandidas as suítes de regressão de Delphi e Lazarus para 136 casos cada, e a suíte de C++Builder para 115 casos, cobrindo importação de subconjunto, importação de documento inteiro, reordenação de páginas e compósito N-up
Version 1.21.0
- Melhorou o desempenho de renderização ao mudar TPdf.RenderPage / TPdf.RenderTile (e os auxiliares correspondentes de TPdfView) para um caminho de saída zero-copy. O PDFium agora escreve diretamente no buffer DIB do TBitmap de destino em vez de em um buffer interno que era então copiado linha por linha, economizando uma cópia de memória de largura x altura x 4 bytes por renderização. A melhoria é mais perceptível em alta DPI (painéis de miniaturas, exportação em qualidade de impressão, exportação em lote)
- O caminho legado por scanline é mantido como fallback de segurança para o caso improvável de o DIB de destino não poder ser encapsulado (dimensões extremas, stride incomum, OOM). O comportamento é byte-idêntico entre os dois caminhos, apenas mais lento no fallback
- Expandidas as suítes de regressão de Delphi e Lazarus para 132 casos cada, e a suíte de C++Builder para 112 casos, cobrindo o upgrade pf32bit do bitmap do chamador, round-trip de dimensões e um teste de sanidade de stride com bitmap grande
Version 1.20.0
- Adicionado destaque de resultados de busca ao TPdfView: HighlightSearchText(Text, MatchCase, MatchWholeWord) varre a página atual da view e retorna o número de correspondências encontradas, pintando uma máscara HighlightColor sobre cada correspondência a cada redesenho. ClearHighlight remove os destaques; trocar a view para uma página diferente os limpa automaticamente, já que as correspondências são específicas da página
- HighlightColor tem como padrão clYellow e é publicada para que as aplicações possam tematizar o destaque para combinar com sua paleta de UI
- Expandidas as suítes de regressão de Delphi e Lazarus para 129 casos cada, e a suíte de C++Builder para 109 casos, cobrindo cor padrão, round-trip de cor, “correspondências reais de palavras da fixture” contra a string do sample.pdf e o contrato “palavra ausente retorna zero correspondências”
Version 1.19.0
- Adicionada a propriedade FitMode ao TPdfView com quatro valores: pfmNone (zoom manual), pfmActualSize (100%), pfmFitPage (a página inteira cabe no viewport) e pfmFitWidth (largura da página igual à largura do viewport). O modo de ajuste ativo é reaplicado automaticamente em Resize e quando a página atual muda, então documentos longos com tamanhos de página mistos permanecem perfeitamente enquadrados
- Definir Zoom diretamente cancela o modo de ajuste ativo (FitMode volta para pfmNone), correspondendo à convenção padrão de visualizadores de PDF onde digitar um valor de zoom sai de Fit Page / Fit Width
- O padrão é pfmNone para que as aplicações existentes mantenham seu comportamento de zoom explícito
- Expandidas as suítes de regressão de Delphi e Lazarus para 124 casos cada, e a suíte de C++Builder para 106 casos, cobrindo valor padrão, round-trip do modo, fit-page produzindo um zoom real em um documento carregado, e zoom-manual-cancela-modo-de-ajuste
Version 1.18.0
- Adicionada a propriedade PageColor ao TPdfView, desacoplando o fundo da página PDF renderizada do Color do controle circundante. O padrão é clWhite, então as páginas PDF agora renderizam como branco-papel independentemente do tema do aplicativo host. Visualizadores em modo escuro agora podem manter a área de rolagem escura enquanto deixam a página PDF real branca (ou qualquer cor escolhida pelo aplicativo)
- Mudança de comportamento: aplicações que costumavam definir TPdfView.Color para recolorir a página PDF agora devem definir PageColor. A experiência padrão melhora para o caso comum (páginas brancas em fundos de controles tematizados) sem qualquer alteração de código
- Expandidas as suítes de regressão de Delphi e Lazarus para 120 casos cada, e a suíte de C++Builder para 103 casos, cobrindo valor padrão e round-trip de cor
Version 1.17.0
- Adicionados toggles de bloqueio de entrada do usuário ao TPdfView para que aplicações que incorporam o visualizador em quiosques, painéis de visualização ou contextos somente leitura possam desabilitar gestos de navegação sem subclassificar: AllowUserPageChange controla os novos atalhos de teclado PgUp / PgDn / Ctrl+Home / Ctrl+End; ChangePageOnMouseScrolling controla os novos saltos de página com wheel-up / wheel-down; AllowUserTextSelection está reservado para o futuro caminho de seleção de texto por arrasto do mouse. Todos os três têm padrão True para que aplicações existentes atualizem sem mudança comportamental
- A navegação de páginas por roda do mouse ignora Ctrl+wheel para que as aplicações possam manter Ctrl+wheel reservado para zoom
- Expandidas as suítes de regressão de Delphi e Lazarus para 118 casos cada, e a suíte de C++Builder para 101 casos, cobrindo valores padrão e round-trip de toggle
Version 1.16.2
- Expandida a cobertura de regressão de TPdfView para cliques em links de anotação quando a página da view difere da página associada do TPdf, usando um caminho real de clique de mouse headless em Delphi, Lazarus e C++Builder
- As suítes Delphi e Lazarus agora executam 114 casos cada, e C++Builder agora executa 99 casos
Version 1.16.1
- Corrigido o tratamento de cliques de link no TPdfView para que as ações automáticas de anotação e de link da web usem a página atualmente exibida pelo visualizador, mesmo quando o componente TPdf associado está estacionado em uma página diferente
- Fortalecido o TPdfThumbnailView contra referências Pdf pendentes quando o componente TPdf vinculado é destruído
- Adicionada cobertura de regressão para o tempo de vida de referências de miniaturas; as suítes Delphi e Lazarus agora executam 113 casos cada, e C++Builder agora executa 98 casos
- Sincronizados README, documentação de testes, conteúdo de busca/índice do HTML Help e saídas geradas de pacote C++ com as atualizações de integração da v1.7.0 até v1.16.0
Version 1.16.0
- Adicionado um novo demo Delphi PrintDialog (Demo/Delphi/PrintDialog) focado em impressão N-up (1 / 2 / 4 / 9 páginas por folha) com filtragem de páginas ímpares / pares, renderização em escala de cinza e bordas de célula opcionais de 1 pixel. É um pequeno complemento deliberado ao demo PrintPDF existente, que já cobre visualização, arquivos recentes, zoom e escala
Version 1.15.0
- Adicionado um novo componente TPdfThumbnailView (unit FPdfThumbnail) que renderiza uma miniatura de página por linha em um painel lateral rolável com destaque de hover e seleção, além de navegação por clique. Projetado para ficar ao lado de um TPdfView para que os usuários finais possam navegar por um documento longo por página
- O componente é registrado na aba da paleta losLab ao lado de TPdf e TPdfView; propriedades-chave: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor e o evento OnPageClick
- Expandidas as suítes de regressão de Delphi e Lazarus para 112 casos cada, e a suíte de C++Builder para 97 casos, cobrindo padrões, round-trip de tamanho de miniatura, clamp de valores extremos, round-trip de cor e atribuição de handler de evento
Version 1.14.0
- Adicionado um novo demo Delphi BatchExport (Demo/Delphi/BatchExport) mostrando como converter muitos arquivos PDF em JPG numa única passagem usando TPdf.LoadCustomDocument para carregamento em stream, IPdfCancellationToken para cancelamento cooperativo e barras de progresso geral por arquivo + atual por página. O demo usa uma instância TPdf por arquivo (o próprio PDFium não é thread-safe) e abre a pasta de saída no Explorer quando a extração termina com sucesso
Version 1.13.0
- Adicionado um overlay de UI de renderização assíncrona ao TPdfView através de três novas propriedades: AsyncRendering, LoadingText e LoadingColor. Quando AsyncRendering é True, o caminho de pintura de página única desenha um pequeno indicador “Loading...” sobre a página renderizada, para que aplicações que usam seu próprio worker para renderizações longas compartilhem uma indicação visual consistente
- Os padrões preservam o comportamento existente: AsyncRendering é False, então aplicações que não optarem por ele não verão mudança visual
- A documentação esclarece que o próprio PDFium não é thread-safe — descarregar a renderização para um worker de fato requer que o chamador mantenha um TPdf por worker; o próximo demo de batch-export mostra esse padrão
- Expandidas as suítes de regressão de Delphi e Lazarus para 106 casos cada, e a suíte de C++Builder para 93 casos, cobrindo valores padrão e o round-trip de três propriedades
Version 1.12.0
- Adicionada manipulação de links por clique ao TPdfView. A nova propriedade LinkOptions controla o comportamento automático para os quatro tipos de ação de link do PDF: goto (salto de página), URI (ShellExecute), launch (ShellExecute) e GotoR embutido (reservado). Os padrões habilitam loAutoGoto e loAutoOpenURI; loAutoLaunch e loAutoEmbeddedGoto permanecem desligados para que um clique acidental não execute um programa arbitrário
- Adicionados os eventos OnAnnotationLinkClick e OnWebLinkClick que disparam antes de qualquer ação automática e permitem que as aplicações inspecionem o link, marquem-no como Handled ou o redirecionem (por exemplo, para um prompt de segurança)
- A detecção de clique de link é executada apenas quando o gesto é um clique em vez de um arrasto, usando uma âncora de MouseDown nova, de modo que gestos de panorâmica continuam fluindo pelo caminho de rolagem existente sem alterações
- Expandidas as suítes de regressão de Delphi e Lazarus para 102 casos cada, e a suíte de C++Builder para 91 casos, cobrindo LinkOptions padrão, round-trip de set e atribuição de handler de evento
Version 1.11.0
- Adicionado polimento visual ao TPdfView: as propriedades PageShadowSize, PageShadowColor e PageBorderColor pintam uma sombra opcional sob o retângulo da página e uma borda de um pixel ao seu redor. Os padrões preservam a aparência plana anterior (PageShadowSize = 0; a borda é desenhada no clBlack padrão, mas se mistura ao fundo branco padrão até que os chamadores mudem as cores)
- Adicionada uma propriedade SmoothScroll como flag opt-in para futura animação incremental de rolagem; a propriedade faz round-trip hoje e está conectada para que aplicações possam persistir a preferência, enquanto o lado da renderização ainda usa o comportamento de rolagem imediata existente
- Expandidas as suítes de regressão de Delphi e Lazarus para 98 casos cada, e a suíte de C++Builder para 89 casos, cobrindo valores padrão, round-trip de propriedade e o clamp de tamanho de sombra negativo
Version 1.10.0
- Adicionada inserção direta de imagens através de novas sobrecargas de TPdf.AddImage e TPdfView.AddImage que recebem um caminho de arquivo ou um TBitmap, além do AddPicture baseado em TPicture existente. AddImage(FileName) reconhece qualquer formato registrado com as units gráficas VCL ou LCL (BMP, PNG via a unit PngImage, JPG, etc.) e segue pelo mesmo pipeline que AddPicture, de modo que o comportamento é idêntico
- AddImage(TBitmap) ignora o intermediário TPicture, o que simplifica chamadores que já possuem um TBitmap proveniente de renderização ou trabalho de geração em lote
- Expandidas as suítes de regressão de Delphi e Lazarus para 92 casos cada, e a suíte de C++Builder para 84 casos, cobrindo inserção de bitmap, limites de objeto de página, rejeição de bitmap nil e carregamento de arquivo BMP
Version 1.9.0
- Adicionado suporte de alto nível a matrizes de transformação através da nova classe TPdfMatrix na unit FPdfMatrix. TPdfMatrix encapsula o FS_MATRIX do PDFium com uma API OO para Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew e Multiply, adequada para compor transformações antes de entregá-las a FPDFPageObj_SetMatrix e APIs PDFium semelhantes
- TPdfMatrix.Multiply faz um snapshot correto dos seis elementos da matriz antes de calcular os novos valores das linhas, corrigindo um problema latente em que implementações Pascal alternativas sobrescrevem elementos anteriores durante a mesma chamada e produzem resultados incorretos para qualquer composição além de translação pura
- Expandidas as suítes de regressão de Delphi e Lazarus para 88 casos cada, e a suíte de C++Builder para 81 casos, cobrindo identidade, reset, translate / scale / flip, ordem de composição pós-multiplicativa e o caso de regressão de Multiply
Version 1.8.0
- Adicionado carregamento de stream sob demanda através do novo método TPdf.LoadCustomDocument(AStream, AOwnsStream) e da classe auxiliar TPdfStreamAdapter, apoiados pelo FPDF_LoadCustomDocument do PDFium. O PDFium agora lê blocos do TStream fornecido apenas quando necessário, então PDFs muito grandes ou remotos não exigem mais uma cópia em memória feita antecipadamente
- Adicionada propriedade opcional de posse do stream: passar AOwnsStream = True entrega o tempo de vida do TStream ao TPdf, que o libera quando UnloadDocument é executado
- Expandidas as suítes de regressão de Delphi e Lazarus para 79 casos cada, e a suíte de C++Builder para 75 casos, cobrindo carregamento via streaming com TFileStream, limpeza de stream possuído e o contrato de stream de propriedade externa sobrevivendo ao unload
Version 1.7.0
- Adicionadas primitivas cooperativas de cancelamento assíncrono na nova unit FPdfAsync, expondo IPdfCancellationToken / IPdfCancellationTokenSource e um singleton reutilizável PdfNoCancellationToken, para que fluxos de renderização e exportação de longa duração possam suportar a semântica cancelar-pela-UI de forma limpa
- Adicionado um auxiliar leve TPdfFuture<T> que executa um worker em uma thread de fundo e posta o envelope TPdfFutureResult<T> de volta para a thread principal, distinguindo casos de sucesso, cancelamento e falha
- Expandidas as suítes de regressão de Delphi e Lazarus para 76 casos cada, e a suíte de C++Builder para 73 casos, com cobertura compartilhada de estado de cancelamento, cancelamento idempotente, fan-out de callbacks e registro pós-cancelamento
Version 1.6.10
- Adicionado acesso de alto nível via TPdf.PrintPageRanges à preferência de intervalo de páginas de impressão do visualizador PDF, retornando intervalos de páginas baseados em um para o código da aplicação
- Adicionados TPdf.SetFormFieldFlags / SetFormFieldFlagsAt e auxiliares correspondentes em TPdfView, para que as aplicações possam atualizar flags de campo AcroForm através da API pública, incluindo cobertura de flags de senha e multi-seleção
- Fortalecida a cobertura ABI do binding PDFium para FPDF_DWORD dimensionado para Windows, callbacks FPDF_FILEACCESS e campos de slot do embedder V8
Version 1.6.9
- Adicionados bindings de baixo nível de renderização Skia para as APIs recém-exportadas FPDF_RenderPageSkia e FPDF_FFLDrawSkia nas DLLs PDFium padrão e V8 incluídas
- Expandidas as verificações de cobertura de binding pública para que o carregamento de DLL padrão e V8 agora verifique os pontos de entrada de renderização Skia ao lado das verificações de capacidade V8/XFA existentes
Version 1.6.8
- Adicionados TPdf.SetTextPositions e TPdfSingleArray para definir posições por caractere em objetos de texto existentes por meio da API FPDFText_SetPositions recém-exportada
- Promovido FPDFText_SetPositions a um binding obrigatório para as DLLs PDFium atualmente incluídas, ao mesmo tempo em que se confirma que os pontos de entrada de renderização Skia permanecem indisponíveis porque as DLLs ainda não os exportam
- Expandidas as suítes de regressão Delphi, C++Builder e Lazarus para 65 casos cada com cobertura de posicionamento de texto
Version 1.6.7
- Adicionado acesso de alto nível via TPdf às ações JavaScript de name-tree do documento, retornando nomes e scripts de ação através de JavaScriptAction e JavaScriptActions
- Adicionado TPdf.FileIdentifier para ler IDs de trailer permanentes e variáveis como TBytes binário, sem o byte terminador do PDFium
- Adicionados TPdf.PageBox, GetPageBox e SetPageBox para MediaBox, CropBox, BleedBox, TrimBox e ArtBox na página atual
- Confirmado que as DLLs PDFium atualmente incluídas deixam apenas os pontos de entrada de renderização Skia indisponíveis em tempo de execução, pois essas exportações não estão presentes
- Expandidas as suítes de regressão Delphi, C++Builder e Lazarus para 64 casos cada com cobertura de JavaScript de documento, ID de trailer e page-box
Version 1.6.6
- Adicionado suporte em tempo de execução para a DLL PDFium habilitada para V8 incluída. Definir EnableV8Engine antes do carregamento agora seleciona pdfium.v8.dll a partir da árvore DLLs\Win32 ou DLLs\Win64 e expõe os bindings exclusivos de V8/XFA quando a DLL carregada os fornece
- Adicionados V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags e bindings opcionais de baixo nível para FPDF_BStr_*, FPDF_GetRecommendedV8Flags e FPDF_GetArrayBufferAllocatorSharedInstance
- FPDFText_SetPositions tornado opcional para que o PDFium Delphi Component continue carregando com DLLs PDFium que não exportam esse setter experimental de posição de texto
- Expandidas as suítes de regressão Delphi, C++Builder e Lazarus para 61 casos cada com cobertura de capacidade de DLL padrão e DLL V8