Registro de alterações
Histórico de versões
« Voltar ao índice da documentação
Histórico de versões da biblioteca PDFlibPas. As entradas são listadas da mais recente para a mais antiga; cada versão segue o versionamento semântico conforme a política de lançamento do projeto.
Última versão publicada
- Versão mais recente: v3.75.6; Data de lançamento: 2026-06-23
Version 3.333.0
Added
- Inspecção de revisões incrementais. Uma assinatura cobre os bytes da revisão em que foi escrita, e tudo o que é anexado depois é uma atualização separada cujo conteúdo decide se a assinatura ainda se mantém para o documento tal como está agora.
GetDocumentRevisionCount,GetDocumentRevisionStarteGetDocumentRevisionEnddispõem essas revisões, eGetSignatureRevisionIndexdiz em qual uma assinatura termina GetDocumentRevisionKindreporta o que uma atualização fez, como o mais abrangente dos objetos que tocou: contabilística, material de validação, um carimbo de data do documento, uma assinatura, um campo de formulário, uma anotação ou conteúdo do documento. Adicionar material de validação para a validação de longo prazo, portanto, já não parece editar o documentoGetDocumentRevisionChangeslista cada objeto que uma atualização adicionou, alterou ou eliminou, juntamente com o que cada um é e, para um dicionário alterado, que chaves efetivamente diferemGetDocumentRevisionsCompletereporta se todo o histórico era recuperável. Uma cadeia que esteja quebrada, cíclica ou mais longa do que o leitor seguirá deixa as atualizações mais antigas por ver, e as contagens são então um limite inferior em vez de uma resposta- Um objeto cuja versão anterior não pode ser lida, ou cujo corpo de fluxo nunca foi comparado, é reportado como indeterminado em vez de inofensivo: uma atualização que reescreve uma página deixando o seu dicionário intacto não é confundida com um novo empacotamento
Version 3.332.0
Added
ApplyPAdESLongTermValidationpromove um PDF já assinado a PAdES-B-LT numa só chamada. Constrói o caminho de certificados do signatário a partir da própria assinatura, reúne material OCSP e CRL para cada elo através dos endereços que os certificados nomeiam, e escreve os certificados e os dados de revogação no document security store com uma entrada VRI para a assinatura, numa única atualização incremental.ApplyPAdESLongTermValidationToStreamescreve o resultado num fluxo em vez de num arquivo- O comportamento é configurável através de uma máscara de opções
PADES_LTV_*: se escrever a entrada VRI, se consultar os respondedores OCSP, se recorrer às CRL, se seguir os endereços do emissor para completar o caminho e se ignorar a revogação para uma raiz autoemitida - Um nome de campo vazio processa cada assinatura numa só revisão; um campo nomeado processa apenas esse
GetPAdESLTVCertificateCount,GetPAdESLTVCRLCount,GetPAdESLTVOCSPCounteGetPAdESLTVErrorreportam o que a última chamada reuniu e porquê parou a meio, de modo que um resultado parcial sobre um respondedor inalcançável é visível em vez de silencioso- Material idêntico a algo já preparado é escrito uma só vez e referenciado por cada assinatura que dele precisa, e uma assinatura sem certificado legível é reportada em vez de apresentada como uma promoção bem-sucedida
Version 3.331.0
Added
- Uma assinatura transporta o seu próprio caminho de certificação, pelo que o material de que um perfil de validação de longo prazo precisa pode ser lido apenas do arquivo assinado.
GetSignatureSignerCertificateDER,GetSignatureEmbeddedCertificateCounteGetSignatureEmbeddedCertificateDERdevolvem os certificados que uma assinatura incorpora, eGetSignatureCertificateChainLengtheGetSignatureCertificateChainDERordenam-no num caminho do signatário para o exterior GetSignatureContentsHashHexdevolve a chave pela qual uma entradaAddPAdESDSSVRIé endereçada, calculada a partir da própria assinatura- O certificado do signatário é reconhecido quer a assinatura o identifique por emissor e número de série quer por identificador de chave de sujeito, e um caminho pára no último emissor que a assinatura realmente transporta, em vez de fingir estar completo
Fixed
- O leitor de DER rejeita um comprimento de elemento declarado maior do que os dados em vez de deixar um valor quase máximo transpor a sua verificação de limites, e a caminhada pelas extensões do certificado já não lê para além do fim de um certificado truncado ou demasiado longo. Ambos são alcançáveis a partir de um documento forjado, pelo que os acessores acima se mantêm seguros com entrada não fidedigna
- Os acessores de assinatura leem o documento com um identificador partilhado, pelo que respondem enquanto um verificador ou visualizador já tem o arquivo aberto, em vez de falhar como se a assinatura estivesse ausente
Version 3.330.0
Added
- OCSP status requests.
BuildOCSPRequestencodes an RFC 6960 request for a certificate and its issuer,FetchOCSPResponseposts it to the responder and returns the reply, andAddPAdESDSSOCSPFromCertificatesdoes both and files the result in the document security store - The responder address is optional: when it is omitted, the one the certificate itself names is used, so a caller that has the certificate chain needs no further configuration
- A certificate pair that does not actually belong together is refused before anything is sent, instead of producing the "unknown" answer such a request earns from the responder and which reads like a revocation problem
- Only a successful response is stored; a responder that answered
tryLaterorunauthorizedis reported throughGetTimeStampErrorrather than filed as if it were a status answer
Version 3.329.0
Fixed
- Reusing one result array across successive enumeration calls no longer leaks the strings held in the array slots that a later call does not fill. This affected the documented "call once for the count, resize, call again" pattern whenever a later call returned fewer items than the array could hold, and the stranded text accumulated for the lifetime of the process
- Affected entry points include
EnumPageContentStates,EnumPageContentStatesEx,EnumAttachments,EnumDocumentFonts,EnumPageElements,EnumNamedDestinations,EnumSignatures,EnumFormFields,GetFormValues,GetTextInAreaEx, and the text-search, form-field-action and certificate enumeration calls
Changed
- The result-array parameter of those calls is now passed as
varrather thanout. Existing Delphi and C++Builder code compiles and links unchanged; the only visible difference is that array slots past the returned count keep whatever they held before instead of being silently blanked
Version 3.328.0
Added
- Certificates now tell the library where their status can be checked:
GetCertificateOCSPURLs,GetCertificateIssuerURLsandGetCertificateCRLURLsread the responder, issuing-certificate and CRL addresses out of a certificate, so assembling long-term validation material no longer requires knowing where a given authority publishes FetchRevocationMaterialdownloads material from those addresses, andAddPAdESDSSCRLFromURLandAddPAdESDSSCertificateFromURLdownload and file it in the document security store in one step- Addresses that name no fetchable resource, such as a directory name or a mail address, are skipped rather than reported as something that can be downloaded
Version 3.327.0
Added
- A built-in RFC 3161 time-stamp client.
SetTimeStampServerandSetTimeStampOptionsconfigure the authority, hash algorithm, requested policy, nonce use and timeout;FetchTimeStampTokenreturns a TimeStampToken for any digest ApplyPAdESSignatureTimeStampcompletes a PAdES-B-T signature in one call: it hashes the signature value, obtains the token from the configured authority and attaches it as the signature time-stamp attribute, replacing the previous three-step exchange the caller had to wire up itself- When a nonce is used the token is checked to carry the same value back, so a replayed or substituted response is rejected instead of being embedded in the document
GetTimeStampStatusandGetTimeStampErrorreport the authority's own status and failure text, so a refused request explains itself
Version 3.326.0
Added
- The PDFium renderer now writes the same image formats the GDI+ and Cairo renderers write.
RenderPageToFile,RenderPageToStreamandRenderPagesToFilesaccept BMP (option 0), JPEG (1), PNG (5), GIF (6), TIFF (7) and G4 TIFF (10) afterSelectRenderer(3), instead of accepting BMP alone - The JPEG quality set through
SetJPEGQualityand the active TIFF compression settings now apply to PDFium output as well, so switching renderers no longer changes the encoding of the file that is produced
Fixed
- Requesting PNG or any other non-BMP format from the PDFium renderer used to return 0 and leave an empty file behind. Applications that offered a renderer choice silently produced unreadable output whenever PDFium was the selected engine
- Asking the PDFium renderer for a metafile format it cannot produce (WMF, EMF, EPS, EMF+, HTML5) now reports which formats are available through
LastRenderErrorinstead of naming BMP as the only option
Version 3.324.0
Changed
- The PDFium renderer now feeds the document to the engine through a streaming data source instead of one resident buffer. Rendering and printing previously serialised the document and then copied it again into a string, so every page cost twice the document size in memory; the copy is gone and PDFium reads only the blocks it needs
- Rendering a page range to files parses the document once for the whole batch instead of once per page, so a long range no longer re-reads the entire file for every image it writes
- Older PDFium builds that do not export the streaming entry point keep working unchanged through the in-memory path
Fixed
- The renderer smoke test located the optional PDFium and Cairo libraries one directory too high and silently skipped both engines; it now finds them and exercises the real rendering paths
Version 3.323.0
Added
CreateValidationReporteSaveValidationReportproduzem um relatório estruturado de validação PDF/A e PDF/UA-1 em XML ou JSON. Cada achado traz o id da regra, a norma à qual pertence, um nome curto da regra, a cláusula ISO que ela impõe, uma severidade e a quantidade de objetos afetados, e o relatório encerra com estatísticas de aprovação/reprovação por norma e em nível de documento- Uma norma que não foi solicitada é reportada como
not-checkedem vez de como uma aprovação silenciosa, de modo que uma execução parcial não pode ser confundida com um atestado limpo de conformidade - Pipelines de build agora podem fazer gate por id de regra ou por cláusula ISO em vez de casar subcadeias no texto: a família de relatórios preflight renderiza primeiro um relatório humano e converte esse texto para JSON, HTML ou CSV, enquanto o relatório de validação é montado a partir da saída bruta das verificações e mantém os campos legíveis por máquina intactos
Version 3.322.0
Added
- A referência agora documenta os quatro tipos públicos declarados externamente usados na superfície do
TPDFlibque antes não tinham uma página dedicada:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoeTPDFlibWatermarkBase, completando a cobertura dos tipos públicos de evento, de logger, de resultado de enumeração e de marca d'água
Version 3.321.0
Added
- O
CheckDocumentPolicyavalia regras internas declarativas tais comoFonts.NotEmbedded = 0,Security.Encrypted = noouDocument.Pages <= 500contra o documento e reporta cada regra como aprovada ou reprovada com o valor real, transformando um portão de ingestão para editoras, arquivos e gráficas em configuração em vez de código de inspeção escrito à mão
Version 3.320.1
Fixed
- Desenhar texto em um modo PDF/A sem carregar uma fonte antes não falha mais: o PDF/A exige que cada programa de fonte esteja embutido, então o atalho implícito para uma fonte built-in era recusado e não deixava nenhuma fonte selecionada, e o
DrawTexte as demais chamadas de texto davam crash em vez de desenhar - O caminho de fonte implícito agora resolve uma face real embutível enquanto um modo PDF/A está ativo, então texto desenhado sem uma chamada explícita ao
AddTrueTypeFonté embutido e permanece conforme; uma chamada direta aoAddStandardFontainda é recusada em PDF/A - Em máquinas nas quais nenhuma face embutível possa ser resolvida, o desenho cai para as métricas built-in em vez de falhar e reporta a deficiência de conformidade através de
LastErrorCode605, então o arquivo pode ser capturado antes de ser publicado como conforme
Version 3.320.0
Added
- O
GetDocumentFeatureReportretorna um relatório estruturado de features em uma única chamada — metadados do documento, contagens de páginas e objetos, estado da criptografia, inventários de fontes e imagens, marcação e outlines, campos de formulário, assinaturas, anexos e a quebra de bytes por categoria — substituindo a dúzia de consultas separadas que um pipeline de catalogação ou ingestão antes precisava montar
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSorteSetCollectionItemValueconstroem portfólios PDF sobre os anexos existentes, então um conjunto de arquivos embutidos é apresentado como um pacote navegável com suas próprias colunas, ordem de sort e valores por arquivo em vez de uma lista simples de anexosGetCollectionVieweGetCollectionFieldCountreportam o modo de apresentação e o número de colunas declaradas de um portfólio carregado
Version 3.318.1
Fixed
- A opção 12 de extração de texto (ignorar texto rotacionado) agora descarta sequências rotacionadas independentemente da direção em que girem: um quarto de volta no sentido horário e um quarto de volta no sentido anti-horário costumavam ser tratados de modo diferente, então notas laterais de margem eram descartadas em uma direção e retornadas na outra
- A mesma opção mantém texto inclinado que apenas esteja cisalhado, tal como um itálico sintético, e a tolerância agora escala com o tamanho do texto e com a transformação da página, então títulos inclinados grandes não são mais descartados como se fossem rotacionados
Version 3.318.0
Added
- O
DecodeAllStreamsexpande in-place os fluxos comprimidos de um documento, então salvá-lo produz uma cópia cujos fluxos de conteúdo, metadados e estrutura podem ser lidos diretamente por ferramentas de diff, revisão forense e fluxos de suporte; imagens, fluxos de predição e fluxos de cross-reference mantêm sua codificação, e os fluxos de objetos são materializados primeiro para que nada se perca
Version 3.317.0
Added
SetTrappedeGetTrappeddeclaram e leem o estado de trapping do documento que o PDF/X exige, escrito como o nome/Trappedque a especificação exige em vez de como uma cadeia de textoSetOutputIntentSubtypeeGetOutputIntentSubtypereetiquetam a intenção de saída, então um perfil de cor carregado pode descrever uma condição de impressãoGTS_PDFXem vez da condição de arquivamentoGTS_PDFA1que os modos PDF/A criam
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyeGetEncryptEmbeddedFilesOnlyrestringem a criptografia AES aos arquivos embutidos: o documento abre e é renderizado em qualquer leitor sem prompt de senha enquanto seus anexos permanecem criptografados, o arranjo padrão para faturas, prontuários médicos e processos cujas capas são públicas mas cujo payload não é
Version 3.315.0
Added
- A opção 18 de extração de texto rotaciona sequências pintadas a 90, 180 ou 270 graus para a moldura de leitura horizontal e agrupa cada quarto de volta separadamente, então notas laterais de margem rotacionadas, cabeçalhos de tabela e rótulos de eixo de gráfico são extraídos como linhas legíveis em vez de se intercalarem com o texto na vertical ou serem descartados
Fixed
- O
DASetTextExtractionOptionsaceita a opção 16 (desenhifenização) e a opção 17 (separação de palavras por gap de caracteres) em vez de rejeitá-las, e o caminho de extração de acesso direto agora encaminha as opções 15, 16 e 17 para o extrator, então a remoção de réguas de underscore, a desenhifenização e a separação por gap de caracteres se aplicam a handles de arquivo do mesmo modo que se aplicam a um documento carregado
Version 3.314.0
Added
- O
GetFontHasToUnicodereporta se a fonte selecionada traz um mapeamento Unicode, e o inventário de fontes ganha um campoHasToUnicodecorrespondente por fonte e mais um resumoNoToUnicodeCount, então documentos podem ser verificados quanto a fontes seguras para extração e conversíveis para PDF/A-*u ou PDF/UA antes do processamento
Version 3.313.0
Added
- O
SetPDFAModeganha o modo 8 para PDF/A-2u (ISO 19005-2 Level U), o nível de conformidade que declara mapeamentos de texto Unicode sem permitir arquivos embutidos, completando a família PDF/A-2 junto aos modos 2b e 2a já existentes
Version 3.312.0
Added
GetObjectByPatheGetObjectByPathCountleem qualquer nó da árvore de objetos por meio de expressões de caminho tais comoRoot/Pages/Kids[0]/MediaBox[2]oupages[0]/Type— tipos, valores escalares, formas serializadas e contagens de elementos em uma única chamada, substituindo a caminhada manual de objetos para sondagens de metadados, verificações pontuais de conformidade e diagnósticos de suporte
Version 3.311.0
Added
- O
SetBlackPointCompensationdeclara a compensação de ponto preto (ON, OFF ou Default) para o desenho subsequente por meio do estado gráfico/UseBlackPtCompdo PDF 2.0, permitindo que a saída de pré-impressão e de prova fixe conversões ICC de tons escuros que antes eram privadas do visualizador; a versão do documento é elevada automaticamente e os modos PDF/A rejeitam o estado
Version 3.310.0
Added
SetCompressionLeveleGetCompressionLevelexpõem o nível deflate para cada compressão que a biblioteca realiza: 0 mantém o motor padrão acelerado por SIMD, 1 favorece o throughput e 9 comprime os arquivos ao mínimo- O
RecompressStreamsre-deflate todos os fluxos FlateDecode simples do documento selecionado no nível atual e mantém a codificação menor por fluxo, encolhendo documentos que foram originalmente escritos com uma configuração de compressão rápida sem tocar em seu conteúdo
Version 3.309.0
Added
SetObjectStreamModeeGetObjectStreamModeadicionam um controle de fluxo de objetos de três estados: desabilitar, gerar (padrão) ou preservar, no qual preservar mantém o agrupamento comprimido original do arquivo carregado e grava os contêineres literalmente, tornando conversões de arquivos PDF 1.5+ existentes mais baratas porque nada é desempacotado ou reagrupado
Changed
- No modo preservar, membros editados desde o carregamento são promovidos a objetos de nível superior para que suas mudanças sejam salvas, e qualquer membro comprimido restante seleciona automaticamente a forma de fluxo binário de cross-reference
Version 3.308.0
Added
- O
CheckDocumentStructureexecuta uma verificação de saúde estrutural em uma única chamada: todo objeto e fluxo é forçado através de seu decodificador, fluxos Flate simples são estritamente verificados contra o marcador final zlib de modo que dados truncados sejam capturados, e o relatório sinaliza trailers faltantes, catálogos e páginas não resolvíveis, manipuladores de criptografia não suportados e arquivos reparados por byte-scan com achados por objeto e uma linha de resumo
Version 3.307.0
Fixed
- Documentos danificados que usam fluxos de cross-reference agora reparados com sucesso: a reconstrução em bruto recupera os membros de fluxos de objetos comprimidos e, quando nenhuma palavra-chave de trailer existe em lugar algum do arquivo, sintetiza o trailer a partir do catálogo de documento alcançável mais recente, então um offset startxref quebrado não mais torna tais arquivos impossíveis de abrir
Version 3.306.0
Added
- O
ExportDocumentDatagrava as chaves de informação do documento, toda a árvore de bookmarks e os intervalos de rótulo de página como texto puro editável no formato de linhas dump_data clássico - O
ImportDocumentDataaplica o mesmo formato de volta — as chaves de informação são atualizadas, a árvore de bookmarks é reconstruída com níveis de aninhamento e páginas de destino, e os intervalos de rótulo de página são substituídos — habilitando a edição em massa de bookmarks e a migração de metadados entre documentos em uma única chamada em cada direção
Version 3.305.0
Added
- O
AuditDocumentSpacedecompõe o uso de bytes do documento por categoria — imagens, programas de fonte e dicionários, fluxos de conteúdo, form XObjects, fluxos de objetos, arquivos embutidos, metadados, árvore de estrutura, anotações, árvore de páginas e outros — com contagens de objetos, totais de bytes e percentuais, respondendo por que um arquivo é tão grande quanto é e qual otimização paga mais
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTexteGetStructTreeItemIntPropertyleem a árvore de estrutura de um documento marcado como uma lista achatada de itens em profundidade-primeiro — tipos de elemento (em bruto e com mapeamento de papel), texto alternativo e real, idioma, títulos, ids de conteúdo marcado, números de página e relações pai/filho
Changed
- O leitor de árvore de estrutura protege-se contra documentos danificados: ciclos de referência, números de objeto fora do intervalo e árvores aninhadas além de 64 níveis são cortados em vez de entrar em loop
Version 3.303.1
Fixed
- Carimbos translúcidos de underlay criados por
StampTexteStampImagenão mais deixam sua opacidade sangrar para dentro do conteúdo original da página — o estado de transparência agora está confinado ao próprio carimbo, então a página mantém sua opacidade total
Version 3.303.0
Added
- O
OverlayDocumentPagescarimba as páginas de outro documento aberto sobre as páginas do documento selecionado, uma página de origem por página de destino, acima ou por baixo do conteúdo existente — papel timbrado, fundos contínuos de página e modelos de formulário escaneados em uma única chamada - O esgotamento da origem é configurável: parar, percorrer em ciclo as páginas de origem, ou continuar repetindo a última página de origem; uma opção adicional impede que o carimbo seja ampliado além de seu tamanho natural
Changed
- Carimbos de documento são ajustados à CropBox da página de destino e colocados na vertical em páginas que trazem uma entrada
/Rotate, e cada página de origem é importada uma vez como um Form XObject compartilhado de modo que templates repetidos nunca dupliquem seus recursos
Version 3.302.0
Fixed
- Senhas AES-256 agora são processadas com SASLprep (RFC 4013) antes do hashing, então senhas contendo espaços não-ASCII, hífens suaves, caracteres de compatibilidade ou sequências combinatórias abrem corretamente no Acrobat e em outros leitores conformes
- A abertura de documentos AES-256 tenta primeiro a senha preparada padrão e cai para a forma legada em bytes, então arquivos escritos por versões anteriores com senhas não-ASCII continuam a abrir
Added
- O código de erro 604 reporta uma senha AES-256 rejeitada pelo SASLprep por conter pontos de código proibidos ou por violar as regras bidirecionais
Version 3.301.0
Added
- O
SplitDocumentToFilesfragmenta o documento selecionado em um lote de arquivos de saída com um número fixo de páginas cada, usando um placeholder de nome de arquivo%p
Changed
- A divisão em lote faz o parse do documento de origem uma vez e copia cada bloco a partir da mesma estrutura em memória, substituindo o re-parse completo repetido que um loop sobre
ExtractFilePagesexecuta para cada intervalo
Version 3.300.0
Added
- O
CollateDocumentsintercala páginas de vários documentos abertos no documento selecionado em rotação, tirando um número configurável de páginas de cada origem por rodada (A1, B1, A2, B2, …) - O
CollateDocumentsExaceita uma lista de intervalos de páginas por origem na qual intervalos decrescentes tais como3-1invertem uma origem, então passagens de scanner de frente e de verso invertido se intercalam em ordem de leitura em uma única chamada
Changed
- Intercalações importam cada origem por meio de um único mapa de objetos e intercalam por reordenação de páginas, então fontes e imagens compartilhadas dentro de uma origem são gravadas apenas uma vez independentemente do tamanho do grupo
Version 3.299.0
Added
SetDeterministicDocumentIDeGetDeterministicDocumentIDtrocam o identificador de arquivo do trailer para um valor reproduzível de modo que entradas idênticas produzam bytes de saída idênticos para cache de build, armazenamento endereçável por conteúdo e comparação de regressão em nível de byte- O
SetDocumentIDSeedfornece uma semente explícita para o identificador de arquivo reproduzível; sem uma semente, o identificador é derivado dos metadados do documento, do cabeçalho de versão e da contagem de páginas
Changed
- Identificadores de arquivo reproduzíveis são atualizados apenas em saves completos; atualizações incrementais e documentos criptografados mantêm seu identificador existente de modo que assinaturas e arquivos protegidos por senha continuem a abrir corretamente
Version 3.298.0
Added
AddLinkToArticleThreadeSetOutlineArticleThreadconectam hotspots de página e contornos a um segmento de artigo ou bead com ações Thread padrãoAddActionNextArticleThreadePDF_ACTION_BUILDER_THREADadicionam ações Thread a fluxos de trabalho de ações encadeadas, de formulário, de página e de documento
Changed
- Os destinos de ação Thread usam referências indiretas estáveis de segmento e bead e rejeitam índices inválidos sem alterar o contêiner de destino
- Os construtores de ações de campo de formulário rejeitam ações adicionais enquanto o modo PDF/A está ativo, preservando a proibição PDF/A de dicionários
/AAde campo e widget
Version 3.297.0
Added
- A referência de flat-DLL
DLagora documenta todos os pontos de entrada ANSI com sufixoA(char), adicionando 353 páginas de referência que espelham suas contrapartes Unicode com assinaturas precisasPAnsiCharDelphi econst char *C - Reconstruídas
BufferUtilities,DirectAccessFunctionalityeMiscellaneousFunctionscomo páginas de índice limpas de grupos de funções, orientadas pelo esquema compartilhado de categorias, corrigindo marcação quebrada, seções rotuladas incorretamente e chips ausentes - O índice de navegação e o índice de busca compartilhado agora cobrem toda a superfície do DLL para chamadores Unicode e ANSI
Fixed
- Removida a entrada obsoleta
SetLogger, que não tinha nenhum símbolo correspondente na origem; a propriedade documentada éLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoeRemoveAlternateImagefornecem autoria tipada e inspeção de variantes de imagem de exibição e impressão- Imagens alternativas podem ser associadas a um grupo de conteúdo opcional ou dicionário de associação, enquanto uma variante por imagem base pode ser selecionada como o padrão de impressão
Changed
- O renderizador integrado agora seleciona imagens alternativas de conteúdo opcional quando uma imagem base está oculta e honra o padrão de impressão em destinos de impressora
FindImagesagora registra XObjects de imagem alternativa alcançáveis a partir de recursos de página para que as variantes importadas recebam handles de imagem utilizáveis
Version 3.295.0
Added
AddArticleThreadcria navegação de artigo em conformidade com os padrões com metadados tipados, retângulos de página ordenados, links circulares de contas e matrizes de contas por páginaArticleThreadCount,GetArticleThreadInfoeGetArticleThreadBeadinspecionam fluxos de artigo criados ou importados com travessia limitada de ciclos de link danificados
Changed
DeletePagesagora remove fluxos de artigo que perdem todas as contas e repara os links circulares dos fluxos sobreviventes- O rastreamento de páginas excluídas agora retém referências estáveis de página indiretas para que a limpeza de outline e artigo não se desvie conforme o cursor da árvore de páginas se move
Version 3.294.0
Added
SearchTextBatchbusca múltiplas consultas de texto enquanto cada extração de página está residente e retorna o índice de consulta de origem baseado em zero com cada ocorrênciaSearchTextBatchEachfornece a mesma busca de passagem única por meio de um callback de streaming com relatórios de progresso e cancelamento
Changed
- A busca de texto de consulta única e em lote agora compartilha um único núcleo de correspondência, preservando a semântica de maiúsculas/minúsculas, palavra completa e intervalo de páginas enquanto evita extração de página repetida, dobramento de texto e trabalho de geometria de ocorrências
Version 3.293.1
Fixed
- A rasterização de mesh shading não falha mais ao compilar em nenhuma versão do Delphi, resolvendo
E2089 Invalid typecastem conversões de real para ponto flutuante no pintor GDI+ - A renderização paralela de páginas em lote agora compila no Delphi XE5 e XE6, onde
System.Threadingnão está disponível; toolchains mais antigas retornam ao caminho de renderização serial como em sistemas não-Windows - A sondagem de capacidades da impressora não gera mais um erro de tipos incompatíveis em versões antigas do Delphi, alinhando a chamada
SetPrintercom o restante do código de impressão - A enumeração do repositório de certificados agora compila no RAD Studio 10.3 Rio, que anteriormente abortava com um erro interno do compilador ao otimizar a rotina de enumeração
Version 3.293.0
Added
- Dicionários de associação de conteúdo opcional agora podem ser criados, atualizados e enumerados com políticas de compatibilidade
AnyOn,AllOn,AnyOffeAllOff - Expressões de visibilidade
/VEaninhadas em PDF 1.6 suportamAnd,OreNotpor meio de uma representação compacta de prefixo compartilhada por Delphi e C++Builder
Changed
- Escopos de conteúdo opcional, fluxos de conteúdo, páginas capturadas, imagens, campos de formulário e anotações agora aceitam um handle de grupo ou um handle de associação
- A renderização avalia primeiro expressões
/VEválidas e recorre a/OCGsmais/Ppara expressões malformadas ou não suportadas
Fixed
- Conteúdo opcional aninhado não pode mais tornar o conteúdo visível quando um grupo ou associação delimitadora está oculto
- Dicionários de associação sem grupos de conteúdo opcional efetivos agora deixam a visibilidade inalterada, conforme exigido pela especificação PDF
Version 3.292.0
Added
EnumAttachmentsagora relata datas de criação e modificação, checksums hexadecimais, relacionamentos de arquivo associado e números de objeto de especificação de arquivo para anexos de documento e de anotaçãoValidateAttachmentChecksumverifica um payload de anexo em relação ao seu checksum armazenado sob demanda, enquanto arquivos recém-embutidos agora recebem metadados de checksum automaticamente
Fixed
SetEmbeddedFileAFRelationshipagora aceita os mesmos índices baseados em 1 de arquivo embutido que o restante da API de anexos, incluindo documentos com anexo único
Version 3.291.0
Added
DeduplicateResourcesagora consolida fluxos duplicados exatos de imagem, Form, padrão, shading, função, perfil ICC, programa de fonte, CMap, CharProc Type 3, arquivo embutido, metadados e PostScript em um documento carregado- A deduplicação de recursos fornece flags de tipo independentes, análise de simulação, coleta opcional de órfãos e estatísticas detalhadas de hash, comparação, payload, referências e por categoria
Changed
- A detecção de duplicatas canoniza dicionários de fluxo completos independentemente da ordem das chaves, faz o hash de cada payload candidato uma vez com SHA-256 e confirma buckets correspondentes byte a byte antes de redirecionar referências
- Grupos de equivalência exata retêm o número de objeto e geração mais baixos para saída determinística, enquanto ciclos de objetos diretos malformados e diferenças semânticas de dicionário permanecem não mesclados
Version 3.290.0
Changed
PurgeUnusedResourcesagora calcula um fechamento de dependência transitiva entre padrões de ladrilho, glifos Type 3, estados de aparência de anotação, grupos de máscara suave ExtGState, imagens, shadings e espaços de cor aninhados- As opções padrão de limpeza agora ativam análise de dependência de padrão, Type 3, aparência, máscara suave e imagem, com flags independentes para chamadores que precisam de uma varredura mais restrita
- Programas de conteúdo aninhados e entradas de dependência são armazenados em cache, escopos de recursos compartilhados são privatizados antes da poda e ciclos malformados são limitados por guardas de fluxo ativo e profundidade
Fixed
- Recursos de página usados apenas por espaços de cor de imagem, bases Indexed, alternativas Separation ou DeviceN, espaços subjacentes Pattern, alternativas ICCBased ou dicionários de shading não são mais removidos como não utilizados
- Recursos usados apenas por CharProcs Type 3, células de padrão de ladrilho, aparências de anotação ou grupos de máscara suave de transparência não são mais removidos do seu próprio escopo ou herdado
Version 3.289.0
Added
PurgeUnusedResourcesagora remove recursos de página nomeados que não são referenciados por camadas de conteúdo selecionadas e pode retornar estatísticas detalhadas por categoria- A limpeza de recursos agora suporta intervalos de páginas, relatórios de simulação, progresso e cancelamento, análise recursiva de Form XObject, remoção de ProcSet obsoleto e coleta opcional de objetos órfãos
Changed
- A análise de recursos agora segue a sensibilidade a maiúsculas/minúsculas de nomes PDF, recursos de Form herdados, espaços de cor de imagem inline personalizados e todas as sete categorias padrão de recursos
- Programas de Form repetidos são armazenados em cache, conjuntos de recursos usados utilizam busca ordenada e entradas de dicionário são removidas em ordem decrescente para desempenho previsível em documentos grandes
Fixed
- A remoção de entradas de dicionário agora invalida índices de chaves de dicionários grandes para que buscas posteriores não possam retornar entradas obsoletas
- Fluxos malformados e operadores desconhecidos preservam seu escopo de recursos completo por padrão, enquanto dicionários de recursos compartilhados ou herdados são clonados antes da mutação
Version 3.288.0
Added
- Assinaturas digitais agora podem emitir estruturas completas de certificação DocMDP e bloqueio de campo FieldMDP, com relatórios de permissão estrutural para cada assinatura selecionada
- Carimbos de data/hora RFC 3161 de documento, carimbos de data/hora de assinatura, injeção de tokens PAdES-B-T, validação de cadeia de certificados, evidência OCSP e material de validação DSS ou VRI agora têm fluxos completos de autoria e verificação
- Anotações RichMedia agora suportam ativos embutidos, configurações de ativação e desativação, aparências de cartaz, enumeração, extração e remoção
- A impressão de cartaz agora suporta imposição vetorial de páginas, marcas de sobreposição e de recorte, posicionamento ciente de margens físicas e planos de ladrilho reutilizáveis
- Tabelas marcadas agora emitem estrutura semântica Table, TR, TH e TD com identificadores estáveis, associações de cabeçalho, expansões, cabeçalhos repetidos e decoração artefatada
- O visualizador agora fornece edição de AcroForm acessível por teclado para campos de texto, escolha, caixa de seleção, rádio e botão enquanto despacha ações para a aplicação hospedeira
Changed
- Shadings de mesh baseados em funções Type 1 e Type 4 a 7 agora são renderizados por meio de avaliação de função nativa e mosaicação de mesh limitada
- A renderização de cor ICCBased agora compartilha transforms em cache entre imagens e shadings enquanto preserva o comportamento de espaço de cor calibrado
- Saves incrementais agora reconstruem fluxos de objetos e fluxos de referência cruzada de forma consistente e assinaturas selecionadas são verificadas em relação à sua própria revisão assinada
Fixed
- Solicitações de carimbo de data/hora de assinatura SHA-1 agora fazem o hash do valor da assinatura do signatário com SHA-1 em vez de recorrer a SHA-256
- Substituições de bloqueio de campo rejeitadas não descartam mais uma configuração de bloqueio de campo válida anterior
- Widgets de rádio com nomes de estado de aparência duplicados agora preservam o widget selecionado e mantêm os widgets irmãos desligados
Version 3.287.0
Changed
- Dicionários de imagens inline agora seguem limites de comentário, delimitador, literal, hexadecimal, matriz e dicionário do PDF com aninhamento limitado
- Payloads de imagens inline agora usam terminação ciente de formato para dados raw, DCT, ASCII85, ASCIIHex, RunLength e Flate
- A descoberta de payload Flate agora realiza um inflate limitado a partir do offset do fluxo de conteúdo com contabilidade exata de bytes comprimidos, enquanto filtros sem perdas encadeados compartilham um teto de saída de ponta a ponta
- Fluxos de imagem ASCII85, ASCIIHex, LZW, predictor, perfil de cor e auxiliares agora impõem saída intermediária limitada sem alocações temporárias excessivas
Fixed
- Imagens inline malformadas ou truncadas não leem mais além dos dados de origem, não entram em loop em valores não terminados nem retêm estado obsoleto entre reutilizações do decodificador
- Linhas de imagem empacotadas agora calculam bits de componente antes do arredondamento de byte, evitando comprimentos incorretos para imagens RGB de baixo bit e de múltiplas linhas
- Espaços de cor de recursos agora preservam seus nomes originais ao derivar contagens de componentes Lab, ICCBased indiretos e DeviceN e decodificar fluxos de paleta Indexed sob limites estritos
- Limites de imagens inline agora rejeitam dimensões inválidas, profundidades de bit, filtros não suportados, cadeias de filtro inseguras, fluxos comprimidos e marcadores de fim ambíguos de forma consistente
- A renderização de cor Indexed agora valida todo acesso à paleta e rejeita dados de lookup truncados em vez de ler além da tabela decodificada
- Predictors PNG 10 a 15 agora decodificam corretamente para fluxos Flate e LZW, rejeitam filtros de linha inválidos e validam todos os tamanhos de linha e de estado antes da alocação
- Payloads JPEG e JPEG 2000 agora verificam suas dimensões codificadas, componentes, precisão, estrutura de marcadores, comprimentos de caixa e dimensão de armazenamento decodificado antes da alocação da imagem
- A validação de imagens inline agora limita tanto o armazenamento de bitmap empacotado quanto expandido e limita perfis ICC, globais JBIG2 e parâmetros de filtro terminais
- Payloads de filtros binários que contêm texto de marcador de fim embutido agora continuam até o primeiro candidato que passa na validação de formato limitada
Version 3.286.0
Changed
- Content stream tokenization now follows PDF whitespace, comment, delimiter, literal string, hexadecimal string, and name boundaries
- Text splitting and resource replacement now use geometrically grown output buffers for linear processing of large content streams
- Reusable content stream processors now reset derived output and parser state before every
Processcall
Fixed
- Malformed or truncated literal and hexadecimal strings no longer read beyond the source buffer or emit an extra empty token
- Resource replacement now preserves case-sensitive PDF name semantics, accepts optional leading slashes, and updates duplicate mappings deterministically
- XObject and shading operands at the beginning of a stream are now excluded from text output, while unmatched restore operators no longer cancel later saved graphics states
Version 3.285.0
Changed
- LZW encoding now uses constant-time dictionary lookup and buffered stream writes, while decoding uses compact prefix and suffix tables with geometric output growth
- Flate predictor decoding now processes rows directly in the output buffer and supports packed, 8-bit, and 16-bit TIFF samples with arbitrary colour counts
- Stored Deflate streams now write into an exact pre-sized result, and zlib wrappers release temporary buffers safely when compression or decompression fails
Fixed
- LZW code-width changes now follow PDF
EarlyChangesemantics across 9-bit through 12-bit codes, including dictionary resets andEarlyChange=0 - LZW decoding now rejects invalid future codes and truncated bit streams without reading beyond the source buffer
- PNG predictors now use the ceiling byte width of a pixel, preserve previous decoded rows, and safely pad a partial final row
- TIFF predictor decoding now handles 1-bit, 2-bit, 4-bit, 8-bit, and 16-bit components consistently in both LZW and Flate paths
Version 3.284.0
Changed
- Buffer searches now scan fixed 64 KiB blocks, use byte lookup tables for set membership, and preserve the caller's position across every search path
- Unicode, Latin-1, hexadecimal digest, and ARC4 conversions now reserve bounded output once instead of repeatedly growing strings or temporary arrays
- ASCII85 encoding now reads input streams in 32 KiB blocks, while decoding uses exact integer arithmetic and writes directly into a pre-sized output buffer
- MD5 string hashing now avoids a temporary memory stream, digest comparison examines every byte, and ARC4 key scheduling no longer allocates an expanded key array
Fixed
DistanceToAnyBytenow returns the correct offset beyond its first block instead of rereading the same prefix and overcounting skipped bytes- Stream-backed buffer reads now honour the actual byte count returned by custom streams, shrinking results and advancing positions only by bytes received
- Buffer length reductions now clamp the current position, and nil pointer or stream sources behave as empty inputs instead of exposing invalid memory
- Latin-1 decoding now maps the complete byte range 0x00-0xFF instead of replacing bytes 0x7F-0xFF
- ASCII85 decoding now preserves the valid maximum 32-bit group
s8W-!and stops at the first end marker without floating-point boundary loss
Version 3.283.0
Added
TPDFlibSignatureVerifiercan now enumerate signature fields and CMS signers, open files, streams, or strings, and verify a selected field and signer by index or field name- Detailed verification reports now separate cryptographic integrity from signed-revision coverage, current-file coverage, later revisions, strict Contents-gap validation, and native crypto errors
Changed
- Detached CMS validation now streams both ByteRange segments through Windows CryptoAPI in bounded chunks instead of materialising the complete PDF in memory
- Signature fields under nested AcroForm Kids arrays and inherited
/FT /Sigentries are now enumerated with fully qualified names, and direct signature value dictionaries are supported
Fixed
- ByteRange validation now rejects overflow, overlap, truncation, a gap that is not exactly the selected hexadecimal
/Contentstoken, and a signed revision that does not end at its own%%EOF - Certificate lookup no longer falls back to an unrelated embedded certificate when the selected CMS signer identifier has no exact issuer-and-serial match
- Incremental updates that use cross-reference streams now include the cross-reference stream object's own type 1 entry, preventing strict PDF validators from reporting a missing self entry after signing
Version 3.282.1
Changed
- Full saves now rebuild imported object streams from the live object graph, preserve private trailer roots, and retain free-object generations without reusing structural object numbers
- Cross-reference streams now size their offset fields for large files, preallocate their payload, include their own entry, and preserve trailer extension keys
Fixed
- Object-stream packing now writes real
/ObjStmcontainers and type 2 member entries instead of only switching to an xref stream - Garbage collection no longer writes missing object numbers as in-use entries at offset zero and now emits a linked free-object chain in both plaintext and stream cross-references
- Loaded packed PDFs can now be saved repeatedly with packing enabled or disabled without retaining stale object streams, losing live members, or requiring cross-reference repair
Version 3.282.0
Added
- Imported ICCBased colours now use the embedded ICC profile across vector painting, function and mesh shadings, indexed palettes, raw bitmap, CCITT and JBIG2 images, CMYK JPEG images, and JPEG 2000 images
Changed
- ICC transforms now use a bounded Windows Color System lookup table with multilinear interpolation, replacing the temporary PNG round trip used during image rendering
- The renderer now honours content-stream and graphics-state rendering intents, ICCBased
/Range, image/Decode, and original-domain colour-key masks while validating profile channel counts against the PDF colour-space dictionary - Repeated uses of the same profile and rendering intent now share one lookup table across vector colours, patterns, shadings, and images
Fixed
- Encrypted ICC profile streams are now decrypted only while decoded and restored afterward, and embedded profiles are no longer compressed twice while writing image output
Version 3.281.0
Added
- The built-in GDI+ renderer now paints imported PDF function-based shadings and free-form, lattice, Coons, and tensor mesh shadings (types 1 and 4-7), including transparency and clipping
- Shading dictionaries now support component Function arrays, calibrated Lab, CalGray, and CalRGB spaces, Separation and DeviceN tint transforms, PatternType 2 Background fills, and BBox clipping across the GDI+ and Cairo renderers
Changed
- Type 1 shading functions now use bounded adaptive colour sampling with additional quarter-cell probes for higher narrow-feature accuracy and lower work on constant or smooth regions
- PatternType 2 matrices around mesh shadings are now composed exactly once in both GDI+ and Cairo, preserving translated, scaled, and rotated pattern placement
- Mesh colour components are now interpolated in their source colour space before Function evaluation and conversion to RGB, preserving nonlinear functions, DeviceCMYK gradients, and the correct ordering for managed colour transforms
- Coons and tensor surfaces now use bounded device-pixel error subdivision for smoother high-curvature output at large render sizes
- Encrypted shading and Function streams are decoded through the document crypt callbacks, and Type 5 vertex records honour their required byte alignment
Version 3.280.1
Fixed
MergeFileList/MergeFileListFast/MergeFileListStrictleaked aTSmartPDFReader/TSmartPDFDocumentpair (and everything they own) when a non-PDF file appeared in the merge list: the reader and document were constructed before thetryblock that frees them, so a parse failure on the malformed file's content orphaned the already-constructed reader instead of being cleaned up by the surrounding exception handler; construction now happens inside the protectingtryin both the single-file and multi-file prescan paths- Mesh shading parsing (
TPLMeshShading.Parse, shading types 1 and 4-7) leaked the decoded/Functionobject on every parse - every early-exit path and the normal completion skipped freeing it; the function is now released in afinallyblock regardless of howParseexits TPDFlibSignDoc.Closenow nils its smart-reader/document/info fields after freeing them, and the exception paths inOpen,OpenStreamandOpenStringnow release any partially-constructed smart objects instead of only clearing the stream reference, preventing a leak when opening a signing target fails partway through
Version 3.280.0
Added
- Error category enumeration
TPDFlibErrorCategory(ecSuccess/ecStructure/ecSave/ecCrypto/ecGeneric/ecCompliance/ecAcroForm) layered on top of the existing numericLastErrorCodetaxonomy, so callers can classify failures without memorising code ranges; exposed viaTPDFlib.LastErrorCategory,TPDFlib.ErrorCategory(Code)andTPDFlib.ErrorMessage(Code) - Form-field error codes 701-704 (field not found, field read-only, no AcroForm, invalid value) with human-readable messages, letting callers distinguish "field is locked" from "no such field" instead of receiving a single generic failure
SetFormFieldValueForcedforce-write variant that bypasses the read-only guard, used internally bySetFormValues(SkipReadOnly=False)so bulk imports can still overwrite locked fields when the caller explicitly opts out
Changed
SetFormFieldValuenow setsLastErrorCodeto 701/702/703 on failure (field not found / read-only / no AcroForm) instead of returning 0 silently;LastErrorCategoryis a non-consuming read so callers can inspect the category before retrieving the numeric code
Version 3.279.0
Added
ReplacePageRangesreplaces visual page content from another open document without changing the target page count or target page object identities, preserving bookmarks, links, annotations, and form widgets already attached to those pages
Changed
- Cross-document page copying no longer creates and removes an extra placeholder page before importing the requested range
Version 3.278.0
Added
PrintPagesAdvancedapplies copies, collation, duplex, orientation, color, quality, paper-size and input-bin settings to arbitraryPrintPagesrange expressions while retaining one printer profile and one print job
Changed
- Advanced print settings are validated before the job starts, positive print-quality values above the four named presets are applied as DPI, and paper or input-bin identifiers may use the full positive range supported by the corresponding
DEVMODEfields
Fixed
- Damaged cross-reference recovery now dispatches its bounded block reads through the traditional
TStream.Readoverride on Win64, preserving instrumentation and custom-stream behavior while retaining 64 KiB sequential I/O
Version 3.277.0
Changed
- Damaged cross-reference recovery now scans source data in 64 KiB sequential blocks instead of seeking once for every matching character, keeping auxiliary memory bounded while scaling to large PDF files and non-memory streams
- Recovery validates complete indirect-object tokens, skips object-like data inside comments, strings, and streams, confirms stream endings with a following
endobjtoken, preserves headers split across read boundaries, and selects the last valid trailer dictionary
Fixed
- Trailer reconstruction now supports nested dictionaries and delimiter text inside literal strings and is no longer truncated to the first 2048 bytes or the first apparent
>>pair
Version 3.276.0
Added
ActivateWebLinksandActivateWebLinksExscan existing page text once per page and create non-duplicate URI link annotations for HTTP, HTTPS,www., FTP,mailto:, and bare email targets with selectable detection and border options- Generated links use matched-character geometry, precise quadrilaterals for rotated or skewed text when permitted, PDF/A print flags, progress and cancellation support, and selected-page restoration; tagged PDF and PDF/UA documents are protected from incomplete structure-tree updates
Changed
SetAutoCreateWebLinksnow uses the same boundary-aware detector and target normalization when creating links for newly drawn text, addingwww., FTP, and bare email support
Fixed
- Updating annotation
/Contents, name, date, title, or subject properties no longer overwrites the subtype of an existing action dictionary, so URI and other actions remain valid after annotation metadata changes
Version 3.275.0
Added
ExtractPageRangeText,SavePageRangeTextToStream, andSavePageRangeTextToFileextract a parsed page range in one traversal with caller-defined page separators; stream and file output writes UTF-8 data incrementally so large documents do not require a complete document-sized text bufferSetPageBoxRangeandRemovePageBoxRangeapply page-boundary changes across the standard page-range syntax while preserving the caller's selected pageSetPageTransitionRangeandSetPageTransitionRangeExapply legacy or extended presentation transitions to page ranges with per-page progress and cancellation supportGeneratePageThumbnailsrenders requested pages directly into reusable memory and attaches their/Thumbimages without intermediate files or nested progress operations
Version 3.274.0
Fixed
- GDI+ rendering of axial shading patterns now honours the PDF
/Extendarray:SetupGDIPlusPatternpassesWrapModeClampwhen either end is extended (matching the Cairo backend) instead of always usingWrapModeTile, so end colours paint the area outside the gradient axis correctly
Added
- The scroll-hint bubble (
"Page N / M") shown while dragging the vertical scrollbar now auto-hides after 3 seconds of inactivity via aWM_TIMERhandler, so it no longer lingers until a separate scroll event dismisses it ZoomInStep/ZoomOutStepnow snap ontoActualSize(100%),FitWidthandFitPagepercentages when they fall between the current zoom and the next preset on the 14-step ladder, matching the behaviour of professional PDF viewers- The viewer disk page cache writes a build-version marker (
cache.version) and wipes the whole cache root when the library version changes, so a build upgrade never reuses stale bitmaps rendered by an older code path
Version 3.273.1
Fixed
- Object-stream container and xref-stream objects created during save were leaked because they bypassed
TPDFStructure.AddObjectregistration; both call sites now use theNewStreamWithDictownership-tracking factory, eliminating theTPDFStreamleak reported by the test runner underReportMemoryLeaksOnShutdown - Cross-reference stream
/Sizewas off by one: it must be one past the highest object number in the whole file, and the xref stream is itself an indirect object numberedMaxObj+1, so/Sizeis nowMaxObj+2
Changed
- Peephole content-stream optimiser now also removes identity text-matrix operators (
1 0 0 1 0 0 Tm), covering bothcmandTmwith the same six-operand identity check - Mark-sweep GC preserves object 1 (the
/Linearizedparameter dictionary) when the source document was loaded linearized, since that dictionary is never referenced from/Rootbut must survive
Version 3.273.0
Added
- Object-stream packing on save (
TPDFDocument.PackObjectsIntoStreams) collects eligible non-stream indirect objects, serialises them into PDF 1.5 object streams (/Type /ObjStm) with Flate compression, and emits a binary cross-reference stream (/Type /XRef) carrying type-0, type-1 and type-2 entries, reducing the size of saved files 10-40% on object-dense documents TPDFlibSaveOptions.PackObjectStreamsflag plusTPDFlib.SetPackObjectStreams/GetPackObjectStreamsAPI; defaults to enabled, auto-gated by PDF version (1.5+ activates packing and xref streams, 1.4 and below keep the traditional plaintext xref for compatibility), andTPDFlib.GetLastSaveUsedObjectStreamsreports whether the last save actually packed
Version 3.272.0
Added
- Mark-sweep garbage collection of unreferenced indirect objects (
TPDFDocument.GarbageCollectUnusedObjects) walks the object graph from the trailer roots (/Root,/Info,/Encrypt) and removes every indirect object that is not reachable, stopping the file-size growth that accumulates when pages are deleted and their font, content and XObject resources become orphans TPDFlibSaveOptions.GarbageCollectflag plusTPDFlib.SetGarbageCollect/GetGarbageCollectAPI let callers opt in to GC during a full save (defaults to off for backward compatibility), andTPDFlib.GarbageCollectObjectsruns GC immediately and returns the number of orphaned objects removed
Version 3.271.0
Added
- Peephole content-stream optimiser (
TPDFContentPeepholeOptimizer) rewrites a parsed page content stream before Flate compression, removing semantically redundant PDF operators: identitycmmatrices, emptyq/Qpairs, emptyBT/ETobjects, no-op paths terminated bynwith no clip, duplicate graphics-state setters (colour, line width, cap/join, dash, text state), and deadnafter a painting operator - all transforms are output-equivalent so visible page output is unchanged TPDFlibSaveOptions.OptimizeContentStreamsflag and matchingTPDFlib.SetOptimizeContentStreams/GetOptimizeContentStreamsAPI let callers opt in or out of the peephole rewrite duringCompressContent/CompressPage; enabled by default
Changed
TPDFDocument.CompressPagenow forwards the optimisation flag to the page tree so the peephole pass runs insideTPDFPageTree.Compressbefore the existing Flate compression, stacking operator-level reduction on top of byte-level compression
Version 3.270.0
Added
- New
PLParseDefaultAppearancedecodes a/DAdefault-appearance byte string (ISO 32000-2 12.7.4.3) into the font resource name, font size and fill colour, covering therg,kandGcolour operators so form-field and annotation appearance generators can paint text with the author-intended styling
Changed
- Page content-stream assembly (
TPDFRenderer.GetContents) now concatenates multi-part/Contentsarrays through aTStringBuilderinstead of repeatedResult := Result + chunk, removing the O(n^2) string growth that penalised pages with many content-stream parts
Version 3.269.0
Added
- New
BeginMarkedContent/EndMarkedContentwrite inline marked-content sequences with accessibility properties (/Alt,/ActualText,/Lang,/E) directly in the BDC property list per ISO 32000-2 14.9.2–14.9.5, so screen readers and accessibility tooling can read substitute text without a structure-tree entry - Annotation reader exposes
GetAnnotEffectiveBorderimplementing the Errata #287 precedence (border style dict/BSwins over the legacy/Borderarray) and resolving width, style and dash pattern into one call - Signature documents expose
GetSignatureSeedValueto read the seed-value dictionary (/SV, ISO 32000-2 12.7.5.5 Tables 236–237): required filter, allowed SubFilters and allowed digest methods, so a signer can honour the constraints the author embedded GetSignatureFieldLockreads the/LockFieldMDP seed dictionary (Table 238): action (/All,/Include,/Exclude) and the affected field names that must be locked at sign time
Version 3.268.0
Added
- New
PLParsePDFDateparses ISO 32000-2 7.9.4 date strings (D:YYYYMMDDHHmmSSOHH'mm') into a localTDateTime, honouring the mandatoryD:prefix, the field-dependency ladder (each field only when all preceding fields are present) and the UT offset (+/-/Zwith optional apostrophe-minute), returning the local equivalent of the documented instant - Text-string decoding (
PLDecodeTextString) now recognises the PDF 2.0 UTF-8 BOM (EF BB BF) per 7.9.2.2.1, so UTF-8-authored metadata decodes correctly instead of being misread as PDFDocEncoding - File specifications expose
GetFileNamehonouring the PDF 2.0 precedence (Path > UF > F) per Errata #444, plusGetEmbeddedFileStreamandGetRelatedFilesaccessors for the/EFand/RFdictionaries - Annotation readers expose appearance-precedence helpers
GetAnnotNormalAppearance,GetAnnotDefaultAppearanceandGetAnnotOffStateAppearanceimplementing the Errata #23/#34/#42/#170 rules (AP/N is authoritative; DA is the byte-string fallback; Off state lives under the nameOff) - PDF/UA validation reports a new code 10045 when a non-standard structure type fails to terminate at a standard type through the role-map chain (ISO 14289-1:2014 7.1), with cycle protection to a depth of 8
- PDF/A and PDF/UA font audits now validate that embedded CIDFontType2 fonts carry a
/CIDToGIDMapwhose value is either the nameIdentityor a stream, not merely present (ISO 32000-1 9.7.4)
Changed
- Name-tree lookup (
NameTreeLookup) now binary-searches the sortedNamesarray per ISO 32000-2 7.9.6 before falling back to a linear scan, turning large EmbeddedFiles/JavaScript/Dests lookups from O(n) into O(log n) on conformant files - PDF/UA standard-structure-type set expanded with PDF 2.0 additions (
Artifact,DocumentFragment,FENote,MarkedContent,Title) so the role-map no-remap and chain-termination checks recognise the full tag vocabulary
Version 3.267.0
Added
EnumPageContentStatesExcan recursively enumerate Form XObject instructions with configurable depth, cycle protection and depth-first execution ordering- Content snapshots now expose invocation-tree identity, containing stream and parent XObject information, resource-scope identity, Form traversal status and descendant counts
- Standalone content trackers can register scoped fonts and initialise isolated Form execution state with matrix concatenation and bounding-box clipping
Changed
- Recursive content tracing selects each Form resource dictionary independently, inherits invoking resources for compatible legacy Forms, preserves inherited font identity and caches decoded Form programs across repeated invocations
Version 3.266.0
Added
- Text runs returned by
GetTextRunsnow carry the glyph origin (OriginX/OriginY) and the full text matrix components (Tm11/Tm12/Tm21/Tm22/TmDX/TmDY) captured by replaying BT, Td, TD, Tm and T* alongside the show operators, so consumers can locate glyphs without a separate text-funnel pass - Mesh shading decoding now routes Lab, CalRGB and CalGray colour spaces through the colour manager instead of falling through to black, producing correct fills for non-DeviceRGB free-form and coons patches
- Redaction now emits a real
/Subtype /Redactannotation with/Rect,/ICinterior colour and optional overlay text alongside the existing content removal, so redaction-aware viewers mark the sanitized region - Library operations emit structured log records at load and save boundaries through the previously dormant
Logger, with ISO-8601 UTC timestamps and a cachedTStreamWriterfile sink that no longer reopens the log file on every line - New
Tests.Memoryfixture guards create/draw/save/free andNewDocumentcycles against heap regression, and the console test runner now enablesReportMemoryLeaksOnShutdown - EMF interpretation now counts unknown or private records via the
UnknownRecordCountproperty so silent metafile gaps are observable
Changed
- Dictionary key lookup (
TPDFDictionary.FindIndexByKeyName) builds a lazy open-addressing hash index for dictionaries with more than 16 entries, turning the linear scan that dominated renderer Resources/ColorSpace/Font/ExtGState lookups into an O(1) probe - sRGB gamma conversion (
XYZ2RGB) uses a shared 4096-entry lookup table instead of threePower(x, 1/2.4)calls per pixel, and Lab-to-XYZ cubing now uses direct multiplies; both are the dominant per-pixel cost when decoding Lab or ICC-based images - Page lookup (
TPDFPageTree.GetPage) returns the cached page dictionary on repeat access instead of re-walking the page tree every call - Content-stream operator dispatch (
ContentOperatorFromName) buckets the 73 operators by first byte, cutting the per-token linear scan to a short residual compare - PDF/A colour-space audit now recurses into the base or alternate space of Indexed, Separation, DeviceN and ICCBased up to a depth of 8, so a hidden DeviceCMYK tint transform or bare Lab name is flagged rather than passing silently
- Shaped-font finalize now walks the used-glyph set recorded at draw time instead of scanning all 65536 glyph slots four times per save
- String escape routines (literal-string, XFDF, stamp and variable token expansion) build output through
TStringBuilderor two-pass allocation, removing O(n^2) concatenation from save and form-export hot paths - AES stream encrypt/decrypt reuse their chunk buffer across loop iterations instead of reallocating per block
- Composite-glyph parsing in the TrueType parser grows the components array geometrically instead of one element at a time
- Mesh shading
ReadBitsreads the minimum covering bytes in one pass andWriteBitspre-sizes the output buffer, eliminating per-bit reallocation - Painter circle control point uses a precomputed kappa constant and arc squaring uses
Sqrinstead ofPower
Fixed
- Fixed a non-Windows compile break in
PDFlibParallelwhere the stub body signature forPDFlibRenderPagesParalleldid not match the interface declaration
Version 3.265.0
Added
- Added 59 C++Builder console demos to align the C++Builder demo suite with Delphi, bringing the total from 33 to 92 demos covering the same API surfaces
- Added Demo/C++Builder/index.html expansion from 35 to 92 entries with Navigation, Color & ICC, Barcode & media, and Structure & compliance sections
Fixed
- Fixed all 33 existing C++Builder cbproj files that were missing 20 library units (PDFlibMeshShading, PDFlibGraphics, PDFlibWindows, PDFlibParallel, PDFlibLogger, PDFlibMail, PDFlibViewer, etc) from their DelphiCompile list, which prevented every C++Builder demo from compiling
Version 3.264.0
Added
- Content graphics-state snapshots now resolve
Dooperands as image, form or PostScript XObjects and report their resource names, object numbers and transformed bounds - Form snapshots expose the original
/Matrixand/BBoxtogether with resource, group, transparency-group and reference-form indicators - Standalone content trackers can pre-register XObject streams through
RegisterXObject
Changed
- Page content-state enumeration now precompiles selected-page XObject resources and calculates invocation bounds from all four transformed corners
Version 3.263.0
Added
- Content graphics-state snapshots now expose current path bounds, current point, path complexity, pending clipping rules and effective clipping bounds
- Standalone content trackers can initialise an explicit clipping boundary through
SetInitialClipBounds
Changed
- Page content-state enumeration now follows delayed
WandW*clipping, exact transformed cubic extrema,q/Qclipping restoration and selected-pageCropBoxboundaries
Version 3.262.0
Added
- Content graphics-state snapshots now report font writing mode, exact per-instruction text displacement and whether font metrics were resolved
- Standalone content trackers can provide font measurements through
OnMeasureText
Changed
- Page content-state enumeration now advances text matrices for
Tj,TJ,'and"using simple or composite font metrics, horizontal scaling, spacing and vertical writing rules
Version 3.261.0
Added
- Content graphics-state tracing can now resolve page
ExtGStateresources, including transparency, blending, overprint, soft masks, device controls and embedded font references TPDFContentStateTrackercan pre-register external graphics-state dictionaries for standalone content-program analysis
Changed
- External graphics-state parameters now apply cumulatively and participate in complete
q/Qsave and restore snapshots
Version 3.260.0
Added
- Added single-pass effective graphics-state tracing for structured content programs and complete selected pages
- Snapshots expose CTM, text matrices, line style, dash pattern, colours, text state and graphics-state stack depth before or after each instruction
Changed
- Image placement enumeration now maps all four unit-square corners, producing correct bounds under rotation and shear
Version 3.259.0
Added
- Added typed time, special-pattern and arbitrary-mask helpers for interactive form fields
- Added range validation with independently optional zero-safe bounds
- Added sum, average, product, minimum and maximum field calculations with automatic calculation-order registration
Security
- Generated JavaScript string values now escape quotes, backslashes, control characters and JavaScript line separators
Version 3.258.0
Added
- Added typed
SetOCGStateaction creation for form-field events, existing actions and action chains - Optional-content actions preserve left-to-right state changes, repeated groups and the optional radio-button relationship preference
Changed
- Optional-content action enumeration now returns canonical group handles that round-trip through the writer APIs
Version 3.257.0
Added
- Added complete explicit remote-destination writing with zero-based pages, all standard fit types, nullable XYZ values and tri-state window preferences
- Added complete launch-action writing for portable files, Windows parameters, default directories and open or print operations
- Existing action handles can now update these payloads or append them to action chains without container-specific duplicate APIs
Security
- Remote go-to and launch action builders now reject PDF/A mode before modifying an action chain
Version 3.256.0
Added
- Remote go-to action inspection now reports named and explicit destinations, zero-based target pages, fit types, coordinates and zoom values
- Launch action inspection now reports Windows application parameters, default directories and open or print operations
- Action information distinguishes an absent
/NewWindowpreference from an explicit false value and identifies array-based targets
Version 3.255.0
Added
- Added typed builders for remote named-destination and external application launch actions
- URI action builders now support coordinate-map requests through the standard
/IsMapflag - The new action kinds work across lifecycle, form-field and chained-action APIs through the existing extended builder interface
Version 3.254.0
Added
- Added 14 Delphi API-coverage demos for library surfaces that had no dedicated demo: OutlineBuilder, NamedDestinations, DocumentActions, EmbeddedFiles, LinearizeDemo, BarcodeGallery, XfaFields, TaggedPDF, OutputIntent, HtmlTextFlow, RichMediaAnnotations, MailSendDemo, TextBlockExtraction, and PadesDssDemo
- Added a Navigation section, Color & ICC section, Barcode & media section, and Structure & compliance section to the Delphi demo index, bringing the total from 56 to 92 listed demos
- Added Readme.en-us.html guides for the 20 demos that previously shipped without one
Changed
- Applied the project Formatter.config across all Delphi demo sources so operator spacing, indentation, and keyword casing follow one style, and set NewLineBeforeThen to False so If...Then stays on a single line
- Hardened error handling across the classic GUI demos: SaveToFile return values are now consistently checked, TPDFlib and secondary object lifetimes are always protected by try/finally, and failure messages include LastErrorCode
Fixed
- Fixed inverted SaveToFile polarity in ImageToPdf that treated success as failure, and stopped AddTrueTypeSubsettedFont from opening a stale file when the save failed
- Fixed resource leaks in CreateWithImageToStream, DoInTheStream, CanvasText, ExtractText, ExtractImage, PdfDecrypt, PdfEncrypt, and PdfPermission where TPDFlib, TStream, TBitmap, TOpenDialog, or TStringList instances could escape on an exception path
- Removed dead code in AddFormattedTitle (unused RectParts allocation, redundant try/except around StrToFloatDef) and MultiFunction (overwritten SetTextSize call)
Version 3.253.0
Added
- Added typed action details for thread, sound, movie, optional-content, rendition, transition and 3D-view actions
- Added reusable action-handle lookup and ordered optional-content state enumeration
- Added complete PDF transition records covering replacement, Fly, Push, Cover, Uncover and Fade styles
Fixed
- Wipe and Glitter transitions now store their direction in
/Di, read page display duration from the page dictionary and clear both transition and timing entries - Standard pre-PDF-1.5 transition styles no longer force a PDF 1.5 output version
Version 3.252.0
Added
- Added single-pass form-field action discovery with typed action details across primary, widget and field triggers
- Added complete calculation-order enumeration, per-field lookup and removal for interactive forms
- Extended bulk form-field snapshots with calculation order and action count
Changed
- Widget lifecycle triggers now support page-open, page-close, page-visible and page-hidden actions with the required PDF 1.5 version handling
Version 3.251.0
Added
- Added single-pass named-destination enumeration across legacy catalog entries and modern name trees with resolved page and view parameters
- Added named-destination removal, complete push-button captions, button text positioning and form-field mapping names
- Extended bulk form-field snapshots with mapping names, button captions and button text position
Fixed
- Name-tree editing now supports direct destination values and uses unambiguous multi-node index encoding
Version 3.250.0
Added
- Added single-pass form field snapshots with field identity, type, page, flags, values and Choice state
- Added typed Choice-field flag queries plus validated selected-index and top-visible-index accessors
Fixed
- Single-selection Choice fields no longer retain a multi-selection
/Iarray, and switching from multi-select to single-select now replaces the old/Varray with a string value
Version 3.249.0
Added
- Added one-pass stateful text search traversal so applications can iterate cached hits without extracting pages twice
- Added bulk form value export and name-based application with optional read-only field protection
Version 3.248.0
Added
- Added retained Viewer selections with page-space geometry, extracted text, enumeration, clearing and a vetoable marquee event
- Added exact current-viewport bitmap capture and file output including persistent overlays
Version 3.247.0
Added
- Added independent Viewer controls for user form editing and annotation activation
- Added configurable foreground colour for text and choice form editors
Version 3.246.0
Added
- Added typed line ending styles, shape interior colours, link highlight modes, FreeText alignment, Text annotation open state and Caret symbols
- Annotation setters validate compatible subtypes and automatically raise the minimum PDF version where required
Version 3.245.1
Fixed
- Corrected FastReport export page sizing and memo layout so A4 reports retain their intended scale, text stays within memo bounds and unconfigured memo frames remain hidden
Version 3.245.0
Added
- Added
OnPasswordso applications can supply another password after an encrypted document rejects the initial credential - Password retries now work consistently for file, stream and string loads, expose the next attempt number and allow the handler to cancel
Security
- Password callbacks are limited to sixteen total attempts and every retry uses a fresh parser and decryption state
Version 3.244.0
Added
- Added
SetXMPPropertyExfor safely writing scalar properties in caller-defined XMP namespaces - Custom XMP values are escaped through the XML DOM, repeated writes replace the matching namespace property and invalid or reserved XML names are rejected
Version 3.243.0
Added
- Added typed document lifecycle actions for before close, before save, after save, before print and after print triggers
- Added typed page open and close actions with shared support for URI, named, JavaScript, form and destination action builders
- Added action inspection and removal methods for every document and page lifecycle trigger
Version 3.242.0
Added
- Added
SaveChangesto append changes to the originally loaded file and automatically reload the updated xref chain for repeated incremental saves SaveChangesvalidates the reload password before writing and preserves the selected public document handle after reload
Changed
AppendToFilenow rejects a target whose current length differs from the loaded source, preventing stale incremental offsets from being appended to an externally changed file
Version 3.241.0
Added
- Added
GetLastOutlineandGetLastChildOutlinefor direct access to the tail of a bookmark list - Added
GetOutlineChildCountandGetOutlineSiblingIndexfor lightweight bookmark tree inspection without allocating a full tree snapshot
Version 3.240.0
Added
- Added
SaveAllAttachmentsExwith overwrite, skip and automatic rename conflict policies plus a per-attachment naming callback - Attachment exports now reduce requested names to safe leaf names and protect Windows reserved device names
Fixed
- Fixed
SaveAllAttachmentsreturning without writing files because its attachment snapshot was counted but not allocated and populated
Version 3.239.0
Added
- Added
OnPageMouseDown,OnPageMouseMoveandOnPageMouseUpso Viewer hosts receive one-based page numbers and top-down PDF point coordinates independent of zoom, scrolling and view rotation - Added
RegionAtClientPoint,ActiveRegionandOnActiveRegionChangeto distinguish links, non-link annotations and form fields as the pointer enters or leaves them - Added
CreatePDFlibViewerDefaultPopupMenuandInstallPDFlibViewerDefaultPopupMenu, which compose the existing Viewer action classes into a ready context menu for copy, zoom, fit, rotate, navigation, save and print
Version 3.238.0
Added
- Added
OnOperationProgresswith typed operation kind, lifecycle phase, current and total units, percentage and detail text while preserving the classicOnProgresspercentage callback - Load, save, search, merge and page-render file, stream and string entry points now report starting and terminal phases; operations with intermediate progress also report
opRunning - Setting
CancelduringopStartingoropRunningactivates the existingAbortstate, providing one cancellation path for old and new callers
Fixed
LoadFromFilenow preserves error code 404 for a wrong password instead of overwriting it with the generic load error 401 after cleanup
Version 3.237.0
Added
- Added
SearchTextEachandTPDFlibSearchHitEventto emit every text hit immediately without allocating or sizing a result array SearchTextandSearchTextEachnow report page progress throughOnProgressand honour bothAbortand callback cancellation; callback cancellation uses the existing abort state untilResetAbort- The Viewer search panel and search-highlight layer now consume the streaming API in one pass, removing their former 256-row and 512-highlight limits
Fixed
- Whole-word search now continues past an earlier substring occurrence in the same text block to find a later correctly bounded match
Version 3.236.0
Added
- Added
GetPrinterCapabilitiesto capture a live printer-driver snapshot without starting a print job - The typed
TPDFlibPrinterCapabilitiesresult includes paper IDs, names and millimetre dimensions, input-bin IDs and names, duplex, colour, landscape and collation support, the printer port and the maximum driver-reported copy count - Drivers that omit paper or bin metadata still return the remaining capabilities with empty arrays, while invalid printer names return a fully cleared snapshot
Version 3.235.0
Added
- Added
SendDocumentByMailfor saving the loaded document to a temporary PDF and delivering it as an SMTP attachment through the built-in Windows CDO provider - Added the reference-counted
IPDFlibMailProviderextension point so applications can supply another transport, support non-Windows hosts and test mail workflows without network access - Each send uses an isolated temporary directory, sanitises the attachment display name and removes both the PDF and its directory after the provider returns;
GetLastMailErrorreports validation, save, transport and platform failures
Version 3.234.0
Added
- Added variable placeholders to stamp, header and footer text:
<%PageNo%>,<%TotalPages%>,<%ShortDate%>,<%LongDate%>,<%ShortTime%>and<%LongTime%>expand per page alongside the classic &-tokens - Any custom
<%name%>placeholder resolves through the newOnCalcVariableevent, which receives the name and the page number and supplies the replacement - running numbers, batch codes and client fields stamp without pre-processing the text; without a handler unknown placeholders stay verbatim
Version 3.233.0
Added
- Added superscript/subscript detection to text extraction: the new
GetTextBlockVAlignreports each extracted text block's baseline classification (0 = baseline, 1 = superscript, 2 = subscript) relative to its visual line, so chemical formulas, exponents and footnote markers can be recognised - A block classifies as super-/subscript when it is markedly smaller than the line's dominant text and its vertical centre sits above/below the dominant centre within one text height
Version 3.232.0
Added
- Added character-level word splitting to text extraction:
SetTextExtractionOptions(17, 1)re-splits show-text runs that carry no space characters into words wherever a per-character advance step is much wider than the run's median glyph advance - documents that paint whole lines as a single operator with kerning gaps standing in for spaces now extract as separate words inGetPageTextmodes 7 and 9-11 - The advance arrays stay aligned with the widened text, so block quads and per-character width outputs remain consistent
Version 3.231.0
Added
- Added layout-preserving fixed-grid text export:
GetPageText(11)maps the page geometry onto a monospace character grid - rows cluster by baseline, every block lands at its column computed from the average character width, and shorter cells pad with real spaces - so tables and forms keep their visual alignment in plain-text viewers, terminals and diffs without relying on tab stops - The reference page for
GetPageTextnow documents the reading-order (9), tab-separated table (10) and fixed-grid (11) modes
Version 3.230.0
Added
- Added dehyphenation to text extraction:
SetTextExtractionOptions(16, 1)re-joins words hyphenated across line breaks ("inter-" at a line end followed by "national" becomes "international") in the line-oriented outputs ofGetPageTextmodes 7 and 9 - The heuristic only merges when a letter precedes the hyphen and a lowercase letter starts the next line, so numeric ranges, proper nouns and sentence-initial capitals keep their hyphens
Version 3.229.0
Added
- Added the
OnBeforeSnapshotevent to theTPDFlibViewercontrol: it fires before a snapshot drag is captured with the dragged region, and setting Handled cancels the default clipboard capture so applications can process the region themselves - Exposed
PrefetchEnabled: the background pre-render worker can now be switched off and on at run time (the worker stops immediately and restarts on the open document) - Exposed
DiskCacheMaxDocuments: the number of documents the cross-session disk page cache keeps before pruning is now tunable (default 10)
Version 3.228.0
Added
- Added precise navigation to the
TPDFlibViewercontrol:GoToPagePointjumps to a page and scrolls a given page point to the top-left of the viewport, so link destinations and search hits land exactly in view - Added programmatic scroll control:
ScrollBypixel stepping, read/writeHScrollPos/VScrollPosproperties (ideal for synchronising two side-by-side viewers over the same document), andGetScrollPosForPagereporting each page's scroll anchor in continuous mode - Added public coordinate bridges
ClientPointToPageandPageRectToClientRectconverting between client pixels and page user space through zoom, rotation and scroll; the internal hit-testing now shares the exact geometry of the paint path and also works on unparented (headless) controls
Version 3.227.0
Added
- Added view-state events to the
TPDFlibViewercontrol:OnZoomChangefires on every effective-zoom move (explicit zoom, preset steps, fit-mode recomputation on resize, rotation or DPI change) andOnHScroll/OnVScrollfollow the scroll position, so toolbars and status displays stay in sync without polling - Dragging the vertical scrollbar thumb now shows a floating "Page N / M" bubble that previews the page the view will land on - a big help in long documents; the
ScrollHintEnabledproperty (on by default) turns it off
Version 3.226.0
Added
- Completed the fill-and-save loop in the
TPDFlibViewercontrol:SaveToFileandSaveToStreamwrite the displayed document - committed form edits included - back to disk or a stream (any open in-place editor commits first) - Multiline text fields now edit in a proper multi-line memo: Enter inserts a line break, Ctrl+Enter commits, Escape cancels; single-line fields keep the plain Enter-commits behaviour
- Tab and Shift+Tab cycle the in-place editor through the document's editable text and choice fields, following each field's page;
FocusNextFormFieldexposes the same navigation programmatically
Version 3.225.0
Added
- Added preset-ladder zooming to the
TPDFlibViewercontrol:ZoomInStepandZoomOutStepsnap the zoom to the standard preset sequence (1, 5, 10, 25, 50, 75, 100, 150, 200, 400, 800, 1600, 2400, 3200 percent), starting from the zoom currently in effect so fit modes step naturally; the toolbar zoom actions now use the same ladder - Ctrl+mouse wheel now zooms along the preset ladder while a plain wheel keeps scrolling
- Added keyboard shortcuts: Ctrl+'+'/'-' step the zoom, Ctrl+1/2/3 switch to actual size, fit width and fit page, and Shift+Up/Down jump to the first and last page
Version 3.224.0
Added
- Added
CreateSelfSignedCertificatewith Delphi, DLL and ActiveX entry points: generates a self-signed RSA certificate (SHA-256 signature, configurable subject, validity and key length) and exports it with its private key to a password-protected PFX file, ready forSignFileand the sign-process APIs - so signing workflows can be built and tested without an external certificate authority - The certificate is created in a throwaway key container that is deleted after the export; only the PFX keeps the key material. Self-signed certificates are meant for testing and internal documents - viewers flag them as untrusted unless installed explicitly
Version 3.223.0
Added
- Added
TPDFlibShapeWatermarkto the composable watermark layer: rectangles, circles, ellipses, polygons, Bezier curve chains and straight lines stamp onto a page range with fill and stroke colours, line width and opacity, through the sameApplyWatermarkentry point as text and image watermarks - Rectangle, circle and ellipse shapes size themselves from Width/Height; polygon, curve and line shapes take their geometry from
SetPoints(local X,Y pairs), so the nine-point Position grid and custom placement apply to every shape kind; degenerate geometry (too few points) is rejected
Version 3.222.0
Added
- Added
AddLinkToEmbeddedPDFwith Delphi, DLL and ActiveX entry points: a page hotspot that opens a PDF embedded in the current document (by its EmbeddedFiles name) and jumps to a chosen page there, using the standard embedded go-to (/GoToE) action of ISO 32000-1 §12.6.4.4 with an optional new-window request; the document version rises to PDF 1.6 automatically GetAnnotActionInfoand its outline/form-field siblings now recognise embedded go-to actions, reporting the newakGoToEkind together with the embedded target name, the parent/child target relationship, the optional file specification and the /NewWindow flag
Version 3.221.0
Added
- Added
SetSignProcessAppearanceTextwith Delphi, DLL and ActiveX entry points: digital signatures can now show an automatically generated visible text appearance composed of the signer name, reason, location and signing date, with optional descriptive labels ("Signed by:", "Reason:", ...) selected through a bit mask - The text block lays out inside the signature field rectangle in Helvetica with a configurable colour; font size 0 auto-fits the lines to the field. A field image set through
SetSignProcessFieldImageFromFilekeeps precedence, and document time-stamp processes ignore the text appearance
Version 3.220.0
Added
- Added interactive form filling to the
TPDFlibViewercontrol: clicking a checkbox or radio button toggles it, and clicking a text or choice field opens an in-place editor over the field (Enter commits, Escape cancels, leaving the editor commits); read-only fields are left alone and the changed page re-renders automatically - Every write fires the new
OnFormFieldValueChangedevent, andHighlightFormFieldswithFormHighlightColorpaints a translucent backdrop over each fillable area so users can spot form fields - Added the programmatic counterparts
FormFieldAtPagePoint,GetFormFieldPageRect,ToggleCheckBoxField,SetFormFieldValueAndRefresh,BeginEditFormFieldandCommitInplaceEditor, driving the same machinery without mouse input
Version 3.219.0
Added
- Added annotation interaction to the
TPDFlibViewercontrol: clicking a non-link annotation fires the newOnAnnotClickevent with the page, annotation index and subtype, andAnnotAtPagePointexposes the hit test programmatically (Popup companions are skipped) - Hovering an annotation now shows its Contents text as the control's hint (the
AnnotHintsswitch, on by default, works with the standardShowHintproperty) - Added
SaveAnnotAttachmentToFileto write a FileAttachment annotation's embedded file to disk, completing click-to-save attachment workflows in the viewer
Version 3.218.0
Added
- Added a cross-session disk page cache to the
TPDFlibViewercontrol: settingDiskCacheFolderpersists rendered pages on disk so a recently viewed document reopens instantly without re-rendering - Cached pages are keyed by a fingerprint of the document's path, size and last write time, so editing the file automatically invalidates its stale pages; the cache keeps up to ten documents and prunes the least recently used ones
- Added the
DiskCacheHitscounter reporting how many page renderings the disk cache saved
Version 3.217.0
Added
- Added the
PDFlibViewerActionsunit with twenty ready-madeTActiondescendants forTPDFlibViewer, so toolbars and menus work without glue code: page navigation (First/Prior/Next/Last), zoom (In/Out/FitWidth/FitPage/ActualSize), view rotation (clockwise/anticlockwise), printing, file open and save-as dialogs, copy selected text, and the five mouse-tool mode switches - Each action targets a viewer through its
Viewerproperty and keeps its enabled state (document open, page position, selection present) and checked state (active zoom fit or mouse tool) up to date automatically; all actions register in the losLab PDF category for the Action List editor - Added
TPDFlibViewer.EffectiveZoomPercentreporting the zoom actually in effect (including computed fit-width/fit-page factors) so zoom steps can build on it
Version 3.216.0
Added
- Added search-hit highlighting to the
TPDFlibViewercontrol:HighlightSearchHitssearches the whole document and paints a translucent bar over every match that stays in place while scrolling, zooming and rotating, withClearSearchHighlights,SearchHighlightCountand a configurableSearchHighlightColor TPDFlibSearchPanel.RunSearchnow also paints the hit bars in the attached viewer (the newHighlightInViewproperty, on by default, turns this off), so search results are visible on the pages, not just in the hit list
Version 3.215.0
Added
- Added mouse tool modes to the
TPDFlibViewercontrol through the newViewerModeproperty:vmSelecttext selection (default),vmHandpan-by-dragging with a grab cursor (a plain click still follows links),vmZoommarquee zoom that magnifies the dragged band to fill the viewport,vmSnapshotregion capture to the clipboard, andvmHighlightpersistent translucent region highlighting - Added
CaptureRegionto render any client region (pages plus highlights) into a caller-owned bitmap, theOnSnapshotevent andSnapshotToClipboardswitch for snapshot handling, andAddHighlightRegion/ClearHighlightRegions/HighlightRegionCountwith a configurableHighlightColorfor page-anchored highlights that survive zoom, rotation and navigation
Version 3.214.0
Added
- Added printing to the
TPDFlibViewercontrol:PrintDocshows the standard Windows print dialog (printer choice, page range, copies, collation) and hands the job to the library's printing engine, whilePrintDoc(False)prints the whole document to the default printer without any UI - Added
PrintDocRangefor fully programmatic viewer printing with an explicit printer name, page range, copy count and collation flag
Version 3.213.0
Added
- Added view rotation to the
TPDFlibViewercontrol:RotateClockwise90andRotateAntiClockwise90turn the displayed pages in 90-degree steps, and theViewRotationproperty reads or sets the angle directly (0, 90, 180 or 270) - Rotation is a pure view attribute: the document is never modified, link clicking and text selection keep working at every angle, fit-width and fit-page zoom modes adapt to the rotated page shape, and opening a new document resets the view to 0 degrees
- Rotated page bitmaps are cached per angle, so switching between angles reuses previous renderings instead of re-rendering
Version 3.212.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept simple FormCalc-style predicate selectors such as$data.Receipt.Detail.[Total_Price > 200].Descriptionand update every matching data node when a predicate selects a subset
Version 3.211.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept Data DOM class selectors#dataGroupand#dataValuewith numeric or wildcard occurrences, allowing class-based paths such as$data.Receipt.#dataGroup[0].#dataValue[0]
Version 3.210.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept the$recordroot in non-record-processing packets, so paths such as$record.Taxand$record/Detail[0]/Total_Priceresolve from the outer data record element
Version 3.209.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard border style attributes
width,style, anddashesfrom PDF annotation/BSvalues, and annotation imports restore those attributes on inserted annotations
Version 3.208.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
creationdateandopacityattributes from PDF annotation/CreationDateand/CAvalues, and annotation imports restore those attributes on inserted annotations
Version 3.207.0
Changed
- Improved XFDF annotation interchange: annotation exports now write standard
flagsnames from PDF annotation/Fvalues, and annotation imports restore those names to the inserted annotation flags
Version 3.206.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept direct child wildcard selectors such as$data.Receipt.*.Total_Priceto read or update matching child branches without selecting same-name fields on the parent node
Version 3.205.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept descendant selectors such as$data..Total_Priceand$data.Receipt..Total_Priceto read or update the first matching descendant data node
Version 3.204.0
Changed
- Improved XFA datasets SOM path compatibility:
GetXFAFormFieldValueandSetXFAFormFieldValuenow accept theparentproperty in paths such as$data.Receipt.Detail[1].parent.Taxto read or update a selected node's parent sibling data
Version 3.203.0
Changed
- Improved XFA datasets SOM occurrence handling:
GetXFAFormFieldValueandSetXFAFormFieldValuenow support[*]selectors such as$data.Receipt.Detail[*].Total_Priceto read or update every matching repeated data node
Version 3.202.0
Changed
- Improved XFA SOM path compatibility: XFA datasets and template field APIs now preserve literal periods in slash-delimited field paths and accept escaped periods such as
Line\.Itemin dot-delimited SOM paths
Version 3.201.0
Changed
- Improved XFA datasets path compatibility: XFA field value APIs now accept slash-delimited paths after standard data SOM roots such as
$data/...,xfa.datasets.data/..., andxfa.datasets/...
Version 3.200.0
Changed
- Improved XFA datasets SOM compatibility: XFA field value APIs now accept the standard
!data...short form, including slash-delimited!data/...paths
Version 3.199.0
Changed
- Improved XFA template path compatibility: template editing APIs now accept slash-delimited field paths returned by XFA field-name enumeration, including
$template/...paths
Version 3.198.0
Changed
- Improved XFA datasets namespace compatibility: field value APIs now read and update data nodes by local XML name when the business data inside the datasets packet uses its own namespace prefix, and field-name enumeration returns prefix-free paths
Version 3.197.0
Changed
- Improved XFDF annotation interchange: annotation exports now include the common
nameanddateattributes from PDF/NMand/M, annotation imports restore those values on inserted annotations, andSetAnnotStrPropertynow accepts tag 104 for annotation modified dates
Version 3.196.0
Changed
- Improved XFA field-name enumeration: field list APIs now scan every top-level data record in the datasets packet and return leaf data fields without adding container groups as fields
Version 3.195.0
Changed
- Improved XFA datasets compatibility: XFA field value APIs now read and update complete XDP packets whose datasets packet uses an unprefixed
dataelement
Version 3.194.0
Fixed
- Improved XFA template field updates: XFA template field APIs now accept standard template SOM roots such as
$templateandxfa.template, and template-only changes in complete XDP streams are saved correctly
Version 3.193.0
Changed
- Improved XFA field addressing: XFA field value APIs now accept standard data SOM roots such as
$dataandxfa.datasets.datain addition to relative field paths
Version 3.192.0
Changed
- Improved XFA XML packet handling: XFA streams with UTF-16 byte order marks or UTF-16 XML byte patterns now decode before XML parsing, so UTF-16 encoded form values remain available through XFA field read/write APIs
Version 3.191.0
Changed
- Improved XFA packet authoring:
SetXFAFromStringnow creates the requiredAcroFormcontainer when a document does not already have form data, replaces stale parsed XFA state when a complete XFA packet is stored, and keeps the saved packet available through XFA field read/write APIs
Version 3.190.0
Changed
- Improved XFDF annotation interchange: annotation exports now write the common
colorattribute from the PDF/CRGB array, and annotation imports now restorecolor="#RRGGBB"values into the inserted annotation color array
Version 3.189.0
Added
- Added XFDF annotation interchange APIs:
ExportAnnotationsToXFDF,ExportAnnotationsToXFDFString,ImportAnnotationsFromXFDFandImportAnnotationsFromXFDFStringnow read and write ISO 19444<annots>data for text-style annotation comments, including page, rectangle, title, subject and plain contents data
Version 3.188.0
Changed
- Improved XFDF rich text field import: fields with
<value-richtext>now preserve the rich text XML in the fieldRVvalue while still applying the plain<value>fallback when present
Version 3.187.0
Changed
- Improved XFDF form-data interchange for multi-select choice fields: repeated
<value>elements now import into the selected-value array, and exporting a multi-select choice field now writes one<value>element per selected item instead of flattening them into one escaped text node
Version 3.186.0
Changed
- Improved XFDF form-data export for rich text fields: fields with an
RVrich text value now include a<value-richtext>element while preserving the plain<value>fallback
Version 3.185.0
Changed
- Improved XFDF form-data import for rich text fields: when a field provides
<value-richtext>without a plain<value>, the importer now extracts the XHTML text content and applies it to the matching AcroForm field instead of skipping the field
Version 3.184.0
Changed
- Improved XFDF form-data interchange: exports now use the standard XFDF namespace with
xml:space="preserve", emit nested<field>elements for hierarchical AcroForm names, skip non-terminal parent field values, write file exports as UTF-8, and import whitespace-flexible XFDF with nested fields, single-quoted attributes, CDATA, XML entities, and numeric character references
Version 3.183.0
Added
- Added
SanitizeDocument(Flags)which strips sensitive content in one call: removes all global JavaScript, removes the catalog OpenAction, strips /A actions from every annotation, blanks Author/Subject/Keywords/Creator/Producer metadata (both /Info and XMP), and optionally deletes all annotations. Flag bitsSANITIZE_JAVASCRIPT/SANITIZE_ACTIONS/SANITIZE_METADATA/SANITIZE_ANNOTATIONS/SANITIZE_OPEN_ACTIONcombine;SANITIZE_ALLapplies every strip. Closes the classic data-leak hole where redaction removes visible content but leaves metadata or hidden scripts recoverable - Added
TPDFAnnots.RemoveAnnotAction(Index)to strip the /A action dictionary from an individual annotation (used by SanitizeDocument, also useful standalone)
Version 3.182.0
Added
- Image elements returned by
EnumPageElementsnow carry their real placement rectangle (Left/Top/Right/Bottom) instead of zeros. Backed by a newTPDFContentProgram.EnumImagePlacementsmethod that walks the content stream tracking the CTM (cm/q/Q) and maps eachDooperator's 1x1 unit square into page coordinates - Added four showcase demos: DocumentProperties (DocInfo/page-box/rotation/transition/viewer-preferences/XMP round-trip), FormProperties (per-field property grid: type/value/readonly/MaxLength/MultiLine/description), SignatureValidator (enumerate signature fields + verify + signer certificate), Reader (VCL TPDFlibViewer with open/navigate/zoom/copy-text)
Version 3.181.0
Added
- Added
SetXMPPropertyexposing the existing schema-aware XMP engine (PDFlibXMP) through the public facade: set any Dublin Core (dc:), XMP Basic (xmp:), Adobe PDF (pdf:), PDF/A ID (pdfaid:), PDF/UA ID (pdfuaid:), or XMP Media Management (xmpMM:) property by namespace + key without hand-writing RDF XML - Added
ImportFormDataFromFDF/ImportFormDataFromFDFStringwhich parse an FDF /Fields array (each<< /T (name) /V (value) >>) and apply each value to the matching AcroForm field by title, inverting the EscapePDFText octal/paren escaping. Closes the asymmetric export-only gap - Added
ExportFormDataToXFDF/ExportFormDataToXFDFString/ImportFormDataFromXFDF/ImportFormDataFromXFDFStringfor XFDF (XML Forms Data Format) bidirectional interchange - the modern XML counterpart of FDF - Made the six namespace-scoped XMP setters (
SetDublinCore,SetXMPBasic,SetAdobePDF,SetPDFA,SetPDFUA,SetXMPMM) public onTPDFlibXMPso advanced callers can drive the engine directly
Version 3.180.0
Added
- Added
SearchAndReplaceTextInContentwhich performs TRUE content-stream text replacement (rewriting the Tj/TJ/'/" show-text operators in place viaTPDFContentProgram.ReplaceTextRun), unlike the existing mask-basedSearchAndReplaceTextthat only overlays a rectangle on top of the original glyphs. The original text is gone from the stream and cannot be recovered. Locates hits viaSearchText, maps each hit rect to its covering instruction viaFindInstructionsInRect, rewrites, and writes the layer back
Version 3.179.0
Added
- Added a structured internal logger (
TPDFlibLogger) in a newLib/PDFlibLogger.pasunit with four levels (Debug/Info/Warn/Error), a host callback (OnLog), an optional thread-safe file sink, and an error-code-to-message map (PDFlibErrorMessage) that finally gives the existing numeric codes (1xx/3xx/4xx/5xx) human text. Exposed onTPDFlibvia theLoggerproperty - Added
RenderPagesToFilesParallelwhich renders a page range to one file per page using aTTaskpool with oneTPDFlibinstance per worker (TPDFlib is not thread-safe) and per-threadCoInitializefor GDI+ apartment safety. Scales near-linearly with CPU cores for CPU-bound raster output
Version 3.178.0
Added
- Added
EnumCertificatesto enumerate every certificate in a Windows system store ("MY", "Root", ...) returning subject, issuer, serial number, validity window, HasPrivateKey, and Qualified (eIDAS QCStatements extension, OID 0.4.0.1862.1.7, detected via a new built-in DER decoder in PDFlibASN1) - replaces the previous single-cert-by-CNSetSignProcessCertFromStorelimitation - Added
SetSignProcessCertFromStoreByHandleto select a signing certificate by raw PCCERT_CONTEXT handle obtained from enumeration, letting callers pick by any criterion (qualified filter, validity, fingerprint) rather than only by Subject CN - Added
RedactRegionwhich truly removes text, vector paths, and image XObjects whose painted area intersects a rectangle (editing the content stream so removed content cannot be recovered, unlikeMaskRectwhich only covers it), with optional black fill and /Redact annotation. Backed by a CTM-tracking content-stream analyser in PDFlibContentModel (FindInstructionsInRect) - Added minimal DER decoder functions (
DERDecodeLength,DERFindExtensionByOID) to PDFlibASN1 for in-process certificate extension inspection without CryptDecodeObjectEx
Version 3.177.0
Added
- Added page stitching APIs that compose existing pages into new layouts via vector Form XObject capture (preserving full vector fidelity, unlike content-stream concatenation):
StitchPageOverlayoverlays one page onto another at a position with optional opacity,StitchPagesSideBySideplaces two pages left/right on a new wider page, andStitchPagesVerticallystacks a page range into a new tall poster-style page - Added a composable watermark template layer in a new
Lib/PDFlibWatermark.pasunit:TPDFlibWatermarkBasewith nine-point positioning (wpTopLeft..wpBottomRightpluswpCustom),TPDFlibTextWatermark,TPDFlibImageWatermark, andTPDFlibCompositeWatermarkwhich applies a list of sub-watermarks recursively across a shared page range - Added
TPDFlib.ApplyWatermarkas a convenience entry point that delegates to a watermark template's own page range and settings
Version 3.176.0
Added
- Added named render-output format constants (
PDF_RENDER_BMP,PDF_RENDER_EMF,PDF_RENDER_EMFPLUS,PDF_RENDER_EMF_DUAL, etc.) that map 1:1 to the integerOptionsvalues accepted byRenderPageToFile,RenderPageToStream,RenderPagesToFiles, andRenderDocumentToFile - Added
TPDFlibMetafileFormatenum and the convenience methodsRenderPageToMetafileStreamandRenderPageToMetafileFile, which accept a named metafile variant (mfEMF, mfEMFPlus, mfEMFDual, mfWMF) instead of a bare integer - Added EMF+ Dual output mode (Options value 11 / mfEMFDual), which records both GDI and GDI+ commands in the same metafile for compatibility with older GDI-only consumers
- Added
TPDFlibClipboardFormatenum andRenderPageToClipboard, which places a rendered page on the Windows clipboard as an enhanced metafile (CF_ENHMETAFILE), a DIB bitmap (CF_DIB), the page Unicode text (CF_UNICODETEXT), or all three at once - Added a new
Lib/PDFlibClipboard.pasunit with low-level Win32 clipboard placement helpers used byRenderPageToClipboard - Added full per-monitor DPI awareness to
TPDFlibViewer: a new publicScreenDPIproperty, aCreateWndoverride that auto-detects the host monitor DPI viaGetDpiForWindow(with aGetDeviceCapsfallback), and aWM_DPICHANGEDhandler that rebuilds the layout and clears the bitmap cache when the window moves between monitors - Added
TPDFRenderer.SetEMFPlusMetafileTypeto select between EMF+ Only and EMF+ Dual recording at the renderer level
Fixed
- Fixed the
RenderPageToFilereference page where the Options value list was misplaced in the Page row and the Options cell was empty
Version 3.175.3
Added
- Added a Lib/PDFlibTableExport.pas unit that renders any TDataSet (FireDAC, ClientDataSet, query result) into a paginated PDF table with styled header, zebra striping, right-aligned numeric columns, and automatic page continuation, plus a Demo/Delphi/DataSetExport console demo that loads the RAD Studio customer.FDS sample via FireDAC and exports it
Version 3.175.2
Added
- Added end-to-end Demo/ReportBridges projects that build a minimal report in FastReport, QuickReport, and ReportBuilder and export it to PDF through the matching Addons bridge, with a dedicated build-ReportBridges.cmd that supplies the engine source paths and gating symbols so the standard demo build still compiles the projects as stubs
Version 3.175.1
Added
- Added a Delphi JBIG2 options matrix demo that sweeps SymbolExtract, SkipBlackDots, BlackDotSize, and LossyLevel combinations against CCITT G4 and Flate baselines, with per-row PDF, CSV, and summary outputs
- Added a Delphi Pattern showcase demo covering axial and radial RGB shaders, a Coons-patch mesh shader, and a custom tiling pattern applied as fill, stroke, and text colour
- Added a Delphi CCITT fax matrix demo comparing Group 3 1-D, Group 3 2-D, and Group 4 compression with BlackIs1 and Interpolate option bits, reporting each output size and the resulting /Filter name
- Added FastReport, QuickReport, and ReportBuilder export bridges under Addons that render a prepared report into a PDFlibPas PDF via the engine's native object, metafile, and DrawCommand surfaces respectively
Version 3.175.0
Changed
- Expanded the WorkflowGallery demo with an annotation variant matrix that records text highlight fills, markup styles, note icons, free text, caret, and stamp annotations in companion CSV and HTML reports
Version 3.174.0
Changed
- Expanded the C++Builder AdvancedWorkflowMatrix demo to map action navigation, PDF/A and AcroForm workflows, font diagnostics, streaming delivery, and the latest scan-compression helpers into the generated matrix reports
Version 3.173.0
Added
- Added the DeliveryWorkflowMatrix Delphi demo for streamed Web and CGI PDF output, page-thumbnail validation, and watermark delivery workflows using one generated PDF byte buffer
Version 3.172.0
Added
- Added outline tree convenience APIs for ordered sibling insertion, child creation, subtree deletion, and preorder outline enumeration with parent, sibling, level, destination page, open-state, and title details
Version 3.171.0
Added
- Added the FontDiagnosticsMatrix Delphi console demo for CJK and Unicode font paths, TrueType subset updates, installed-font probes, document font enumeration, and font diagnostics reports
Version 3.170.0
Added
- Added the CanvasMigrationMatrix Delphi console demo for Canvas DC migration, raw content and path entry points, Delphi color helpers, pattern-filled text, watermarking, page thumbnail workflows, and rendered validation previews
Version 3.169.0
Added
- Added dedicated LayerCompositionMatrix, TransparencyMaskMatrix, and ComplianceFormWorkflowMatrix Delphi console demos for optional-content print/export policy, Pattern/Form XObject composition, transparency mask comparison, PDF/A-1b success and failure examples, AcroForm action workflows, appearance rebuilds, and visible signature templates
Version 3.168.0
Added
- Added dedicated ImageCompressionMatrix and SecurityPermissionMatrix Delphi console demos with generated PDF, CSV, and HTML reports for image compression strategy selection, scan compression, JPEG render quality, and encrypted permission profile auditing
Version 3.167.0
Added
- Added named helper APIs for JBIG2 bitmap encoding, EMF import options, AcroForm event actions, and chained actions so callers can use explicit option switches instead of composing integer bitmasks manually
Version 3.166.0
Added
- Added a runnable C++Builder AdvancedWorkflowMatrix console demo with PDF, CSV, and HTML outputs that map advanced canvas migration, EMF import, image compression, AcroForm, signature, security, PDF/A, optional-content, pattern, and Form XObject workflows to C++Builder project entry points
Version 3.165.0
Added
- Added a Delphi action navigation matrix demo that demonstrates open-document actions, document-level JavaScript, embedded-file links, remote GoTo links, AcroForm event actions, Submit/Reset/Hide link helpers, and chained Next actions with PDF, CSV, and HTML outputs
Fixed
- Fixed remote file link helpers so AddLinkToFile, AddLinkToFileEx, AddLinkToFileDest, and local file launch links create one annotation and return instead of looping indefinitely
Version 3.164.0
Added
- Adicionada uma demo de matriz de verificação PDF/A para Delphi que verifica rejeição antecipada ou decisões de caminho permitido para a configuração do modo PDF/A, transparência, modos de mesclagem, criptografia, JavaScript, multimídia, arquivos incorporados e fluxos de trabalho de arquivos associados do PDF/A-3, com relatórios PDF, CSV e HTML gerados
Version 3.163.0
Added
- Adicionada uma matriz de integração ReportAdapter explícita para FastReport, QuickReport, ReportBuilder, DBGrid e caminhos personalizados de exportação de canvas, com saída CSV e HTML de mapeamento gerada e uma página PDF que mostra a estratégia de adaptador reutilizável
Version 3.162.0
Added
- Adicionada uma matriz de demonstração de fluxo de trabalho avançado que gera saídas concretas para migração de canvas, opções de importação EMF, comparações de compressão de imagens, fluxos de trabalho de ações AcroForm, assinaturas vazias visíveis, permissões de segurança, verificações PDF/A-1b, conteúdo opcional, padrões de mosaico, Form XObjects, exportação de tabela no estilo DBGrid e relatório de pico de memória para arquivos grandes
Version 3.161.0
Added
- Adicionadas ajudas Delphi para construção compacta de ações de abertura de documento, ações de evento de visibilidade de campo de formulário, definidores de cor TColor e cinza, e injeção direta de fluxo de conteúdo bruto, caminho, texto e matriz
Version 3.160.0
Added
- Adicionadas ajudas Delphi para compressão de imagens digitalizadas de bitmap para JBIG2, configuração em um único passo de máscaras de imagem e transparência por cor-chave, encadeamento de ações GoTo e nomes de evento AcroForm legíveis para JavaScript ou atribuição de ações existentes
- Estende
ImportEMFFromFileExeImportEMFFromStreamExpara que suas flagsOptionspossam forçar importação de bitmap, habilitar recompressão JPEG de imagem colorida EMF e solicitar controles de processamento GDI+
Version 3.159.1
Changed
- Melhora
SaveToStreame o salvamento do fluxo de saída vinculado para que grandes objetos de fluxo PDF sejam escritos em blocos limitados em vez de copiar cada objeto de fluxo para uma única string de saída intermediária
Version 3.159.0
Added
- Adicionadas ajudas de posicionamento de imagem que desenham ou ajustam uma imagem especificada e liberam imediatamente seu handle depois, com pontos de entrada Delphi, DLL e ActiveX para menor pico de memória em fluxos de trabalho de geração de imagem de uso único
- Adicionado
RenderPageToMonochromeFileExpara renderização BMP de 1 bit com conversão por limiar e limpeza isolada de pixels pretos antes dos fluxos de trabalho de compressão de imagens digitalizadas
Version 3.158.1
Added
- Adicionadas demos Delphi de fluxo de trabalho para exportação reutilizável no estilo relatório, importação de texto rico do RichEdit para EMF e cenários combinados de miniatura de página, anotação, Form XObject, tabela, compressão, JavaScript e saída em fluxo vinculado
Version 3.158.0
Added
- Adicionadas APIs de controle de criptografia de metadados com pontos de entrada Delphi, DLL e ActiveX: SetEncryptMetadata pode escrever PDFs de segurança Standard com fluxos de metadados XMP não criptografados, enquanto GetEncryptMetadata informa o estado /EncryptMetadata pendente ou carregado
Version 3.157.0
Added
- Adicionadas APIs de desenho direto de padrões de mosaico com pontos de entrada Delphi, DLL e ActiveX: BeginTilingPattern cria uma superfície temporária de desenho da célula do padrão, EndTilingPattern a registra como um padrão reutilizável e CancelTilingPattern descarta a construção sem deixar um padrão nomeado
Version 3.156.0
Added
- Adicionadas ajudas Delphi para fluxos de saída vinculados:
BeginOutputToStream,EndOutputStream,CancelOutputStreameOutputStreamActivepermitem que código de streaming, web e exportação de relatórios vincule umTStreamde destino, finalize-o por meio do escritor fragmentado existente ou cancele o destino pendente sem assumir a propriedade do fluxo
Version 3.155.0
Added
- Adicionados
Abort,AbortedeResetAbortpara chamadores Delphi, DLL e ActiveX, de modo que os aplicativos possam marcar uma instância como cancelada e impedir que as operações de salvamento ou anexação de saída comecem até que a sinalização seja limpa
Version 3.154.0
Added
- Adicionadas ajudas de miniatura de página para opções de importação de imagem e fontes em memória, pesquisa de grupos de conteúdo opcional e definidores de estado por nome de grupo, além de
SetOpenActionNamedDestinationpara saltos na abertura do documento por destinos nomeados
Fixed
GetDestNameagora resolve handles explícitos de matrizes de destino, inclusive matrizes retornadas por uma ação nomeada de abertura de documento
Version 3.153.0
Added
- Adicionadas APIs de conveniência para ações de formulário encadeadas, gatilhos de campo Hide e ImportData, estados iniciais de grupo de conteúdo opcional, importações EMF opcionais e importações de imagem transparente por cor-chave
Version 3.152.0
Added
- Adicionada criação automática de links URL para desenho de texto, ajudas de importação de imagem CCITT Group 3/4, ajudas de imagem direta JBIG2, wrappers de importação EMF expandidos, ajudas de anexação de máscara de imagem, criação de campo de assinatura visível e ajudas de eventos/ações de campo de formulário para fluxos de trabalho JavaScript, SubmitForm e ResetForm
Version 3.151.0
Added
- Adicionados
DrawPie,DrawChord,DrawEllipticPieeDrawEllipticChordpara desenho explícito de arcos circulares e elípticos fechados com modos de contorno, preenchimento ou contorno e preenchimento
Version 3.150.0
Added
- Adicionados
NewGraphicsStateeSetGraphicsStatepara que os chamadores possam criar recursos ExtGState reutilizáveis para combinações de transparência de preenchimento, transparência de traço, largura de linha, terminação de linha, junção de linha e limite de miter
Version 3.149.1
Fixed
- Corrigidos os IDs de dispatch ActiveX duplicados para os métodos Form XObject e limite de miter, para que chamadores COM com vínculo tardio resolvam cada método sem ambiguidade
Version 3.149.0
Added
- Adicionado
SetMiterLimitpara controlar as proporções do limite de miter do traço em caminhos que usam junções de miter - Expostos
BeginFormXObject,EndFormXObjecteCancelFormXObjectpor meio das APIs DLL e ActiveX
Version 3.148.0
Added
- Adicionadas APIs reutilizáveis de construtor Form XObject:
BeginFormXObject,EndFormXObjecteCancelFormXObjectpermitem que os chamadores desenhem um modelo reutilizável com chamadas normais de desenho de página e o coloquem repetidamente por meio das APIs de desenho de página capturada
Version 3.147.0
Added
- Adicionados
SetTextTilingPatterneSetLineTilingPatternpara que padrões de mosaico de página capturada possam ser reutilizados para texto, sublinhado e gráficos traçados sem duplicar comandos de desenho
Fixed
- As cores do shader traçado e do padrão de mosaico agora escrevem o operador de cor de padrão de traço em vez de atualizar o estado de cor sem traço
Version 3.146.0
Added
- Adicionados
BeginOptionalContenteEndOptionalContentpara que os chamadores possam marcar apenas os comandos de desenho subsequentes com um grupo de conteúdo opcional sem reescrever o fluxo de conteúdo existente
Fixed
- Os operadores de conteúdo marcado de fechamento de escopo agora são descarregados imediatamente quando os escopos de conteúdo opcional, PDF marcado ou artefato são fechados no fim de um fluxo de conteúdo
Version 3.145.0
Added
- Adicionado
SetTransparencyExpara que os chamadores possam definir valores separados de transparência de preenchimento e traço para texto e gráficos desenhados posteriormente, mantendo o comportamento existente de atualização automática para PDF 1.4
Version 3.144.0
Added
- Adicionado
AddLinkToNamedDestinationpara que uma área interativa da página possa saltar para um destino nomeado do mesmo documento sem resolver a página de destino no momento da criação do link
Fixed
- Os leitores de ações de anotação agora retornam nenhuma ação para páginas sem anotações em vez de desreferenciar uma cache de anotações vazia
Version 3.143.0
Added
- Adicionadas APIs de gestão de ações de campos de formulário para que os chamadores possam associar uma ação existente a um acionador de campo, inspecionar a ação de acionador tipada e remover ações de campo principais ou adicionais
Fixed
FormFieldJavaScriptActionagora rejeita documentos PDF/A e nomes de acionador inválidos em vez de escrever dicionários de ação de campo não conformes
Version 3.142.0
Added
- Adicionadas APIs de encadeamento de ações para permitir que os chamadores anexem ações seguintes URI, nomeadas e JavaScript a uma anotação, um sumário ou uma ação de campo de formulário existentes e inspecionem as ações encadeadas através de
GetActionNextCounteGetActionNextInfo
Version 3.142.0
Added
- Adicionadas APIs de encadeamento de ações para que os chamadores possam anexar próximas ações URI, nomeadas e JavaScript a uma anotação, um sumário ou uma ação de campo de formulário existentes, e inspecionar as ações encadeadas por meio de
GetActionNextCounteGetActionNextInfo
Version 3.141.0
Added
- Added
AddLinkToSubmitFormandAddLinkToResetFormso page hotspots can submit or reset AcroForm fields through standard PDF actions without JavaScript
Version 3.140.0
Added
- Added
AppendToStreamso incremental update workflows can write directly to a caller-provided stream instead of first materialising the update as anAnsiString
Changed
SaveToStreamnow serializes directly into the target stream, andAppendToString(1)now returns only the incremental update section without copying the original source bytes into a temporary buffer
Version 3.139.0
Added
- Added
GetAnnotReplyToandGetAnnotReplyTypeso threaded annotation replies can be inspected through named read-side accessors instead of generic annotation property tags
Version 3.138.0
Added
- Added the Delphi
DocumentInspectionWorkbenchsample to batch-inspect PDFs with combined font diagnostics, image sampling, color-space discovery, load timing, and JSON, CSV, and HTML reports
Version 3.137.0
Added
- Added the Delphi
ImageDecodeBenchmarksample to measure page image discovery, decoded image bytes, and page color-space discovery with CSV and HTML timing reports
Version 3.136.0
Added
- Added
GetDocumentFontDiagnosticsandTPDFlibFontDiagnosticsto summarize document font embedding, subsetting, Standard 14, CID, Type3, and unknown-font counts in one call
Version 3.135.0
Added
TPDFlibSignatureVerifier.VerifySignerCertificateChainnow builds the embedded signer certificate chain with Windows CryptoAPI and returnsvsValidonly when the chain satisfies the Windows base trust policy, while self-signed or otherwise untrusted signer certificates returnvsInvalidwithout changingVerifySignature's content-integrity result
Version 3.134.0
Fixed
TPDFlibSignatureVerifier.VerifySignaturenow validates legacyadbe.pkcs7.sha1signatures, returningvsValidwhen the signed digest matches the covered/ByteRangebytes andvsInvalidafter covered content changes
Version 3.133.0
Adicionado
- Adicionado
RenderPagesToFileseDARenderPagesToFilespara renderizar intervalos arbitrários de páginas para arquivos de saída numerados enquanto reutiliza a configuração do renderizador através das páginas selecionadas
Version 3.132.0
Adicionado
- Adicionados os carimbadores de conveniência
AddPageHeadereAddPageFooterque posicionam texto em uma margem fixa superior ou inferior em cada página de um intervalo, com alinhamento à esquerda/centro/direita e expansão de tokens (&Ppágina atual,&Ntotal de páginas,&Ddata,&Ttítulo do documento,&&caractere \'E\' comercial literal) StampTexteStampImagecomsoUnderlayagora posicionam verdadeiramente o conteúdo sob o conteúdo existente da página ao adicionar uma nova camada de conteúdo no início (anteriormente, desenhava por cima comosoOverlay); apoiado por um novo método de árvore de páginaPrependContentLayer
Version 3.131.0
Adicionado
- Adicionado
ScalePage(ScaleX, ScaleY, Anchor)que dimensiona o conteúdo da página selecionada ao envolver cada camada de conteúdo em um bloco de estado gráficoq sx 0 0 sy tx ty cm ... Qe redimensionando a MediaBox e a CropBox; a âncora (Anchor) mantém a origem inferior esquerda (0), centraliza o conteúdo (1) ou mantém o canto superior esquerdo (2) - Estendido
EnumPageElementscom um novo tipo de elementoekPath: cada página agora também relata os seus caminhos vetoriais com uma caixa delimitadora, contagem de pontos, flag de fechamento e operador de pintura, extraídos dos fluxos de conteúdo através do modelo de conteúdo estruturado
Version 3.130.0
Adicionado
- Adicionadas três APIs de otimização de tamanho de arquivo que encolhem os documentos carregados ao salvá-los novamente:
SubsetEmbeddedFontsreescreve cada programa de fonte TrueType incorporado (FontFile2) limitando aos caracteres Unicode que o documento realmente renderiza, através do serviçoCreateFontPackageda FontSub.dll;DownsampleImages(MaxDPI, Quality, Filter)decodifica cada XObject de imagem acima do DPI alvo, reamostra (box ou bilinear) e recodifica como JPEG ou PNG;NormalizeLZWStreamsreescreve cada fluxo ainda filtrado com LZWDecode para FlateDecode através do decodificador LZW e codificador Flate existentes, preservando os parâmetros de Predictor
Version 3.129.0
Adicionado
- Adicionadas APIs de criação de malha de sombreamento (mesh shading) para os quatro tipos de sombreamento que anteriormente possuíam apenas suporte a leitura/análise:
NewRGBFreeFormTriangleMesh(ShadingType 4, triângulos Gouraud de forma livre),NewRGBLatticeTriangleMesh(ShadingType 5, Gouraud em forma de malha (lattice-form)),NewRGBCoonsPatchMesh(ShadingType 6, malha de patch Coons) eNewRGBTensorPatchMesh(ShadingType 7, malha de patch de produto tensorial) — cada um constrói um padrão de sombreamento de malha nomeado a partir de uma lista plana de vértices ou patches com profundidade de bits de cor/coordenada selecionável e uma caixa delimitadora, selecionável comSetFillShader/SetLineShader/SetTextShadercomo os shaders axiais e radiais existentes
Version 3.128.0
Novidades
- Adicionada uma faixa de miniaturas para o visualizador:
TPDFlibThumbnailBarmostra uma miniatura de cada página, renderizada sob demanda conforme as linhas rolam para a exibição, com o número da página logo abaixo; clicar em uma miniatura salta o visualizador associado para aquela página — completando a família de controles do visualizador (visualizador, painel de favoritos, painel de pesquisa, miniaturas)
Version 3.127.0
Novidades
- Adicionado um painel de pesquisa para o visualizador:
TPDFlibSearchPanel.RunSearchpesquisa todo o documento associado e lista uma linha por ocorrência com o seu número de página e o texto correspondente; clicar em uma ocorrência salta o visualizador para aquela página
Version 3.126.0
Novidades
- Adicionado um painel de favoritos para o visualizador:
TPDFlibOutlineViewerlista a árvore de estrutura de tópicos (outlines) do documento com recuo (indentação) e salta o visualizador associado (viaAttachViewer) para a página de destino de um favorito quando clicado; é construído sobre uma classe base de painel reutilizável que os painéis laterais posteriores compartilham
Version 3.125.0
Novidades
- Adicionada seleção de texto ao controle do visualizador: arraste com o botão esquerdo do mouse para selecionar, pressione Ctrl+C ou chame
CopySelectedTextpara copiar a seleção para a área de transferência; o texto capturado fica disponível através da propriedadeSelectedText, ordenado de cima para baixo com quebras de linha entre as faixas - Adicionado
GetTextInRegion, que retorna o texto de uma região retangular da página diretamente — a mesma pesquisa baseada em blocos que a seleção do mouse usa, disponível para interfaces de seleção personalizadas
Version 3.124.0
Novidades
- O controle do visualizador agora pré-renderiza as páginas vizinhas em uma thread de fundo, para que a paginação para frente ou para trás mostre a próxima página instantaneamente; o worker (trabalhador) usa a sua própria instância de documento e entrega as renderizações finalizadas para o cache sem bloquear a interface do usuário
- Adicionada interatividade de link ao visualizador: clicar em uma anotação de link dispara
OnLinkClickcom o número da página e o mesmo resumo de ação tipada queGetAnnotActionInfoproduz (endereço web, destino do documento, ação nomeada e assim por diante);LinkActionAtPagePointexpõe o teste de colisão (hit test) subjacente para manipulação personalizada
Version 3.123.0
Novidades
- O controle do visualizador ganhou rolagem contínua:
SetDisplayModealterna oTPDFlibViewerentre exibição de página única e uma rolagem vertical contínua por todo o documento, com apenas as páginas visíveis na janela de visualização renderizadas e a página atual rastreando a posição de rolagem (disparandoOnPageChangeconforme as páginas entram na visualização) - As páginas renderizadas agora são mantidas em um cache de bitmap menos usado recentemente, para que a rolagem para frente e para trás não seja renderizada novamente; o orçamento de memória tem o padrão de 128 MB e se ajusta com
SetCacheLimit, removendo as páginas mais antigas quando o orçamento diminui ou enche - Adicionada rolagem com a roda do mouse e navegação pelo teclado ao visualizador: PageUp/PageDown (saltos de página no modo de página única, saltos de janela de visualização no modo contínuo), teclas de seta, Home e End
Version 3.122.0
Novidades
- Adicionado um controle de visualizador interativo de PDF:
TPDFlibVieweré um controle de rolagem VCL que abre um documento a partir de um arquivo ou se anexa a uma instância existente doTPDFlib, exibe as páginas por meio do mecanismo (engine) de renderização selecionado (GDI+, Cairo ou PDFium) e oferece navegação de página (GoToPage/NextPage/PrevPagecom um eventoOnPageChange) e controle de zoom — uma porcentagem fixa, ajustar à largura ou ajustar à página, recalculados automaticamente quando o controle redimensiona; páginas mais largas do que a janela de visualização ganham rolagem, páginas mais estreitas são centralizadas - Adicionado um pacote em tempo de design (
Package\PDFlibViewerPkg.dpk) que registra o controle na página da paleta PDF da losLab para uso arrastar-e-soltar (drag-and-drop) na IDE
Version 3.121.0
Novidades
- Formatação automática de script complexo em
DrawText: texto contendo caracteres em árabe, hebraico, índico ou outros scripts complexos é agora detectado e formatado automaticamente — formas de letras contextuais, ligaturas obrigatórias e ordem da direita para a esquerda saem corretamente sem alterações de código; os nomes standard-14 são mapeados para as suas fontes instaladas compatíveis com a métrica (Helvetica para Arial, Times para Times New Roman, Courier para Courier New) eGetTextWidthmede por meio da mesma passagem de formatação (shaping pass) para que o alinhamento permaneça consistente; O texto em latim, cirílico, grego e CJK mantém o seu caminho de desenho existente byte por byte - Adicionado
SetTextShapingpara alternar o roteamento automático (ativado por padrão; passe 0 para restaurar o comportamento exato anterior à formatação)
Version 3.120.0
Alterações
- As fontes complementares (companion fonts) de texto formatado agora são subdivididas (subsetted) na hora de salvar para apenas os glifos que o documento exibe, encolhendo dramaticamente os arquivos de saída (um programa de fonte completo de mais de um megabyte reduz para os glifos utilizados); a fonte subdividida mantém a sua numeração de glifo, carrega um nome
BaseFontcom uma tag da subdivisão (subset-tagged) e larguras reais do/Wpor glifo, além de obter um mapa ToUnicode que traduz cada glifo formatado de volta para os seus caracteres de origem — de modo que copiar ou extrair a saídaDrawShapedTextretorne a string original, incluindo ambas as letras por trás de uma ligatura lam-alef
Version 3.119.0
Novidades
- Adicionado desenho de texto de script complexo:
DrawShapedTextformata strings árabes, hebraicas e de outros scripts complexos antes de desenhá-las — formas de letras contextuais, ligaturas obrigatórias, como lam-alef, e ordenação da direita para a esquerda, tudo sai corretamente — e grava os glifos formados por meio de uma fonte Tipo 0 (Identity-H) associada incorporando todo o programa da fonte, então formas sem o seu próprio código de caractere são renderizadas de forma exata; uma fonte complementar é criada por face e reutilizada através de chamadas - Adicionado
GetShapedTextWidth, que mede o texto pela mesma passagem de formatação (shaping pass), então o texto ligado mede em sua verdadeira largura desenhada — utilize isto para alinhar à direita ou centralizar os parágrafos formatados
Version 3.118.0
Novidades
- Adicionada a base para modelagem de texto de script complexo: um novo binding do Uniscribe (usp10.dll) transforma strings árabes, hebraicas e outras de script complexo em sequências de glifos moldados e ordenados corretamente — formas árabes contextuais, ligaturas obrigatórias como lam-alef e ordenação da direita para a esquerda — relatando o índice do glifo da fonte, o avanço e o cluster do caractere de origem de cada glifo; este é o mecanismo de modelagem sobre o qual as versões posteriores baseiam o caminho de desenho e ele é carregado lentamente para que plataformas sem Uniscribe simplesmente mantenham o caminho por caractere existente
Version 3.117.0
Novidades
- Adicionada introspecção de perfil ICC:
GetOutputIntentICCInfofaz o parse do perfil ICC anexado ao OutputIntent do documento e relata a sua versão, classe de dispositivo, espaço de cor dos dados, espaço de conexão do perfil, intenção de renderização e contagem de componentes — útil para inspecionar a condição de impressão de arquivos PDF/A e PDF/X; o tratamento do espaço de cor ICCBased do renderizador agora também deriva a contagem de componentes do próprio cabeçalho do perfil quando o espaço de cor de um sombreamento (shading) não traz nem/Alternatenem/N
Version 3.116.0
Novidades
- Adicionado um modo de extração de texto consciente de tabela: a opção 10 do
GetPageTextagrupa as bordas esquerdas dos blocos de texto da página em posições de coluna globais e emite linhas separadas por guias (tabs), para que os layouts tabulares sejam extraídos como TSV prontos para importar, com as células alinhadas verticalmente permanecendo alinhadas através das linhas
Version 3.115.0
Novidades
- Adicionada imposição de página:
ImposePagesNUpdispõe cada página do documento em novas folhas em uma grade n-up (2-up, 4-up, 9-up ou qualquer organização de Colunas x Linhas) com cada página adaptada em proporção e centralizada na sua célula como conteúdo vetorial ativo, ou — com a opção booklet (livreto) — produz folhas em estilo saddle-stitch (grampeado à cavaleiro) cujo emparelhamento de páginas dobra-se num livreto quando impressas frente e verso (duplex) e empilhadas
Version 3.114.0
Novidades
- Estendidos os leitores de ação tipificada
GetAnnotActionInfoeGetOutlineActionInfoa mais quatro tipos de ações — Hide (com o número de alvos ocultos e o marcador hide/show), SubmitForm (URL de submissão e contagem de campos), ResetForm (contagem de campos) e ImportData (arquivo fonte) — e para expor o payload de nome das ações Nomeadas (por exemplo,NextPage); ambos os leitores agora compartilham de um parser, então os links de anotações e favoritos relatam a mesma informação
Version 3.113.0
Novidades
- Adicionados helpers de formatação de campos de formulário:
SetFormFieldNumberFormat(casas decimais, estilo de separador, estilo negativo e colocação de moeda),SetFormFieldPercentFormateSetFormFieldDateFormat(strings picture de data do Acrobat comomm/dd/yyyy), cada um escreve o par JavaScript de formatação padrão do Acrobat nas ações adicionais do campo — um filtro de digitação mais um formatador de exibição — então visualizadores em conformidade validam a entrada e renderizam valores formatados sem a necessidade de escrever JavaScript à mão
Version 3.112.0
Novidades
- Adicionada a criação de anotação de som (Sound):
AddSoundAnnotationFromFilelê um arquivo WAV PCM descompactado (8 ou 16 bits, mono ou estéreo) e embute as suas amostras por trás de uma anotação em formato de ícone de alto-falante como um fluxo/Soundusando a codificação sinalizada que a maquinaria de som do PDF espera, completando o trajeto de ida e volta (round trip) com os leitoresGetAnnotSoundToFile/GetAnnotSoundToStringjá existentes
Version 3.111.0
Novidades
- Adicionadas respostas de anotação em threads (ISO 32000-1 §12.5.6.3):
AddAnnotationReplyanexa uma resposta a qualquer anotação existente como uma anotação de Texto oculta, cujo/IRTfaz referência ao alvo com a relação de resposta/RT, portanto o Acrobat e outros visualizadores o exibem em thread (tópico) abaixo do alvo no painel de comentários; combine isso comAddAnnotationStatee o intercâmbio de comentários FDF para completar processos complexos de ida e volta (round trips) de revisões colaborativas
Version 3.110.0
Novidades
- Adicionada a renderização de sombreamento (shading) em malha e baseada em função, completando a cobertura de todos os sete tipos de sombreamento em PDF: as malhas de triângulo de Gouraud de forma livre (tipo 4), malhas de Gouraud em forma de reticulado (tipo 5), malhas de patch de Coons (tipo 6) e malhas de patch de produto tensor (tipo 7) são decodificadas de suas sequências de dados compactadas por bits — incluindo marcadores de patches de borda compartilhada, mapeamento de valores
/Decodee rampas opcionais de/Functionde cor — e são pintadas pelos gradientes de malha nativos do engine do Cairo; os sombreamentos baseados em funções (tipo 1) são aproximados mostrando (sampling) a função de sombreamento em seu domínio para uma grade fina de patch; os espaços de cor suportados englobam o DeviceRGB, DeviceGray, DeviceCMYK e alternativas do ICCBased (o engine do GDI+ não possui a primitiva de gradiente de malha e deixa as áreas sombreadas com malha sem pintar)
Version 3.109.0
Novidades
- Completada a estrutura (framework) de edição de conteúdo (fase 4) com edição a nível de texto: o
TPDFContentProgram.GetTextRunsenumera as instruções da página que mostram texto juntamente com o tamanho e o recurso da fonte ativos em cada uma (rastreando o estado da fonte por meio do aninhamento save/restore), eReplaceTextRunsubstitui o texto mostrado no mesmo local — uma verdadeira substituição de content-stream (fluxo de conteúdo) que mantém a posição, a fonte e as cores originais, em vez de recorrer a abordagens baseadas em overlay que escondem o texto antigo e o desenham novamente por cima
Version 3.108.0
Novidades
- Adicionado um modelo de objeto para geometria de página na estrutura (framework) de edição de conteúdo (fase 3): o
TPDFContentProgram.LiftPatheleva um objeto de caminho (operadores de construção move/line/curve/rectangle juntamente com os operadores clipping (recorte) e painting (pintura) que os finalizam) transformando-o numTPDFPatheditável, feito de sub-caminhos e segmentos; oTPDFPath.Transformaplica uma matriz afim a todo ponto (mova, dimensione, rotacione ou incline arte existente); oLowerPathescreve a geometria modificada por cima das instruções originais, deixando-a pronta para oWritePageContentLayer
Version 3.107.0
Novidades
- Estendida a estrutura (framework) de edição de conteúdo (fase 2) com conveniências a nível de instrução no
TPDFContentProgram: oInsertFromSourcefaz o parse de um trecho de conteúdo e une suas instruções em qualquer posição;SetOperandreescreve um único operando partindo de uma sintaxe de origem (renumere uma coordenada, repinte um preenchimento); oOperandTextlê um operando de volta;InstructionGroup,FindNextOpeFindNextGroupnavegam pela lista de instruções por operador ou pela categoria de operador padrão ISO 32000-1
Version 3.106.0
Novidades
- Adicionada a primeira fase da estrutura (framework) de edição de conteúdo estruturado: o
ParsePageContentLayerdecodifica uma camada do conteúdo da página para umTPDFContentProgrameditável — trata-se de uma lista de instruções, cada uma delas contendo um operador de conteúdo do PDF (todos os 73 operadores da Tabela 51 do ISO 32000-1) com os seus objetos de operando decodificados — e oWritePageContentLayerserializa o programa de volta para a página, para que chamadores (callers) possam analisar, inspecionar, excluir ou reordenar as instruções de desenho e reescrever a página;GetPageContentLayerCountinforma o número de camadas de conteúdo que são editadas de maneira independente; o emissor conserva o comportamento (uma viagem de volta [round trip] não modificada renderiza precisamente da mesma forma que os píxeis), operadores que ele desconhece sobrevivem sem alteração e as imagens incorporadas (inline) são transferidas literalmente
Version 3.105.0
Novidades
- Adicionado um modo de extração de texto em ordem de leitura: a opção 9 do
GetPageTextretorna o texto da página em ordem visual de leitura utilizando a análise de espaços em branco recursiva (XY-cut), assim os layouts de várias colunas saem coluna por coluna — um cabeçalho de largura total primeiro, logo, toda a coluna da esquerda, então a coluna da direita — em vez de intercalar as colunas linha por linha como as ordenações geométricas de cima para a esquerda fazem
Version 3.104.0
Novidades
- Adicionada introspecção de certificado de assinante para o verificador de assinaturas:
GetSignerCertificatedecodifica o payload do PKCS#7 do primeiro campo de assinatura e retorna um resumo tipificado do certificado de assinante (signer certificate) incorporado — sujeito e nomes de exibição de emissores, o número de série no formato de forma hexa (hex form) convencional, a janela de validação (validity window) em UTC (NotBefore/NotAfter) e um conveniente marcador reportando quer o certificado está, atualmente, dentro daquela janela ou não; o assinante será cruzado entre os certificados incorporados mediante emissor e número serial
Version 3.103.0
Novidades
- Adicionado o
NewRGBRadialShader, a versão radial doNewRGBAxialShader: ele realiza o registro (registers) de um gradiente radial com dois círculos já nominado (ShadingType 3, ISO 32000-1 §8.7.4.5.3), resultando num misto de (blending) duas cores RGB com cor suplementar possível de se dar para além dos círculos; você deverá selecioná-lo mediante os códigos já existentesSetFillShader,SetLineShaderouSetTextShaderna hora de usar a funcionalidade de pintura (paint circular "glow") do fundo (fills), da risca (strokes) e textos
Version 3.102.0
Novidades
- Adicionada a renderização de gradiente radial (ShadingType 3) (ISO 32000-1 §8.7.4.5.4): o mecanismo responsável pela renderização da página agora faz a pintura de sombreamentos radiais de dois círculos dos quais são servidos os operadores do
sh, da mesma forma como preenchimentos da matriz (shading-pattern fills), sendo acrescidos como recurso que faz amparo à opção anteriormente liberada de sombreamentos do tipo gradiente axial (ShadingType 2); recurso este disponibilizado mediante o motor GDI+ e o próprio Raster Engine (motor) do Cairo, dotados ambos de opções (multi-stop colour functions), de preenchimentos referentes ao tipo de paleta e tons como é o caso das cores e opções suportadas nas formatações seguintes: DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased ao mesmo em que dispõe da conduta e manuseio referidos mediante ação/Extend
Version 3.101.0
Novidades
- Adicionado os efeitos de borda nublados (cloudy border effects) (ISO 32000-1 §12.5.4): o
SetAnnotCloudyEffecttransforma a borda das opções de desenho, tais como a opção de quadrado (Square), círculo (Circle), bem como as escolhas e demarcações no estilo de formato (Polygon), além da aplicação em preenchimentos (FreeText annotation), tudo gerando uma imagem de marca e impressão comparada e assemelhada a um visual onde constam nuvens criadas (como uma nuvem revision), unidas pelas formas das elipses formadas pela gravação que incide num/BEpresente naquele sistema do formato que remete a um efeito de borda, o que é medido no patamar e intensidades de um a dois perante o formato Cloudy próprio dos estilos adotados perante o Acrobat e cujo patamar 0 faz uma posterior supressão e suspensão do formato ali empregado; no caso, a opçãoGetAnnotCloudyEffectpromove a retomada da leitura e as definições originárias da referida formatação (no caso, 0 = nuvem desativada e nas outras demais as referências são dadas por gradações de escala 1 a 2)
Version 3.100.0
Novidades
- Adicionados os estados de revisão de anotação (ISO 32000-1 §12.5.6.3):
AddAnnotationStategrava uma mudança de status de revisão para uma anotação existente ao anexar uma anotação de Texto oculta, da qual/IRTtem o alvo por mira, enquanto os códigos e indicações/State+/StateModelguardam os dados e indicativos relativos aos referidos "status" de andamento, servindo aos parâmetros do modeloReview(None/Accepted/Rejected/Cancelled/Completed) e ao formato doMarked(Unmarked/Marked), os quais figuram empregados pela própria sistemática atinente aos comentários do Acrobat;GetAnnotStateeGetAnnotStateModelrefazem a leitura destas demarcações originadas em texto voltando das condições dadas (apresentando em branco em quadros omissos)
Correções
- Corrigido o problema e erro referente a um cenário e quadro que bloqueava certas execuções, nas quais estavam incluídas referências cujos parâmetros baseados numa versão (uma pesquisa do nome e dados do certificado presente na estrutura do próprio Windows apontava a num determinado cenário onde não haveria o devido ingresso a certa biblioteca de vínculo dinâmico do DLL), procedendo à retificação nas versões que figuram nos cenários relativos às compilações no import do FDF (comment import), do âmbito inerente (page-range rotation), além de se proceder a uma formatação referente a certa demarcação própria nas bases (signature-flag paths)
Version 3.99.0
Adicionado
- Adicionadas APIs de impressão digital de documento e leitura de transição:
GetDocumentFileIDretorna o identificador permanente do documento a partir do array/IDdo trailer (primeiro elemento codificado em hexadecimal), útil como uma chave de cache estável ou impressão digital do documento;GetPageTransitioné o equivalente de leitura deSetPageTransition, retornando o estilo de transição como um valor tipadoTPDFlibPageTransitionmais a duração de exibição e duração da transição mapeando reversamente as entradas/Trans/S,/Dme/Marmazenadas
Version 3.98.0
Adicionado
- Adicionadas rotação de intervalo de páginas e introspecção de miniaturas:
RotatePageRangeaplica uma rotação de 0/90/180/270 a cada página em um intervalo (encapsulando aRotatePagede página única existente para que os chamadores não precisem mais de um loop por página);HasPageThumbnailinforma se uma página possui uma entrada/Thumb;GetPageThumbnailInfolê a largura, altura e bits por componente do XObject da imagem em miniatura
Version 3.97.0
Adicionado
- Adicionados leitores de propriedades estendidas de anotação:
GetAnnotColorlê o array de cor/C(0..1 RGB, com um sinalizador HasColor distinguindo “sem cor explícita” de “preto explícito”);GetAnnotBorderWidthlê/BS /W, recorrendo ao array/Borderlegado;GetAnnotOpacitylê o alfa do traço/CA(padrão 1.0);GetAnnotCreationDatelê o carimbo de data/hora/CreationDate;GetAnnotFlagslê o byte de sinalizadores de visibilidade/impressão/F
Version 3.96.0
Adicionado
- Adicionadas APIs de introspecção de segurança do lado da leitura:
IsEncryptedinforma se o documento carregado possui um dicionário/Encrypt;GetEncryptionLevelretorna uma força tipada (0=none, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) correspondendo às opções de criptografia do lado da gravação;GetUserPermissionsretorna a palavra de permissão/Pbruta para teste direto de bits;IsOwnerPasswordinforma se o documento foi aberto com a credencial de proprietário
Version 3.95.0
Adicionado
- Adicionadas impressão avançada e substituição de texto:
PrintDocumentAdvancedcontrola o DEVMODE completo da impressora (duplex, orientação, cor, qualidade de impressão, tamanho do papel, bandeja de papel) além de cópias/agrupamento por meio de um registro tipadoTPDFlibPrintSettings, aplicando cada campo não padrão via o mecanismo de perfil de impressora personalizada existente;SearchAndReplaceTextexecuta uma pesquisa em um intervalo de páginas e, para cada ocorrência, mascara o bloco de texto original com um retângulo branco opaco e redesenha o texto de substituição na origem do bloco com a fonte selecionada pelo chamador, espelhando o comportamento de sobreposição-substituição do PDFtoolkit SearchAndReplace
Version 3.94.0
Adicionado
- Adicionado intercâmbio FDF de anotação (“Export/Import Comments” do Acrobat):
ExportAnnotationsToFDFStringeExportAnnotationsToFDFpercorrem os/Annotsde cada página e serializam cada anotação como uma entrada/Type /Annotdentro de um array/AnnotsFDF, carregando/Subtype,/Contents,/Rect, o rótulo de autor/T,/Subje o índice/Pagebaseado em 0;ImportAnnotationsFromFDFStringeImportAnnotationsFromFDFanalisam esse FDF com uma pequena máquina de estado e recriam cada entrada como uma nova anotação na página correspondente, preservando o dicionário completo de anotações em vez de reduzi-lo a uma nota adesiva (sticky note)
Version 3.93.0
Adicionado
- Adicionadas APIs de certificação de assinatura e propriedades de campo de formulário:
SetSignProcessDocMDPtransforma a próxima assinatura produzida por um processo de assinatura em uma assinatura certificadora (de autor) anexando uma transformação/ReferenceDocMDP no nível 1/2/3 (sem alterações / preenchimento de formulário / anotações) e ativando o bit AppendOnly de/SigFlagsdo AcroForm;GetSigFlags/SetSigFlagsleem e gravam o byte bruto/SigFlagsdo AcroForm diretamente;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationeGetFormFieldAllowedValuesexpõem os bits de estilo/Ffpor campo, o alinhamento de texto/Qe o array de opções/Optcomo valores tipados
Version 3.92.0
Adicionado
- Adicionadas APIs de conveniência para exportação de anexos e campos de formulário:
SaveAllAttachmentspercorre a lista unificada de anexos (/EmbeddedFilesem nível de documento mais as anotações/FileAttachmentpor página) e grava cada stream em um diretório sob seu nome file-spec, desambiguando colisões com um sufixo numérico;RemoveFormFieldByNameresolve um nome de campo totalmente qualificado para o seu índice e o exclui;RenameFormFieldrenomeia um campo por nome sem uma pesquisa de índice separada
Version 3.91.0
Adicionado
- Adicionadas APIs de enumeração em todo o documento:
EnumDocumentFontspercorre cada dicionário de Fonte (chamandoFindFontsprimeiro, se necessário) e retorna umaTPDFlibDocumentFontpor fonte com seu número de objeto, nome/BaseFont, tipo, codificação e status de incorporação/subconjunto, removendo a necessidade deSelectFontpara cada entrada e consultar getters escalares;EnumAttachmentsunifica a árvore de nomes/EmbeddedFilesem nível de documento com as anotações/FileAttachmentpor página em uma única listaTPDFlibAttachment, registrando a origem de cada entrada, índice de origem baseado em 1, nome do arquivo, subtipo MIME, descrição e tamanho em bytes
Version 3.90.0
Adicionado
- Adicionadas APIs de introspecção somente leitura para anotações, favoritos e a versão do documento:
GetPDFVersionretorna a string de versão efetiva do PDF (ex:1.7);GetAnnotType,GetAnnotTitle,GetAnnotSubject,GetAnnotContentsEx,GetAnnotModifiedDate,GetAnnotNameeGetAnnotRectExexpõem os campos por anotação como invólucros nomeados (para que os chamadores não precisem mais de números mágicos de Tag de propriedade) sobre o cache existenteAnalyseAnnot;GetOutlineLevelretorna a profundidade de um favorito em relação à raiz do esboço eGetOutlineIsOpeninforma se ele está expandido em um visualizador (/Countnegativo significa recolhido), espelhando o estado de layout que um painel de favoritos renderizaria
Version 3.89.0
Novidades
- Adicionada uma unidade para o codificador de imagens JBIG2, sendo nomeada de
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray), que consiste em uma base derivada do mesmo software "irmão" (HotPDF), a qual opera mediante duas bases de sustentação (backends): a primeira figura presente para bases instaladas sobre arquitetura do tipo Win64 no codificador e módulo aritmético designado em formato (ITU-T T.88), operando de modo e vias diretas (statically) por intermédio das aplicações e funções doPDFlibJBIG2EncC+HPDFCLibs(comportando ali 228 das instâncias baseadas num modelo em formato "leptonica/jbig2enc" contidas no diretóriothirdparty/Win64x/) além do mais figurando referenciado tal qual uma formatação de suporte por meio convencional (default backend), sendo ele por sinal coincidente à vertente voltada à geração do arquivo no sistema e modelo atrelado às matrizes em (production path) do próprio sistema no programa HotPDF; já aos outros modelos operados ou no caso em que a própria função dita sob código doUseExternalEncoderseja taxada a formato equivalente ao modelo False, uma instância de socorro montada no idioma pure-Pascal (MMR) compacta os parâmetros originados do formato (bi-level scanlines) com base e em auxílio do que promove a codificação sob comando emitido via CCITT G4 aglutinando todas no sistema através dos chamados "headers", isto num âmbito que diz respeito a um modo derivado ao próprio JBIG2 segment (sendo o tipo da página catalogado sobre o parâmetro do "type 48" + numa instância dada pelo "immediate generic-region", enquadrada neste ponto mediante "type 38") - Adicionada uma unidade de codificação de formato LZW
PDFlibLZWEnc(TPLLZWEncoder.Compress), que seria um meio complementar da vertente decodificadora existente nomeada dePDFlibLZW: a mesma compõe (produces) uma gama perante o fluxo que opera na matriz atrelada (PDF-spec/LZWDecode) servindo num sistema amparado de variáveis e demarcações fixadas num arranjo dimensionado num formato (9..12-bit variable-width codes), junto aos recursos da funcionalidade originária e nominada por meio de códigos baseados na operação do formato (ClearCode/EOI e PDF-default EarlyChange semantics), além do parâmetro de uso dado pelo recurso que comporta, optativamente, o sistema amparado na diferença e diferenciais aplicados no formato TIFF Predictor 2 (horizontal differencing) mediante vias pelas quais a viagem decorrente e as vertentes ligadas ao sistema da decodificação geram a reprodução dos valores bytes da fonte originária.
Version 3.88.0
Added
- Added a CCITT Group 3 / Group 4 (T.6) bi-level image encoder unit
PDFlibCCITTEnc(TPLCCITTEncoder), the encoder counterpart to the existingPDFlibCCITTdecoder: it encodes apf1bitbitmap to a CCITT G3 1D / G3 2D / G4 (T.6) byte stream viaCompressImage/Execute, ported from the HotPDF sibling product (both share the losLab license); this supplies the missing encoder so monochrome image data can be produced forCCITTFaxDecodeoutput, with full image-pipeline andRenderPageToMonochromeFileG4-output integration to follow
Version 3.87.0
Added
- Implemented cryptographic signature verification for detached PKCS#7 signatures:
TPDFlibSignatureVerifier.VerifySignature(previously a stub returningvsUnknown) now recomputes the document digest over the two/ByteRangesegments and validates it against the signedmessageDigestattribute and the signer's public key via the Windows CryptoAPI (CryptVerifyDetachedMessageSignature), returningvsValid/vsInvalidforadbe.pkcs7.detachedandETSI.CAdES.detachedsubfilters; this is the first verification layer and covers digest+signature integrity only (certificate chain, CRL/OCSP revocation and RFC 3161 timestamp-token validation remain out of scope and will be added in later layers)
Version 3.86.0
Added
- Added a merge-time per-bookmark callback: the
OnMergeOutlineevent fires for each top-level source outline whileMergeFileList/MergeFileListFast/MergeFileListStrictlinks the merged outline tree, letting the caller rename (Title) or drop (Skip=True) an incoming bookmark before it lands in the target document; the callback receives the 0-based source document index so callers can apply per-document policies
Version 3.85.0
Added
- Added signing from the Windows system certificate store:
SetSignProcessCertFromStoreresolves the signing certificate from a named store ("MY"/"Root"/...) by Subject simple-display name (typically the CN, matched case-insensitively; an empty name picks the first certificate that has a private key) and reuses the existing PKCS#7 sign pipeline, so a document can be signed without supplying a.pfx/.p12file; pair it withSetSignProcessKeysetto chooseCURRENT_USER(1) vsLOCAL_MACHINE(2)
Version 3.84.0
Added
- Added font program embedding for already-loaded documents:
EmbedMissingFontswalks every Font dictionary, reads the matching installed system font program by BaseFont name and writesFontFile2orFontFile3back, returning the number of fonts that gained a program;EmbedFontProgramembeds a single font by name using the installed system font;EmbedFontProgramFromFileembeds a single font using a caller-supplied.ttfor.otffile for fonts not installed on the system - Added
SetEmbedAllFonts, a writer-side guard that promotesAddTrueTypeFontEmbed=0toEmbed=1so newly created documents cannot accidentally reference non-embedded system fonts outside PDF/A mode as well
Version 3.83.0
Adicionado
- Adicionadas APIs de conveniência de renderização:
RenderPageToMonochromeFilerenderiza a página como um bitmap monocromático de 1 bit (para cenários de fax/arquivamento/OCR), reduzindo de 24 bits via pontilhado (dithering) de meio-tom GDI sem alterar o núcleo de renderização;RenderPageRegionToFilerenderiza apenas um sub-retângulo especificado da página (“Left,Top,Width,Height”) como um bitmap, reconectando o pipeline de corte (clip)RenderPageToDCClipque estava desconectado anteriormente
Version 3.82.0
Adicionado
- Adicionada exportação de dados de formulário FDF:
ExportFormDataToFDFgrava todos os nomes e valores de campos de formulário do documento atual em um arquivo FDF independente (matriz/Fieldsenvolta por%FDF-1.2),ExportFormDataToFDFStringretorna uma string com a mesma estrutura, facilitando o armazenamento separado ou a mesclagem posterior de dados de formulário extraídos do PDF; bytes não ASCII são escapados como octais de três dígitos conforme ISO 32000-1
Version 3.81.0
Adicionado
- Adicionadas APIs de conveniência de página e estrutura:
SetPageTransitiongrava efeitos de transição de apresentação para a página especificada (17 transições padrão de/Trans, incluindo Split/Blinds/Wipe/Dissolve/Glitter, etc.) e a duração de exibição da página;GetPageFontCount,GetPageFontIDenumeram as fontes referenciadas por uma página especificada;SetMeasurementUnitaceita enumeração de unidades tipadas (adicionando twips e points além dos originais pixels/milímetros/polegadas), acompanhado pelos assistentes de conversão de unidadesConvertToPoints,ConvertFromPoints;SaveToFileOptionsagrega opções de salvamento como compressão, linearização e retenção da data de modificação em um único registro
Version 3.80.0
Adicionado
- Adicionadas APIs de conveniência de segurança e assinatura:
EncryptFileExaceita um conjunto de permissões nomeadas tipadas (TPDFlibUserPermissions, distinguindo entre 8 bits de permissão nomeados, como impressão de baixa e alta resolução) no lugar do inteiro de bits de permissão bruto;TPDFlibSignatureVerifier.GetSignatureMetadatalê diretamente o nome do campo, Filter, SubFilter, horário da assinatura, motivo, local, informações de contato, signatário e validação da estrutura ByteRange do dicionário de assinatura, sem necessitar decodificação PKCS#7;PrintDocumentExespecifica o número de cópias e o modo de agrupamento em uma única chamada
Version 3.79.0
Adicionado
- Adicionadas APIs de conveniência de edição:
MaskRectdesenha um retângulo preenchido opaco sobre uma área na página especificada (para mascaramento/redação);SetPageThumbnailFromFileanexa diretamente/Thumbà página a partir de um arquivo de imagem sem poluir o estado de desenho do fluxo de conteúdo;FlattenFormFieldsOnPageRangeachata todos os campos de formulário por intervalo de páginas (a aparência é convertida em conteúdo estático e os campos ativos são removidos);InsertAnnotationinsere um dicionário de anotação previamente construído na posição especificada;NewMarkupAnnotationcria anotações de marcação de realce/tachado/sublinhado/linha ondulada em uma única etapa e grava pontos quad, cor e transparência;StampText,StampImageaplicam marcas d'água por intervalo de páginas, suportando transparência, ângulo de rotação e ordem-z (posição de sobreposição)
Version 3.78.0
Adicionado
- Adicionadas APIs de consulta de texto e enumeração de elementos da página:
SearchTextpesquisa um termo em um intervalo de páginas especificado, retornando o número da página e o retângulo delimitador para cada ocorrência, com suporte a opções de diferenciação de maiúsculas/minúsculas e correspondência de palavra inteira;EnumPageElementsenumera todos os blocos de texto e elementos de imagem incorporados de uma página especificada, retornando uniformemente o tipo de elemento, retângulo, texto, nome da fonte e ID da imagem;GetTextInAreaExé uma versão deGetTextInAreaque inclui retângulos, retornando cada bloco de texto dentro da área e seu retângulo delimitador
Version 3.77.0
Adicionado
- Adicionadas APIs de introspecção somente leitura, resolvendo a assimetria anterior de “poder gravar, mas não ler”:
FindOutlineByTitlepesquisa favoritos pelo título (suportando três níveis de profundidade: apenas irmãos/apenas filhos/subárvore inteira),GetOutlineActionInfoeGetAnnotActionInforetornam o tipo de ação (GoTo/GoToR/URI/Launch/Named/JavaScript) do favorito ou anotação como uma estrutura tipada juntamente com a carga de URI, JavaScript ou nome de arquivo,GetOutlineDestinationInforetorna a página de destino, o tipo Fit (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) e as coordenadas,EnumSignatures,GetSignatureFieldCount,GetSignatureFieldInfoenumeram os campos de assinatura e informam se já estão assinados
Version 3.76.3
Alterado
- O perfil Factur-X EXTENDED do demo E-Invoice agora usa o valor de conformance e o guideline ID padrão, e a fatura ZUGFeRD 1.0 adiciona os elementos de soma
ChargeTotalAmounteAllowanceTotalAmount; todos os 6 perfis agora produzem saídas PDF/A-3b e PDF/A-3u que passam tanto no veraPDF (conformidade PDF/A) quanto no Mustang (regras de negócio de fatura eletrônica)
Version 3.76.2
Corrigido
- Os metadados XMP das faturas híbridas Factur-X/ZUGFeRD agora declaram o esquema de extensão PDF/A (
pdfaExtension:schemas) para descrever as propriedades de faturafx:; anteriormente a ausência dessa declaração fazia com que o PDF/A-3 gerado fosse considerado não conforme por validadores como o veraPDF
Alterado
- O XML da fatura do demo E-Invoice agora inclui os endereços eletrônicos do vendedor e do comprador bem como o telefone do vendedor, permitindo que mais perfis passem na validação das regras de negócio ZUGFeRD/Factur-X
- O catálogo de perfis, a construção do XML e o fluxo de geração PDF/A-3 do demo E-Invoice foram extraídos para uma unit compartilhada que a GUI e a nova ferramenta de teste de validador externo reutilizam
Version 3.76.1
Corrigido
- Corrigido um travamento ao clicar em Gerar no demo E-Invoice: as fontes padrão integradas não estão disponíveis no modo PDF/A, então o demo agora embute uma fonte TrueType para renderizar a página da fatura
Alterado
- O demo E-Invoice remove a opção PDF/A-3a (raramente usada em faturamento eletrônico), e o perfil XRechnung agora usa PDF/A-3u por padrão
Version 3.76.0
Alterado
- A GUI do demo E-Invoice agora é data-driven: número da fatura, data de emissão, comprador e vendedor, valor líquido, alíquota de imposto e moeda são editáveis, e o XML da fatura corresponde exatamente aos valores visíveis da página, em vez de usar conteúdo fixo de espaço reservado
- O demo gera XML de fatura estruturalmente correto por perfil: Factur-X, XRechnung e ZUGFeRD 2.0 usam a estrutura
CrossIndustryInvoice, enquanto ZUGFeRD 1.0 COMFORT usa sua própria estruturaCrossIndustryDocumentcom linhas de detalhamento, totais de imposto e condições de pagamento - Os valores são gravados no XML com formato inglês fixo de ponto decimal para evitar que separadores de milhar localizados ou vírgulas quebrem o esquema, e a entrada do usuário é escapada antes da gravação
- O demo adiciona uma pré-visualização XML ao vivo, autoverificações de conteúdo em nível de perfil, a análise do relatório de validação externo
.validation.jsonde mesmo nome, e carrega explicitamente o intent de saída ICC sRGB do repositório ao gerar
Version 3.75.6
Adicionado
SetPDFAModeadiciona o modo7, permitindo metadados PDF/A-3u e mantendo o suporte a arquivos associados PDF/A-3; a demonstração GUI E-Invoice também oferece uma opção PDF/A-3u, e o perfil ZUGFeRD 2.0 BASIC agora usa PDF/A-3u por padrão
Version 3.75.5
Adicionado
- Adiciona uma demonstração GUI Delphi E-Invoice que pode escolher perfis Factur-X, ZUGFeRD e XRechnung, gerar faturas híbridas PDF/A-3, incorporar o nome de arquivo XML e o guideline ID correspondentes, executar validação de contêiner na interface e mostrar informações XMP da fatura, problemas de validação e XML extraído
Version 3.75.4
Adicionado
- Adiciona suporte a arquivo associado PDF/A-3 e XML de fatura eletrônica:
AddPDFA3AssociatedFileFromStringpode criar arquivos associados Catalog/AFdiretamente de bytes em memória,AddFacturXAssociatedFileFromStringpode gravar XML Factur-X, ZUGFeRD e XRechnung, sincronizar metadados XMP e validar a combinação de nome de arquivo, perfil, namespace XMP e guideline ID XML, enquanto o lado de leitura adiciona APIs de detecção, validação, lista de problemas e extração de XML
Version 3.75.3
Corrigido
- Função de mesclagem de PDF: variáveis locais
GlobalRootObjNum,GlobalRootGenNum,StructRootGlobalObjNumeStructRootGlobalGenNumeram atribuídas apenas dentro de blocos condicionais, causando avisos W1036 “a variável pode não ter sido inicializada” nos compiladores Delphi Win64 26 e 29 (RAD Studio 12 e 16); foi adicionada inicialização com zero na entrada da função
Version 3.75.2
Corrigido
- Compatibilidade de compilação entre versões: o laço
forno analisador de strings hexadecimais (PDFlibStruct) usava uma variável de controleInt64, que o Delphi XE3/XE5 (compiladores 26/27) rejeitam por não ser ordinal; reescrito como um laçoWhilepara restaurar a compatibilidade com RAD Studio 12 e 14 - Verificador de XObject de referência (
PDFlibPDFUA): o ponteiro de dicionárioDnão era inicializado no ramo não stream/não dicionário, causando uma dica do compilador em todos os alvos; reestruturado o ramo para sempre atribuirDantes da verificaçãoAssigned - Invólucro
CreateFontPackage(PDFlibFont): suprimiu o falso aviso W1035 “o valor de retorno pode ficar indefinido” no Delphi ≤ XE8 enquanto evitava a dica complementar H2077 de atribuição morta em compiladores mais novos, por meio do guard{$IF CompilerVersion} - Gravador de DPI de BMP e caminho de salvamento incremental de PDF: substituídas as chamadas obsoletas
TStream.Seek(Longint, Word)por atribuiçõesPosition :=(PDFlibPDFium,PDFlibDocument)
Version 3.75.1
Corrigido
- Analisador TIFF multipágina: o guard de término de laço contra contagens de páginas excessivamente grandes era ineficaz porque
FPageCountera declarado comoWord(máximo 65 535), tornando a comparação> 65535sempre falsa; alterado paraIntegerpara que o guard agora dispare corretamente em arquivos patológicos - Analisador de charset CFF/Type 2 (Format 1 e Format 2): removidas atribuições mortas
Done := Trueque precediam imediatamente umBreake portanto nunca eram lidas, eliminando dicas do compilador
Version 3.75.0
Segurança
- Análise reforçada de fontes incorporadas não confiáveis (TrueType, Type 1, CFF e CMap) contra gravações fora dos limites, recursão ilimitada de charstring e alocações de memória excessivas a partir de dados de fonte malformados
- Os decodificadores de imagem (PNG, GIF, TIFF, JBIG2 e CCITT Group 3 e 4) foram reforçados contra leituras e gravações fora dos limites, overflow inteiro nos cálculos de largura e altura e dereferências de paleta vazia a partir de imagens maliciosas
- Os filtros de stream (LZW, ASCII85 e preditores Flate) foram reforçados contra leituras além do buffer, divisão por zero e loops que não terminam em dados de stream forjados
- A análise de cross-reference, reconstrução de documento e name-tree foi reforçada contra acesso fora dos limites e loops infinitos causados por dados de cross-reference malformados ou circulares
- A descriptografia AES-CBC agora valida o alinhamento dos blocos do ciphertext e inicializa o buffer de saída com zero, evitando que memória não inicializada da heap vaze para strings e streams descriptografados
Corrigido
- Os digests de assinatura destacada SHA-256, SHA-384 e SHA-512 agora são produzidos com o provedor criptográfico correto; antes eles retornavam um digest vazio e geravam assinaturas inválidas
- A decodificação ASCII85 e RC4 não retorna mais dados não inicializados nem lança exceção em entrada truncada ou chave vazia
- A cor de fundo GIF agora é lida com o canal azul correto em vez de duplicar o canal verde
Version 3.74.1
Corrigido
- Corrigido um erro de compilação E2010 de tipos incompatíveis no suporte aos dados de validação de assinatura PAdES (VRI) que impedia a biblioteca de compilar
- Removidos o último aviso do compilador e as dicas de variável não utilizada; todas as compilações Win32 e Win64 da biblioteca trial e release agora compilam sem avisos
Version 3.74.0
Adicionado
- Os caminhos diretos de arquivo de
EncryptFileeDecryptFileagora leem PDFs cujos dados de cross-reference ficam em cross-reference streams, incluindo cadeias atualizadas incrementalmente e arquivos de referência híbrida com uma seção lateral/XRefStm, em vez de cair no leitor completo mais lento: a proteção AES-256 de um documento de benchmark de 1,25 GB caiu de cerca de 4,4 para 2,5 segundos e a descriptografia de cerca de 1,7 para 1,3 segundos - Regravações que carregam objetos armazenados em object streams comprimidos agora emitem um trailer de cross-reference stream, mantendo esses objetos endereçáveis na saída criptografada ou descriptografada
Corrigido
- Uma revisão sem um documento
/IDem um arquivo atualizado incrementalmente não apaga mais o identificador herdado de uma revisão anterior durante uma regravação direta
Version 3.73.2
Alterado
DASaveAsFileagora agrega suas gravações de saída e localiza a palavra-chave de fechamento de cada objeto sem alocações de string a cada etapa, reduzindo a regravação de um documento de benchmark de 2 GB com mais de um milhão de objetos de cerca de 57 para 11 segundos
Version 3.73.1
Alterado
- Os caminhos diretos de arquivo de
EncryptFileeDecryptFileagora leem a origem por meio de uma janela deslizante e agregam as gravações de saída, de modo que a proteção AES-256 de PDFs muito grandes com milhões de objetos fique várias vezes mais rápida: em um documento de benchmark de 2 GB, a criptografia caiu de cerca de 123 para 32 segundos e a descriptografia de cerca de 127 para 23 segundos - Os corpos de objeto que cabem na janela de leitura não são mais buscados do disco duas vezes durante uma regravação direta AES-256
Corrigido
- Regravações diretas AES-256 de PDFs de referência híbrida (arquivos que carregam uma entrada
/XRefStmno trailer) agora fazem fallback para o leitor completo em vez de arriscar a perda de objetos comprimidos - A análise de cross-reference no caminho direto de arquivo não lê mais tudo da seção de cross-reference até o fim do arquivo de uma só vez, o que podia esgotar a memória em arquivos de vários gigabytes cuja cadeia
/Prevaponta perto do início do arquivo, e uma cadeia/Prevquebrada agora faz fallback para o leitor completo em vez de produzir um documento incompleto
Version 3.73.0
Adicionado
- O demo SigningWorkbench agora executa verificação completa de digest criptográfico de assinaturas CMS destacadas (
adbe.pkcs7.detachedeETSI.CAdES.detached) por meio da Windows CryptoAPI: os intervalos de bytes assinados são re-hashed e comparados com a assinatura CMS, um documento alterado é reportado com o novo código de falha SG203 e cada assinatura traz um campodigestValidem três estados nos relatórios JSON, CSV e HTML - Novas opções de automação do SigningWorkbench:
--quietimprime apenas o resumo do lote e os caminhos dos relatórios,--fail-fastinterrompe o lote no primeiro arquivo com falha, e o relatório JSON agora registra a versão da biblioteca
Version 3.72.0
Adicionado
- O demo ComplianceWorkbench ganha fluxos de trabalho de lote profissionais:
--policy-filecarrega a política de auditoria de um arquivo JSON para que as equipes possam versionar e compartilhar suas regras de documento,--baselinecompara a execução com um compliance-report.json anterior e lista novas falhas, arquivos corrigidos e arquivos que continuam falhando, e--preflight-detailsincorpora linhas de problemas de preflight aos relatórios JSON e HTML - Novas opções de automação do ComplianceWorkbench:
--quietimprime apenas o resumo do lote e os caminhos dos relatórios,--fail-fastinterrompe o lote no primeiro arquivo com falha, e o relatório JSON agora registra a versão da biblioteca
Version 3.71.2
Corrigido
AppendToFilevolta a anexar atualizações incrementais ao mesmo arquivo PDF carregado comLoadFromFile; o carregador em streaming agora mantém o arquivo de origem legível sem bloquear o handle de gravação necessário para a atualização
Version 3.71.1
Adicionado
- Os relatórios do ComplianceWorkbench e do SigningWorkbench agora incluem rótulos de severidade das descobertas, campos de maior severidade por arquivo, resumos de frequência de severidade do lote e saída correspondente em JSON, CSV, HTML e console para triagem de política mais rápida
Version 3.71.0
Adicionado
- A inspeção do demo SigningWorkbench agora informa a ordem de revisão e o nível de certificação DocMDP de cada assinatura, sinaliza algoritmos fracos de assinatura de certificado MD5/SHA-1 e o SubFilter legado adbe.pkcs7.sha1 com
--forbid-weak-digest(SG303/SG405), certificados autoassinados com--forbid-self-signed(SG406), documentos sem uma assinatura de certificação com--require-certified(SG304), e sempre verifica se o horário da assinatura está dentro do período de validade do certificado (SG407) - O modo de assinatura do SigningWorkbench agora usa a API de processo de assinatura com novas opções
--subfilter(sha1, detached ou cades para assinaturas baseline PAdES) e--digest(auto até sha512), e o modernoadbe.pkcs7.detachedcom SHA-256 é o novo padrão de assinatura - O novo accessor de leitura
TPDFlibSignDoc.GetSignatureDocMDPLevelByNameretorna o nível de certificação DocMDP de um campo de assinatura conforme ISO 32000-1 §12.8.2.2
Version 3.70.0
Adicionado
- O demo ComplianceWorkbench agora também impõe políticas de permissão, metadados e tamanho:
--require-print-allowede--require-copy-allowedverificam os bits de permissão do documento (PC205/PC206),--require-authore--require-creation-dateverificam a completude dos metadados (PC306/PC307), e--max-pagese--max-file-sizelimitam a escala do documento (PC308/PC309) - O perfil de arquivo agora também exige um autor e uma data de criação, e o perfil acessível exige a permissão de cópia da qual a tecnologia assistiva depende
- Os relatórios do ComplianceWorkbench agora agregam um resumo de frequência de códigos de falha em todo o lote, e as métricas por arquivo incluem autor, data de criação, tamanho do arquivo e os estados de permissão de impressão e cópia
Version 3.69.1
Corrigido
DecryptFilevolta a remover a criptografia de documentos protegidos por AES-128 e RC4, incluindo documentos que carregam apenas uma senha de proprietário; desde v3.67.4 o caminho rápido para arquivos grandes vinha relatando incorretamente esses documentos como tendo senha errada (erro 404) em vez de encaminhá-los ao caminho normal de descriptografia, enquanto documentos AES-256 não eram afetados
Version 3.69.0
Adicionado
- Novo demo SigningWorkbench Delphi: uma ferramenta de console de trabalho de assinaturas e certificados que inspeciona os campos de assinatura de um PDF ou de um diretório inteiro (SubFilter, horário da assinatura, cobertura de ByteRange e o certificado de assinatura com verificações de expiração), assina PDFs em lote com um certificado PKCS #12 e audita arquivos PFX; cada violação mapeia para um código estável de falha de política (SG101–SG501) e os resultados são gravados como relatórios JSON, CSV e HTML com guias de demonstração localizadas para todos os 18 idiomas da documentação
- Novos accessors de leitura de assinatura em
TPDFlibSignDoc:GetSignatureFieldNameslista os campos de assinatura de um documento,GetSignatureTextValueByNameretorna as entradas /M do horário de assinatura, /Name, /Reason, /Location, /ContactInfo e /Type (com descriptografia em documentos criptografados), eGetSignatureValueByNameretorna /Filter, /SubFilter, /Contents e as entradas ByteRange pelo nome do campo
Corrigido
- Corrigido o import Windows CryptoAPI
CertCloseStore, que havia sido declarado sem o parâmetro flags e podia corromper a pilha do chamador no Win32 quando um repositório de certificados era fechado
Version 3.68.0
Adicionado
- Novo demo ComplianceWorkbench Delphi: uma ferramenta de console para auditoria de políticas em lote que verifica um PDF ou um diretório inteiro em relação a uma política de conformidade configurável que abrange preflight de PDF/A e PDF/UA, regras de criptografia, faixa de versão do PDF, Tagged PDF, linearização e título do documento, relata cada violação como um código estável de falha de política (PC101–PC501) e grava relatórios JSON, CSV e HTML com códigos de saída adequados para automação
- O novo demo traz perfis de política que agrupam conjuntos comuns de requisitos—archive, accessible, secure e web—com opções explícitas de linha de comando que sobrescrevem os valores do perfil, e inclui guias de demonstração localizadas para todos os 18 idiomas da documentação
Version 3.67.4
Alterado
EncryptFileeDecryptFileagora usam um caminho direto de regravação AES-256 para PDFs grandes com cross-xref clássica, transmitindo dados criptografados entre arquivos em vez de carregar e reserializar cada objeto; um arquivo de benchmark de 2 GB agora conclui a criptografia e a descriptografia AES-256 de arquivo para arquivo pela Direct File API com código de resultado 1 eLastErrorCode0
Corrigido
- Corrigido o tratamento de token de string AES-256 direto, para que delimitadores de dicionário não sejam confundidos com strings hexadecimais e strings vazias criptografadas sejam descriptografadas corretamente
Version 3.67.3
Alterações
- As demonstrações Delphi e C++Builder de DrawShapes, CreateWithImage, CreateTable, EditFormField e EmbeddedFonts foram ampliadas para que os PDFs gerados agora demonstrem fluxos de trabalho práticos de desenho, posicionamento de imagens, layout de tabelas, estilo de campos de formulário e comparação de incorporação de fontes, em vez de uma saída mínima de ação única
Correções
- A demonstração CreateTable agora define explicitamente um tamanho de página A4 antes de renderizar a tabela, evitando a variável de tamanho de página não inicializada que existia no exemplo Delphi
Version 3.67.2
Corrigido
- Corrigida uma regressão da detecção preguiçosa no lado do carregador introduzida na v3.67.0: a detecção de recursos de conteúdo podia ser executada ao salvar e sobrescrever uma versão de salvamento solicitada explicitamente (SetInformation 0) ou uma versão bloqueada (LockSaveVersion), de modo que um salvamento estrito para versão inferior deixava de rejeitar conteúdo de versão superior e uma versão bloqueada podia subir; agora a detecção é executada antes de qualquer versão definida explicitamente e nunca é executada para documentos criados em vez de carregados, restaurando o comportamento de controle de versão anterior à v3.67.0 enquanto mantém a economia do carregamento preguiçoso
Version 3.67.1
Alterado
- A detecção de recursos agora lê objetos de fluxo com uma análise superficial que inspeciona apenas o dicionário do objeto e ignora o corpo do fluxo, já que a varredura nunca examina o conteúdo dos fluxos; em documentos com grandes fluxos de imagem, isso evita ler os bytes do corpo durante a detecção, reduzindo o tempo de leitura de objetos de uma passada de detecção em cerca de 40% (aproximadamente 13 s em vez de 20 s em um arquivo de 2 GB com 1,6 milhão de objetos), enquanto a lista de recursos detectados e a versão PDF efetiva permanecem idênticas
Version 3.67.0
Alterado
- A detecção de recursos de conteúdo no lado do carregador agora é adiada (lazy) – em vez de varrer o documento inteiro durante o carregamento, ela é executada no primeiro uso, ao consultar a versão PDF efetiva ou a lista de recursos detectados ou ao salvar o documento; cargas de trabalho somente leitura como contagem de páginas, extração de texto ou imagens e renderização que nunca consultam a versão nem salvam novamente ignoram totalmente a varredura, reduzindo o tempo de carregamento de documentos muito grandes em cerca de 80% (cerca de 10 s em vez de 56 s em um arquivo de 2 GB com 1,6 milhão de objetos), enquanto o conjunto de recursos detectados e a versão PDF efetiva permanecem idênticos após a execução da detecção
Version 3.66.1
Alterado
- O carregamento de documentos muito grandes com várias páginas agora é substancialmente mais rápido: a detecção de recursos de conteúdo no lado do carregador ignora verificações de regras que não podem alterar o resultado – tanto regras já correspondidas quanto regras que não se aplicam a um determinado objeto – reduzindo o tempo de carregamento de arquivos enormes em cerca de metade, mantendo idênticos os recursos detectados e a versão efetiva do PDF
Version 3.66.0
Alterado
- O carregamento de documentos muito grandes com várias páginas agora usa muito menos memória no pico. A detecção de características de conteúdo no lado do carregador não mais materializa todo o modelo de objetos de uma vez – percorre o leitor de acesso aleatório um objeto por vez – reduzindo o working set máximo em cerca de 90 % em arquivos enormes, mantendo as características detectadas e a versão PDF efetiva idênticas.
Version 3.65.0
Adicionado
- Agora é possível abrir documentos com mais de 2 GB. O buffer em memória anterior, que limitava o tamanho do documento a cerca de 2 GB, foi removido.
Alterado
- Ao carregar um PDF de um arquivo, os dados dos objetos agora são lidos sob demanda a partir da origem, em vez de armazenar todo o documento em memória, reduzindo bastante o pico de uso de memória com arquivos grandes.
- Um documento carregado de um arquivo mantém esse arquivo aberto com acesso de leitura compartilhada até que o documento seja fechado ou esvaziado.
Corrigido
- Maior robustez ao carregar documentos que contêm bytes iniciais antes do cabeçalho %PDF- e ao processar dados de cross-reference malformados.
Version 3.64.0
Alterado
- As operações da API Direct em PDFs muito grandes ou com muitos objetos – EncryptFile, DecryptFile e DASaveAsFile – agora são drasticamente mais rápidas e não travam mais. Um documento de 2 GB com cerca de 1,6 milhão de objetos que antes não conseguia ser concluído agora é criptografado em cerca de um minuto, e o tempo de processamento escala de forma quase linear com o documento, em vez de desabar à medida que o número de objetos aumenta.
- A criptografia de documentos grandes é substancialmente mais rápida – uma operação que antes levava muitos minutos agora é concluída em segundos a cerca de um minuto – sem alteração na força da criptografia, na compatibilidade do texto cifrado ou na saída.
Version 3.63.0
Corrigido
- Corrigida uma falha do processo ao carregar arquivos PDF grandes cujos deslocamentos de bytes internos cruzam o limite de 32 bits (cerca de 2 GB); o carregador agora usa deslocamentos de 64 bits em todo o processo, de modo que arquivos próximos de 2 GB são carregados de forma confiável e arquivos de 2 GB ou mais relatam um erro de carregamento normalmente em vez de travar.
Version 3.62.0
Alterado
- A criptografia e descriptografia AES-256-CBC agora seguem o caminho AES-NI acelerado por hardware também no Windows de 32 bits, e não apenas no de 64 bits, mantendo o retorno automático para a implementação em C portátil em processadores sem AES-NI. O texto cifrado permanece inalterado em todas as plataformas.
Version 3.61.0
Alterado
- A criptografia e descriptografia AES-256-CBC agora usam um backend AES-NI acelerado por hardware no Windows de 64 bits, com retorno automático para a implementação de software portátil em processadores sem AES-NI. O texto cifrado é idêntico em todas as plataformas; apenas a velocidade da criptografia PDF AES-256 baseada em senha muda.
Version 3.60.0
Adicionado
MergeFileListagora mescla as árvores de estrutura lógica (Tagged PDF) dos documentos de entrada em uma única árvore de estrutura acessível, em vez de preservar apenas a árvore do primeiro documento e deixar as demais como objetos inacessíveis. Os elementos de estrutura de nível superior, a parent tree (com as chaves de página/StructParentse de anotação/StructParentremapeadas),/RoleMap,/ClassMape/IDTreesão combinados, e o catálogo mesclado é marcado como Tagged (/MarkInfo /Marked true).
Alterado
- Ao mesclar documentos com chaves
/RoleMap,/ClassMapou/IDTreeconflitantes, mantém-se a primeira ocorrência. O caminho rápido (MergeFileListFast) continua descartando as informações de estrutura.
Version 3.59.0
Alterado
MergeFileListagora mescla os documentos em uma única passagem (O(N) em vez de O(N²)), tornando a mesclagem de muitos arquivos substancialmente mais rápida; ele também ganha a mesclagem de marcadores multidocumento adicionada ao caminho rápido.- Por padrão,
MergeFileListagora ignora arquivos de entrada ilegíveis ou criptografados e continua mesclando os demais, em vez de abortar toda a operação no primeiro arquivo inválido. Use o novoMergeFileListStrictpara restaurar o comportamento anterior de parar na primeira falha. - Os objetos de estrutura lógica (Tagged PDF) das entradas agora são preservados pelo
MergeFileList(o caminho rápido continua a descartá-los).
Adicionado
MergeFileListStrictmescla uma lista de arquivos, mas para no primeiro arquivo ilegível ou criptografado, mantendo a semântica estrita de parada em caso de falha das versões anteriores.
Version 3.58.0
Adicionado
MergeFileListFastagora mescla os marcadores (estrutura de tópicos) do documento de todos os arquivos de entrada, de modo que o caminho de mesclagem rápida preserva os marcadores além dos campos de formulário AcroForm.- Os marcadores mesclados mantêm sua hierarquia e seus destinos de página; a contagem de marcadores de nível superior da saída mesclada é igual à soma das entradas.
Version 3.57.1
Alterado
- O salvamento pela Direct File API (
DASaveAsFile,DASaveToStream,DASaveCopyToStream) agora é muito mais rápido em documentos muito grandes: objetos inalterados são copiados diretamente dos bytes de origem em vez de serem reanalisados e reserializados. Regravar um documento de 60.000 páginas / 883 MB caiu de cerca de 33 segundos para aproximadamente 23 segundos.
Version 3.57.0
Alterado
- O desempenho de
TPDFlib.MergeFileListFastpara fusões de múltiplos documentos foi ainda mais otimizado: objetos não modificados sem stream nos documentos anexados são agora reutilizados diretamente de seus bytes de origem originais com um deslocamento de referência indireta em nível de bytes, ignorando o ciclo de análise e ressocialização e melhorando a taxa de transferência em documentos de várias páginas. A saída da fusão permanece inalterada, com contagens de páginas idênticas. - Objetos que contêm streams ou pertencem à árvore de estrutura continuam usando o caminho de decodificação existente, portanto o caminho de bytes mais rápido é aplicado apenas onde é comprovadamente seguro.
Version 3.56.44
Alterado
TPDFlib.MergeFileListFastfoi otimizado ao pré-alocar os metadados de mesclagem e gravar os objetos inalterados do primeiro documento a partir dos dados de origem originais, reduzindo a pressão de memória e o trabalho evitável de decodificação/saída de objetos em mesclagens rápidas de vários arquivos.- A GUI Delphi
MergePDFagora agrupa o registro dos resultados do modo rápido e evita varreduras repetidas de todo o texto do memo, mantendo listas de entrada grandes mais responsivas após a conclusão da mesclagem.
Version 3.56.43
Alterado
- O caminho de mesclagem comum de
TPDFlib.MergeFileListfoi otimizado alternando seus arquivos temporários intermediários em vez de copiar o PDF mesclado crescente antes de cada entrada adicional, reduzindo E/S de disco em fluxos com vários arquivos e preservando o contrato existente de contagem retornada.
Version 3.56.42
Adicionado
- Adicionada cobertura de regressão AES para casos em que o buffer de entrada e o destino do resultado são o mesmo durante a restauração de streams criptografados ao salvar, incluindo payloads grandes de 504 KB que antes expunham a falha.
Alterado
- O fluxo da API normal
LoadFromFile,Encrypt,SaveToFile, recarregar,DecrypteSaveToFilevolta a concluir em PDFs grandes já carregados, mantendo a otimização de descriptografia AES-CBC com menos cópias.
Corrigido
- Corrigido o caminho de descriptografia AES-256 baseado em buffer introduzido na v3.56.41, permitindo que os chamadores atribuam o resultado da descriptografia ao mesmo
AnsiStringque forneceu o buffer de texto cifrado sem violações de acesso.
Version 3.56.41
Adicionado
- Adicionado
TPDFlib.DACopyFilepara fluxos Direct Access que precisam de contagem de páginas e uma cópia de arquivo sem alterações sem construir o grafo completo de objetos normal. - A demo Delphi
HugeFileBenchmarkagora inclui uma linhadirect-copye filtros--opse--skippara execuções focadas em arquivos grandes.
Alterado
- O descriptografar AES-256 foi otimizado com caminhos AES-CBC baseados em buffer, usados ao descriptografar strings e streams carregados, reduzindo cópias extras de texto cifrado em streams criptografados grandes.
Version 3.56.40
Alterado
- As demos
HelloWorldde Delphi e C++Builder agora criam um PDF inicial mais rico com informacoes do documento, saida em uma fonte padrao selecionada, bloco de titulo estilizado, desenho vetorial simples e orientacao para os proximos passos, mantendo o mesmo fluxo de compilar e executar. - Todas as notas das demos Delphi e C++Builder foram substituidas por paginas
Readme.htmlamigaveis ao navegador, incluindo notas auxiliares sobre senhas, arquivos restritos e resultados de assinatura; os indices das demos agora levam os usuarios para as notas HTML.
Version 3.56.39
Alterado
- Os caminhos de salvamento da API de arquivo direto agora constroem tabelas de consulta de referência cruzada de forma linear, tornando
DASaveAsFilee os caminhos de salvamento direto relacionados muito mais rápidos em PDFs com contagens muito altas de objetos ou árvores de páginas densas. - O writer otimizado preserva a mesma semântica da cadeia de objetos livres e evita varreduras repetidas dos números de objeto durante a geração completa de xref, melhorando grandes fluxos de salvamento direto sem alterar a API pública nem o contrato de saída.
Version 3.56.38
Alterado
- O fluxo da API normal
LoadFromFile,Encrypt,SaveToFile, recarregamento,DecrypteSaveToFileagora preserva o estado criptografado antes doDecryptexplícito, igualando o comportamento da API de acesso direto a arquivos para PDFs legados grandes.
Corrigido
- Corrigida a saída de criptografia da API normal para que
Encryptcrie ou preserve o trailer/IDantes de gravar os dados de segurança AES-256, mantendo PDFs criptografados detectáveis ao recarregar por meio deEncryptionStatus.
Version 3.56.37
Adicionado
- Foi adicionado
TPDFlib.ComparePreflightReports, um comparador linha a linha para relatorios de preflight em texto simples que ignora linhas volateis de carimbo de data/horaGenerated:e retorna uma string vazia quando o conteudo estavel do relatorio coincide. - A demo Delphi
PreflightReportagora oferece suporte a--compare <file>no modo de arquivo unico, grava um relatorio UTF-8.diff.txte retorna o codigo de saida 2 quando o relatorio de texto gerado difere da baseline.
Version 3.56.36
Adicionado
- A demo Delphi
PreflightReportagora oferece suporte a execucoes em lote de diretorios com--input-dir,--output-dire--recursive, gravando um relatorio por PDF como<basename>.preflight.<ext>.
Alterado
- O modo em lote grava um arquivo UTF-8
preflight-summary.csvque registra cada PDF de origem, status pass/fail, contagem de problemas e caminho do relatorio gerado, mantendo o contrato de codigos de saida existente para automacao.
Version 3.56.35
Adicionado
ReportFormat = 3adiciona saida CSV aTPDFlib.CreatePreflightReportExeTPDFlib.SavePreflightReportEx, gerando linhas UTF-8 para metadados do relatorio, cada verificacao de conformidade selecionada, codigos e mensagens de problemas individuais e o resumo final.- A demo Delphi
PreflightReportagora oferece suporte a--format csve--csv, permitindo que execucoes de preflight pela linha de comando alimentem planilhas ou parsers simples de CI sem pos-processar JSON nem extrair texto.
Version 3.56.34
Adicionado
- Adicionadas as APIs com seleção de formato
TPDFlib.CreatePreflightReportExeTPDFlib.SavePreflightReportExpara gerar relatórios de preflight PDF/A e PDF/UA-1 como texto simples, JSON ou HTML autônomo, preservando as APIs existentes somente de texto. - A demonstração Delphi
PreflightReportagora oferece suporte a--format text|json|htmle aos atalhos--jsone--html, permitindo que o mesmo fluxo de linha de comando produza relatórios legíveis ou artefatos de CI legíveis por máquina.
Version 3.56.33
Adicionado
- Adicionados
TPDFlib.CreatePreflightReporteTPDFlib.SavePreflightReport, permitindo que aplicativos gerem relatórios em texto reutilizáveis a partir das verificações integradas de conformidade PDF/A e PDF/UA-1 sem enumerar manualmente identificadores de listas de strings.
Alterado
- A demonstração Delphi
PreflightReportagora chama diretamente as APIs de relatório da biblioteca, mantendo o exemplo focado no fluxo de linha de comando, nas verificações selecionadas, no modo de primeiro problema e nos códigos de saída adequados para automação.
Version 3.56.32
Adicionado
- Adicionado um novo exemplo de console Delphi
PreflightReport, que executa verificações PDF/A e PDF/UA-1 comCheckFileCompliance, enumera as listas de problemas comGetStringListCounteGetStringListIteme grava um relatório de preflight em texto simples.
Alterado
- O exemplo oferece suporte às opções
--input,--output,--pdfa,--pdfua,--bothe--first-issue, além de códigos de saída adequados para automação para aprovação, problemas encontrados e erro de execução.
Version 3.56.31
Alterado
GetCustomKeys(2)agora oculta de forma consistente as entradas do sistema Catalog gerenciadas pela biblioteca, incluindo/OutputIntents,/Extensions,/Requirements,/Collectione/NeedsRendering.
Corrigido
- As intenções de saída PDF/A criadas por
SetPDFAModenão aparecem mais como chaves personalizadas no catálogo, mantendo a enumeração de metadados da aplicação separada das estruturas de conformidade do PDF.
Version 3.56.25
Alterado
- O componente GetPDFUADiagnostics no lado do escritor agora possui o mesmo problema que
MULTIPLE-H-CHILDREN:N, garantindo a compatibilidade com o leitor10044a partir da versão v3.56.24. ISO 14289-1 §7.4.4 impede que um nó de árvore de tags tenha mais de um filho H direto — a verificação no lado do escritor é executada sempre que a árvore FStructElems na memória contiver essa violação. - Um novo utilitário CountMultipleHChildren aninhado percorre a árvore em profundidade, contando os filhos H em cada nível. A verificação é executada junto com as caminhadas existentes LIST-STRUCT / LIST-NO-NUMBERING e compartilha o mesmo padrão de travessia FStructElems.
Version 3.56.24
Alterado
- A auditoria PDF/UA-1 agora inclui uma verificação de unicidade de tag H ISO 14289-1 §7.4.4.
10044relata qualquer nó de estrutura que contenha mais de um filho H direto —, pois a especificação proíbe isso em documentos fortemente estruturados, e a mesma restrição se aplica a qualquer nó de árvore de tags, independentemente do modo de estrutura geral. A outra seção § 7.4.4 SHALL (um documento deve ser ou fortemente ou fracamente estruturado, não ambos) requer heurísticas em todo o documento e foi intencionalmente omitida desta auditoria. - Um novo caminhante de árvore de estrutura em pré-ordem (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) conta os filhos H diretos por nó e recursa em profundidade. Reutiliza o mesmo decodificador em forma de K que os caminhantes existentes de cabeçalho / lista / nota.
Version 3.56.23
Adicionado
- A nova versão
Lib/PDFlibPDFUAFontInspect.pasimplementa um analisador de diretório de tabela tolerante e um analisador de sub-tabela de diretório cmap. A tabela de lista de glifos Adobe com 4281 nomes, adicionada como estrutura na alteração de infraestrutura anterior, agora está conectada por meio da verificação de Diferenças. Programas que não são analisados como SFNT (programa de fonte PFB / PFA, OpenType coleção, lixo arbitrário) são ignorados silenciosamente. Falsos negativos são preferidos a falsos positivos na camada de auditoria.
Alterado
- A auditoria PDF/UA-1 agora inclui duas verificações de programa de fonte ISO 14289-1 §7.21.6 que as verificações da camada de dicionário de v3.56.10 tiveram que adiar até que um analisador TrueType estivesse disponível.
10034relata programas TrueType não simbólicos cujas tabelas cmap embutidas SFNT contêm apenas a entrada simbólica (platformID=3, encodingID=0) — §. O primeiro parágrafo da versão 7.21.6 exige pelo menos uma sub-tabela cmap não simbólica para que o programa possa renderizar os pontos de código declarados por sua /Encoding..10035relata arrays TrueType não simbólicos cujos nomes de glifos não são membros da lista de glifos Adobe (.notdefexcluído). — §. O terceiro parágrafo da versão 7.21.6 exige que cada entrada de Diferenças seja incluída em AGL.
Version 3.56.22
Alterado
- A auditoria PDF/UA-1 agora inclui verificações de dados de clip de mídia.
10042relata dicionários de dados de clip de mídia (identificados por/S /MCD, opcionalmente/Type /MediaClip) que não possuem a entrada obrigatória de tipo de conteúdo/CT.10043relata os mesmos dicionários que não possuem o array/Altobrigatório. ISO 32000-1 A Tabela 274 lista ambas as chaves como opcionais, mas ISO 14289-1 §7.18.6 as promove para obrigatórias para que os leitores de tela possam anunciar uma descrição significativa para multimídia incorporada. - Esta é a Fase 6 do plano de auditoria profunda PDF/UA (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). Ela é executada sem nenhuma dependência de analisador de programa de fonte ou fluxo de conteúdo, portanto, é a primeira subclasse após a série v3.56.0..v3.56.13.
Version 3.56.21
Adicionado
- Novo
SetSignProcessCommitmentTypeemite o atributo assinado CAdEScommitment-type-indication(OID 1.2.840.113549.1.9.16.2.16, ETSI EN 319 122-1 v1.2.1 §5.2.3) dentro do caminho PAdES-B-B SignerInfo. Aceita códigos inteiros de 1 a 6, que mapeiam para os bem conhecidos esquemas de compromisso ETSIid-cti-ets-proofOfOriginaid-cti-ets-proofOfCreation; passe 0 para limpar. Códigos fora da faixa são rejeitados. - Novo
SetSignProcessSignaturePolicyemite o atributo assinado CAdESsignature-policy-identifier(OID 1.2.840.113549.1.9.16.2.15, §5.2.9). Recebe a política no formato decimal pontilhado OID, o hash do documento de política como uma string hexadecimal em maiúsculas e um código de algoritmo de digestão (1=SHA-1, 2=SHA-256, 3=SHA-384, 4=SHA-512, 0=auto/SHA-256). O atributo carrega aSignaturePolicyIdSEQUENCE comsigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE).
Alterado
- Ambos os atributos só entram em vigor quando o SubFilter está em
ETSI.CAdES.detached(o caminho PAdES-B-B); eles estendem o arrayrgAuthAttrexistente, juntamente comcontent-typeesigning-certificate-v2. A linha d) da Tabela 1 proíbe a combinação decommitment-type-indicationcom a entrada do dicionário de assinatura PDF/Reason; o chamador é responsável por não definir ambos.
Version 3.56.20
Adicionado
- A nova funcionalidade
AddPAdESDSSVRIadiciona uma entrada de subdicionário de Assinatura VRI ao DSS que está sendo montado, completando a estrutura ETSI EN 319 142-1 v1.2.1 da cláusula 5.4.2.3 Informações Relacionadas à Validação. A entrada é identificada pelo SHA-1 hexadecimal maiúsculo dos bytes da assinatura '; seus sub-arraysCert/CRL/OCSPsão preenchidos referenciando os streams pai correspondentes por meio de índices baseados em 0, fornecidos como listas separadas por vírgula (por exemplo,"0,2,5").
Alterado
- O
TSmartPDFDocument.AddPAdESDSSWithVRIsubjacente rastreia os números de objeto de stream emitidos para cada certificado / CRL / OCSP e os usa para escrever os sub-arrays VRI como referências indiretas de volta para os mesmos streams aos quais os arrays pai DSS já apontam, satisfazendo o requisito da especificação de que as entradas VRI compartilhem armazenamento com o dicionário pai DSS. O ponto de entradaAddPAdESDSSoriginal continua a funcionar inalterado para os chamadores que não precisam de VRI. - Cada subdicionário de assinatura VRI carrega o marcador opcional
/Type /VRI, para que as ferramentas que percorrem o catálogo por tagsTypepossam reconhecer a estrutura sem precisar reresolver o caminho pai.
Version 3.56.19
Adicionado
- Novo fluxo de trabalho PAdES-B-T para anexar uma assinatura de carimbo de tempo (id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) a uma assinatura PAdES-B-B existente.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringabre um PDF assinado,SetPAdESSignatureTimeStampFieldnomeia o campo,GetPAdESSignatureValueHashHexretorna o hash SHA-256 (ou 384 / 512) do identificador do signatário' para envio a um TSA,GetPAdESSignatureCMSBytesexpõe o payload CMS existente,SetPAdESSignatureCMSBytesaceita os bytes aumentados CMS que o chamador monta usando sua biblioteca CMS de escolha, eEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringinsere o novo CMS no espaço reservado/Contentsoriginal. - O novo
SetSignProcessReserveContentsBytesamplia o espaço reservado/Contentsno momento da assinatura inicial para que o CMS aumentado posteriormente caiba sem transbordar a reserva original. Os atributos TimeStampTokens normalmente emitidos por13adicionam 2-6 KB ao SignerInfo; passe 1024-8192 para deixar espaço. Se não houver espaço suficiente, a chamada de aumento retorna13(transbordamento de saída).
Alterado
BuildPAdESSignatureTimeStampAttributeé um auxiliar sem estado que envolve um TimeStampToken emitido por TSA no atributo CMS queSignerInfo.unsignedAttrsespera, então os chamadores que já possuem uma biblioteca CMS podem pular a parte de configuração. OID + SET.- A biblioteca não inclui um cliente TSA HTTP; o chamador busca o TimeStampToken (geralmente 30-50 linhas de solicitação TSP + HTTP POST contra, por exemplo, FreeTSA ou DigiCert). No Windows,
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRCryptoAPI poderia, em princípio, automatizar a injeção CMS na biblioteca, mas retornaCRYPT_E_INVALID_INDEX(0x80091008) na forma separada SignedData PAdES emitida, então os bytes CMS fornecidos pelo chamador são usados no lugar.
Version 3.56.18
Adicionado
- Novos auxiliares ASN.1
DER_IntegerFromLittleEndian(lida com a ordem de bytes Win32CRYPT_INTEGER_BLOB) eDER_ContextTagExplicit(envolve um payload em uma tag construída específica do contexto) complementam o micro-codificadorPDFlibASN1. As novas declaraçõesCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTemPDFlibCryptoAPIfornecem ao caminho de assinatura acesso aos campos do certificado analisados.
Alterado
- O atributo PAdES
signing-certificate-v2agora incorpora o campo opcionalIssuerSerialdefinido por RFC 5035 (ESSCertIDv2). O nome distinto do emissor do certificado de assinatura é envolvido em umGeneralName [4] EXPLICIT directoryNameCHOICE dentro deGeneralNames, seguido pelo número de série do certificado como um ASN.1 INTEGER. Os bytes do número de série chegam em ordem little-endian do Windows CryptoAPI (CRYPT_INTEGER_BLOB) e são invertidos para big-endian com o byte de preenchimento inteiro positivo adicionado quando o bit mais significativo está definido, correspondendo à forma como OpenSSL e BouncyCastle emitem o mesmo campo. - Os verificadores que comparam o nome do emissor + o par de números de série com seu conjunto de candidatos de construção de caminho (notavelmente EU DSS em modo estrito) agora encontram ambos os identificadores no atributo signing-cert-v2; a saída anterior v3.56.17 fornecia apenas a referência
certHash.
Version 3.56.17
Adicionado
- A nova unit
PDFlibASN1oferece um microcodificador DER (X.690) focado — prefixo de comprimento, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER — usado para montar o valor do atributoSigningCertificateV2. O codificador segue as regras padrão de arcos OID em base-128 e omite o campo opcionalhashAlgorithmquando ele apenas repetiria o valor padrão SHA-256, alinhado com o que OpenSSL e BouncyCastle emitem.
Alterado
- O caminho de assinatura nativo
ETSI.CAdES.detachedagora produz assinaturas PAdES-B-B estruturalmente conformes. A biblioteca constrói ela mesma os atributos autenticados CMS —content-type(id-data) esigning-certificate-v2do RFC 5035 / RFC 5816 com um hash SHA-256 do certificado de assinatura — e os entrega aoCryptSignMessageviargAuthAttr. Assim que esse campo deixa de ser NULL, a Windows CryptoAPI para de injetar automaticamente o atributosigning-timeque o PAdES (ETSI EN 319 142-1 v1.2.1 Table 1) proíbe, de modo que oSignerInforesultante carrega os atributos exigidos e apenas eles. ApplySignatureagora encaminhaETSI.CAdES.detachedpelo caminho raw-byte (o mesmo usado poradbe.pkcs7.detached) em vez de fornecer um digest pré-calculado. A CryptoAPI passa a calcular o atributo autenticadomessageDigestsobre o conteúdo realmente assinado, que é o que os verificadores esperam.- SHA-384 e SHA-512 também são honrados ao montar o atributo signing-certificate-v2: o campo
hashAlgorithmé emitido com oAlgorithmIdentifiercorrespondente em vez de depender do valor padrão. SHA-1 é promovido silenciosamente a SHA-256 nesse contexto porque o PAdES-B-B não autoriza SHA-1 (clause 6.2.1).
Version 3.56.16
Adicionado
- O novo
SetSignProcessDigestAlgorithmseleciona o algoritmo de message-digest da assinatura:1= SHA-1 (deprecated),2= SHA-256 (padrão moderno),3= SHA-384,4= SHA-512,0= auto (SHA-256 para todo SubFilter exceto o caminho legadoadbe.pkcs7.sha1, que permanece em SHA-1 para preservar compatibilidade binária estável). ETSI EN 319 142-1 v1.2.1 §6.2.1 proíbe MD5 e delega à ETSI TS 119 312 as suites criptográficas recomendadas, portanto signatários PAdES devem escolher SHA-256 ou mais forte. - Adicionados os helpers de hash
SHA256StreamRange,SHA384StreamRangeeSHA512StreamRangeao lado doSHA1StreamRangeexistente; o caminho de assinatura os utiliza para gerar o digest do ByteRange do PDF sob o algoritmo selecionado. O OIDSignerInfo.digestAlgorithmdo PKCS#7 e os bytes de hash efetivamente gravados agora são garantidamente coerentes (o código anterior sempre passava o digest SHA-1 independentemente do algoritmo negociado).
Alterado
TPDFlibPFXFile.SignDataagora recebe um parâmetroDigestAlgorithme escolhe o OID correto para cada par (SubFilter, algoritmo):2.16.840.1.101.3.4.2.1/.2/.3para SHA-256/384/512 em SubFilters detached e custom (RFC 5754), e os OIDs da famíliasha256WithRSAEncryptioncorrespondentes para o caminho legadoadbe.pkcs7.sha1.
Version 3.56.15
Adicionado
- Novo
SetSignProcessDocTimeStampalterna um processo de assinatura para o modo PAdES Document Time-stamp conforme ETSI EN 319 142-1 v1.2.1 §5.4.3. O Signature Dictionary resultante carrega/Type /DocTimeStampe/SubFilter /ETSI.RFC3161, omite as chaves proibidas/M,/Reason,/Location,/ContactInfoe/Name, e reserva um placeholder hex de 8192 bytes (ou dimensionado pelo chamador) em/Contentspara um TimeStampToken RFC 3161 obtido externamente.
Alterado
- Passthrough é ativado automaticamente quando o modo DocTimeStamp é selecionado, pois o TimeStampToken vem de uma TSA externa. Chamadas a
SetSignProcessInfofeitas após alternar para o modo DocTimeStamp são silenciosamente ignoradas para manter o dicionário de assinatura em conformidade com a especificação. - A auto-injeção existente de
/Extensions /ESICdo PAdES adicionada em v3.56.8 já cobre DocTimeStamp porque seu SubFilter começa comETSI., de modo que um PDF Document Time-stamp declara a extensão de catálogo exigida sem fiação adicional.
Version 3.56.14
Adicionado
- Nova API de aumento do PAdES Document Security Store (DSS).
NewPAdESDSSProcessFromFile/NewPAdESDSSProcessFromStream/NewPAdESDSSProcessFromStringabrem um PDF previamente assinado,AddPAdESDSSCertificate/AddPAdESDSSCRL/AddPAdESDSSOCSPpreparam material de validação codificado em DER, eEndPAdESDSSProcessToFile/EndPAdESDSSProcessToStream/EndPAdESDSSProcessToStringescrevem uma atualização incremental contendo um dicionário/DSS << /Type /DSS /Certs [...] /CRLs [...] /OCSPs [...] >>conforme especificado por ETSI EN 319 142-1 v1.2.1 §5.4.2.2. Este é o bloco de construção para promover uma assinatura PAdES-B-B / B-T para validação de longo prazo PAdES-B-LT.
Alterado
- O processo DSS auto-incrementa a entrada de catálogo
/Extensions /ESICpara pelo menosExtensionLevel 1ao adicionar material de validação, correspondendo ao requisito em §5.6, e mescla novos certificados, CRLs e respostas OCSP nos arrays existentes/Certs//CRLs//OCSPsem invocações repetidas, de modo que as revisões acumulem em vez de sobrescrever. GetPAdESDSSProcessResult/ReleasePAdESDSSProcesscompletam o ciclo de vida, espelhando a superfície de APISignProcessexistente.
Version 3.56.8
Alterado
- Conformidade baseline PAdES: quando uma assinatura é criada com um SubFilter PAdES (
ETSI.CAdES.detachedouETSI.RFC3161), o catálogo do documento agora recebe automaticamente a entrada/Extensions /ESIC <</BaseVersion /1.7 /ExtensionLevel 2>>exigida por ETSI EN 319 142-1 v1.2.1 §5.6. A entrada é adicionada por meio da mesma atualização incremental que carrega a assinatura, nunca rebaixa um/ExtensionLevelsuperior existente, e segue referências indiretas/Extensionsou/ESICquando o PDF de origem já as armazena como objetos separados. - O marcador de extensão equivalente Adobe escrito por SetSignProcessCustomSubFilter para PDFs criados por meio de
TPDFlibagora é/ADBE /BaseVersion /1.7 /ExtensionLevel 8(eraExtensionLevel 5), correspondendo à declaração alternativa que as assinaturas baseline PAdES são permitidas a usar; o nível 5 cobria apenas recursos de formulários / 3D / RichMedia do ISO 32000-2 e não identificava realmente as extensões PAdES.
Version 3.56.13
Alterado
- Quando SetPDFUAMode está ativo e o documento é salvo, qualquer elemento de estrutura L (lista) que não tenha um atributo
ListNumberingexplícito agora recebe automaticamente/O = List /ListNumbering = None. ISO 14289-1 §7.6 exige que toda tag L declare seu estilo de numeração; a nova correção em tempo de salvamentoApplyPDFUAListNumberingse junta à família existenteApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNet. - Autores que se importam com um estilo de lista específico ainda devem chamar SetStructElemListNumbering antes de EndTag; a auto-correção só dispara quando nenhum atributo ListNumbering está presente no momento do salvamento, de modo que valores explícitos são preservados.
- A mensagem de diagnóstico writer-side
LIST-NO-NUMBERING:Nagora observa que a auto-correção mascarará o problema no momento do salvamento, de modo que os usuários entendem tanto o atributo ausente quanto o comportamento de reparo automático.
Version 3.56.12
Alterado
- A auditoria PDF/UA-1 ganha três novas verificações ISO 14289-1.
10031informa anotações Link cujo dicionário de ação URI carrega/IsMap = true(proibido por §7.18.5 a menos que funcionalidade equivalente seja fornecida em outro lugar no conteúdo; autores com um caso de uso legítimo de IsMap podem suprimir o diagnóstico por conta própria).10032informa elementos de estruturaNotesem a entrada/ID— §7.9 exige que toda tag Note declare um ID único.10033informa contagens de pares duplicados quando duas ou mais tags Note compartilham o mesmo valor/ID. - A detecção de colisão de ID de Note é feita coletando os IDs em uma TStringList ordenada e percorrendo pares adjacentes, de modo que um grupo de três Notes compartilhando um ID conta como dois pares duplicados.
- A verificação de ação URI percorre o array
/Annotsde cada página, filtra por/Subtype /Link, então inspeciona/A /S /URIe o booleano/IsMap. Referências indiretas são desreferenciadas em cada etapa, de modo que dicionários de ação divididos se comportam da mesma forma que os inline.
Version 3.56.11
Alterado
- ISO 14289-1 §7.6 exige que todo elemento de estrutura L (lista) carregue um atributo
ListNumberingexplícito.10030(reader-side) eLIST-NO-NUMBERING:N(writer-side) informam tags L que o omitem. O walker reader-side decodifica ambas as formas de/A(dicionário de atributo único ou um array de dicionários misturado com inteiros de revisão) e procura pela chave/ListNumberingindependentemente do owner. A verificação writer-side inspecionaTPDFStructElem.Attributespelo mesmo nome tanto na lista de estrutura finalizada quanto na pilha de tags ainda aberta. - Valores válidos de
ListNumberingpor ISO 32000-1 Tabela 347 sãoNone,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. A auditoria só verifica a presença da chave, não qual valor é escolhido — toda tag L precisa de um destes.
Version 3.56.10
Alterado
- A auditoria PDF/UA-1 ganha as regras de codificação TrueType de ISO 14289-1 §7.21.6.
10028informa fontes TrueType não simbólicas cuja/Encoding(ou o/BaseEncodingdentro de um dicionário Encoding) não é nemMacRomanEncodingnemWinAnsiEncoding.10029informa fontes TrueType simbólicas que carregam uma entrada/Encoding(proibido por §7.21.6 quarto parágrafo). - Simbólico vs. não simbólico é decidido a partir do bit 3 (mascara
4) de/Flagsdo FontDescriptor, reutilizando o helper existenteUAFontDescriptorSymbolicda sub-classe 4. O primeiro parágrafo completo de §7.21.6 (o programa TrueType incorporado deve conter entradas cmap correspondentes) requer parsing do programa de fonte TrueType e ainda está pendente; as regras no nível de dicionário acima são a camada prática que esta auditoria pode verificar sem um parser TrueType. - Regras de array Differences em §7.21.6 (nomes de glifos somente AGL, presença de cmap Microsoft Unicode) permanecem fora de escopo pela mesma razão — requerem inspeção do programa de fonte.
Version 3.56.9
Alterado
- A auditoria PDF/UA-1 ganha uma verificação completa de ISO 14289-1 §7.18.4.
10027informa anotações Widget cujo/StructParentresolve através do/ParentTreeda árvore de estrutura, mas não aterrissa em um elemento de estrutura com/S = Form. A verificação parcial anterior de v3.56.7 (10026) apenas detectava Widgets que não têm/StructParentem absoluto; a nova verificação completa a regra seguindo o ponteiro number-tree e verificando a tag de destino. - Um novo helper
NumberTreeLookupimplementa a forma number-tree de ISO 32000-1 §7.9.7 (raiz plana/Nums, intermediários/Kidsfaixados por/Limits). Auditorias futuras que precisem resolver entradas de página/StructParentsou rótulos/PageLabelspodem reutilizá-lo. - A verificação de tag Form para anotações Widget usa um modelo de duas camadas: um Widget sem
/StructParenté informado como10026; um Widget cujo/StructParentexiste mas não resolve para/S = Formé informado como o mais específico10027. Isso evita contar duas vezes a mesma violação sob ambos os códigos.
Version 3.56.7
Alterado
- Quando SetPDFUAMode está ativo e o documento é salvo, quaisquer entradas de anotação
TrapNetagora são automaticamente removidas do array/Annotsde cada página. ISO 14289-1 §7.18.2 proíbe anotaçõesTrapNet; a nova correção em tempo de salvamentoApplyPDFUAStripTrapNetse junta à família existenteApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship, de modo que documentos em modo PDF/UA param de emitir silenciosamente sobras deTrapNet. - A auditoria PDF/UA-1 ganha uma verificação parcial de §7.18.4.
10026informa anotações Widget que não têm/StructParent— um Widget sem/StructParentnão pode ser alcançado da árvore de estrutura e portanto não pode ser aninhado em uma tag de estruturaForm. A verificação estrutural completa (resolvendo/StructParentatravés doParentTreee confirmando que o/Sdo pai éForm) fica para uma release de acompanhamento. - Writer-side GetPDFUADiagnostics ganha o problema correspondente
WIDGET-NO-STRUCTPARENT:N. A mensagem TRAPNET-ANNOT existente agora também observa que SetPDFUAMode auto-remove estas no momento do salvamento.
Version 3.56.6
Alterado
- A auditoria PDF/UA-1 ganha duas verificações de hierarquia de títulos de ISO 14289-1 §7.4.2.
10024informa quando o primeiro elemento de título na ordem do documento não é H1 (ou H).10025informa o número de saltos de nível de título em uma sequência descendente (por exemplo, H1 seguido por H3 sem H2). Ambas as verificações compartilham uma única travessia em pré-ordem da árvore de estrutura que decodifica as formas/Kaninhadas (StructElem único, array de StructElems / IndRefs / MCRs). - Writer-side GetPDFUADiagnostics ganha o problema correspondente
FIRST-HEADING-NOT-H1, em paridade com o reader10024. A verificação writer HEADING-LEVEL-SKIP previamente existente agora tem uma companheira que também detecta problemas do estilo "primeiro título foi H2".
Version 3.56.5
Alterado
- Quando SetPDFUAMode está ativo e o documento é posteriormente criptografado, a chave de permissão de criptografia (
/Pno dicionário de criptografia) agora tem automaticamente o bit 10 (máscara$200, "Extrair texto e gráficos em apoio à acessibilidade") definido, mesmo quando o chamador não incluiuppCanCopyAccessnasTPDFExtraPermissionspassadas para Encrypt. ISO 14289-1 §7.16 exige que todo arquivo criptografado em conformidade permita extração para acessibilidade, e o bit é de outra forma fácil de esquecer. O bit é sempre seguro de definir — ele apenas concede acesso adicional à tecnologia assistiva, não a outros caminhos de extração. - Writer-side GetPDFUADiagnostics ganha um novo problema
ENCRYPT-NO-ACCESSque dispara quando PDFUAMode está ativo e o bit 10 de/Pdo dicionário de criptografia está limpo. Isso captura o caso extremo de ordem de chamada em que o usuário chamouEncrypt()primeiro e SetPDFUAMode apenas depois — o diagnóstico diz ao usuário para chamarEncrypt()novamente para que o dict de criptografia seja reemitido com o/Pcorrigido.
Version 3.56.4
Alterado
- Writer-side GetPDFUADiagnostics ganha cinco novas verificações ISO 14289-1 para que a auditoria de documento em memória detecte as mesmas violações que a auditoria reader-side CheckFileCompliance ComplianceTest=2.
SUSPECTS-TRUEsinaliza MarkInfo/Suspects=true (§7.1: arquivos em conformidade PDF/UA exigem Suspects=false).ROLEMAP-STANDARD-REMAP:Nsinaliza chamadas AddRoleMap que remapeariam uma tag de estrutura padrão — §7.1 proíbe remapear tags padrão.DC-TITLE-MISSINGsinaliza um dc:title XMP vazio (separado de DOCINFO-TITLE-MISSING, que verifica /Info /Title).TRAPNET-ANNOT:Nsinaliza anotações TrapNet (§7.18.2 as proíbe).ANNOT-PAGE-NO-TABS-S:Nsinaliza páginas que carregam anotações cujo dicionário de página /Tabs não é /S (§7.18.3 exige ordem de tabulação de árvore de estrutura nessas páginas). - Auditorias PDF/UA-1 writer-side e reader-side agora estão aproximadamente em paridade: todo problema que a auditoria reader-side levanta em um arquivo salvo também é acessível do diagnóstico em memória, módulo as convenções de formato de cada função (texto separado por nova linha vs. lista de strings de código NNNNN).
Version 3.56.3
Alterado
- A auditoria PDF/UA-1 ganha suas verificações de fonte de §7.21.
10020informa qualquer fonte não-Standard-14 cujo FontDescriptor não temFontFile/FontFile2/FontFile3(§7.21.4.1: toda fonte renderizada deve incorporar seu programa).10021informa descendentes CIDFontType2 sem uma entrada/CIDToGIDMap(§7.21.3.2).10022sinaliza fontes Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats e variantes negrito / oblíquo) que são referenciadas sem um programa incorporado — §7.21.4 NOTA 5 deixa claro que não há isenção de incorporação para essas fontes.10023informa fontes que não têm um CMap/ToUnicodee não correspondem à lista de isenção §7.21.7 (codificações predefinidas MacRoman / MacExpert / WinAnsi, Type 0 com coleções de caracteres Adobe-GB1 / CNS1 / Japan1 / Korea1, TrueType não simbólico). - Fontes compostas Type 0 são inspecionadas em ambas as camadas:
/ToUnicodeno próprio dicionário pai Type 0, e incorporação //CIDToGIDMapno primeiro CIDFont descendente. Fontes Type 3 pulam a verificação de incorporação (seus glifos são CharProcs inline), mas ainda participam da verificação/ToUnicode. - Os helpers PDFlibPDFA para trabalho de fonte semelhante intencionalmente não foram compartilhados — meia dúzia de rotinas curtas (remoção de prefixo de subset, tabela de nomes Standard-14, presença de FontFile, flag Symbolic) são duplicadas localmente como helpers
UA*para que a auditoria PDF/A possa continuar evoluindo sem quebrar PDF/UA, e vice-versa.
Version 3.56.2
Alterado
- A auditoria PDF/UA-1 ganha mais cinco verificações ISO 14289-1 cobrindo anotações, arquivos incorporados e conteúdo opcional.
10015informa anotações Link que não têm uma descrição alternativa/Contentsnão vazia (§7.18.5) para que leitores de tela possam anunciar destinos de link.10016e10017sinalizam dicionários FileSpec de arquivo incorporado que estão sem as chaves de nome de arquivo/Fou/UFexigidas (§7.11).10018sinaliza dicionários de configuração de conteúdo opcional que omitem uma string de texto/Namenão vazia (§7.10).10019sinaliza dicionários de configuração de conteúdo opcional que contêm a chave proibida/AS(§7.10). - A travessia de anotação por página que já alimentava as verificações de TrapNet e
/Tabs /Sagora também coleta dados de Link //Contentsna mesma passagem, mantendo a auditoria em O(N) na contagem de objetos.
Version 3.56.1
Alterado
- A auditoria PDF/UA-1 ganha cinco novas verificações ISO 14289-1.
10010verifica a permissão de extração para acessibilidade (bit 10 da chave de criptografia/P) em arquivos criptografados (§7.16).10011detecta formulários XFA dinâmicos através do elemento<dynamicRender>required</dynamicRender>dentro do pacote XFA XDP (§7.15).10012sinaliza Form XObjects que carregam uma entrada/Ref— XObjects de referência são proibidos (§7.20).10013sinaliza anotaçõesTrapNet(§7.18.2).10014percorre cada página e informa qualquer página que carregue anotações cujo dicionário de página não defina/Tabs /S(§7.18.3) para que a ordem de tabulação siga a árvore de estrutura. - Todos os cinco novos códigos fluem através do mesmo par de handles CheckFileCompliance + GetStringListItem que a release anterior adicionou — não há nova superfície de API pública.
Version 3.56.0
Adicionado
- Nova auditoria reader-side
CheckCompliancePDFUAvalida um PDF externo contra ISO 14289-1 (PDF/UA-1). Complementa a verificação writer-side existente GetPDFUADiagnostics aceitando qualquer PDF de entrada (saída própria, saída de scanner, conteúdo de terceiros) e listando violações PDF/UA-1 da mesma forma que CheckFileCompliance já informa problemas PDF/A.
Alterado
- CheckFileCompliance agora aceita
ComplianceTest = 2para executar a nova auditoria PDF/UA-1. O teste PDF/A sobComplianceTest = 1não muda, e a lista de problemas ainda flui de volta através do par de handles existente GetStringListCount / GetStringListItem. - O primeiro corte cobre os portões fundacionais de conformidade PDF/UA-1 de §5 (identificação XMP
pdfuaid:part) e §7.1 (fluxo Catalog/Metadata, marcador de PDF tagged, árvore de estrutura, preferência de título do visualizador, idioma do documento, XMPdc:title, valor/Suspectse a proibição de remapear tags de estrutura padrão). Oito códigos de diagnóstico são emitidos —10001até10009— mantendo a faixa numérica visualmente separada dos códigos PDF/A00xxx. - Cláusulas PDF/UA-1 mais profundas (segurança, anotações, XObjects, subconjuntamento de fonte) são rastreadas para releases de patch de acompanhamento sobre o mesmo framework de auditoria.
Version 3.55.6
Alterado
- Todo pacote XMP recém-gerado agora carrega uma propriedade xmpMM:InstanceID no formato uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. O identificador é gerado via Win32 CoCreateGuid e dá a cada documento produzido uma impressão digital única e independente de versão conforme recomendado por ISO 19005-1 §6.7.2 (Cor2) e guias de melhores práticas PDF/A. As compilações não-Windows (onde o pacote XMP permanece vazio) não são afetadas.
- O namespace xmpMM (http://ns.adobe.com/xap/1.0/mm/) agora faz parte dos SelectionNamespaces do pacote XMP; novos helpers SetXMPMM e GenerateInstanceID sustentam a emissão de InstanceID e fornecem a base para suporte futuro a xmpMM:History / xmpMM:DerivedFrom.
- O schema de descrição PDF/A Extension Schema (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) não é adicionado nesta release. Autorar um schema de extensão personalizado requer construção de propriedade estruturada / bag / seq em múltiplas etapas além do formato atual de SetDublinCore / SetXMPBasic; o trabalho está rastreado para uma release futura. Documentos que precisam declarar propriedades XMP personalizadas continuam a recorrer ao caminho LoadFromString.
Version 3.55.5
Alterado
- Documentos PDF/A agora têm suas flags /F de anotação normalizadas no momento do salvamento. ISO 19005-1 §6.5.3 exige que o bit Print seja 1 e os bits Hidden / Invisible / NoView sejam 0 em toda anotação; o writer agora aplica essa máscara no momento do salvamento, de modo que os chamadores não precisem lembrar o layout de bits. O caso /Subtype /Popup é isento — popups são filhos de outras anotações e tradicionalmente não são impressos.
- A flag /NeedAppearances do AcroForm agora é forçadamente definida como false no momento do salvamento quando o documento está em qualquer modo PDF/A. ISO 19005-1 §6.9 exige que a flag esteja ausente ou seja false; anteriormente o writer deixava qualquer valor que o chamador tivesse definido, o que produzia documentos que pediam ao visualizador para regenerar aparências no momento da abertura e violavam silenciosamente a especificação quando o chamador a tinha definido como true. A correção também roda para documentos que anteriormente tinham a flag ausente — o writer emite um /NeedAppearances false explícito para não deixar ambiguidade para o validador.
Version 3.55.4
Alterado
- AddStandardFont agora rejeita chamadas no modo PDF/A. ISO 19005-1 §6.3.4 revoga a isenção da referência PDF "Standard 14 pode ser não incorporada": todo programa de fonte em um arquivo em conformidade deve ser incorporado, e a biblioteca não empacota os contornos das Standard 14. A fachada retorna 0 silenciosamente; os chamadores devem mudar para AddTrueTypeFont ou AddType1Font com um arquivo de fonte real.
- AddTrueTypeFont agora promove silenciosamente Embed=0 (sem incorporação) para Embed=1 (incorporar fonte completa) quando o modo PDF/A está ativo. O caminho de referência não incorporada produzia PDF que dependia do fallback de fonte do visualizador para uma instalação de sistema Arial / Times / Courier, o que viola ISO 19005-1 §6.3.4. Chamadores existentes que pediram incorporação (Embed=1 ou 2) não são afetados.
- A verificação de conformidade de /Encoding de TrueType não simbólico (ISO 19005-1 §6.3.7 Cor2 exige WinAnsi ou MacRoman como o nome de codificação ou BaseEncoding, sem /Differences) não é adicionada nesta release porque a biblioteca já emite /WinAnsiEncoding para subsets TrueType não simbólicos, e a aplicação mais profunda exigiria rastrear o despacho simbólico-vs-não-simbólico através do caminho de subset. CheckCompliancePDFA 00034 / 00035 (adicionados v3.51.0) sinalizam qualquer saída não conforme no momento da validação.
Version 3.55.3
Alterado
- Dicionários de fonte CIDFontType2 baseados em TrueType agora carregam /CIDToGIDMap /Identity explicitamente. ISO 19005-1 §6.3.3.2 (Cor2) exige que a entrada esteja presente para todo Type 2 CIDFont incorporado; a referência PDF permite o padrão implícito Identity, mas PDF/A exige um valor explícito. O writer anteriormente omitia a chave inteiramente, fazendo com que veraPDF (e CheckCompliancePDFA 00033 adicionado em v3.51.0) sinalizassem o arquivo. O nome /Identity corresponde ao layout GID-as-CID que o writer já produzia implicitamente, de modo que documentos existentes renderizam identicamente.
- FontDescriptor /CharSet (para subsets Type 1) e /CIDSet (para subsets CIDFont) permanecem TODO; o writer precisaria rastrear quais nomes de glifos / CIDs acabaram no subset para preenchê-los com precisão. CheckCompliancePDFA 00031 e 00032 (também adicionados em v3.51.0) sinalizarão a ausência para que os usuários vejam o problema no momento da validação.
Version 3.55.2
Alterado
- AddImageDirectFromString agora rejeita filtros incompatíveis com PDF/A no ponto de entrada. Passar Filter = 'LZWDecode' é rejeitado para toda parte PDF/A (ISO 19005-1 §6.1.10 mais as regras equivalentes ISO 19005-2 / -3). Passar Filter = 'JBIG2Decode' ou 'JPXDecode' é rejeitado para PDF/A-1 (modos 1 e 2). PDF/A-2 e PDF/A-3 admitem JPXDecode sob ISO 19005-2 §6.2.8.3 com restrições de sub-especificação (contagem de canais de cor, uniformidade de profundidade de bits, requisitos METH/APPROX) que o portão writer-side não aplica — chamadores nesses modos ainda precisam garantir que o fluxo JPEG 2000 esteja em conformidade. A fachada retorna 0 silenciosamente quando um filtro proibido é solicitado.
- Entradas TIFF, PNG, JPEG e JPEG 2000 carregadas através de AddImageFromFile / AddImageFromStream não são afetadas: o importador descomprime os bytes de origem e recodifica com FlateDecode (ou DCTDecode para payloads JPEG), de modo que entrada LZW nunca se propaga para a cadeia de Filter de saída. O validador CheckCompliancePDFA adicionado em v3.50.0 (00004) e v3.52.0 (00022, 00023) fornece uma segunda linha de defesa no momento da validação para qualquer caminho indireto que ainda inclua um filtro proibido na saída.
Version 3.55.1
Alterado
- AddLinkToHideField agora rejeita chamadas no modo PDF/A. A release anterior deixou um comentário alegando que a ação era compatível com PDF/A, mas ISO 19005-1 Cor2 adicionou /Hide à lista de ações proibidas (§6.6.1), e ISO 19005-2 / -3 herdam a restrição. A fachada retorna 0 silenciosamente quando chamada no modo PDF/A, correspondendo a AddLinkToJavaScript e AddLinkToImportData.
- AddSWFAnnotationFromFile agora rejeita chamadas no modo PDF/A. Anotações SWF / RichMedia envolvem mídia Flash, que é proibida por ISO 19005-1 §6.5.2 (sem subtipos Movie / Sound) e reforçada por ISO 19005-2 §6.3.1 (sem 3D / Sound / Screen / Movie). A fachada retorna 0 silenciosamente.
- AddEmbeddedFile e AddLinkToEmbeddedFile agora rejeitam chamadas nos modos PDF/A-1 e PDF/A-2. ISO 19005-1 §6.1.11 proíbe /EF, e ISO 19005-2 §6.8 admite apenas arquivos PDF/A incorporados; em vez de verificar a PDF/A-idade recursiva do payload anexado, o writer simplesmente recusa a chamada nesses modos. PDF/A-3 (SetPDFAMode 5 ou 6) permanece permitido — veja v3.55.0 para a injeção automática de /AFRelationship.
- SetOpenActionMenu agora rejeita valores de MenuItem fora da whitelist {NextPage, PrevPage, FirstPage, LastPage} quando o documento está no modo PDF/A. ISO 19005-1 §6.6.1 restringe ações nomeadas a esse conjunto, de modo que anteriormente a API produzia silenciosamente dicionários Open-Action não conformes Find / Print / FullScreen que veraPDF rejeitaria.
- NewOptionalContentGroup agora rejeita chamadas nos modos PDF/A-1 (SetPDFAMode 1 ou 2). ISO 19005-1 §6.1.13 proíbe a chave Catalog /OCProperties. PDF/A-2 (modos 3/4) e PDF/A-3 (modos 5/6) admitem conteúdo opcional com as restrições em seu respectivo §6.9, de modo que o portão só dispara para PDF/A-1.
Version 3.55.0
Alterado
- Documentos PDF/A-3 agora recebem automaticamente uma entrada /AFRelationship em todo arquivo incorporado. Anteriormente, um arquivo PDF/A-3 criado com a biblioteca poderia falhar na validação porque ISO 19005-3 Anexo E, Tabela E.1 exige AFRelationship em toda especificação de arquivo incorporado. O writer agora injeta o valor padrão configurado ('Unspecified' por padrão) em qualquer dicionário FileSpec que não tenha a entrada no momento do salvamento, espelhando a auto-injeção de AFRelationship PDF/UA introduzida anteriormente. Apenas os modos PDF/A-3 (SetPDFAMode 5 = PDF/A-3b ou 6 = PDF/A-3a) acionam a auto-injeção; PDF/A-1 e PDF/A-2 ainda rejeitam arquivos incorporados completamente por ISO 19005-1 §6.1.11 e ISO 19005-2 §6.8.
- SetPDFA3DefaultAFRelationship é uma nova API que sobrescreve o valor padrão escrito pelo writer quando um arquivo incorporado não tem uma entrada /AFRelationship. Aceita os valores da Tabela E.1 de ISO 19005-3 'Source' (o arquivo incorporado é o material de origem que produziu o conteúdo do PDF), 'Data' (o arquivo é os dados estruturados que suportam uma tabela ou gráfico visual), 'Alternative' (uma renderização alternativa, como uma versão de áudio), 'Supplement' (uma representação suplementar, como uma forma MathML de uma equação), 'Unspecified' (relação não pode ser caracterizada pelos anteriores), ou qualquer nome de segunda classe registrado. String vazia redefine para 'Unspecified'. Sobreposições por arquivo permanecem disponíveis via SetEmbeddedFileAFRelationship.
- As novas APIs são expostas na fachada Delphi como TPDFlib.SetPDFA3DefaultAFRelationship e via DLL como DLSetPDFA3DefaultAFRelationship (PWideChar) e DLSetPDFA3DefaultAFRelationshipA (PAnsiChar).
Version 3.54.0
Alterado
- LoadOutputIntentProfile é uma nova API que substitui o perfil OutputIntent sRGB empacotado por um perfil ICC externo carregado do disco. Necessário ao produzir documentos PDF/A em espaços de cor DeviceCMYK ou DeviceGray, já que a biblioteca só envia um perfil sRGB. O uso típico é chamar SetPDFAMode primeiro (que inicializa o esqueleto OutputIntent), então LoadOutputIntentProfile('C:\\caminho\\para\\FOGRA39.icc', 'DeviceCMYK') para trocar os bytes do perfil e marcar o documento com o novo espaço de cor. Retorna 1 em sucesso, 0 em arquivo não encontrado ou espaço de cor desconhecido. Exposto na fachada Delphi como TPDFlib.LoadOutputIntentProfile e via DLL como DLLoadOutputIntentProfile (forma PWideChar) e DLLoadOutputIntentProfileA (forma PAnsiChar). ISO 19005-1 §6.2.2 permite qualquer perfil ICC registrado no fluxo DestOutputProfile.
- SetFillColorCMYK, SetTextColorCMYK, SetTextHighlightColorCMYK, SetTextUnderlineColorCMYK, AddSeparationColor, SetFillColorSep, SetLineColorSep, SetTextHighlightColorSep e SetTextColorSep agora têm sucesso no modo PDF/A quando o perfil OutputIntent do documento é DeviceCMYK. Anteriormente, essas APIs rejeitavam toda chamada no modo PDF/A independentemente do OutputIntent, o que impedia que documentos CMYK em conformidade fossem produzidos. O portão agora é PDFAMode = 0 OU OutputIntentColorSpace = 'DeviceCMYK', correspondendo à regra ISO 19005-1 §6.2.3.3 de que DeviceCMYK é permitido quando o OutputIntent usa um perfil CMYK, e ISO 19005-1 §6.2.3.4 que permite alternativas Separation cujo espaço de cor base também está em conformidade.
- SetTextShader agora tem sucesso no modo PDF/A quando o perfil OutputIntent é DeviceRGB ou DeviceCMYK. Shaders em si não são banidos por PDF/A; o validador (lado de leitura) verifica se o espaço de cor interno do shader corresponde ao OutputIntent. O comportamento anterior de rejeição estrita negava o uso de shader em conformidade.
- O desbloqueio CMYK / Separation / Shader depende da tag OutputIntentColorSpace definida por AddOutputIntent e LoadOutputIntentProfile (introduzido em v3.53.0). Chamar SetPDFAMode sem LoadOutputIntentProfile mantém o espaço de cor como DeviceRGB (o perfil sRGB empacotado), de modo que chamadas CMYK ainda rejeitam por padrão — o novo comportamento é opt-in via LoadOutputIntentProfile.
Version 3.53.0
Alterado
- O dicionário OutputIntent agora carrega os campos completos do esqueleto PDF/A recomendados por ISO 19005-1 §6.2.2 e Adobe Acrobat preflight: /OutputCondition (descrição legível por humanos da condição de cor), /Info (texto de identificação em forma longa) e /RegistryName (URL do registro, padrão http://www.color.org). Os valores assumem como padrão "sRGB IEC61966-2.1" / "sRGB IEC61966-2.1" / "http://www.color.org" para os pontos de chamada legados de argumento único; a nova sobrecarga de AddOutputIntent assume os quatro campos personalizados diretamente para que os chamadores possam preenchê-los para suas próprias condições de cor.
- AddOutputIntent ganha uma nova sobrecarga de cinco argumentos: AddOutputIntent(ColorSpace, OutputConditionIdentifier, OutputCondition, Info, RegistryName). A forma legada de argumento único continua funcionando inalterada; agora ela delega para a nova sobrecarga com os padrões sRGB. O argumento ColorSpace também seleciona a contagem de componentes /N escrita no dicionário do perfil ICC incorporado (3 para DeviceRGB, 4 para DeviceCMYK, 1 para DeviceGray); o próprio perfil incorporado permanece o fluxo sRGB empacotado até que a API LoadOutputIntentProfile chegue em v3.54.0.
- TPDFDocument expõe OutputIntentColorSpace como uma propriedade de leitura/escrita rastreando o espaço de cor da última chamada de AddOutputIntent. Isso se torna a condição de portão para as restrições writer-side CMYK / Separation / Shader em v3.54.0, onde APIs de cor que hoje rejeitam toda chamada no modo PDF/A rejeitarão apenas quando o espaço de cor estiver incompatível com o OutputIntent.
Version 3.52.0
Alterado
- CheckCompliancePDFA agora audita anotações, graphics-state, ações e form XObjects, completando a cobertura do validador read-side PDF/A para ISO 19005-1 capítulos 6.2-6.6 e as regras diferenciais equivalentes PDF/A-2/-3. O validador informa 14 novas classes de problemas (00050-00067): subtipos de anotação proibidos (00050; ISO 19005-1 §6.5.2 proíbe FileAttachment / Sound / Movie para PDF/A-1, e ISO 19005-2 §6.3.1 proíbe 3D / Sound / Screen / Movie para PDF/A-2 e PDF/A-3), anotação /CA diferente de 1.0 (00051; §6.5.3), anotação /F ausente ou com Print=0 / Hidden=1 / Invisible=1 / NoView=1 (00052; §6.5.3, com /Subtype /Popup isento), anotação /AA (00054; §6.6.2), dict de aparência de anotação com chaves diferentes de /N ou valor /N não conforme (00055; §6.5.3 Cor2), anotação Widget com /A (00056; §6.9), ExtGState /TR (00058; §6.2.8), ExtGState /TR2 diferente de /Default (00059; §6.2.8), e somente em PDF/A-1: ExtGState /SMask diferente de /None (00061; §6.4), /BM diferente de Normal ou Compatible (00062; §6.4), /CA ou /ca diferente de 1.0 (00063; §6.4).
- Auditoria de ação em qualquer lugar (00064, 00065) substitui a verificação apenas-OpenAction de v3.50.0 por uma varredura completa que sinaliza valores /S de ação proibidos (Launch, Sound, Movie, ResetForm, ImportData, JavaScript, Hide, SetState, NOP, Trans, GoTo3DView, Rendition, SetOCGState) e ações nomeadas cujo /N está fora de {NextPage, PrevPage, FirstPage, LastPage} independentemente de onde a ação vive (anotação /A, widget /A, outline /A, catalog /OpenAction, etc.). ISO 19005-1 §6.6.1.
- Auditoria de XObject (00066, 00067) informa PostScript e Reference XObjects, mais chaves proibidas em Form XObjects (/OPI, /PS, /Subtype2 = /PS) e Image XObjects (/Alternates, /OPI, /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7.
Version 3.51.0
Alterado
- CheckCompliancePDFA agora audita conformidade de fonte e espaço de cor além das verificações estruturais adicionadas em v3.50.0. O validador informa nove novas classes de problemas: pelo menos um programa de fonte não está incorporado (00030; ISO 19005-1 §6.3.4 exige que todo programa de fonte, incluindo as substituições Standard 14, seja incorporado), subset Type 1 sem /CharSet em seu FontDescriptor (00031; §6.3.5), subset CIDFont sem /CIDSet (00032; §6.3.5), CIDFontType2 sem /CIDToGIDMap (00033; §6.3.3.2 Cor2), TrueType não simbólico com /Encoding não conforme (00034; §6.3.7 Cor2 exige WinAnsi/MacRoman diretamente ou como BaseEncoding, sem /Differences), TrueType simbólico que ainda carrega /Encoding (00035; §6.3.7 Cor2), pelo menos uma fonte sem /ToUnicode em documentos PDF/A-Na ou PDF/A-Nu (00036; §6.3.8 com isenção de quatro classes aplicada), espaço de cor ICCBased que não incorpora seu fluxo de perfil (00037; §6.2.3.2), e um arquivo que usa tanto DeviceRGB quanto DeviceCMYK (00038; §6.2.3.3 proíbe a mistura).
- A verificação /ToUnicode (00036) tem escopo nos níveis de conformidade A e U porque apenas esses níveis exigem mapeamento Unicode por ISO 19005-1 §6.3.8 e ISO 19005-2 §6.2.11.7. Arquivos de nível B (PDF/A-1b, PDF/A-2b, PDF/A-3b) não são sinalizados. A isenção de quatro classes reconhece codificações predefinidas (MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding), BaseFonts Standard 14 Type 1 como um proxy para fontes Adobe Standard Latin / Symbol glyph-name, e fontes Type 0 cujo CIDFont descendente usa registros Adobe-GB1, Adobe-CNS1, Adobe-Japan1 ou Adobe-Korea1.
- A auditoria de fonte percorre cada dicionário Font, classifica-o por Subtype (Type1, MMType1, TrueType, Type3, Type0 com seu descendente CIDFontType0 ou CIDFontType2), então despacha as verificações relevantes. Fontes compostas Type 0 delegam as verificações de incorporação e subset para seu CIDFont descendente, mantendo /ToUnicode no wrapper Type 0. A detecção de subset usa a convenção padrão de prefixo de seis letras maiúsculas.
Version 3.50.0
Alterado
- CheckCompliancePDFA agora informa 15 problemas adicionais de não conformidade PDF/A que o validador anteriormente perdia: array /ID de trailer ausente (00013), fluxo /Metadata do Document Catalog ausente (00014), /Filter aplicado ao fluxo /Metadata (00015), dicionários de fluxo que referenciam arquivos externos via /F, /FFilter ou /FDecodeParms (00016), arquivos incorporados declarados via /EF em qualquer dicionário de especificação de arquivo ou via a entrada Name tree /EmbeddedFiles em documentos PDF/A-1 (00017, 00018), /OpenAction apontando para um tipo de ação proibido (00019), dicionários /AA de ação adicional no Document Catalog ou em qualquer Page (00020, 00021), filtros JBIG2Decode ou JPXDecode em documentos PDF/A-1 (00022, 00023), filtros Crypt cujo /Name não é /Identity (00024), /Requirements no Document Catalog (00025), /Perms com chaves diferentes de /UR3 e /DocMDP (00026), e /AcroForm /NeedAppearances definido como true (00027). O validador agora sinaliza tipos de ação /OpenAction do Catalog proibidos (/Launch, /Sound, /Movie, /ResetForm, /ImportData, /JavaScript, /Hide, /SetState, /NOP, /Trans, /GoTo3DView, /Rendition, /SetOCGState) e valores /N de ação nomeada fora da allowlist {NextPage, PrevPage, FirstPage, LastPage} por ISO 19005-1 §6.6.1.
- Verificações específicas de filtro (JBIG2Decode, JPXDecode) e verificações de arquivo incorporado (/EF, /EmbeddedFiles) permanecem com escopo em PDF/A-1 porque ISO 19005-2 §6.2.8.3 e §6.8 explicitamente relaxam essas restrições para PDF/A-2 e PDF/A-3. Verificações de estrutura de documento (/Metadata, /AcroForm /NeedAppearances, /OpenAction, /AA, /Requirements, /Perms) se aplicam a toda parte PDF/A.
Corrigido
- O parser PDFAID aceita o sufixo de conformidade U (PDF/A-2U, PDF/A-3U) ao lado das variantes A e B existentes, de modo que CheckCompliancePDFA não levanta mais um aviso espúrio "00005 PDFA Mark NOT Found or invalid" ao escanear um arquivo PDF/A-2U ou PDF/A-3U produzido por outra ferramenta. Os níveis de conformidade de mapeamento Unicode adicionados em ISO 19005-2:2011 agora são reconhecidos pelo validador.
Version 3.49.0
Alterado
- AddLinkToImportData cria uma anotação Link cuja ação é uma ação PDF de importação de dados (/S /ImportData) que preenche os campos AcroForm do documento a partir de um arquivo FDF externo quando o usuário clica no link (ISO 32000-1 §12.6.4.8, Tabela 198). O parâmetro FileName é referenciado como um dicionário filespec, com as mesmas regras de normalização de caminho usadas por AddLinkToFile / AddLinkToFileEx (barras invertidas convertidas em barras normais conforme ISO 32000-1 §7.11.2.1). O bit 0 de Options alterna a borda visível, e os bits 1–3 selecionam o modo de destaque do link (Invert, Outline, Push), correspondendo às convenções existentes de AddLinkTo*. PDF 1.4 ou posterior. NÃO permitido em PDF/A porque a ação referencia um recurso externo; a fachada retorna silenciosamente 0 quando chamada no modo PDF/A. Exposto na biblioteca Delphi e na interface DLL como DLAddLinkToImportData / DLAddLinkToImportDataA (formas PWideChar e PAnsiChar).
Version 3.48.0
Alterado
- AddLinkToHideField cria uma anotação Link cuja ação é uma ação PDF de ocultar (/S /Hide) que alterna a visibilidade de um ou mais campos AcroForm quando o usuário clica no link (ISO 32000-1 §12.6.4.10, Tabela 196). FieldNames aceita um ou mais nomes de campos totalmente qualificados separados por vírgulas, ponto e vírgulas ou quebras de linha; um único nome emite /T como uma string de texto e dois ou mais nomes emitem /T como um array, ambas as formas permitidas pela especificação. HideFlag seleciona a direção da visibilidade: um valor diferente de zero oculta os campos listados (/H true) e zero os exibe (/H false). O bit 0 de Options alterna a borda visível, e os bits 1–3 selecionam o modo de destaque do link (Invert, Outline, Push), correspondendo a AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 ou posterior. Compatível com PDF/A porque nenhum recurso externo é referenciado. Exposto na biblioteca Delphi e na interface DLL como DLAddLinkToHideField / DLAddLinkToHideFieldA (formas PWideChar e PAnsiChar).
Version 3.47.0
Alterado
- AddLinkToNamedAction cria uma anotação Link cuja ação é uma ação nomeada PDF (/S /Named) que aciona um dos quatro comandos padronizados de navegação do visualizador definidos em ISO 32000-1 §12.6.4.11, Tabela 194: NextPage, PrevPage, FirstPage e LastPage. O parâmetro NamedActionType seleciona o comando (0=NextPage, 1=PrevPage, 2=FirstPage, 3=LastPage); valores fora desse intervalo retornam para NextPage, de modo que o writer sempre emite um nome /N em conformidade com a especificação. O bit 0 de Options alterna a borda visível, e os bits 1–3 selecionam o modo de destaque do link (Invert, Outline, Push), correspondendo às convenções existentes de AddLinkToWeb / AddLinkToPage. A anotação exige PDF 1.1 ou posterior e é compatível com PDF/A porque nenhum recurso externo é referenciado. Disponível na biblioteca Delphi e nas interfaces DLL.
Version 3.46.1
Alterado
- AddCaretAnnotation cria uma anotação de marcação caret (PDF /Subtype /Caret) no retângulo fornecido, marcando uma posição na página onde texto ou conteúdo foi inserido, omitido ou requer atenção do revisor. Suporta dois tipos de símbolo (None e Paragraph) via SymbolType (0 / 1), cor configurável, opacidade, título, conteúdo e timestamps de criação/modificação. Definido em ISO 32000-1 §12.5.6.11. PDF 1.5 ou posterior. Disponível na biblioteca Delphi e nas interfaces DLL.
- Esta entrada conclui o preenchimento das anotações geométricas que começou com v3.44.0 Square+Circle. O PDFlibPas agora cria anotações Text, Stamp, FreeText, TextMarkup (Highlight/Underline/Squiggly/StrikeOut), Square, Circle, Line, Polygon, PolyLine, Ink e Caret, além do suporte existente para Link, FileAttachment, SVG, U3D e SWF.
Version 3.46.0
Alterado
- AddInkAnnotation cria uma anotação de marcação tinta (PDF /Subtype /Ink) representando traços manuscritos ou marcas em forma livre desenhadas na página. Os traços são fornecidos como uma única string em que múltiplos traços são separados por '|' ou nova linha, e dentro de cada traço os pares de coordenadas seguem o mesmo formato espaço/vírgula/ponto e vírgula/tabulação usado por AddPolygonAnnotation. Por exemplo, "100 100 110 105 120 110 | 200 200 210 205" descreve dois traços separados. Suporta largura da borda, cor da tinta, opacidade, título, conteúdo e timestamps configuráveis. Definido em ISO 32000-1 §12.5.6.13. PDF 1.3 ou posterior. Disponível na biblioteca Delphi e nas interfaces DLL.
- Cada traço deve conter um número par de valores (pelo menos quatro); caso contrário, a chamada retorna 0 sem que nenhuma anotação seja escrita. O /Rect é calculado automaticamente a partir da extensão combinada de todos os traços mais um pequeno preenchimento para que os traços permaneçam dentro da caixa delimitadora da anotação.
Version 3.45.0
Alterado
- AddPolygonAnnotation cria uma anotação de marcação polígono fechado (PDF /Subtype /Polygon) com vértices fornecidos como uma string de pares de coordenadas separados por espaços, vírgulas, ponto e vírgulas ou tabulações (por exemplo, "100 100 200 100 200 200 100 200"). Suporta largura da borda, cor da borda, cor de preenchimento interior opcional, opacidade, título, conteúdo e timestamps configuráveis. Definido em ISO 32000-1 §12.5.6.9. PDF 1.5 ou posterior. Disponível na biblioteca Delphi e nas interfaces DLL.
- AddPolyLineAnnotation cria uma anotação de marcação polilinha aberta (PDF /Subtype /PolyLine) com o mesmo formato de string de vértices e estilos configuráveis de linha terminal em cada extremidade (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash). Definido em ISO 32000-1 §12.5.6.9. PDF 1.5 ou posterior. Disponível na biblioteca Delphi e nas interfaces DLL.
- Ambas as anotações exigem pelo menos dois vértices (quatro números) e uma quantidade total par de números; a chamada retorna 0 se a string de vértices não puder ser analisada em uma lista de pares válida. O /Rect é calculado a partir da extensão dos vértices mais um preenchimento proporcional à largura da borda para que as decorações das extremidades permaneçam visíveis.
- Ambas as anotações elevam a versão do documento para PDF 1.5 quando emitidas sob uma trava de versão mínima inferior.
Version 3.44.1
Alterado
- AddLineAnnotation cria uma anotação de marcação linha (PDF /Subtype /Line) entre dois pontos finais, com largura da borda, cor da linha, cor de preenchimento interior opcional, estilos de linha terminal para ambas as extremidades (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), opacidade, título, conteúdo e timestamps de criação/modificação configuráveis. Definido em ISO 32000-1 §12.5.6.7. PDF 1.3 ou posterior. Disponível na biblioteca Delphi e nas interfaces DLL.
- O /Rect da anotação é calculado a partir dos dois pontos finais mais um preenchimento proporcional à largura da borda para que as decorações das extremidades permaneçam dentro da caixa delimitadora da anotação.
Version 3.44.0
Alterado
- AddSquareAnnotation cria uma anotação de marcação retângulo (PDF /Subtype /Square) no retângulo fornecido, com largura da borda, cor da borda, cor de preenchimento interior opcional, opacidade, título, conteúdo e timestamps de criação/modificação configuráveis. Definido em ISO 32000-1 §12.5.6.8. PDF 1.3 ou posterior. Disponível na biblioteca Delphi e nas interfaces DLL.
- AddCircleAnnotation cria uma anotação de marcação elipse (PDF /Subtype /Circle) inscrita no retângulo fornecido, com a mesma configuração de borda, preenchimento, opacidade, título, conteúdo e timestamps de AddSquareAnnotation. Definido em ISO 32000-1 §12.5.6.8. PDF 1.3 ou posterior. Disponível na biblioteca Delphi e nas interfaces DLL.
- Ambas as novas anotações elevam automaticamente a versão do documento para PDF 1.3 quando emitidas sob uma trava de versão mínima inferior e emitem um conjunto padrão de campos de anotação de marcação (/Type /Subtype /Rect /C /IC /BS /Border /CA /F /M /CreationDate /NM /T /Contents /Subj /P), de modo que os fluxos de trabalho de revisão existentes no Acrobat, Foxit e Edge podem editá-las após a criação.
Version 3.43.0
Alterado
- SetStructElemSpaceBefore e SetStructElemSpaceAfter definem os atributos /SpaceBefore e /SpaceAfter (Layout owner) no elemento de estrutura atualmente aberto, expressando o espaçamento antes e depois de elementos de nível de bloco em pontos. Definido em ISO 32000-1 §14.8.5.4.2 Tabela 340. Disponível na biblioteca Delphi, ActiveX (Dispids 73008051/73008052) e interfaces DLL.
- SetStructElemStartIndent e SetStructElemEndIndent definem os atributos /StartIndent e /EndIndent (Layout owner), expressando o recuo a partir das bordas inicial e final, conscientes do modo de escrita, do retângulo de conteúdo em pontos. Definido em ISO 32000-1 §14.8.5.4.2 Tabela 340. Disponível na biblioteca Delphi, ActiveX (Dispids 73008053/73008054) e interfaces DLL.
- SetStructElemColor define o atributo /Color (Layout owner) como uma tripla RGB (cada componente 0.0-1.0), descrevendo a cor de primeiro plano do elemento para mecanismos de re-flow e verificadores de contraste de cor posteriores. Definido em ISO 32000-1 §14.8.5.4.2 Tabela 340. Disponível na biblioteca Delphi, ActiveX (Dispid 73008055) e interfaces DLL.
Corrigido
- Corrigido um bug de serialização em BuildStructElemDictRef: valores numéricos de atributo de um único token (como SpaceBefore, SpaceAfter, StartIndent, EndIndent) estavam sendo escritos como nomes PDF em vez de números PDF. A correção se aplica tanto aos ramos de atributo de single-owner quanto de multi-owner.
Version 3.42.0
Alterado
- Três novas verificações de conformidade adicionadas: código 00006 sinaliza documentos criptografados (criptografia é proibida em todas as versões PDF/A); código 00007 sinaliza documentos sem uma entrada OutputIntents no catálogo (exigida por todas as versões PDF/A); códigos 00011 e 00012 sinalizam documentos sem MarkInfo ou StructTreeRoot quando o nível de conformidade é -a (acessibilidade).
Corrigido
- CheckCompliancePDFA agora valida corretamente todos os seis modos PDF/A (1a, 1b, 2a, 2b, 3a, 3b). A verificação PDFAID (código 00005) aceita qualquer um dos seis marcadores XMP válidos em vez de apenas '1B'. A verificação de limite de versão (00002) aplica 1.4 para PDF/A-1 e 1.7 para PDF/A-2 e PDF/A-3.
- A verificação OCProperties (código 00003) agora é condicional: aplica-se apenas a documentos PDF/A-1, onde o conteúdo opcional (camadas) é proibido. PDF/A-2 e PDF/A-3 permitem camadas e não são mais sinalizados.
Version 3.41.0
Alterado
- O modo PDF/A agora impõe operações proibidas no nível da API. Quando um modo PDF/A está ativo (qualquer um dos modos 1-6), chamadas a SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK ou qualquer outra API CMYK/Separation/Shader retornam 0 e não têm efeito, consistente com a exigência do PDF/A de uma única intenção de saída sRGB.
- Transparência é proibida em PDF/A-1 (modos 1 e 2): SetTransparency, SetBlendMode e SetPageTransparencyGroup retornam 0 e são no-ops quando o modo ativo é 1 ou 2. PDF/A-2 e PDF/A-3 (modos 3-6) permitem transparência limitada e não são restritos.
- Ações JavaScript são proibidas em todos os modos PDF/A (1-6): SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript e AddLinkToJavaScript todos retornam 0 e são no-ops quando qualquer modo PDF/A está ativo. ISO 19005-1 §6.6.1 proíbe explicitamente JavaScript em documentos PDF/A.
- APIs de anexo de arquivo (EmbedFile, AddFileAttachment) são bloqueadas nos modos PDF/A-1 e PDF/A-2 (1-4). Permanecem funcionais em PDF/A-3 (modos 5 e 6), que permite explicitamente arquivos incorporados arbitrários.
Version 3.40.0
Adicionado
- SetPDFAMode agora suporta os níveis de conformidade PDF/A-2 e PDF/A-3. Passe NewMode=3 para PDF/A-2b, 4 para PDF/A-2a, 5 para PDF/A-3b ou 6 para PDF/A-3a. PDF/A-2 tem como alvo PDF 1.7 e permite camadas, formulários interativos, imagens JPEG2000 e transparência limitada. PDF/A-3 estende PDF/A-2 permitindo arquivos incorporados arbitrários (qualquer tipo MIME). Todas as variantes -a escrevem automaticamente /MarkInfo e os marcadores de estrutura PDF marcados exigidos pelo nível de conformidade de acessibilidade.
Alterado
- GetInformation(201) retorna '1' a '6' correspondendo ao modo PDF/A ativo, consistente com a nova numeração de modos.
Corrigido
- Corrigido: SetPDFAMode(1) (PDF/A-1a) era anteriormente um no-op devido a um bug interno de roteamento introduzido em v3.20.0. Agora escreve corretamente /MarkInfo e /OutputIntents e define XMP pdfaid:part=1/conformance=A.
Version 3.39.0
Alterado
- SetStructElemWritingMode define o atributo /WritingMode (Layout owner) no elemento de estrutura atualmente aberto. Valores válidos são LrTb (da esquerda para a direita, padrão para scripts latinos), RlTb (da direita para a esquerda, para árabe e hebraico) e TbRl (de cima para baixo, da direita para a esquerda, para texto vertical CJK tradicional). Definido em ISO 32000-1 §14.8.5.4.2 Tabela 340. Disponível na biblioteca Delphi, ActiveX (Dispid 73008049) e interfaces DLL.
- SetStructElemListNumbering define o atributo /ListNumbering (List owner) no elemento de estrutura atualmente aberto. Valores suportados incluem None, Disc, Circle, Square (marcadores não ordenados) e Decimal, UpperRoman, LowerRoman, UpperAlpha, LowerAlpha (numeração ordenada). O atributo é definido no elemento L (lista) e permite que a tecnologia assistiva anuncie o tipo de lista corretamente. Definido em ISO 32000-1 §14.8.5.3.2 Tabela 336. Disponível na biblioteca Delphi, ActiveX (Dispid 73008050) e interfaces DLL.
Version 3.38.0
Alterado
- SetStructElemColSpan define o atributo /ColSpan (Table owner) no elemento de estrutura atualmente aberto, indicando por quantas colunas a célula se estende. Definido em ISO 32000-1 §14.8.5.7.2 Tabela 337. Disponível na biblioteca Delphi, ActiveX (Dispid 73008047) e interfaces DLL.
- SetStructElemRowSpan define o atributo /RowSpan (Table owner) no elemento de estrutura atualmente aberto, indicando por quantas linhas a célula se estende. Definido em ISO 32000-1 §14.8.5.7.2 Tabela 337. Disponível na biblioteca Delphi, ActiveX (Dispid 73008048) e interfaces DLL.
- Ambas as funções são wrappers de conveniência equivalentes a chamar AddTagAttribute com Owner='Table' e o respectivo nome de atributo. Complementam SetStructElemScope para células de tabela totalmente descritas em tabelas complexas ou com cabeçalhos abrangentes.
Version 3.37.2
Alterado
- GetPDFUADiagnostics agora informa FORM-NO-TOOLTIP:N quando N campos de formulário interativos (anotações Widget) estão sem uma entrada TU (tooltip / nome acessível). ISO 14289-1 §7.18.4 exige que todos os campos de formulário interativos contenham uma entrada TU para que a tecnologia assistiva possa anunciar a finalidade do campo ao usuário quando o campo recebe foco. /TU é o nome acessível que os leitores de tela leem em voz alta; é distinto de /T, que é o nome parcial do campo usado para acesso programático e submissão de formulários.
Version 3.37.1
Alterado
- GetPDFUADiagnostics agora informa LIST-STRUCT:N quando N elementos de estrutura LI ou LBody aparecem fora de seu elemento pai obrigatório. ISO 32000-1 §14.8.4.4 exige que LI seja filho direto de L (lista) e LBody seja filho direto de LI (item de lista). Aninhamento de lista malformado impede que a tecnologia assistiva percorra e anuncie corretamente o conteúdo da lista e pode causar falhas de validação de estrutura de documento em validadores PDF/UA-1.
Version 3.37.0
Alterado
- BeginTagEx2 é uma nova API que abre um elemento de estrutura e define todas as propriedades principais do elemento em uma única chamada. Além dos parâmetros TagType, AltText, ActualText e Lang de BeginTagEx, BeginTagEx2 aceita Title (/T, para o painel de navegação Tags), ElemID (/ID, identificador exclusivo do elemento) e Expansion (/E, texto completo de uma abreviação ou acrônimo). Passar uma string vazia para qualquer um desses três parâmetros adicionais equivale a omitir o setter correspondente. BeginTagEx2 reduz o boilerplate para elementos bem descritos — em vez de chamar BeginTagEx seguido por SetStructElemTitle, SetStructElemID e SetStructElemExpansion separadamente, todas as sete propriedades podem ser definidas em uma única chamada. A função está disponível na biblioteca Delphi, ActiveX (Dispid 73008046) e interfaces DLL.
Version 3.36.1
Alterado
- GetPDFUADiagnostics agora informa TABLE-TH-NO-SCOPE:N quando N elementos de estrutura TH (célula de cabeçalho de tabela) estão sem um atributo Scope. ISO 32000-1 §14.8.4.3.4 Tabela 337 define Scope (Row, Column ou Both) como o atributo que descreve a quais células de dados uma célula de cabeçalho se aplica. Sem ele, leitores de tela e outras tecnologias assistivas não conseguem associar de forma confiável células de cabeçalho a células de dados em tabelas complexas ou com múltiplos cabeçalhos, o que é exigido por ISO 14289-1 §7.5. Chame SetStructElemAttr('Table','Scope', 'Column') (ou 'Row' / 'Both') imediatamente após tagear cada elemento TH.
Version 3.36.0
Alterado
- SetStructElemExpansion é uma nova API que define a entrada /E (texto de expansão) no elemento de estrutura atualmente aberto (ISO 32000-1 §14.9.5). O texto de expansão é a forma totalmente escrita de uma abreviação ou acrônimo contido no elemento — por exemplo, "World Wide Web" para um Span cujo texto é "WWW". Os leitores de tela falam a expansão em vez de tentar pronunciar os caracteres abreviados, o que é crítico para a acessibilidade de conteúdo técnico e científico. PDF/UA-1 (ISO 14289-1 §7.2) exige que o idioma natural seja inequivocamente determinável; /E é o mecanismo padrão para abreviações e acrônimos. A função está disponível na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.35.1
Alterado
- GetPDFUADiagnostics agora informa DOCINFO-TITLE-MISSING quando a entrada /Title do dicionário de informações do documento está ausente ou vazia. PDF/UA-1 (ISO 14289-1) exige um título de documento para que os leitores de tela possam anunciá-lo quando o documento é aberto. A verificação DISPLAYDOCTITLE-FALSE existente confirma que o título é exibido na barra de título do visualizador; DOCINFO-TITLE-MISSING é complementar — confirma que o próprio valor do título está definido. Chame SetDocumentInfo('Title', ...) para fornecer o valor.
Version 3.35.0
Alterado
- SetStructElemTitle é uma nova API que define a entrada /T (título) no elemento de estrutura atualmente aberto (ISO 32000-1 §14.7.2 Tabela 324). O título é um rótulo legível por humanos que identifica a instância específica do elemento — por exemplo, "Chapter 1", "Summary Table" ou "Figure 3: Quarterly Sales" — e é mostrado no painel de navegação Tags dos visualizadores PDF e usado por ferramentas de remediação de acessibilidade. /T é distinto de /Alt (texto alternativo para usuários com deficiência de renderização) e /ActualText (correção de texto no nível de glifo); é mais útil em elementos de contêiner não textuais, como Table, Figure, Form, Sect e Div. Passe uma string vazia para limpar um valor previamente definido. A função está disponível na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.34.0
Alterado
- SetStructElemAltText é uma nova API que define a entrada /Alt no elemento de estrutura atualmente aberto (ISO 32000-1 §14.9.3). É equivalente a passar AltText para BeginTag, mas permite que a descrição de texto alternativo seja definida ou atualizada depois que o elemento foi aberto — útil quando a descrição é computada separadamente do tipo do elemento. PDF/UA-1 (ISO 14289-1 §7.5) exige texto Alt em elementos Figure e Formula; GetPDFUADiagnostics já informa FIGURE-NO-ALT:N para valores ausentes. A função está disponível na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.33.1
Adicionado
- GetPDFUADiagnostics agora inclui uma verificação ROLEMAP-UNMAPPED:N que detecta nomes de tipos de elementos de estrutura personalizados usados no documento que não têm entrada no dicionário /RoleMap. ISO 14289-1 §7.1 e ISO 32000-1 §14.7.3 exigem que todo tipo de estrutura não padrão seja mapeado para um tipo PDF padrão (como P, Span ou Figure) para que a tecnologia assistiva possa determinar como lidar com o elemento. Quando N tipos não mapeados são encontrados, a descrição do problema inclui a lista de nomes de tipos para que os chamadores saibam quais entradas AddRoleMap são necessárias. Todos os 49 tipos de estrutura padrão definidos em ISO 32000-1 Tabela 333 (PDF 1.7) são reconhecidos e excluídos do relatório.
Version 3.33.0
Alterado
- SetStructElemLang é uma nova API que define a entrada /Lang no elemento de estrutura atualmente aberto (ISO 32000-1 §14.9.2). A tag de idioma sobrescreve o idioma no nível do documento declarado por SetDocumentLanguage ou SetPDFUAMode para o elemento e todos os seus descendentes, permitindo que documentos multilíngues marquem cada span com sua tag de idioma BCP 47 correta (por exemplo, 'en-US', 'fr', 'zh-Hant-TW'). Leitores de tela usam o /Lang no nível do elemento para selecionar o mecanismo de texto para fala ou a voz apropriada ao ler o documento em voz alta. A função está disponível na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.32.0
Alterado
- SetStructElemActualText é uma nova API que define a entrada /ActualText no elemento de estrutura atualmente aberto (ISO 32000-1 §14.9.4). Use-a para especificar o texto Unicode exato que uma sequência de glifos representa quando a extração do fluxo de conteúdo produziria resultados incorretos — os casos mais comuns são glifos de ligaduras OpenType (U+FB00 ff, U+FB01 fi, U+FB02 fl) e abreviações com expansões não óbvias. ActualText complementa, em vez de substituir, o conteúdo renderizado; sobrescreve o que a tecnologia assistiva e os extratores de texto leem para aquele elemento sem suprimir a renderização visual. A função está disponível na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.31.1
Alterado
- GetPDFUADiagnostics agora verifica elementos de estrutura Formula além de elementos Figure ao informar texto Alt ausente (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 exige descrições alternativas para figuras gráficas e fórmulas matemáticas; anteriormente apenas elementos Figure eram verificados.
- GetPDFUADiagnostics agora informa PDF-VERSION-LOW quando a versão PDF do documento está abaixo de 1.7. PDF/UA-1 (ISO 14289-1) é definido contra PDF 1.7 (ISO 32000-1:2008); documentos em PDF 1.5 ou 1.6 não satisfariam os requisitos da especificação base. Chame SetPDFUAMode para elevar automaticamente a versão para 1.7.
Version 3.31.0
Corrigido
- IDs de elementos de estrutura e associação de cabeçalhos de tabela agora são suportados. SetStructElemID atribui um identificador de string único (/ID) ao elemento de estrutura atualmente aberto; os IDs são coletados em uma name tree /IDTree na raiz da árvore de estrutura quando o documento é salvo, permitindo que ferramentas de acessibilidade e referências cruzadas localizem elementos por ID (ISO 32000-1 §14.7.4). SetStructElemHeaders associa a célula de tabela atual (TD ou TH) com uma ou mais células de cabeçalho por meio de uma lista separada por vírgulas de IDs previamente atribuídos, escrevendo o array /Headers no dicionário do owner Table attribute (ISO 32000-1 §14.8.5.7.2). Juntas, essas duas funções suportam a marcação complexa de tabelas para PDF/UA-1 (ISO 14289-1 §7.10) e WCAG 2.x SC 1.3.1. Ambas as funções estão disponíveis na biblioteca Delphi, ActiveX e interfaces DLL. AddTagAttribute agora também lida corretamente com o atributo /Headers, com valores delimitados por vírgulas escritos como arrays de strings de texto PDF.
Version 3.30.1
Adicionado
- GetPDFUADiagnostics agora inclui uma verificação HEADING-LEVEL-SKIP:N que detecta saltos no nível de título na ordem do documento (por exemplo, um H1 imediatamente seguido por um H3 sem um H2 no meio). A verificação realiza uma travessia em pré-ordem de toda a árvore de elementos de estrutura e conta cada ocorrência em que o próximo nível de título excede o anterior em mais de um. Elementos H genéricos são tratados como H1. Voltar para um título de nível superior (H3 → H1) não é contado como um salto. WCAG 2.x Critério de Sucesso 1.3.1 e ISO 14289-1 §7.1 exigem que os títulos sejam aninhados sem lacunas.
Version 3.30.0
Alterado
- Atributos de elementos de estrutura agora são suportados para PDF tagged e documentos PDF/UA. Três novas funções de API permitem que atributos sejam anexados ao elemento de estrutura atualmente sendo construído na pilha de tags: AddTagAttribute (uso geral, qualquer owner/name/value), SetStructElemScope (wrapper de conveniência que define o atributo /Scope sob o owner Table, para células de cabeçalho TH — ISO 32000-1 §14.8.5.7.2) e SetStructElemBBox (wrapper de conveniência que define o atributo /BBox sob o owner Layout, para figuras e outros elementos posicionados visualmente — ISO 32000-1 §14.8.5.4). Quando o documento é salvo, os atributos são escritos como dicionários de atributos /A em cada elemento de estrutura; múltiplos atributos do mesmo owner são agrupados em um dict, e atributos de owners diferentes são escritos como um array de dicts. Todas as três funções estão disponíveis na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.29.1
Adicionado
- GetPDFUADiagnostics agora inclui duas verificações adicionais: se algum elemento de estrutura Figure no documento está sem um valor de texto Alt (informado como FIGURE-NO-ALT:N, por ISO 14289-1 §7.5 e ISO 32000-1 §14.9.3), e se algum elemento de estrutura ainda está aberto porque EndTag não foi chamado (informado como STRUCT-UNCLOSED:N). A verificação de figura realiza uma travessia recursiva completa da árvore de elementos de estrutura, cobrindo elementos em todas as profundidades de aninhamento.
Version 3.29.0
Alterado
- GetPDFUADiagnostics é uma nova API de diagnóstico que verifica um documento quanto a possíveis problemas de conformidade com PDF/UA-1 (ISO 14289-1) e retorna uma lista de descobertas separadas por nova linha. Seis verificações são realizadas: se MarkInfo/Marked está definido (PDF tagged), se o catálogo do documento tem uma entrada /Lang, se ViewerPreferences/DisplayDocTitle é true, se os metadados XMP contêm um identificador pdfuaid:part, a contagem de anotações não isentas sem uma entrada Contents, e a contagem de arquivos incorporados sem uma entrada AFRelationship. Cada descoberta é identificada por um código curto (por exemplo, LANG-MISSING, ANNOT-NO-CONTENTS:3) seguido por uma descrição legível por humanos. Retorna uma string vazia quando nenhum problema é encontrado. Disponível na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.28.5
Alterado
- Melhoria de acessibilidade de anotações PDF/UA-1: quando uma anotação FileAttachment não tem entrada Contents e nenhum campo /T, o nome do arquivo da especificação de arquivo incorporada da anotação (/FS /UF ou /F) agora é usado como descrição acessível de fallback. Isso completa a cadeia de fallback de Contents de anotação: /T → Link URI → nome de Stamp → nome do arquivo de FileAttachment. Os leitores de tela recebem o nome do arquivo anexado em vez de silêncio, satisfazendo ISO 14289-1 §7.18.1 para os tipos mais comuns de anotação.
Version 3.28.4
Alterado
- Melhoria de acessibilidade de anotações PDF/UA-1: quando uma anotação Stamp não tem entrada Contents (ou está vazia) e nenhum campo /T, o nome do tipo de carimbo da entrada /Name da anotação agora é usado como descrição acessível de fallback (por exemplo, "Approved", "Draft", "Confidential", "Final"). Isso estende a cadeia de fallback de Contents de anotação introduzida em v3.28.3 para cobrir anotações de carimbo, que são comuns em fluxos de trabalho envolvendo documentos revisados ou aprovados e frequentemente não têm um valor explícito de Contents.
Version 3.28.3
Alterado
- Melhoria de acessibilidade de anotações PDF/UA-1: quando uma anotação Link não tem entrada Contents (ou está vazia) e nenhum campo /T, o URI da ação URI da anotação agora é usado como descrição acessível de fallback. Isso se aplica apenas durante o processamento de SetPDFUAMode e apenas a anotações Link que carregam uma ação /URI. Os leitores de tela recebem a URL como rótulo de último recurso, satisfazendo ISO 14289-1 §7.18.1 no caso comum em que os autores criam hyperlinks sem fornecer uma descrição legível por humanos.
Version 3.28.2
Alterado
- SetEmbeddedFileAFRelationship é uma nova API para definir explicitamente o valor AFRelationship no dicionário de especificação de arquivo de um arquivo incorporado. Exigido por ISO 14289-1 (PDF/UA-1) §7.11, isso permite que os chamadores especifiquem a relação semântica de um arquivo incorporado com o conteúdo do documento, escolhendo entre os cinco valores válidos: Source, Data, Alternative, Supplement ou Unspecified. Quando SetPDFUAMode está ativo, qualquer arquivo incorporado sem uma chave AFRelationship recebe automaticamente Unspecified; use esta função para substituir esse padrão antes de salvar. Disponível na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.28.1
Alterado
- Quando SetPDFUAMode é chamado em um documento cujos metadados XMP carregam o título genérico padrão da biblioteca em vez de um específico do documento, o título agora é automaticamente substituído pelo valor da entrada Title de /Info do documento (se houver uma presente). Isso garante que o pacote XMP pdfuaid:part-1 reflita o título real do documento em vez de um placeholder, satisfazendo as expectativas do verificador PDF/UA-1.
- O parser XMP (LoadFromString) agora lê o valor dc:title dos metadados XMP existentes quando um documento é carregado, de modo que o round-tripping de um PDF que já tem dc:title preserva corretamente esse título em vez de reverter para o placeholder padrão.
Version 3.28.0
Alterado
- BeginArtifactEx(ArtifactType, ArtifactSubtype) é uma nova API de PDF tagged que estende BeginArtifact para expressar tanto o /Type do artifact quanto o /Subtype da Pagination em uma única chamada. Quando ambos os parâmetros não estão vazios, o operador escrito é /Artifact << /Type /T /Subtype /S >> BMC, permitindo artifacts de Pagination totalmente especificados, como cabeçalhos e rodapés, conforme ISO 32000-1 §14.8.2.2.1. Se apenas um parâmetro não está vazio, a forma correspondente de chave única é usada. Os pontos de entrada DLL DLBeginArtifactEx e DLBeginArtifactExA também são exportados.
Version 3.27.2
Corrigido
- BeginArtifact agora distingue corretamente os tipos de artifact dos subtipos de paginação. Quando o argumento é Pagination, Layout ou Page (tipos de artifact conforme ISO 32000-1 §14.8.2.2.1 Tabela 330), o operador marked-content escreve /Type em vez de /Subtype. Outros valores, como Header, Footer e Watermark, continuam sendo escritos como /Subtype. Isso corrige a saída anteriormente incorreta que escrevia /Subtype /Pagination quando o chamador pretendia marcar um artifact de paginação.
Version 3.27.1
Alterado
- Quando o modo PDF/UA está ativo e o documento contém arquivos incorporados, cada dicionário de especificação de arquivo que não possui uma entrada AFRelationship agora recebe uma automaticamente no momento do salvamento. O valor escrito é /Unspecified, satisfazendo o requisito ISO 14289-1 §7.11 de que todo arquivo incorporado carregue uma chave AFRelationship. Isso se aplica tanto aos arquivos adicionados via EmbedFile quanto aos arquivos incorporados já presentes em um documento carregado.
Version 3.27.0
Alterado
- AddRoleMap(CustomType, StandardType) é uma nova API de PDF tagged que registra um mapeamento de um nome de tipo de elemento de estrutura personalizado (não padrão) para um tipo de estrutura PDF padrão. Quando salvos, os mapeamentos são escritos no dicionário RoleMap na raiz da árvore de estrutura, satisfazendo o requisito ISO 14289-1 §7.1 para documentos que usam nomes de tag específicos de aplicação. Múltiplos mapeamentos podem ser registrados; chaves duplicadas são sobrescritas pela última chamada. Os pontos de entrada DLL DLAddRoleMap e DLAddRoleMapA também são exportados.
Version 3.26.0
Alterado
- BeginTagEx(TagType, AltText, ActualText, Lang) é uma nova API de PDF tagged que estende BeginTag com um atributo explícito de idioma natural. Quando Lang não está vazio, é escrito no atributo /Lang do elemento de estrutura, permitindo anotação de idioma por elemento exigida por ISO 14289-1 §7.2 para documentos multilíngues. Passe uma string Lang vazia para se comportar de forma idêntica a BeginTag. Os pontos de entrada DLL DLBeginTagEx e DLBeginTagExA também são exportados.
Version 3.25.1
Alterado
- Fontes TrueType não subconjuntadas carregadas com a code page padrão do Windows (WinAnsiEncoding) agora recebem um fluxo CMap ToUnicode, permitindo extração confiável de texto Unicode e copiar/colar para essas fontes. Anteriormente, um fluxo ToUnicode era escrito apenas quando uma substituição explícita de code page ou array de Differences estava presente; o caminho comum de codificação padrão não o possuía.
- A mesma correção se aplica a fontes TrueType carregadas com uma code page não padrão explícita mas sem array de Differences, e a fontes carregadas via formato packaged-font.
Version 3.25.0
Alterado
- Quando o modo PDF/UA está ativo, anotações não isentas (todos os tipos exceto Widget, PrinterMark e TrapNet) que não possuem uma entrada Contents não vazia agora recebem uma automaticamente no momento do salvamento. O valor /T (título / autor) da anotação é usado como fallback, satisfazendo ISO 14289-1 §7.18.1 para anotações que carregam um título mas nenhuma descrição acessível explícita.
Version 3.24.0
Alterado
- Quando o modo PDF/UA está ativo, campos de formulário interativos que não possuem uma entrada TU (tooltip / descrição alternativa) agora recebem uma automaticamente no momento do salvamento. O nome parcial do campo (entrada /T) é usado como valor de fallback, garantindo que os leitores de tela possam identificar cada campo. Botões push são corretamente excluídos deste requisito conforme ISO 14289-1 §7.18.4.
Version 3.23.1
Alterado
- GetInformation(200) retorna '1' quando o modo PDF/UA-1 está ativo no documento selecionado, permitindo que os chamadores consultem o status do modo de conformidade em tempo de execução.
- GetInformation(201) retorna '1' para PDF/A-1a, '2' para PDF/A-1b ou uma string vazia quando o modo PDF/A está desativado.
- GetInformation(313) retorna a string de versão PDF na qual o alvo de salvamento está atualmente travado, ou uma string vazia para documentos com versionamento livre.
Corrigido
- GetInformation(311) e GetInformation(312) agora retornam corretamente a string de requisito de versão e o nome do recurso do conflito mais recente de version-lock (anteriormente anunciado na entrada v3.20.3, mas ainda não implementado).
Version 3.23.0
Alterado
- SetMarkInfo(Marked) agora é uma API pública, permitindo que o flag MarkInfo.Marked seja definido independentemente da configuração completa de PDF/UA-1 realizada por SetPDFUAMode. Quando Marked é 1, MarkInfo.Suspects também é definido como false conforme exigido por ISO 14289-1 §7.18.6.
- Quando o modo PDF/UA está ativo, todas as páginas recebem automaticamente uma entrada /Tabs /S no momento do salvamento, satisfazendo o requisito de ordem de tabulação baseada em estrutura de ISO 14289-1 §7.18.4.
- Documentação de referência HTML adicionada para SetPDFUAMode, SetDocumentLanguage, SetMarkInfo, BeginTag, EndTag, BeginArtifact e EndArtifact, com tabelas completas de sintaxe e exemplos de uso.
Version 3.22.0
Alterado
- BeginTag(TagType, AltText, ActualText) abre um elemento de estrutura de PDF tagged no fluxo de conteúdo atual, escrevendo um operador BDC com um MCID atribuído automaticamente e registrando o elemento na árvore de estrutura do documento. TagType é qualquer tipo de estrutura padrão PDF (P, H1, Figure, Table, etc.). AltText e ActualText são strings opcionais de acessibilidade codificadas como strings de texto PDF (UTF-16BE).
- EndTag fecha o elemento de estrutura aberto mais recentemente, escrevendo o operador EMC correspondente no fluxo de conteúdo.
- BeginArtifact(SubType) marca uma região de conteúdo como um artifact PDF (pagination artefact, plano de fundo, etc.), escrevendo um operador BMC. SubType é opcional; quando fornecido, é escrito como /Artifact << /Subtype /SubType >>.
- EndArtifact fecha a região de artifact com um operador EMC.
- No momento do salvamento, quando algum elemento de estrutura tagged foi registrado, a biblioteca constrói automaticamente o StructTreeRoot completo, atribui chaves StructParents às páginas afetadas e escreve a name tree ParentTree, satisfazendo os requisitos de ISO 32000-1 §14.7 para PDF tagged.
- Fontes Type 1 padrão (Helvetica, Times, família Courier, Symbol) e fontes Type 1 incorporadas com codificação WinAnsi agora recebem um fluxo CMap ToUnicode, permitindo extração confiável de texto Unicode e copiar/colar para esses tipos de fonte.
Version 3.21.0
Alterado
- SetPDFUAMode(Language) ativa o modo de conformidade PDF/UA-1 (ISO 14289-1): eleva automaticamente o documento para PDF 1.7, escreve MarkInfo.Marked e MarkInfo.Suspects, habilita DisplayDocTitle em ViewerPreferences, define Catalog.Lang quando Language não está vazio e escreve a entrada de namespace XMP pdfuaid:part = 1 exigida pela Seção 6.7.11 do ISO 14289-1.
- SetDocumentLanguage(Language) escreve diretamente a entrada Catalog /Lang, permitindo que o idioma do documento seja declarado independentemente do modo PDF/UA.
- MarkInfo.Suspects agora é definido como false sempre que MarkInfo.Marked é definido como true, satisfazendo o requisito de estrutura de PDF tagged do ISO 14289-1 (Seção 7.18.6).
- Encrypt agora força o flag de permissão CanCopyAccess (cópia de conteúdo para acessibilidade) quando o documento está no modo PDF/UA, conforme exigido pela Seção 7.17 do ISO 14289-1.
Corrigido
- Campos de formulário Choice (dropdown) não carregam mais um valor de tooltip codificado e sem sentido; TU é deixado sem definir para que o chamador possa atribuir um rótulo significativo via API de propriedade do campo de formulário.
Version 3.20.3
Alterado
- Encrypt e AddSWFAnnotationFromFile agora retornam 0 imediatamente com LastErrorCode 602 quando a versão de salvamento está travada abaixo do mínimo exigido pela força de criptografia selecionada ou tipo de anotação, em vez de prosseguir silenciosamente e falhar apenas no momento do salvamento.
- GetInformation(311) e GetInformation(312) agora refletem o requisito conflitante de versão no momento da escrita quando uma versão travada bloqueia recursos de extension-level, como AES-256 ou anotações RichMedia.
Version 3.20.2
Alterado
- AddU3DAnnotationFromFile agora eleva automaticamente a versão do documento para PDF 1.6 quando uma anotação 3D é adicionada a um documento de versão inferior, consistente com o comportamento de auto-bump de versão de todos os outros pontos de entrada da API PDF 1.6+.
Version 3.20.1
Alterado
- Alvos de salvamento PDF 1.2 agora são aplicados como contratos PDF 1.2 estritos. Salvar objetos PDF 1.3+ como dados TrimBox de página sob um alvo PDF 1.2 falha antes que a saída seja escrita em vez de emitir um arquivo de versão mista.
- A conformidade de extension-level Adobe PDF 1.7 agora faz parte do save preflight. AESV3, AES-256, RichMedia, Projection, dicionários geoespaciais e subfilters de assinatura ETSI são verificados em relação ao ExtensionLevel exigido.
- A criptografia AES-256, anotações RichMedia, dicionários geoespaciais e subfilters de assinatura ETSI agora declaram a entrada Adobe Extensions correspondente quando o PDFlib eleva automaticamente um documento para conteúdo de extensão PDF 1.7.
- Salvamentos Append agora usam o mesmo gate de conformidade de versão que os salvamentos completos.
- DLLs de runtime PDFium opcionais empacotadas foram atualizadas para Win32 e Win64. GDI+ continua sendo o renderizador padrão; PDFium permanece opcional via SetPDFiumFileName e SelectRenderer(3).
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 207/207 cada, e o GoogleTest C++Builder Win64x passou em 61 testes com 2 testes existentes dependentes de amostra ignorados.
Version 3.20.0
Alterado
- Mais oito pontos de entrada do writer PDFlib agora são roteados através do EnsureMinVersion da Fase 3, de modo que a versão do documento é elevada automaticamente para o mínimo exigido pelo recurso emitido: SetDocumentMetadata (PDF 1.4 - fluxo XMP /Metadata) SetPDFAMode(1 ou 2) (PDF 1.4 - /MarkInfo + /OutputIntents) PageJavaScriptAction (PDF 1.5 - Page /AA + JavaScript) DocJavaScriptAction (PDF 1.4 - Catalog /AA + JavaScript) SetTabOrderMode (PDF 1.5 - Page /Tabs) NewOptionalContentGroup (PDF 1.5 - /Type /OCG) SetNeedAppearances (PDF 1.5 - AcroForm /NeedAppearances) NewFormField(ftSignature) (PDF 1.5 - AcroForm /SigFlags AppendOnly)
- Combinado com o conjunto v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout) e o conjunto v3.17.0 (oito entradas JavaScript / arquivo incorporado / XFA / SWF), o PDFlib agora eleva automaticamente FVersion em vinte e um pontos de entrada do writer.
- NewOptionalContentGroup anteriormente elevava FVersion diretamente; agora passa por EnsureMinVersion para que LockSaveVersion seja respeitado e o bump seja registrado em AutoBumpedFeatures.
Version 3.19.0
Alterado
- A conformidade de versão PDF no momento do salvamento e do carregamento agora também reconhece quatro recursos anteriormente adiados: Btn /Ff bit 15 NoToggleToOff (apenas radio-button) -> PDF 1.4 DeviceN /Subtype /NChannel (refinamento de espaço de cores) -> PDF 1.6 FontFile3 /Subtype /OpenType (tipo de programa de fonte) -> PDF 1.6 Sig /SubFilter ETSI.CAdES.detached ou ETSI.RFC3161 -> PDF 1.7
- A regra NChannel corresponde à forma de array de espaço de cores DeviceN [/DeviceN names alternateSpace tintTransform attributes] quando o dicionário de attributes no índice 4 carrega /Subtype /NChannel.
- A regra FontFile3 OpenType dispara apenas quando o fluxo é alcançado por meio de uma chave pai chamada 'FontFile3', de modo que fluxos não relacionados que por acaso carregam /Subtype /OpenType não são sinalizados.
- A tabela PDFFeatureRules agora carrega 103 regras (99 + 4 novas).
Version 3.18.6
Alterado
- A conformidade de versão PDF no momento do salvamento e do carregamento agora reconhece /AA (ações adicionais) com consciência de tipo de contêiner: Catalog /AA (gatilhos no nível do documento) -> PDF 1.4 Annot /AA (gatilhos de anotação) -> PDF 1.4 Page /AA (gatilhos de página) -> PDF 1.5
- /AA de campo de formulário (PDF 1.2) permanece coberto pelo contrato de salvamento PDF 1.3 existente; nenhuma regra necessária.
- A tabela PDFFeatureRules agora carrega 99 regras (96 + 3 novas).
Version 3.18.5
Adicionado
- Nova regra: AcroForm /NeedAppearances é reconhecido como um recurso PDF 1.5 conforme Tabela 218 do PDF 1.5.
Alterado
- A tabela PDFFeatureRules agora carrega 96 regras (95 + 1 nova).
Corrigido
- A conformidade de versão PDF no momento do salvamento e do carregamento agora classifica corretamente Page /Tabs como um recurso PDF 1.5; anteriormente era classificado incorretamente como PDF 1.4. O documento de mudanças da especificação PDF 1.4 (Adobe TN #5409) não lista /Tabs, e a Tabela 8.10 do PDF 1.5 introduz "Tabs (Opcional; PDF 1.5)".
Version 3.18.4
Adicionado
- A cobertura de regressão zlib-ng agora inclui payloads de tamanho de fronteira, dados de scanline semelhantes a PNG, fluxos armazenados multi-bloco e fluxos zlib conhecidos nos runners de teste Delphi e C++Builder.
Alterado
- PDFlibZLib agora sempre usa o backend de objeto estático empacotado zlib-ng em compilações normais da biblioteca, removendo o caminho de fallback restante para System.ZLib.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 194/194 cada, e o GoogleTest C++Builder Win64x passou em 58 testes com 2 testes existentes dependentes de amostra ignorados.
Version 3.18.3
Alterado
- Demos Delphi e C++Builder que geram saída PDF ou texto agora abrem automaticamente o documento gerado após um salvamento bem-sucedido.
- O empacotamento do instalador agora mantém artefatos de compilação fora das pastas de demo e torna as amostras C++Builder mais módulos DLL e ActiveX/OCX componentes opcionais; seus arquivos correspondentes são instalados apenas quando o componente é selecionado.
Version 3.18.2
Alterado
- Os demos Delphi e C++Builder EditFormField agora limpam /NeedAppearances antes de atualizar os valores dos campos, de modo que cada campo de texto editado receba um fluxo de aparência normal atualizado no PDF salvo.
- Isso mantém o fluxo /AP salvo em sincronia com o valor /V armazenado e evita diferenças dependentes do visualizador onde focar o campo revela texto que estava ausente da aparência estática do campo.
Version 3.18.1
Alterado
- A conformidade de versão PDF no momento do salvamento e do carregamento agora também reconhece flags /Ff de campo de formulário no nível de bit e o bit AppendOnly de AcroForm /SigFlags: /Ff bit 21 (FileSelect, máscara 1048576) -> PDF 1.4 /Ff bit 22 (MultiSelect, máscara 2097152) -> PDF 1.4 /Ff bit 23 (DoNotSpellCheck, máscara 4194304) -> PDF 1.4 /Ff bit 24 (DoNotScroll, máscara 8388608) -> PDF 1.4 /Ff bit 25 (Comb, máscara 16777216) -> PDF 1.5 /Ff bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5 /Ff bit 27 (CommitOnSelChange, máscara 67108864) -> PDF 1.5 /SigFlags bit 2 (AppendOnly, máscara 2) -> PDF 1.5
- A herança de /Parent não é seguida: apenas dicionários que carregam explicitamente /Ff ou /SigFlags acionam as regras.
- A tabela PDFFeatureRules agora carrega 95 regras (87 + 8 novas no nível de bit).
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 191/191 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.18.0
Alterado
- A conformidade de versão PDF no momento do salvamento e do carregamento agora também reconhece nove mais sub-chaves e recursos no nível de bit: flags de anotação no nível de bit (máscara /F): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 sub-chaves distintas de catálogo e página: /BoxColorInfo (página) -> PDF 1.4 /Permissions, /Legal, /PresSteps -> PDF 1.5 /VP (viewport geoespacial de página) -> PDF 1.6 /Collection (coleção portátil de catálogo) -> PDF 1.7
- A tabela PDFFeatureRules agora carrega 87 regras (78 no nível de capítulo + 9 no nível de sub-chave / bit).
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 189/189 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.17.0
Alterado
- Mais oito pontos de entrada do writer PDFlib agora são roteados através do EnsureMinVersion da Fase 3, de modo que a versão do documento é elevada automaticamente para o mínimo exigido pelo recurso emitido: AddLinkToJavaScript, SetOpenActionJavaScript, AddGlobalJavaScript, FormFieldJavaScriptAction (PDF 1.3 - ações JavaScript) AddEmbeddedFile, AddFileAttachment (PDF 1.3 - anexos de arquivo) SetXFAFromString (PDF 1.5 - formulários XFA) AddSWFAnnotationFromFile (PDF 1.7 - anotação RichMedia)
- Combinado com o conjunto v3.15.0 (SetTransparency, SetPageUserUnit, Encrypt, SetPageLayout), o PDFlib agora cobre treze pontos de entrada do writer de alta versão de ponta a ponta.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 187/187 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.16.3
Adicionado
- Nova API PDFlib: LockSaveVersion(Version) fixa o documento na Version e impede que o EnsureMinVersion do writer da Fase 3 faça o auto-bump para uma versão superior. UnlockSaveVersion limpa a trava.
Alterado
- O gate no momento do salvamento permanece inalterado: recursos emitidos pelo writer acima da versão travada ainda produzem LastErrorCode 602 no momento do salvamento, em vez de elevar silenciosamente o cabeçalho.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 184/184 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.16.2
Alterado
- PDFs carregados agora expõem uma visão apenas de contribuintes da detecção de recursos no momento do carregamento através de GetInformation(103) ("ContributorFeatures"). A lista contém apenas recursos cuja versão mínima exigida é estritamente maior que HeaderVersion (chave 100), de modo que responde diretamente a "por que a versão efetiva é maior que o cabeçalho do arquivo?".
- GetInformation(101) ("DetectedFeatures") permanece inalterado e ainda lista todos os recursos correspondentes, independentemente da contribuição.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 181/181 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.16.1
Adicionado
- Cobertura expandida de teste de detecção do lado do loader com seis fixtures sintéticas adicionais: transparência in-page ExtGState (sem version bump), Catalog /MarkInfo (PDF 1.3 -> PDF 1.4), /OCProperties + conteúdo OCG (PDF 1.4 -> PDF 1.5), /Type /3DStream (PDF 1.5 -> PDF 1.6), uma fixture de combinação de múltiplos recursos e uma verificação de estabilidade de snapshot.
Alterado
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 179/179 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.16.0
Adicionado
- Novas chaves GetInformation: 100 retorna HeaderVersion (literal %PDF-X.Y), 101 retorna DetectedFeatures (recursos correspondentes no carregamento, delimitados por CRLF), 102 retorna AutoBumpedFeatures (recursos delimitados por CRLF que acionaram o EnsureMinVersion do writer).
Alterado
- Documentos PDF carregados agora passam por uma passagem de detecção de versão orientada por conteúdo: cada objeto indireto é percorrido através da tabela de recurso-para-mínimo-versão usada pelo gate no momento do salvamento, e FVersion é elevado acima do valor literal do cabeçalho %PDF-X.Y quando o conteúdo realmente exige uma versão superior. Por exemplo, uma entrada de página /UserUnit eleva a versão efetiva para PDF 1.6 mesmo quando o cabeçalho do arquivo diz PDF 1.4.
- O gate no momento do salvamento não é afetado: documentos cuja versão efetiva foi elevada no carregamento e depois explicitamente rebaixada com SetInformation(0, ...) ainda produzem LastErrorCode 602 no momento do salvamento.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 173/173 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.15.0
Alterado
- Pontos de entrada do writer que produzem recursos exigindo uma versão mínima específica do PDF agora elevam automaticamente a versão PDF do documento. Chamar SetTransparency em um documento marcado como PDF 1.3 agora promove o cabeçalho para PDF 1.4 em vez de falhar no salvamento com LastErrorCode 602.
- Mesmo auto-bump conectado em SetPageUserUnit (>=1.6), Encrypt com Strength 1/2/3/4 (>=1.4/1.6/1.7/1.7 respectivamente) e as variantes de duas páginas de SetPageLayout (>=1.5).
- Mudança de comportamento em relação a 3.14.x: aplicações que anteriormente dependiam do gate "alvo de salvamento rejeita recursos emitidos pelo writer" do v3.12.6 agora têm sucesso na versão elevada. PDFs carregados que já contêm recursos de versão superior ainda passam pelo gate existente no momento do salvamento, de modo que carregar um PDF tagged e selecionar PDF 1.3 ainda falha com LastErrorCode 602.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 170/170 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.14.3
Alterado
- A conformidade de versão PDF no momento do salvamento agora também reconhece os tipos restantes de dicionário 3D PDF 1.6 (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) e os subtipos de anotação Redact, RichMedia e Projection PDF 1.7 mais os dicionários complementares /Type /Requirement e /ReqHandler.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 168/168 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.14.2
Alterado
- A conformidade de versão PDF no momento do salvamento agora também reconhece recursos PDF 1.5: formulários /XFA, /AlternatePresentations, name tree /Renditions, os dicionários multimídia /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers e o subtipo de anotação Screen.
- Salvar como PDF 1.4 agora rejeita documentos que carregam esses recursos com LastErrorCode 602.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 166/166 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.14.1
Alterado
- A conformidade de versão PDF no momento do salvamento agora também reconhece recursos PDF 1.4: dicionários de PDF tagged /StructTreeRoot /MarkInfo e StructElem, as entradas /Lang do documento e /Tabs da página, dicionários /OutputIntents e /OutputIntent, a assinatura de direitos de uso /UR3 e os subtipos de anotação PDF 1.4 Polygon, PolyLine, Caret, Ink, Popup e Watermark.
- Salvar como PDF 1.3 agora rejeita documentos que carregam esses recursos com LastErrorCode 602.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 165/165 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.14.0
Alterado
- A conformidade de versão PDF no momento do salvamento agora também reconhece recursos PDF 1.3, como smooth shading, objetos de função, espaços de cores ICCBased e DeviceN, entradas de página /TrimBox /BleedBox /ArtBox, CMaps /ToUnicode, anexos de arquivo e anotações /Sound e /Movie, dicts /Type /Filespec e /Type /EmbeddedFile, as chaves /Group /EF /Alternates /Mask e ações JavaScript.
- Chamadores PDF 1.2 agora salvam sob o contrato PDF 1.3: o cabeçalho literal %PDF-1.2 é preservado, mas o gate aceita recursos PDF 1.3. Recursos PDF 1.4 e posteriores ainda são rejeitados com LastErrorCode 602.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 162/162 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.13.0
Alterado
- Refatorado o gate de conformidade de versão PDF que rejeita recursos de versão posterior no momento do salvamento em um módulo dedicado, para que o conjunto de regras possa crescer sem agitar o núcleo do documento.
- Nenhuma mudança de comportamento visível ao usuário em relação a v3.12.7: os mesmos recursos fora de versão ainda são rejeitados com LastErrorCode 602.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 155/155 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.12.7
Adicionado
- Cobertura de teste automatizado expandida para o fluxo de trabalho de renderização de acesso direto PdfToImage tanto nas suítes DUnitX Delphi quanto nas suítes GoogleTest C++Builder.
Alterado
- O runner de teste GUI Delphi VCL agora registra as fixtures Syntax e XRef, correspondendo à cobertura do runner de console.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 147/147 cada, e o GoogleTest C++Builder Win64x passou em 57/57.
Version 3.12.6
Alterado
- Salvar como PDF 1.3, 1.4, 1.5, 1.6 ou 1.7 agora impõe a versão selecionada como o contrato de saída do salvamento completo.
- Salvamentos completos removem substituições de catálogo /Version, removem entradas de extensão de catálogo e metadados não suportados para alvos inferiores e suprimem fluxos de metadados XMP PDF 1.4 quando se salva como PDF 1.3.
- SaveToFile, SaveToString e SaveToStream agora falham com LastErrorCode 602 quando a versão do alvo PDF selecionada é inferior aos recursos ainda presentes no documento, como transparência, conteúdo opcional, JPX, UserUnit, 3D ou recursos de crypt-filter AES.
Version 3.12.5
Adicionado
- Cobertura de regressão adicionada para escapes desconhecidos de strings literais e sequências de escape octal/não octal mistas.
Alterado
- Melhorada a análise de strings literais PDF 1.7, de modo que sequências de escape desconhecidas ignorem a barra invertida conforme exigido pelo padrão.
- Escapes octais de strings literais agora consomem apenas dígitos octais e preservam um dígito não octal seguinte como dados normais da string.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 141/141 cada.
Version 3.12.4
Adicionado
- Cobertura de regressão adicionada para delimitadores de nome de chave-direita e entradas esparsas de fluxo xref de objeto comprimido.
Alterado
- Melhorada a análise léxica PDF 1.7, de modo que objetos de nome agora param corretamente no delimitador chave-direita.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 139/139 cada.
Corrigido
- Corrigido o carregamento SmartAccess de entradas de objeto comprimido de fluxo xref cujo número de fluxo de objeto é maior que o comprimento de bytes do PDF.
Version 3.12.3
Adicionado
- Novos PDFs criptografados AES agora escrevem valores de Length de crypt-filter como comprimentos de bit, correspondendo ao contrato do dicionário de crypt filter PDF 1.7.
Alterado
- Compatibilidade aprimorada de documentos criptografados PDF 1.7 para arquivos de standard security handler que usam StrF, StmF, EFF, Identity, None ou crypt filters nomeados no estilo StdCF.
- Fluxos de metadados agora respeitam EncryptMetadata=false durante fluxos de trabalho de descriptografia, criptografia e cópia/salvamento em vez de serem processados como fluxos comuns.
- Fluxos de arquivo incorporado agora carregam /Type /EmbeddedFile e usam o caminho de decisão de crypt-filter de arquivo incorporado quando documentos criptografados são carregados ou salvos.
- Fluxos de arquivo incorporado externo agora promovem FDecodeParms para DecodeParms quando FFilter é promovido para Filter, preservando os parâmetros de decodificação do fluxo.
- Valores Prev/XRefStm de fluxo XRef e grandes offsets numéricos agora mantêm precisão de 64 bits através dos caminhos do parser e do SmartAccess.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 137/137 cada.
Version 3.12.2
Alterado
- Compatibilidade aprimorada de decodificação de fluxo PDF 1.7. A decodificação genérica de fluxo agora respeita /DP como alias de DecodeParms, resolve entradas indiretas de array de parâmetros de decodificação e aceita as abreviações de filtro padrão /AHx e /LZW.
- A saída PDF de arquivo grande agora escreve offsets xref, startxref, linearização e ByteRange de assinatura digital através de caminhos de formatação de 64 bits, em vez de estreitar esses valores através de helpers inteiros de 32 bits.
- Documentos carregados agora tratam uma entrada de catálogo /Version como a versão PDF efetiva quando é mais recente que a versão do cabeçalho do arquivo.
- Validação: as suítes DUnitX Delphi Win32 e Win64 passaram em 134/134 cada.
Corrigido
- Trailers de fluxo xref reescritos não retem mais chaves DecodeParms exclusivas do fluxo quando o PDFlibPas os salva como dicionários de trailer clássicos.
Version 3.12.1
Alterado
- PDFs gerados agora abrem com a primeira página dimensionada para a altura disponível da janela do visualizador, de modo que toda a primeira página é visível de cima para baixo no maior zoom que cabe na janela. Configure um OpenAction personalizado (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript) no documento para substituir este padrão.
Version 3.12.0
Adicionado
- Adicionados stubs CRT malloc/calloc/realloc/free alinhados em 32 bytes para as bibliotecas C estáticas e corrigido TPDFJPEGImage.Compress para liberar buffers jpeg_mem_dest através do mesmo caminho de free C que os alocou.
- Expandidas as notas de validação públicas para destacar a cobertura automatizada rigorosa por trás deste release: compilações de biblioteca, round trips de compressão, saída HelloWorld /FlateDecode, renderização JPEG, fluxos de trabalho de imagem, fontes, formulários, segurança, assinatura, impressão e fluxos de trabalho derivados de demo C++Builder.
Alterado
- Os backends estáticos do Windows agora incluem objetos NASM SIMD libjpeg-turbo para Win32 e Win64, mais objetos de despacho SIMD x86 zlib-ng para o conjunto zlib-ng Win64x.
- Retrabalhados os scripts de reconstrução zlib-ng para que as compilações Win64x bcc64x e MSVC de diagnóstico compilem os arquivos de origem genérico, SSE2, SSSE3, SSE4.1/SSE4.2, PCLMULQDQ e AVX2 com flags de recurso por arquivo, em vez de depender de um único switch global do compilador.
Version 3.11.0
Adicionado
- Adicionado um pequeno objeto bridge zlib-ng para compilações Win64, de modo que o código Pascal mantenha pontos de entrada zlib-compatíveis estáveis enquanto Delphi e C++Builder consomem seus próprios conjuntos de objetos compatíveis com o linker.
Alterado
- Alternada a compressão e descompressão Flate do Windows para zlib-ng no modo zlib-compatível. Win32, Delphi Win64 e C++Builder Win64x agora linkam conjuntos estáticos de objetos zlib-ng compatíveis com ABI de Lib\thirdparty\Win32, Lib\thirdparty\Win64 e Lib\thirdparty\Win64x.
- Atualizados todos os projetos de demo C++Builder para definir PDFLIB_CPPBUILDER, correspondendo ao runner GoogleTest e impedindo que demos Win64x linkem os objetos zlib-ng Delphi Win64.
Corrigido
- O caminho Win64 não é mais roteado através da unidade System.ZLib do Delphi, de modo que a compressão/descompressão de fluxo PDF pode se beneficiar do backend zlib-ng assim como a compilação de 32 bits.
Version 3.10.3
Adicionado
- Estendida a suíte GoogleTest C++Builder para cobrir todos os demos em Demo\C++Builder. O layout phase-1 de 7 fixtures cresceu para 15 fixtures / 52 casos GoogleTest, todos passando em Win64x. Demos recém-cobertos: AddFormattedTitle, AddTextImage, AddTrueTypeSubsettedFont, AddWebLink, CanvasText, CaptureToNewSize, CopyPageRanges, CreateWithImage, CreateWithImageToStream, DoInTheStream, DrawWrappedText, EditFormField, EmbeddedFonts, ExtractAnnotAttach, ExtractEmbeddedFonts, ExtractImage, ImageToPdf, ImportEMF, MultiFunction (renderer switch), PageOperations, PdfDecrypt, PdfPermission, PrintPDF, TextMeasure, TextPaging.
Version 3.10.2
Adicionado
- Adicionado um runner GoogleTest C++Builder em Tests\C++Builder que exercita Lib\PDFlibrary.pas através dos mesmos cabeçalhos HPP emitidos pelo {$JPHNE} usados pelos demos C++Builder. A primeira fase espelha sete cenários principais Delphi (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, renderização PdfToImage) como 17 casos GoogleTest, todos passando em Win64x.
- Estendida a suíte DUnitX Delphi com Tests.Print cobrindo os demos PrintPDF e ShowPrinterBins (enumeração de impressora padrão, configuração de impressora personalizada, opções de impressão, redirecionar trabalho de impressão para arquivo) e um teste de troca de renderizador em Tests.Render exercitando a seleção de mecanismo GDI+ / PDFium / Cairo do demo MultiFunction no mesmo PDF de origem.
Version 3.10.1
Adicionado
- Adicionados 57 tamanhos de página nomeados ao SetPageSize, para que os mesmos nomes canônicos de tamanho de página também funcionem aqui: SIZE8X11, QUADA0, DOUBA0, B0PLUS, ENVB4/B5/C6/DL/MONARCH, ENV9/10/11, ANSIA/B/C/D/E, ARCHA/B/C/D/E1/E, SHIROKU, G1K, USBC/EUBC/ASBC, ID1/ID2/ID3, ONEINCH/TWOINCH/L2INCH/USVISA, P2R..P24R / S8R / P4D photo prints, plus the Chinese / Taiwanese octavo and sextodecimo sheet formats LARGE/STANDARD/CROWN/ROC 8K and the matching 16K halves.
Version 3.10.0
Adicionado
- Adicionadas versões C++Builder nativas para cada amostra Delphi em Demo. Os demos de criação de PDF, manipulação de página, fontes, imagens, segurança, assinatura, renderização e impressão agora podem ser compilados e executados a partir do C++Builder sem nenhum wrapper Delphi.
- Adicionado um Readme.txt breve em inglês para cada pasta de demo Delphi descrevendo o que o demo mostra, a API em que se concentra e como executá-lo; uma visão geral HTML em Demo\Delphi\index.html liga todos eles agrupados por tópico.
Alterado
- Cada novo demo reside em Demo\C++Builder\<Name>\ como um projeto de console que consome Lib\PDFlibrary.pas diretamente e inclui os arquivos de entrada necessários para execução.
- Espelhado o mesmo Readme.txt para cada demo C++Builder com uma seção Run reescrita para o fluxo de trabalho de console (argumentos argv em vez de Open/SaveDialogs); um Demo\C++Builder\index.html correspondente lista cada demo C++Builder com os mesmos grupos de tópico.
Corrigido
- Corrigido um vazamento de memória no demo ImportEMF (a instância TPDFlib foi criada mas nunca liberada).
Version 3.9.14
Alterado
- Arrumados os demos de texto envolvido e paginação HTML para que cada um se concentre em sua própria API e seja executado a partir de um único botão.
- Renomeados dois projetos de demo (EmbeddedFonts e PdfPermission) para que os executáveis compilados correspondam aos nomes das pastas em vez dos nomes de protótipo mais antigos.
Corrigido
- Corrigido o demo de cópia de intervalo de páginas para que ele realmente copie páginas em vez de sempre relatar falha.
Version 3.9.13
Adicionado
- Introduzida uma suíte de teste automatizada DUnitX (runners de console e VCL GUI) cobrindo unidades utilitárias — buffer, AES, ZLib, Unicode e digest hashing — e fluxos de trabalho no nível da biblioteca, incluindo criação de documento, salvamento em arquivo e em fluxo, round-trips de carregamento e criptografia AES-128/AES-256.
Corrigido
- Corrigido um bug de posição de fluxo no leitor de buffer interno: leituras de palavra de dois bytes estavam avançando o cursor de leitura em quatro bytes em vez de dois. Em buffers com mais de dois bytes, as leituras subsequentes caiam no offset errado e retornavam silenciosamente dados incorretos. O efeito era mais visível ao analisar estruturas de dados binários que intercalam leituras de byte e word.
Version 3.9.12
Alterado
- A renderização de imagens GDI+ agora é padronizada para interpolação bicúbica suave de alta qualidade ao dimensionar imagens raster para a resolução de tela ou exportação. Anteriormente o padrão era vizinho mais próximo (nearest-neighbour), que produzia artefatos visíveis em escada em pequenas imagens (logos, miniaturas) ampliadas para visualização em tela ou exportação em alta DPI. Chamadores que preferem o modo de vizinho mais próximo mais nítido podem restaurar o comportamento antigo via SetGDIPlusOptions.
Version 3.9.11
Corrigido
- Corrigida a renderização Cairo de imagens PDF que usam transparência color-key (um array color-range /Mask no dicionário de imagem). Anteriormente, quando uma página continha uma imagem com essa forma de transparência, o renderizador Cairo omitia a imagem inteiramente em vez de comporê-la sobre o fundo da página. A correção deriva um canal alpha por pixel a partir dos intervalos de color-key declarados e renderiza o resultado como uma imagem transparente, produzindo saída visualmente consistente com o renderizador GDI+.
Version 3.9.10
Corrigido
- Corrigida uma regressão de renderização Cairo onde todo o conteúdo da página após uma sequência de imagem clipada estava incorretamente confinado ao retângulo de clipping da imagem. Páginas PDF que salvam o estado gráfico, aplicam um caminho de clip, pintam uma imagem e então restauram o estado — uma técnica de layout comum para imagens emolduradas ou com bordas — renderizariam todo o texto, formas e gráficos subsequentes apenas dentro da região clipada. O salvamento e restauração de estado do Cairo agora mapeiam corretamente para os operadores q/Q do PDF, de modo que a região de clipping é descartada após o desenho da imagem.
Version 3.9.9
Adicionado
- Adicionado um mecanismo de renderização PDF baseado em Cairo como uma terceira opção de renderização junto a GDI+ e PDFium. Chame SelectRenderer(2) antes de renderizar para ativá-lo; o mecanismo requer cairo.dll da pasta DLL\Cairo empacotada. A renderização Cairo suporta os mesmos modos de saída do GDI+: exportação de arquivo bitmap e fluxo (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), renderização em device-context e saída direta para impressora.
Alterado
- O demo View/Print MultiFunction agora expõe um seletor de renderizador de três vias para que os usuários possam comparar a saída GDI+, PDFium e Cairo lado a lado no mesmo documento sem nenhuma mudança de código.
Version 3.9.8
Corrigido
- Suprimidos dois diagnósticos espúrios do compilador no shim C-runtime Win32 que apareceram no RAD Studio 13.1 e posteriores. Um aviso de descontinuação (W1000) foi levantado porque um guard de capacidade de versão do compilador não foi propagado para compiladores mais novos que o Delphi 2009, fazendo com que compilassem contra uma API descontinuada do gerenciador de memória. Uma dica de variável não utilizada (H2164) foi levantada para uma variável de compatibilidade interna necessária apenas para compilações Delphi 7; agora está com escopo no bloco condicional dessa versão. Ambos os problemas eram apenas diagnósticos sem impacto em tempo de execução.
Version 3.9.7
Adicionado
- Adicionada renderização de página opcional baseada em PDFium no Windows, incluindo renderização de fluxo BMP, renderização em device-context, renderização em memória e saída para impressora.
Alterado
- Atualizado o demo Delphi View/Print MultiFunction com um seletor de renderizador para que os usuários possam alternar entre o renderizador GDI+ existente e PDFium.
Version 3.9.6
Adicionado
- Adicionados scripts Inno Setup separados para o pacote PDFlibPas completo e o pacote de avaliação, com exclusões focadas no release para metadados de controle de origem, saídas de compilação, caches da IDE, arquivos de agente locais e árvores de origem de terceiros empacotadas que não fazem parte do pacote enviado.
Alterado
- O instalador de avaliação agora compila e empacota bibliotecas binárias de avaliação para RAD Studio 11.3, 12.3 e 13.1, mais os demos Delphi de avaliação, antes que o executável de configuração seja gerado.
Version 3.9.5
Corrigido
- Corrigidas as compilações de biblioteca Win32 no RAD Studio 9.0 / Delphi XE2. O script de compilação estava passando um flag de diretório de saída DCU que existe apenas a partir do Delphi 2010; o compilador do XE2 interpretava o flag de forma diferente, produzindo um caminho de saída confuso e um erro fatal antes que qualquer arquivo de origem fosse processado. O script agora seleciona o flag apropriado automaticamente com base na versão do compilador alvo.
- Corrigido um guard de versão do compilador relacionado no código-fonte da biblioteca que estava chamando uma função de runtime qualificada por nome introduzida no XE4 sob uma condição XE2+. As compilações alvo de XE2 e XE3 agora resolvem corretamente a importação de compatibilidade.
Version 3.9.4
Corrigido
- Corrigida a configuração de impressora para impressoras de rede e compartilhadas em servidor aplicando as configurações de bandeja de papel, mídia, duplex, qualidade e outras configurações de impressão através do handle DEVMODE da impressora em vez do handle de device context da impressora.
Version 3.9.3
Alterado
- Atualizado o backend AES empacotado para as fontes AES 2018 de Brian Gladman tanto em Win32 quanto em Win64. Scripts de compilação reproduzíveis agora permitem que os objetos AES estáticos sejam reconstruídos a partir da fonte a qualquer momento. Um defeito de ABI nas bindings Pascal foi descoberto e corrigido no processo: as funções de criptografia e descriptografia AES-CBC estavam sem sua declaração de convenção de chamada C, de modo que compilações Win32 passavam silenciosamente argumentos na ordem errada de registradores, potencialmente produzindo saída criptografada incorreta. Compilações Win64 não foram afetadas porque a plataforma impõe uma convenção de chamada uniforme.
Segurança
- Endurecidos os scripts de reconstrução de terceiros para que os scripts MSVC para zlib, JPEG e stubs CRT possam ser lançados da raiz do repositório assim como do diretório thirdparty; anteriormente exigiam que o diretório de trabalho fosse definido como a pasta thirdparty.
Version 3.9.2
Corrigido
- Atualizado o backend JPEG 2000 do legado OpenJPEG 1.5 para OpenJPEG 2.5.4 tanto em Win32 quanto em Win64. Ambas as plataformas agora usam linking de objetos estáticos, de modo que a codificação e decodificação JPEG 2000 funcionam sem uma DLL de runtime adicional. O codec moderno traz manipulação atual de cabeçalho JP2/J2K, uma API de fluxo orientada por callback e bugs acumulados e correções de segurança do projeto upstream. A API pública TJpeg2000Bitmap permanece inalterada.
Version 3.9.1
Corrigido
- Corrigida a renderização de página JPEG e a exportação de imagem após o upgrade do libjpeg-turbo, restaurando a conversão JPG PdfToImage e a saída TPDFJPEGImage.SaveToStream em Win32 e Win64.
- Corrigidas as bindings ABI libjpeg-turbo Win32 para que callbacks, alinhamento de estrutura, campos booleanos e destinos JPEG em memória correspondam ao libjpeg-turbo 3.1.90.
- Corrigida a descompressão de fluxo FlateDecode Win32 com o backend zlib 1.3.2 empacotado, restaurando o carregamento de fluxo xref PDF para arquivos como o documento de amostra PdfToImage.
Version 3.9.0
Alterado
- Atualizado o backend JPEG 2000 empacotado do legado OpenJPEG 1.5 para OpenJPEG 2.5.4. O carregamento e salvamento JPEG 2000 agora usam o codec moderno, API de fluxo orientada por callback e manipulação atual de cabeçalho JP2/J2K, preservando a API pública TJpeg2000Bitmap.
Corrigido
- A saída JPEG 2000 agora seleciona automaticamente uma contagem de resolução OpenJPEG válida para pequenas imagens, e o backend estático Win32 não depende mais de exports auxiliares MSVCRT ausentes.
Version 3.8.1
Corrigido
- Eliminados todos os 16 avisos cosméticos do linker W1028 "Bad global symbol definition" em Win32 e Win64. Renomeações no nível da fonte removem as duplicatas redundantes do lado Pascal (jpeg_std_error e os stubs alocadores jmemnobs agora resolvem unicamente pela camada obj); os três símbolos obj bcc32 / vc64 restantes (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table) que devem permanecer resolvidos por link contra dados do lado Pascal agora têm seus nomes de símbolo COFF removidos por meio de uma passagem de pós-processamento ObjConv durante thirdparty\build-jpeg-vc64.bat. Nenhuma mudança na API pública; saída limpa do linker para compilações Delphi Win32 e Win64.
Version 3.8.0
Segurança
- Codec JPEG Win64 atualizado do libjpeg de estilo IJG para libjpeg-turbo 3.1.90, completando a migração JPEG iniciada em v3.7.0 (Win32). Os caminhos Win32 e Win64 agora compartilham o mesmo codec JPEG moderno, com os mesmos laços internos otimizados por SIMD e 30+ correções CVE / fuzz acumuladas do upstream. API pública PDFlibPas inalterada.
Version 3.7.0
Segurança
- Codec JPEG Win32 atualizado do IJG libjpeg-6b para libjpeg-turbo 3.1.90. Encode/decode JPEG significativamente mais rápido por meio de laços internos otimizados por SIMD, mais as 30+ correções CVE / fuzz acumuladas no upstream do libjpeg-turbo. A API pública do PDFlibPas (classe TPDFJPEGImage, funções DumpJPEG) permanece inalterada; caminhos de código PDF/JPEG existentes executam mais rápido sem necessidade de mudanças de fonte.
Version 3.6.0
Alterado
- O caminho zlib Win64 permanece inalterado neste release - continua a usar a unidade System.ZLib empacotada pelo Delphi.
- Ativado o shim CRT de tempo de link Win64 PDFlibCLibs.pas (introduzido em v3.5.0) para o caminho zlib Win32, fornecendo os símbolos memcpy / memset / malloc / free que os novos arquivos obj zlib 1.3.2 referenciam.
Segurança
- Zlib Win32 atualizada de 1.2.x para 1.3.2. Inclui as 25+ correções CVE / fuzz padrão acumuladas no upstream desde 1.2.8, mais os novos pontos de entrada inflateBack9 / inflateTree9 usados por fluxos de janela de 64 bits. A API pública do PDFlibPas (DeflateStr / InflateStr / InflateStrParms) permanece inalterada.
Version 3.5.0
Adicionado
- Adicionada infraestrutura de compilação para OpenJPEG 2.5.4. A própria árvore de origem OpenJPEG é obtida independentemente pelo usuário (git clone uclouvain/openjpeg em Lib/thirdparty/OpenJPEG/) para que possa ser atualizada sem tocar na configuração de compilação do PDFlibPas.
- Adicionado Lib/PDFlibCLibs.pas, um shim CRT de link para Win64 usado pelo backend Win64. Ele cobre a lacuna entre os arquivos obj C compilados com MSVC e os linkers Win64 do Delphi (dcc64 / Win64x ld.lld / BCB ilink64), que não vinculam msvcrt.dll automaticamente.
Alterado
- Vendorizada infraestrutura de compilação nova para as bibliotecas C de imagem / compressão empacotadas: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Scripts de compilação tanto para Embarcadero bcc32 (Win32) quanto para MSVC cl.exe (Win64) residem em Lib/thirdparty/ junto com as árvores de origem, de modo que qualquer pessoa com RAD Studio + VS2022 possa reconstruir os arquivos obj estáticos a partir da fonte limpa.
Version 3.4.0
Segurança
- Endurecida a geração de chave de criptografia, vetor de inicialização AES e bloco de permissões Perms contra fontes de números aleatórios previsíveis. PDFs criptografados produzidos em sistemas iniciados perto do mesmo wall-clock time não são mais trivialmente correlacionáveis; documentos AES-256 agora mantêm sua força de chave total.
- Endurecida a análise de dicionário de imagem contra PDFs malformados ou hostis que declaram contagens irrazoáveis de componentes Width, Height, BitsPerComponent ou DeviceN. Valores fora de intervalo são truncados antes de qualquer aritmética de buffer de pixels, prevenindo travamentos ao abrir tais arquivos.
- Endurecida a travessia de cross-reference e page-tree contra documentos cujas cadeias xref /Prev ou links de página /Parent formam um ciclo ou são excessivamente profundos. O leitor agora rejeita estruturas malformadas de forma limpa, em vez de recursar até ficar sem stack.
Version 3.3.1
Adicionado
- Adicionados comentários inline de racional em torno das correções de renderização PDFlibRenderer.pas que já estavam presentes no baseline Git inicial. Os comentários documentam por que SetPen escala as larguras de traço pela transformação ativa do canvas, e por que os operadores d0/d1 do CharProc de fonte Type 3 devem consumir seus operandos. Nenhum comportamento de tempo de execução mudou.
Corrigido
- Simplificados os scripts de compilação Windows por componente. As pastas DLL/, OCX/ e Dylib/ não carregam mais variantes separadas build12-* / build13-*: cada plataforma agora tem um único script build-Win32 / build-Win64 que se fixa no RAD Studio mais recente e aceita um argumento opcional "debug".
Version 3.3.0
Corrigido
- Corrigida a renderização de traços transformados em PDFlibRenderer.pas. SetPen agora aplica a escala da transformação atual do canvas às larguras de linha PDF antes de chamar Picasso, prevenindo traços superdimensionados ou subdimensionados em caminhos cujas coordenadas já foram transformadas. Isso corrige contornos de glifos Type 3 que poderiam renderizar como blocos espessos e irregulares.
- Corrigida a manipulação d0/d1 do CharProc de fonte Type 3 no parser de fluxo de conteúdo. d0 agora consome seus dois operandos de largura, e d1 consome seus seis operandos de largura/bounding box antes que comandos de desenho posteriores sejam executados, prevenindo que operandos obsoletos corrompam a geometria de glifo ou caminho.