Notas de lançamento do PDFlibPas
Histórico de versões
« Voltar ao índice da documentação
Histórico de versões das funcionalidades visíveis para o utilizador, correções, melhorias PDF, alterações de compatibilidade e atualizações da documentação do PDFlibPas
Última versão
- 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 ficheiro- 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 ficheiro 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 ficheiro 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 deteção inclui o id da regra, a norma a que pertence, um nome curto da regra, a cláusula ISO que impõe, uma severidade e o número de objetos afetados, e o relatório termina com estatísticas de aprovação/reprovação por norma e ao nível do documento- Uma norma que não foi pedida é reportada como
not-checkedem vez de uma aprovação silenciosa, pelo que uma execução parcial não pode ser confundida com um estado totalmente conforme - Os pipelines de compilação podem agora filtrar por id de regra ou por cláusula ISO em vez de corresponder a subcadeias no texto: a família de relatórios preflight compõe primeiro um relatório humano e converte esse texto em JSON, HTML ou CSV, enquanto o relatório de validação é montado a partir do resultado bruto das verificações e mantém os campos legíveis por máquina intactos
Version 3.322.0
Added
- A referência documenta agora os quatro tipos públicos declarados externamente utilizados na superfície do
TPDFlibque anteriormente não tinham página dedicada:TPDFlibProgressEvent,TPDFlibLogger,TPDFlibCertificateInfoeTPDFlibWatermarkBase, completando a cobertura dos tipos públicos de eventos, de registador (logger), de resultados de enumeração e de marcas de água
Version 3.321.0
Added
- O
CheckDocumentPolicyavalia regras internas declarativas tais comoFonts.NotEmbedded = 0,Security.Encrypted = noouDocument.Pages <= 500face ao documento e reporta cada regra como aprovada ou reprovada com o valor real, transformando um filtro de ingestão para editoras, arquivos e tipografias em configuração em vez de código de inspeção escrito à mão
Version 3.320.1
Fixed
- Desenhar texto num modo PDF/A sem carregar primeiro uma fonte já não falha: o PDF/A exige que cada programa de fonte esteja incorporado, pelo que o atalho implícito para uma fonte predefinida foi recusado e não deixou nenhuma fonte selecionada, e o
DrawTexte as outras chamadas de texto bloqueavam em vez de desenharem - O caminho de fonte implícito resolve agora uma fonte real incorporável enquanto um modo PDF/A está ativo, pelo que o texto desenhado sem uma chamada explícita a
AddTrueTypeFonté incorporado e mantém a conformidade; uma chamada direta aAddStandardFontcontinua a ser recusada em PDF/A - Em máquinas onde nenhuma fonte incorporável possa ser resolvida, o desenho recorre às métricas predefinidas em vez de falhar e reporta a deficiência de conformidade através de
LastErrorCode605, pelo que o ficheiro pode ser detetado antes de ser publicado como conforme
Version 3.320.0
Added
- O
GetDocumentFeatureReportdevolve um relatório estruturado de funcionalidades numa só chamada — metadados do documento, contagens de páginas e objetos, estado da encriptação, inventários de fontes e imagens, etiquetagem e marcadores, campos de formulário, assinaturas, anexos e a repartição de bytes por categoria — substituindo a dúzia de consultas separadas que um pipeline de catalogação ou de ingestão anteriormente tinha de reunir
Version 3.319.0
Added
SetCollectionView,AddCollectionField,SetCollectionSorteSetCollectionItemValueconstroem portfólios PDF sobre os anexos existentes, pelo que um conjunto de ficheiros incorporados é apresentado como um pacote navegável com as suas próprias colunas, ordem de ordenação e valores por ficheiro 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 rodado) agora descarta sequências rodadas independentemente do sentido da rotação: um quarto de volta no sentido horário e um quarto de volta no sentido anti-horário eram tratados de forma diferente, pelo que as notas laterais de margem eram descartadas numa direção e devolvidas na outra
- A mesma opção mantém o 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, pelo que os títulos inclinados grandes já não são descartados como se estivessem rodados
Version 3.318.0
Added
- O
DecodeAllStreamsexpande no local os fluxos comprimidos de um documento, pelo que gravá-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; as imagens, os fluxos de predição e os fluxos de referência cruzada mantêm a 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 requer em vez de uma cadeia de textoSetOutputIntentSubtypeeGetOutputIntentSubtypevoltam a etiquetar a intenção de saída, pelo que um perfil de cor carregado pode descrever uma condição de impressãoGTS_PDFXem vez da condição de arquivoGTS_PDFA1que os modos PDF/A criam
Version 3.316.0
Added
SetEncryptEmbeddedFilesOnlyeGetEncryptEmbeddedFilesOnlyrestringem a encriptação AES aos ficheiros incorporados: o documento abre e é renderizado em qualquer leitor sem pedido de palavra-passe enquanto os seus anexos permanecem encriptados, o arranjo padrão para faturas, registos clínicos e processos cujas capas são públicas mas cujo conteúdo não o é
Version 3.315.0
Added
- A opção 18 de extração de texto roda as sequências pintadas a 90, 180 ou 270 graus para a moldura de leitura horizontal e agrupa cada quarto de volta separadamente, pelo que as notas laterais de margem rodadas, os cabeçalhos de tabela e as etiquetas de eixos de gráficos são extraídos como linhas legíveis em vez de se intercalarem com o texto vertical ou serem descartados
Fixed
- O
DASetTextExtractionOptionsaceita a opção 16 (remoção de hífenes) e a opção 17 (separação de palavras por intervalo de caracteres) em vez de as rejeitar, e o caminho de extração de acesso direto reencaminha agora as opções 15, 16 e 17 para o extrator, pelo que a remoção de réguas de sublinhado, a remoção de hífenes e a separação por intervalo de caracteres se aplicam aos identificadores de ficheiro da mesma forma que a um documento carregado
Version 3.314.0
Added
- O
GetFontHasToUnicodereporta se a fonte selecionada transporta um mapeamento Unicode, e o inventário de fontes ganha um campo correspondenteHasToUnicodepor fonte e mais um resumoNoToUnicodeCount, pelo que os documentos podem ser verificados quanto a fontes seguras para extração e conversíveis em 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 ficheiros incorporados, 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 através de expressões de caminho tais comoRoot/Pages/Kids[0]/MediaBox[2]oupages[0]/Type— tipos, valores escalares, formas serializadas e contagens de elementos numa só chamada, substituindo a deslocação 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 através do estado gráfico/UseBlackPtCompdo PDF 2.0, permitindo à saída de pré-impressão e de prova fixar 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 efetua: 0 mantém o motor predefinido acelerado por SIMD, 1 favorece o débito e 9 comprime os arquivos ao mínimo- O
RecompressStreamsvolta a comprimir (re-deflate) todos os fluxos FlateDecode simples do documento selecionado ao nível atual e mantém a codificação mais pequena por fluxo, reduzindo documentos que foram originalmente escritos com uma definição de compressão rápida sem tocar no seu conteúdo
Version 3.309.0
Added
SetObjectStreamModeeGetObjectStreamModeadicionam um controlo de fluxo de objetos de três estados: desativar, gerar (predefinição) ou preservar, em que preservar mantém o agrupamento comprimido original do ficheiro carregado e escreve os contentores tal como estão, tornando as conversões de ficheiros PDF 1.5+ existentes mais económicas porque nada é desempacotado nem reagrupado
Changed
- No modo preservar, os membros editados desde o carregamento são promovidos a objetos de nível superior para que as suas alterações sejam gravadas, e qualquer membro comprimido restante seleciona automaticamente a forma de fluxo binário de referência cruzada
Version 3.308.0
Added
- O
CheckDocumentStructureexecuta uma verificação de integridade estrutural numa só chamada: cada objeto e fluxo é forçado através do seu descodificador, os fluxos Flate simples são verificados estritamente contra o marcador final zlib de modo a que os dados truncados sejam detetados, e o relatório sinaliza trailers em falta, catálogos e páginas não resolvíveis, processadores de encriptação não suportados e ficheiros reparados por análise de bytes com deteções por objeto e uma linha de resumo
Version 3.307.0
Fixed
- Documentos danificados que usam fluxos de referência cruzada agora reparam com sucesso: a reconstrução em bruto recupera os membros dos fluxos de objetos comprimidos e, quando não existe nenhuma palavra-chave de trailer em nenhum ponto do ficheiro, sintetiza o trailer a partir do catálogo de documento alcançável mais recente, pelo que um offset startxref inválido já não torna esses ficheiros impossíveis de abrir
Version 3.306.0
Added
- O
ExportDocumentDataescreve as chaves de informação do documento, toda a árvore de marcadores e os intervalos de etiquetas de página como texto simples 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 marcadores é reconstruída com níveis de aninhamento e páginas de destino, e os intervalos de etiquetas de página são substituídos — permitindo a edição massiva de marcadores e a migração de metadados entre documentos numa só chamada em cada sentido
Version 3.305.0
Added
- O
AuditDocumentSpacedecompõe a utilização de bytes do documento por categoria — imagens, programas de fonte e dicionários, fluxos de conteúdo, form XObjects, fluxos de objetos, ficheiros incorporados, metadados, árvore de estrutura, anotações, árvore de páginas e outros — com contagens de objetos, totais de bytes e percentagens, respondendo ao porquê de um ficheiro ser tão grande quanto é e a qual a otimização que mais compensa
Version 3.304.0
Added
StructTreeItemCount,GetStructTreeItemTexteGetStructTreeItemIntPropertyleem a árvore de estrutura de um documento etiquetado como uma lista de itens achatada em profundidade primeiro — tipos de elemento (em bruto e com mapeamento de papéis), 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 para além dos 64 níveis são cortados em vez de entrarem em ciclo infinito
Version 3.303.1
Fixed
- Os carimbos translúcidos de subcamada criados por
StampTexteStampImagejá não deixam a sua opacidade sangrar para o conteúdo original da página — o estado de transparência está agora confinado ao próprio carimbo, pelo que a página mantém a 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-timbre, fundos contínuos de página e modelos de formulário digitalizados numa só chamada - O esgotamento da origem é configurável: parar, percorrer as páginas de origem em ciclo, ou continuar a repetir a última página de origem; uma opção adicional impede que o carimbo seja ampliado para além do seu tamanho natural
Changed
- Os carimbos de documento são ajustados à CropBox da página de destino e colocados na vertical em páginas que transportam uma entrada
/Rotate, e cada página de origem é importada uma vez como um Form XObject partilhado de modo a que os modelos repetidos nunca dupliquem os seus recursos
Version 3.302.0
Fixed
- As palavras-passe AES-256 são agora processadas com SASLprep (RFC 4013) antes do hashing, pelo que as palavras-passe que contenham espaços não-ASCII, hífens suaves, caracteres de compatibilidade ou sequências combinatórias abrem corretamente no Acrobat e noutros leitores conformes
- A abertura de documentos AES-256 tenta primeiro a palavra-passe preparada padrão e recorre à forma legada em bytes, pelo que os ficheiros escritos por versões anteriores com palavras-passe não-ASCII continuam a abrir
Added
- O código de erro 604 reporta uma palavra-passe AES-256 rejeitada pelo SASLprep por conter pontos de código proibidos ou por violar as regras bidirecionais
Version 3.301.0
Added
- O
SplitDocumentToFilesdivide o documento selecionado num lote de ficheiros de saída com um número fixo de páginas cada, usando um marcador de nome de ficheiro%p
Changed
- A divisão em lote analisa o documento de origem uma vez e copia cada bloco a partir da mesma estrutura em memória, substituindo a reanálise completa repetida que um ciclo 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 ronda (A1, B1, A2, B2, …) - O
CollateDocumentsExaceita uma lista de intervalos de páginas por origem em que intervalos decrescentes tais como3-1invertem uma origem, pelo que as digitalizações da frente e do verso invertido se intercalam em ordem de leitura numa só chamada
Changed
- As intercalações importam cada origem através de um único mapa de objetos e intercalam por reordenação de páginas, pelo que as fontes e imagens partilhadas dentro de uma origem são escritas apenas uma vez independentemente do tamanho do grupo
Version 3.299.0
Added
SetDeterministicDocumentIDeGetDeterministicDocumentIDmudam o identificador de ficheiro do trailer para um valor reproduzível de modo a que entradas idênticas produzam bytes de saída idênticos para cache de compilação, armazenamento endereçável por conteúdo e comparação de regressão ao nível do byte- O
SetDocumentIDSeedfornece uma semente explícita para o identificador de ficheiro 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
- Os identificadores de ficheiro reproduzíveis são atualizados apenas em gravações completas; as atualizações incrementais e os documentos encriptados mantêm o identificador existente de modo a que as assinaturas e os ficheiros protegidos por palavra-passe continuem a abrir corretamente
Version 3.298.0
Added
AddLinkToArticleThreadeSetOutlineArticleThreadligam pontos interativos de página e contornos a um fio 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 utilizam referências indiretas estáveis de fio e bead e rejeitam índices inválidos sem alterar o contentor 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 as suas homólogas Unicode com assinaturas precisasPAnsiCharDelphi econst char *C - Reconstruídas
BufferUtilities,DirectAccessFunctionalityeMiscellaneousFunctionscomo páginas de índice limpas de grupos de funções, orientadas pelo esquema partilhado de categorias, corrigindo markup partido, secções etiquetadas incorretamente e emblemas em falta - O índice de navegação e o índice de pesquisa partilhado agora cobrem toda a superfície do DLL para chamadores Unicode e ANSI
Fixed
- Removida a entrada obsoleta
SetLogger, que não tinha qualquer símbolo correspondente na origem; a propriedade documentada éLogger
Version 3.296.0
Added
AddAlternateImage,AlternateImageCount,GetAlternateImageInfoeRemoveAlternateImagefornecem criação tipada e inspeção de variantes de imagem para visualização e impressão- As imagens alternativas podem ser associadas a um grupo de conteúdo opcional ou a um dicionário de pertença, enquanto uma variante por imagem base pode ser selecionada como predefinição de impressão
Changed
- O renderizador integrado agora seleciona imagens alternativas de conteúdo opcional quando uma imagem base está oculta e honra a predefinição de impressão em destinos de impressora
FindImagesagora regista XObjects de imagem alternativa alcançáveis a partir dos recursos da página, para que as variantes importadas recebam identificadores de imagem utilizáveis
Version 3.295.0
Added
AddArticleThreadcria navegação de artigo em conformidade com as normas, com metadados tipados, retângulos de página ordenados, ligações circulares de contas e matrizes de contas por páginaArticleThreadCount,GetArticleThreadInfoeGetArticleThreadBeadinspecionam fluxos de artigo criados ou importados com travessia limitada de ciclos de ligação danificados
Changed
DeletePagesagora remove fluxos de artigo que perdem todas as contas e repara as ligações circulares dos fluxos sobreviventes- O registo de páginas eliminadas agora retém referências estáveis de página indiretas, para que a limpeza de contornos e artigos não se desvie à medida que o cursor da árvore de páginas se move
Version 3.294.0
Added
SearchTextBatchpesquisa múltiplas consultas de texto enquanto cada extração de página está residente e devolve o índice de consulta de origem baseado em zero com cada ocorrênciaSearchTextBatchEachfornece a mesma pesquisa de passagem única através de uma chamada de retorno em fluxo com relatórios de progresso e cancelamento
Changed
- A pesquisa de texto de consulta única e em lote partilha agora um único núcleo de correspondência, preservando a semântica de maiúsculas/minúsculas, palavra completa e intervalo de páginas, evitando repetição de extração de página, dobragem de texto e trabalho de geometria de ocorrências
Version 3.293.1
Fixed
- A rasterização de malha de tonalidade já não falha a compilação em qualquer versão Delphi, resolvendo
E2089 Invalid typecastem conversões real-para-vírgula-flutuante no pintor GDI+ - A renderização paralela de páginas em lote agora compila em Delphi XE5 e XE6, onde
System.Threadingnão está disponível; toolchains mais antigas recuam para o caminho de renderização série, como em sistemas não-Windows - A sondagem de capacidades da impressora já não origina um erro de tipos incompatíveis em versões antigas de Delphi, alinhando a chamada
SetPrintercom o resto do código de impressão - A enumeração do arquivo de certificados agora compila em 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
- Os dicionários de pertença de conteúdo opcional podem agora ser criados, atualizados e enumerados com políticas de compatibilidade
AnyOn,AllOn,AnyOffeAllOff - As expressões de visibilidade
/VEaninhadas em PDF 1.6 suportamAnd,OreNotatravés de uma representação compacta de prefixo partilhada por Delphi e C++Builder
Changed
- Âmbitos de conteúdo opcional, fluxos de conteúdo, páginas capturadas, imagens, campos de formulário e anotações agora aceitam um identificador de grupo ou um identificador de pertença
- A renderização avalia primeiro expressões
/VEválidas e recorre a/OCGsmais/Ppara expressões malformadas ou não suportadas
Fixed
- O conteúdo opcional aninhado já não pode tornar o conteúdo visível quando um grupo ou pertença envolvente está oculto
- Os dicionários de pertença sem grupos de conteúdo opcional efetivos agora deixam a visibilidade inalterada, conforme exigido pela especificação PDF
Version 3.292.0
Added
EnumAttachmentsagora reporta datas de criação e modificação, somas de verificação hexadecimais, relações de ficheiro associado e números de objeto de especificação de ficheiro, tanto para anexos do documento como de anotaçãoValidateAttachmentChecksumverifica um conteúdo de anexo face à sua soma de verificação armazenada a pedido, enquanto os ficheiros recentemente incorporados recebem agora metadados de soma de verificação automaticamente
Fixed
SetEmbeddedFileAFRelationshipagora aceita os mesmos índices baseados em 1 de ficheiro incorporado que o resto da API de anexos, incluindo documentos com um único anexo
Version 3.291.0
Added
DeduplicateResourcesagora consolida fluxos de imagem, Form, padrão, tonalidade, função, perfil ICC, programa de fonte, CMap, CharProc Type 3, ficheiro incorporado, metadados e PostScript exatamente duplicados num documento carregado- A deduplicação de recursos fornece sinalizadores de tipo independentes, análise de simulação, recolha opcional de órfãos e estatísticas detalhadas de hash, comparação, conteúdo, referências e por categoria
Changed
- A deteção de duplicados canoniza dicionários de fluxo completos independentemente da ordem das chaves, faz o hash de cada conteúdo candidato uma vez com SHA-256 e confirma os conjuntos correspondentes byte a byte antes de redirecionar referências
- Os grupos de equivalência exata retêm o número de objeto e a geração mais baixos para um resultado determinístico, enquanto os ciclos de objetos diretos malformados e as diferenças semânticas de dicionário permanecem não combinados
Version 3.290.0
Changed
PurgeUnusedResourcesagora calcula um fecho de dependência transitiva através de padrões de mosaico, glifos Type 3, estados de aparência de anotação, grupos de máscara suave ExtGState, imagens, tonalidades e espaços de cor aninhados- As opções de limpeza predefinidas agora ativam a análise de dependência de padrão, Type 3, aparência, máscara suave e imagem, com sinalizadores independentes para chamadores que precisam de uma análise mais restrita
- Os programas de conteúdo aninhados e as entradas de dependência são colocados em cache, os âmbitos de recursos partilhados são privatizados antes da poda e os ciclos malformados são limitados por guardas de fluxo ativo e profundidade
Fixed
- Os recursos de página utilizados apenas através de espaços de cor de imagem, bases Indexed, alternativas Separation ou DeviceN, espaços subjacentes Pattern, alternativas ICCBased ou dicionários de tonalidade já não são removidos como não utilizados
- Os recursos utilizados apenas por CharProcs Type 3, células de padrão de mosaico, aparências de anotação ou grupos de máscara suave de transparência já não são removidos do seu próprio âmbito 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 devolver 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 recolha opcional de objetos órfãos
Changed
- A análise de recursos segue agora a sensibilidade a maiúsculas/minúsculas dos nomes PDF, os recursos de Form herdados, os espaços de cor de imagens inline personalizadas e todas as sete categorias padrão de recursos
- Os programas de Form repetidos são colocados em cache, os conjuntos de recursos utilizados usam pesquisa ordenada e as entradas de dicionário são removidas por ordem descendente para um desempenho previsível em documentos grandes
Fixed
- A remoção de entradas de dicionário agora invalida os índices de chaves de dicionários grandes, para que procuras posteriores não possam devolver entradas obsoletas
- Os fluxos malformados e os operadores desconhecidos preservam o seu âmbito de recursos completo por predefinição, enquanto os dicionários de recursos partilhados ou herdados são clonados antes da mutação
Version 3.288.0
Added
- As assinaturas digitais podem agora emitir estruturas completas de certificação DocMDP e bloqueio de campo FieldMDP, com relatórios de permissão estrutural para cada assinatura selecionada
- Os 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 têm agora fluxos completos de criação e verificação
- As anotações RichMedia suportam agora ativos incorporados, definições de ativação e desativação, aparências de cartaz, enumeração, extração e remoção
- A impressão de cartaz suporta agora imposição vetorial de páginas, marcas de sobreposição e de recorte, colocação sensível às margens físicas e planos de mosaico reutilizáveis
- As tabelas marcadas emitem agora 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 artefactada
- O visualizador fornece agora edição de AcroForm acessível por teclado para campos de texto, escolha, caixa de verificação, rádio e botão, ao mesmo tempo que despacha ações para a aplicação hospedeira
Changed
- As tonalidades de malha baseadas em funções Type 1 e Type 4 a 7 agora são renderizadas através de avaliação de função nativa e mosaicação de malha limitada
- A renderização de cor ICCBased partilha agora transformações em cache entre imagens e tonalidades, preservando o comportamento do espaço de cor calibrado
- As gravações incrementais agora reconstruem fluxos de objetos e fluxos de referência cruzada de forma consistente e as assinaturas selecionadas são verificadas face à sua própria revisão assinada
Fixed
- Os pedidos 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
- As substituições de bloqueio de campo rejeitadas já não descartam uma configuração de bloqueio de campo válida anterior
- Os widgets de rádio com nomes de estado de aparência duplicados preservam agora o widget selecionado e mantêm os widgets irmãos desligados
Version 3.287.0
Changed
- Os dicionários de imagens inline seguem agora os limites de comentário, delimitador, literal, hexadecimal, matriz e dicionário do PDF com aninhamento limitado
- Os conteúdos de imagens inline usam agora terminação sensível ao formato para dados raw, DCT, ASCII85, ASCIIHex, RunLength e Flate
- A descoberta de conteúdo Flate executa agora um inflate limitado a partir do desvio do fluxo de conteúdo com contabilidade exata de bytes comprimidos, enquanto os filtros sem perdas encadeados partilham um teto de saída de ponta a ponta
- Os fluxos de imagem ASCII85, ASCIIHex, LZW, predictor, perfil de cor e auxiliares aplicam agora uma saída intermédia limitada sem alocações temporárias excessivas
Fixed
- As imagens inline malformadas ou truncadas já não lêem para além dos dados de origem, entram em ciclo com valores não terminados ou retêm estado obsoleto entre reutilizações do descodificador
- As linhas de imagem empacotadas calculam agora os bits de componente antes do arredondamento de bytes, evitando comprimentos incorretos em imagens RGB de baixo bit e de múltiplas linhas
- Os espaços de cor de recursos preservam agora os seus nomes originais ao derivar contagens de componentes Lab, ICCBased indiretos e DeviceN e ao descodificar fluxos de paleta Indexed sob limites estritos
- Os limites de imagens inline rejeitam agora dimensões inválidas, profundidades de bit, filtros não suportados, cadeias de filtros inseguras, fluxos comprimidos e marcadores de fim ambíguos de forma consistente
- A renderização de cor Indexed valida agora todos os acessos à paleta e rejeita dados de procura truncados em vez de ler para além da tabela descodificada
- Os predictors PNG 10 a 15 descodificam agora 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
- Os conteúdos JPEG e JPEG 2000 verificam agora as suas dimensões, componentes, precisão, estrutura de marcadores, comprimentos de caixa e dimensão de armazenamento descodificado antes da alocação da imagem
- A validação de imagens inline limita agora tanto o armazenamento de mapas de bits empacotado como expandido e limita perfis ICC, globais JBIG2 e parâmetros de filtro terminais
- Os conteúdos de filtros binários que contêm texto de marcador de fim incorporado continuam agora até ao primeiro candidato que passe 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 demonstração 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 mistura, encriptação, JavaScript, multimédia, ficheiros incorporados e fluxos de trabalho de ficheiros 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 ladrilhado, Form XObjects, exportação de tabela no estilo DBGrid e relatório de pico de memória para ficheiros 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 campos de formulário, definidores de cor TColor e cinzento, 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 num ú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 os seus marcadoresOptionspossam forçar importação de bitmap, ativar recompressão JPEG de imagem a cores EMF e solicitar controlos de processamento GDI+
Version 3.159.1
Changed
- Melhora
SaveToStreame o guardado do fluxo de saída ligado para que grandes objetos de fluxo PDF sejam escritos em blocos limitados em vez de copiar cada objeto de fluxo para uma única cadeia de saída intermédia
Version 3.159.0
Added
- Adicionadas ajudas de posicionamento de imagem que desenham ou ajustam uma imagem especificada e libertam imediatamente o 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 imagens de utilização única
- 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 de fluxo de trabalho Delphi para exportação reutilizável ao estilo de relatório, importação de texto rico 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 ligado
Version 3.158.0
Added
- Adicionadas APIs de controlo de encriptação de metadados com pontos de entrada Delphi, DLL e ActiveX: SetEncryptMetadata pode escrever PDFs Standard-security com fluxos de metadados XMP não encriptados, enquanto GetEncryptMetadata indica o estado /EncryptMetadata pendente ou carregado
Version 3.157.0
Added
- Adicionadas APIs de desenho direto de padrões de ladrilhado 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 regista 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 ligados:
BeginOutputToStream,EndOutputStream,CancelOutputStreameOutputStreamActivepermitem que código de streaming, web e exportação de relatórios ligue umTStreamde destino, o finalize através 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 as aplicações possam marcar uma instância como cancelada e impedir que as operações de gravação ou anexação de saída comecem até que o indicador seja limpo
Version 3.154.0
Added
- Adicionadas ajudas de miniatura de página para opções de importação de imagem e origens 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 identificadores explícitos de matrizes de destino, incluindo matrizes devolvidas 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, acionadores 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 ligações 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 anexo 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 ligação tardia 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,EndFormXObjecteCancelFormXObjectatravés 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 através das APIs de desenho de página capturada
Version 3.147.0
Added
- Adicionados
SetTextTilingPatterneSetLineTilingPatternpara que padrões de ladrilhado 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 ladrilhado 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 fecho de âmbito são agora descarregados imediatamente quando os âmbitos de conteúdo opcional, PDF marcado ou artefacto 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 da ligação
Fixed
- Os leitores de ações de anotação agora devolvem 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.141.0
Adicionado
- Adicionado
AddLinkToSubmitFormeAddLinkToResetFormpara que as áreas ativas da página possam submeter ou repor campos AcroForm através de ações PDF padrão sem JavaScript
Version 3.140.0
Adicionado
- Adicionado
AppendToStreampara que os fluxos de trabalho de atualização incremental possam escrever diretamente num fluxo (stream) fornecido pelo chamador em vez de primeiro materializar a atualização como umaAnsiString
Alterado
SaveToStreamagora serializa diretamente para o fluxo alvo, eAppendToString(1)agora devolve apenas a secção de atualização incremental sem copiar os bytes de origem originais para um buffer temporário
Version 3.139.0
Adicionado
- Adicionado
GetAnnotReplyToeGetAnnotReplyTypepara que as respostas a anotações encadeadas possam ser inspecionadas através de métodos de acesso de leitura nomeados em vez de tags genéricas de propriedades de anotações
Version 3.138.0
Adicionado
- Adicionado o exemplo Delphi
DocumentInspectionWorkbenchpara inspecionar PDFs em lote com diagnósticos combinados de tipos de letra, amostragem de imagens, descoberta de espaços de cor, tempos de carregamento, e relatórios JSON, CSV e HTML
Version 3.137.0
Adicionado
- Adicionado o exemplo Delphi
ImageDecodeBenchmarkpara medir a descoberta de imagens na página, bytes de imagens descodificados, e descoberta de espaços de cor na página com relatórios de tempo em CSV e HTML
Version 3.136.0
Adicionado
- Adicionado
GetDocumentFontDiagnosticseTPDFlibFontDiagnosticspara resumir a incorporação de tipos de letra no documento, criação de subconjuntos, contagens de Standard 14, CID, Type3 e tipos de letra desconhecidos numa única chamada
Version 3.135.0
Adicionado
TPDFlibSignatureVerifier.VerifySignerCertificateChainagora constrói a cadeia de certificados do signatário incorporada com a Windows CryptoAPI e devolvevsValidapenas quando a cadeia satisfaz a política base de confiança do Windows, enquanto certificados de signatário auto-assinados ou não confiáveis devolvemvsInvalidsem alterar o resultado de integridade de conteúdo doVerifySignature
Version 3.134.0
Corrigido
TPDFlibSignatureVerifier.VerifySignatureagora valida assinaturas antigasadbe.pkcs7.sha1, devolvendovsValidquando o resumo assinado corresponde aos bytes/ByteRangecobertos evsInvalidapós o conteúdo coberto mudar
Version 3.133.0
Adicionado
- Adicionado
RenderPagesToFileseDARenderPagesToFilespara renderizar intervalos arbitrários de páginas em ficheiros de saída numerados, reutilizando a configuração do renderizador em todas as páginas selecionadas
Version 3.132.0
Adicionado
- Adicionados os carimbadores de conveniência
AddPageHeadereAddPageFooterque colocam texto numa 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,&&e comercial literal) StampTexteStampImagecomsoUnderlayagora colocam verdadeiramente o conteúdo por baixo do conteúdo existente da página, pré-anexando uma nova camada de conteúdo (anteriormente desenhava por cima comosoOverlay); suportado por um novo método de árvore de páginasPrependContentLayer
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 num bloco de estado gráficoq sx 0 0 sy tx ty cm ... Qe redimensiona a MediaBox e a CropBox; a âncora mantém a origem no canto inferior esquerdo (0), centra o conteúdo (1) ou mantém o canto superior esquerdo (2) - Extendido
EnumPageElementscom um novo tipo de elementoekPath: cada página reporta agora também os seus caminhos vetoriais com uma caixa delimitadora, contagem de pontos, flag de fecho 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 ficheiro que reduzem documentos carregados ao guardar novamente:
SubsetEmbeddedFontsreescreve cada programa de tipo de letra TrueType incorporado (FontFile2) reduzindo-o aos caracteres Unicode que o documento efetivamente renderiza através do serviçoCreateFontPackageda FontSub.dll;DownsampleImages(MaxDPI, Quality, Filter)descodifica cada imagem XObject acima da DPI alvo, reamostra-a (box ou bilinear) e volta a codificá-la como JPEG ou PNG;NormalizeLZWStreamsreescreve cada fluxo ainda filtrado com LZWDecode para FlateDecode através do descodificador LZW e codificador Flate existentes, preservando os parâmetros Predictor
Version 3.129.0
Adicionado
- Adicionadas APIs de criação de sombreamento de malha para os quatro tipos de sombreamento que anteriormente apenas tinham suporte de leitura/análise:
NewRGBFreeFormTriangleMesh(ShadingType 4, triângulos de Gouraud de forma livre),NewRGBLatticeTriangleMesh(ShadingType 5, Gouraud em forma de treliça),NewRGBCoonsPatchMesh(ShadingType 6, malha de patches de Coons) eNewRGBTensorPatchMesh(ShadingType 7, malha de patches de produto tensorial) — cada uma 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 coordenada/cor selecionável e uma caixa delimitadora, selecionável comSetFillShader/SetLineShader/SetTextShadercomo os sombreadores axiais e radiais existentes
Version 3.128.0
Adicionado
- Adicionada uma faixa de miniaturas para o visualizador:
TPDFlibThumbnailBarmostra uma miniatura de cada página, renderizada de forma diferida à medida que as linhas entram no ecrã, com o número da página por baixo; clicar numa miniatura faz com que o visualizador anexado salte para essa página — completando a família de controlos do visualizador (visualizador, painel de marcadores, painel de pesquisa, miniaturas)
Version 3.127.0
Adicionado
- Adicionado um painel de pesquisa para o visualizador:
TPDFlibSearchPanel.RunSearchpesquisa todo o documento anexado e lista uma linha por cada correspondência com o respetivo número da página e o texto correspondente; clicar numa correspondência faz com que o visualizador salte para essa página
Version 3.126.0
Adicionado
- Adicionado um painel de marcadores para o visualizador:
TPDFlibOutlineViewerlista a árvore de índice do documento com indentação e salta o visualizador anexado (através deAttachViewer) para a página de destino de um marcador quando clicado; é construído sobre uma classe base de painel reutilizável que os painéis laterais posteriores partilham
Version 3.125.0
Adicionado
- Adicionada a seleção de texto ao controlo do visualizador: arraste com o botão esquerdo do rato para selecionar, prima 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 bandas - Adicionado
GetTextInRegion, que devolve diretamente o texto de uma região retangular da página — a mesma pesquisa baseada em blocos que a seleção com o rato utiliza, disponível para interfaces de seleção personalizadas
Version 3.124.0
Adicionado
- O controlo do visualizador agora pré-renderiza as páginas vizinhas numa thread em segundo plano, pelo que paginar para a frente ou para trás mostra a página seguinte instantaneamente; o processo trabalhador utiliza a sua própria instância do documento e entrega as renderizações concluídas à cache sem bloquear a interface de utilizador
- Adicionada interatividade de links ao visualizador: clicar numa 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 no documento, ação nomeada e assim por diante);LinkActionAtPagePointexpõe o teste de colisão subjacente (hit test) para manipulação personalizada
Version 3.123.0
Adicionado
- O controlo do visualizador ganhou rolagem contínua:
SetDisplayModealterna oTPDFlibViewerentre a exibição de página única e uma rolagem vertical contínua por todo o documento, com apenas as páginas visíveis no viewport a serem renderizadas e a página atual a acompanhar a posição de rolagem (disparandoOnPageChangeà medida que as páginas entram na vista) - As páginas renderizadas são agora mantidas numa cache de bitmaps usada menos recentemente, pelo que a rolagem para trás e para a frente não volta a renderizar; o orçamento de memória tem a predefinição de 128 MB e ajusta-se com
SetCacheLimit, expulsando as páginas mais antigas quando o limite diminui ou fica cheio - Adicionada rolagem com a roda do rato e navegação pelo teclado ao visualizador: PageUp/PageDown (avanços de página no modo de página única, avanços de viewport no modo contínuo), teclas de setas, Home e End
Version 3.122.0
Adicionado
- Adicionado um controlo de visualizador interativo de PDF:
TPDFlibVieweré um controlo VCL de rolagem que abre um documento a partir de um ficheiro ou anexa-se a uma instânciaTPDFlibexistente, exibe páginas através do motor de renderização selecionado (GDI+, Cairo ou PDFium) e oferece navegação de páginas (GoToPage/NextPage/PrevPagecom um eventoOnPageChange) e controlo de zoom — uma percentagem fixa, ajustar à largura ou ajustar à página, recalculado automaticamente quando o controlo é redimensionado; páginas mais largas do que o viewport efetuam a rolagem, páginas mais estreitas são centradas - Adicionado um pacote de tempo de design (
Package\PDFlibViewerPkg.dpk) que regista o controlo na página de paleta de PDF da losLab para uso de arrastar e largar no IDE
Version 3.121.0
Adicionado
- Formatação automática de scripts complexos no
DrawText: texto que contém caracteres em Árabe, Hebraico, Índico ou outros scripts complexos é agora detetado e formatado automaticamente — formas de letras contextuais, ligaduras obrigatórias e a ordenação da direita para a esquerda aparecem corretamente sem alterações de código; os nomes standard-14 são mapeados para os seus tipos de letra instalados com métricas compatíveis (Helvetica para Arial, Times para Times New Roman, Courier para Courier New) eGetTextWidthfaz a medição através da mesma passagem de formatação para que o alinhamento se mantenha consistente; o texto Latino, Cirílico, Grego e CJK mantém o seu percurso de desenho existente byte a byte - Adicionado
SetTextShapingpara alternar o roteamento automático (ativado por predefinição; passe 0 para restaurar o comportamento exato pré-formatação)
Version 3.120.0
Alterado
- Os tipos de letra associados ao texto formatado são agora submetidos a subconjuntos no momento de guardar apenas para os glifos que o documento mostra, reduzindo drasticamente os ficheiros de saída (um programa de tipo de letra completo de mais de um megabyte é reduzido aos glifos utilizados); o tipo de letra em subconjunto mantém a numeração de glifos, ostenta um nome
BaseFontassinalado como subconjunto e as larguras/Wreais por cada glifo, e ganha um mapa ToUnicode que traduz cada glifo formatado de volta para os seus caracteres de origem — por isso, copiar ou extrair a saída deDrawShapedTextdevolve a string original, incluindo ambas as letras por trás de uma ligadura lam-alef
Version 3.119.0
Adicionado
- Adicionado o desenho de texto de scripts complexos:
DrawShapedTextformata strings em Árabe, Hebraico e de outros scripts complexos antes de as desenhar — formas de letras contextuais, ligaduras obrigatórias como o lam-alef, e a ordenação da direita para a esquerda aparecem todos corretamente — e escreve os glifos formatados através de um tipo de letra Type0 (Identity-H) associado que incorpora o programa de tipo de letra na íntegra, pelo que formas sem o seu próprio código de carácter são renderizadas de forma exata; um tipo de letra associado é criado por face e reutilizado nas várias chamadas - Adicionado
GetShapedTextWidth, que mede o texto através da mesma passagem de formatação para que o texto com ligaduras meça a sua verdadeira largura de desenho — use-o para alinhar à direita ou centrar parágrafos formatados
Version 3.118.0
Adicionado
- Adicionadas as bases para a modelagem de texto de scripts complexos (complex-script text shaping): um novo binding do Uniscribe (usp10.dll) converte texto em Árabe, Hebraico e outras cadeias de carateres de scripts complexos em execuções de glifos ordenadas e moldadas corretamente — formas árabes contextuais, ligaduras obrigatórias, como lam-alef, e ordenação da direita para a esquerda — reportando o índice de glifo de fonte, o avanço e o cluster do caráter de origem de cada glifo; este é o motor de modelagem sobre o qual as versões posteriores constroem o percurso de desenho, e é carregado de forma diferida para que as plataformas sem Uniscribe mantenham simplesmente o percurso existente de caráter a caráter
Version 3.117.0
Adicionado
- Adicionada introspeção de perfis ICC:
GetOutputIntentICCInfoanalisa o perfil ICC anexado ao OutputIntent do documento e relata a sua versão, classe de dispositivo, espaço de cor de 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 ficheiros PDF/A e PDF/X; o tratamento do espaço de cores ICCBased do renderizador deriva agora também a contagem de componentes do próprio cabeçalho do perfil quando o espaço de cores de um sombreado não contém nem/Alternatenem/N
Version 3.116.0
Adicionado
- Adicionado um modo de extração de texto consciente de tabelas: a opção 10 do
GetPageTextagrupa as margens esquerdas dos blocos de texto da página em posições de colunas globais e emite linhas separadas por tabulações, para que os layouts tabulares sejam extraídos como TSV prontos a importar, com as células alinhadas verticalmente permanecendo alinhadas ao longo das linhas
Version 3.115.0
Adicionado
- Adicionada imposição de páginas:
ImposePagesNUpdispõe todas as páginas do documento em novas folhas numa grelha n-up (2-up, 4-up, 9-up ou qualquer disposição de Colunas x Linhas), em que cada página é ajustada pela relação de aspeto e centrada na respetiva célula como conteúdo vetorial dinâmico, ou — com a opção de livreto (booklet) — produz folhas com costura a cavalo, cuja conjugação de páginas se dobra num livreto quando impressas em frente e verso e empilhadas
Version 3.114.0
Adicionado
- Estendido o suporte dos leitores de ações tipadas
GetAnnotActionInfoeGetOutlineActionInfoa mais quatro tipos de ações — Hide (Ocultar, com o número de destinos ocultos e a flag ocultar/mostrar), SubmitForm (URL de submissão e contagem de campos), ResetForm (contagem de campos) e ImportData (ficheiro de origem) — e para expor o nome do payload das ações Named (Nomeadas) (por ex.,NextPage); ambos os leitores partilham agora um único analisador (parser), para que links de anotações e marcadores reportem informações idênticas
Version 3.113.0
Adicionado
- Adicionados auxiliares de formatação de campos de formulário:
SetFormFieldNumberFormat(casas decimais, estilo de separador, estilo negativo e colocação de moeda),SetFormFieldPercentFormateSetFormFieldDateFormat(strings de data no formato Acrobat, comomm/dd/yyyy) cada um escreve o par de JavaScript de formatação standard do Acrobat nas ações adicionais do campo — um filtro de teclas mais um formatador de exibição — para que os visualizadores conformes validem a entrada e renderizem valores formatados sem a necessidade de escrever JavaScript manual
Version 3.112.0
Adicionado
- Adicionada criação de anotação de Som (Sound):
AddSoundAnnotationFromFilelê um ficheiro PCM WAV não comprimido (8 ou 16 bits, mono ou estéreo) e incorpora as respetivas amostras por trás de uma anotação de ícone de altifalante como um fluxo/Soundna codificação com sinal (signed) esperada pelo mecanismo de som do PDF, completando o percurso de ida e volta (round trip) com os leitores existentesGetAnnotSoundToFile/GetAnnotSoundToString
Version 3.111.0
Adicionado
- Adicionadas respostas a anotações em thread (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 destino com a relação de resposta/RT, de modo a que o Acrobat e outros visualizadores a apresentem encadeada sob o destino no painel de comentários; combine comAddAnnotationStatee o intercâmbio de comentários FDF para percursos completos de revisão colaborativa
Version 3.110.0
Adicionado
- Adicionada renderização de sombreado (shading) com base em funções e malhas, concluindo a cobertura de todos os sete tipos de sombreado de PDF: malhas de triângulos Gouraud de forma livre (tipo 4), malhas Gouraud em forma de retículo (tipo 5), malhas de Coons (tipo 6) e malhas de patches tensor-product (tipo 7) são descodificadas a partir dos seus fluxos de dados empacotados por bits — incluindo flags de patches de extremidades partilhadas, mapeamento de valores
/Decodee rampas opcionais/Functionde cores — e pintadas através de gradientes de malha nativos do motor Cairo; sombreados baseados em funções (tipo 1) são aproximados fazendo a amostragem da função de sombreado sobre o seu domínio para uma grelha fina de patches; os espaços de cor suportados abrangem os espaços alternativos DeviceRGB, DeviceGray, DeviceCMYK e ICCBased (o motor GDI+ não possui primitiva de gradiente de malha e deixa as áreas sombreadas com malha sem pintar)
Version 3.109.0
Adicionado
- Concluída a framework de edição de conteúdo (fase 4) com edição ao nível de texto:
TPDFContentProgram.GetTextRunsenumera as instruções de apresentação de texto de uma página juntamente com o recurso de fonte e tamanho ativos em cada uma (rastreando o estado da fonte através de aninhamento guardado/restaurado), eReplaceTextRuntroca o texto mostrado in loco — uma verdadeira substituição de fluxo de conteúdo que preserva a posição original, fonte e cor, ao contrário das abordagens baseadas em sobreposição (overlay) que ocultam o texto antigo e o redesenham por cima
Version 3.108.0
Adicionado
- Adicionado um modelo de objetos para a geometria da página na framework de edição de conteúdo (fase 3):
TPDFContentProgram.LiftPathconverte (eleva) um objeto path (operadores de construção de movimento/linha/curva/retângulo, bem como os operadores de recorte e pintura que o finalizam) numTPDFPatheditável composto por sub-percursos e segmentos;TPDFPath.Transformaplica uma matriz afim a todos os pontos (mover, redimensionar, rodar ou inclinar os elementos visuais existentes);LowerPathescreve a geometria modificada de volta sobre as instruções originais, ficando pronta paraWritePageContentLayer
Version 3.107.0
Adicionado
- Expandida a framework de edição de conteúdo (fase 2) com conveniências ao nível de instrução em
TPDFContentProgram:InsertFromSourceanalisa (faz o parse de) um fragmento de conteúdo e enxerta as suas instruções em qualquer posição;SetOperandreescreve um operando único a partir da sintaxe de origem (renumerar uma coordenada, repintar um preenchimento);OperandTextvolta a ler um operando;InstructionGroup,FindNextOpeFindNextGroupnavegam na lista de instruções por operador ou pela categoria de operador ISO 32000-1
Version 3.106.0
Adicionado
- Adicionada a primeira fase da framework de edição de conteúdo estruturado:
ParsePageContentLayerdescodifica uma camada de conteúdo da página numTPDFContentProgrameditável — uma lista de instruções, em que cada uma é um operador de conteúdo PDF (todos os 73 operadores da Tabela 51 ISO 32000-1) com os respetivos objetos operando descodificados — eWritePageContentLayerserializa o programa de volta para a página, para que quem efetua a chamada possa analisar, inspecionar, eliminar ou reordenar instruções de desenho e reescrever a página;GetPageContentLayerCountrelata o número de camadas de conteúdo, que são editadas de forma independente; o emissor preserva o comportamento (um round trip inalterado renderiza os mesmos píxeis de forma idêntica), operadores desconhecidos mantêm-se intactos e imagens inline (embutidas) são transportadas inalteradas
Version 3.105.0
Adicionado
- Adicionado um modo de extração de texto por ordem de leitura: a opção 9 do
GetPageTextdevolve o texto da página na ordem de leitura visual, utilizando uma análise de espaços em branco recursiva (corte XY), para que os layouts com múltiplas colunas sejam lidos coluna a coluna — começando com o cabeçalho de largura total, seguido da coluna esquerda por inteiro, e só depois a coluna direita — ao invés de entrelaçar as colunas linha a linha, como ocorre nos ordenamentos geométricos (de cima para a esquerda)
Version 3.104.0
Adicionado
- Adicionada introspeção de certificado de signatário ao verificador de assinaturas:
GetSignerCertificatedescodifica o payload PKCS#7 do primeiro campo de assinatura e devolve um resumo tipado do certificado de signatário incorporado — nomes de visualização do titular e emissor, o número de série no formato hexadecimal convencional, o intervalo de validade em UTC (NotBefore/NotAfter) e uma flag conveniente que relata se o certificado está presentemente dentro dessa janela; o signatário corresponde nos certificados incorporados pelo emissor e pelo número de série
Version 3.103.0
Adicionado
- Adicionado
NewRGBRadialShader, a contraparte radial deNewRGBAxialShader: regista um gradiente radial rotulado de dois círculos (ShadingType 3, ISO 32000-1 §8.7.4.5.3) com fusão entre duas cores RGB e possibilidade de extensão da cor além dos círculos; este pode ser selecionado através de comandos existentes comoSetFillShader,SetLineShaderouSetTextShaderpara efetuar preenchimentos, traços e efeitos de "brilho" circulares em texto
Version 3.102.0
Adicionado
- Adicionada a renderização de gradientes radiais (ShadingType 3) (ISO 32000-1 §8.7.4.5.4): o renderizador da página pode agora pintar sombreados radiais de dois círculos utilizados pelos operadores
she em preenchimentos padronizados de sombreados (shading patterns), juntando-se aos gradientes axiais previamente suportados (ShadingType 2); os recursos do motor Cairo e do GDI+ incluem capacidade multi-stop em cores, espaços de cores para os tipos DeviceRGB/DeviceCMYK/DeviceN/Separation/ICCBased, assim como suporte à variável/Extend
Version 3.101.0
Adicionado
- Adicionado o efeito de moldura nublada (ISO 32000-1 §12.5.4):
SetAnnotCloudyEffectconverte o contorno de anotações no formato Retangular (Square), Circular (Circle), em Polígono e em Formato Aberto (FreeText) para produzir uma "nuvem de revisão" composta de semi-círculos interconectados, gravando o dicionário do efeito de borda/BE, com intensidade 1 ou 2 correspondente aos estilos Cloudy do Acrobat e 0 para remover o efeito; de volta,GetAnnotCloudyEffectlê a configuração atual (0 = sem efeito, senão a intensidade de 1..2)
Version 3.100.0
Adicionado
- Adicionados os estados de revisão para anotações (ISO 32000-1 §12.5.6.3):
AddAnnotationStateregista a mudança de estado de revisão de uma anotação em vigor anexando uma anotação de Texto oculta cujo/IRTreferencia a anotação destino e cujos dados/State+/StateModelindicam o respetivo status, suportando o modeloReview(None/Accepted/Rejected/Cancelled/Completed) e o modeloMarked(Unmarked/Marked) baseados no processo habitual efetuado pela aplicação da Acrobat na avaliação e revisão de comentários;GetAnnotStateeGetAnnotStateModellêem as respetivas strings registadas para qualquer anotação (ficando vazias caso estajam ausentes)
Corrigido
- Corrigida uma falha no carregamento (load-time) que impedia o arranque de aplicações criadas com versões de desenvolvimento recentes (uma pesquisa de nomes de certificados no Windows estava vinculada a um ponto de entrada DLL inexistente) e reparadas regressões de compilação na importação de comentários FDF, rotação de intervalos de páginas e caminhos de flags de assinatura
Version 3.99.0
Adicionado
- Adicionadas APIs de leitura de impressão digital do documento e transição:
GetDocumentFileIDdevolve o identificador permanente do documento do array/IDdo trailer (primeiro elemento codificado em hexadecimal), útil como uma chave de cache estável ou impressão digital do documento;GetPageTransitioné a contraparte de leitura deSetPageTransition, devolvendo o estilo de transição como um valor tipadoTPDFlibPageTransitionmais a duração da exibição e a duração da transição, através do mapeamento inverso das entradas/Trans/S,/Dme/Marmazenadas
Version 3.98.0
Adicionado
- Adicionadas APIs de rotação de intervalo de páginas e introspeção de miniaturas:
RotatePageRangeaplica uma rotação de 0/90/180/270 a cada página num intervalo (envolvendo a existenteRotatePagede página única para que os chamadores já não precisem de um loop por página);HasPageThumbnailreporta se uma página contém uma entrada/Thumb;GetPageThumbnailInfolê a largura, altura e bits por componente do XObject da imagem em miniatura
Version 3.97.0
Adicionado
- Adicionados leitores estendidos de propriedades de anotações:
GetAnnotColorlê o array de cores/C(RGB de 0..1, com um indicador HasColor que distingue "nenhuma cor explícita" de "preto explícito");GetAnnotBorderWidthlê/BS /W, recorrendo ao array/Borderlegado como alternativa;GetAnnotOpacitylê o valor alfa de traçado/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 introspeção de segurança do lado de leitura:
IsEncryptedreporta se o documento carregado contém um dicionário/Encrypt;GetEncryptionLeveldevolve uma resistência tipada (0=none, 1=RC4-40, 2=RC4-128, 3=AES-128, 4=AES-256, 5=AES-256 Acrobat X) correspondente às opções de encriptação do lado de escrita;GetUserPermissionsdevolve a palavra de permissões brutas/Ppara teste direto de bits;IsOwnerPasswordreporta 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 (frente e verso, orientação, cor, qualidade de impressão, tamanho do papel, bandeja de papel) além de cópias/agrupamento através de um registo tipadoTPDFlibPrintSettings, aplicando cada campo que não seja o padrão através do mecanismo existente de perfil de impressora personalizada;SearchAndReplaceTextexecuta uma pesquisa num 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 o tipo de letra selecionado pelo chamador, espelhando o comportamento de substituição de sobreposição do PDFtoolkit SearchAndReplace
Version 3.94.0
Adicionado
- Adicionado o intercâmbio de anotações FDF (Acrobat "Export/Import Comments"):
ExportAnnotationsToFDFStringeExportAnnotationsToFDFpercorrem o/Annotsde cada página e serializam cada anotação como uma entrada/Type /Annotdentro de um array/Annotsdo FDF, contendo/Subtype,/Contents,/Rect, o rótulo de autor/T,/Subje o índice/Pagebaseado em 0;ImportAnnotationsFromFDFStringeImportAnnotationsFromFDFanalisam esse FDF com uma pequena máquina de estados 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 autocolante
Version 3.93.0
Adicionado
- Adicionadas APIs de certificação de assinatura e propriedades de campos de formulário:
SetSignProcessDocMDPtransforma a próxima assinatura produzida por um processo de assinatura numa assinatura certificadora (de autor) anexando uma transformação DocMDP/Referenceno nível 1/2/3 (sem alterações / preenchimento de formulário / anotações) e definindo o bit AppendOnly do AcroForm/SigFlags;GetSigFlags/SetSigFlagsleem e escrevem diretamente o byte bruto AcroForm/SigFlags;GetFormFieldIsComb,GetFormFieldIsMultiLine,GetFormFieldJustificationeGetFormFieldAllowedValuesexpõem os bits de estilo/Ffpor campo, o enquadramento de texto/Qe o array de escolhas/Optcomo valores tipados
Version 3.92.0
Adicionado
- Adicionadas APIs de conveniência de exportação de anexos e de campos de formulário:
SaveAllAttachmentspercorre a lista unificada de anexos (/EmbeddedFilesao nível do documento mais anotações/FileAttachmentpor página) e escreve cada fluxo (stream) para um diretório sob o seu nome de especificação de ficheiro, desambiguando colisões com um sufixo numérico;RemoveFormFieldByNameresolve um nome de campo totalmente qualificado para o seu índice e elimina-o;RenameFormFieldmuda o nome de um campo pelo nome sem uma procura de índice separada
Version 3.91.0
Adicionado
- Adicionadas APIs de enumeração em todo o documento:
EnumDocumentFontspercorre cada dicionário de Font (chamandoFindFontsprimeiro se necessário) e devolve umTPDFlibDocumentFontpor fonte com o seu número de objeto, nome de/BaseFont, tipo, codificação e estado de incorporação/subconjunto, removendo a necessidade de usarSelectFontem cada entrada e consultar getters escalares;EnumAttachmentsunifica a árvore de nomes/EmbeddedFilesao nível do documento com as anotações/FileAttachmentpor página numa única listaTPDFlibAttachment, registando a origem de cada entrada, o índice de origem baseado em 1, o nome do ficheiro, o subtipo MIME, a descrição e o tamanho em bytes
Version 3.90.0
Adicionado
- Adicionadas APIs de introspeção apenas de leitura para anotações, marcadores e a versão do documento:
GetPDFVersiondevolve a string de versão PDF efetiva (por exemplo,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 a cache existenteAnalyseAnnot;GetOutlineLeveldevolve a profundidade de um marcador relativa à raiz do esboço eGetOutlineIsOpenreporta se este está expandido num visualizador (um/Countnegativo significa que está fechado), espelhando o estado de esquema que um painel de marcadores apresentaria
Version 3.89.0
Adicionado
- Adicionada a unidade codificadora de imagem JBIG2
PDFlibJBIG2Enc(TPLJBIG2Encoder.EncodeToByteArray), portada do produto irmão HotPDF, com dois backends: no Win64, o codificador aritmético C++jbig2enc(ITU-T T.88) é ligado estaticamente viaPDFlibJBIG2EncC+HPDFCLibs(228 objetos leptonica/jbig2enc emthirdparty/Win64x/) e definido como backend predefinido, correspondendo ao percurso de produção do HotPDF; noutros targets, ou quandoUseExternalEncoderé False, o fallback puro Pascal MMR comprime scanlines bi-level com o codificador CCITT G4 e encapsula-os em cabeçalhos de segmento JBIG2 (informação de página tipo 48 + região genérica imediata tipo 38) - Adicionada a unidade codificadora LZW
PDFlibLZWEnc(TPLLZWEncoder.Compress), a contraparte de codificação do descodificador existentePDFlibLZW: produz um fluxo/LZWDecodesegundo as especificações do PDF com códigos de largura variável de 9..12 bits, ClearCode/EOI e as semânticas padrão do PDF EarlyChange, além de TIFF Predictor 2 opcional (diferenciação horizontal) para que a descodificação subsequente reproduza os bytes originais
Version 3.88.0
Adicionado
- Adicionada uma unidade codificadora de imagem bi-nível CCITT Group 3 / Group 4 (T.6)
PDFlibCCITTEnc(TPLCCITTEncoder), a contraparte codificadora do descodificadorPDFlibCCITTexistente: codifica um bitmappf1bitpara um fluxo de bytes CCITT G3 1D / G3 2D / G4 (T.6) viaCompressImage/Execute, portada do produto irmão HotPDF (ambos partilham a licença losLab); isto fornece o codificador em falta para que dados de imagem monocromática possam ser produzidos para saídaCCITTFaxDecode, com integração completa do pipeline de imagem e saída G4RenderPageToMonochromeFilea seguir
Version 3.87.0
Adicionado
- Implementada a verificação de assinatura criptográfica para assinaturas PKCS#7 destacadas:
TPDFlibSignatureVerifier.VerifySignature(anteriormente um stub que devolviavsUnknown) agora recalcula o resumo (digest) do documento sobre os dois segmentos/ByteRangee valida-o contra o atributomessageDigestassinado e a chave pública do signatário através da Windows CryptoAPI (CryptVerifyDetachedMessageSignature), devolvendovsValid/vsInvalidpara os subfiltrosadbe.pkcs7.detachedeETSI.CAdES.detached; esta é a primeira camada de verificação e cobre apenas a integridade do resumo e da assinatura (a cadeia de certificados, revogação CRL/OCSP e validação de token de carimbo de tempo RFC 3161 permanecem fora do âmbito e serão adicionadas em camadas posteriores)
Version 3.86.0
Adicionado
- Adicionado um callback por marcador no momento da fusão: o evento
OnMergeOutlineé disparado para cada marcador de origem de nível superior enquantoMergeFileList/MergeFileListFast/MergeFileListStrictvincula a árvore de marcadores fundida, permitindo ao chamador renomear (Title) ou descartar (Skip=True) um marcador recebido antes que este chegue ao documento alvo; o callback recebe o índice do documento de origem baseado em 0 para que os chamadores possam aplicar políticas por documento
Version 3.85.0
Adicionado
- Adicionada a assinatura a partir da loja de certificados do sistema Windows:
SetSignProcessCertFromStoreresolve o certificado de assinatura de uma loja nomeada ("MY"/"Root"/...) através do nome de exibição simples do Sujeito (tipicamente o CN, correspondido sem distinção de maiúsculas e minúsculas; um nome vazio escolhe o primeiro certificado que tem uma chave privada) e reutiliza o pipeline de assinatura PKCS#7 existente, para que um documento possa ser assinado sem fornecer um ficheiro.pfx/.p12; combine comSetSignProcessKeysetpara escolher entreCURRENT_USER(1) eLOCAL_MACHINE(2)
Version 3.84.0
Adicionado
- Adicionada a incorporação de programas de tipos de letra para documentos já carregados:
EmbedMissingFontspercorre cada dicionário de Tipo de Letra, lê o programa de tipo de letra do sistema instalado correspondente pelo nome BaseFont e escreveFontFile2ouFontFile3de volta, devolvendo o número de tipos de letra que obtiveram um programa;EmbedFontProgramincorpora um único tipo de letra por nome utilizando o tipo de letra do sistema instalado;EmbedFontProgramFromFileincorpora um único tipo de letra utilizando um ficheiro.ttfou.otffornecido pelo chamador para tipos de letra não instalados no sistema - Adicionado
SetEmbedAllFonts, uma guarda do lado do escritor que promoveAddTrueTypeFontEmbed=0paraEmbed=1para que documentos recém-criados não possam referenciar acidentalmente tipos de letra do sistema não incorporados, mesmo fora do modo PDF/A
Version 3.83.0
Adicionado
- Adicionadas APIs de conveniência para renderização:
RenderPageToMonochromeFilerenderiza uma página num bitmap monocromático de 1 bit (para cenários de fax/arquivo/OCR) convertendo de 24 bits através de pontilhamento (dithering) GDI halftone sem modificar o núcleo de renderização;RenderPageRegionToFilerenderiza apenas um sub-retângulo especificado (“Left,Top,Width,Height”) da página num bitmap, interligando o pipeline ClipRenderPageToDCClipanteriormente desconectado
Version 3.82.0
Adicionado
- Adicionada exportação de dados de formulário FDF:
ExportFormDataToFDFescreve todos os nomes e valores de campos de formulário do documento atual num ficheiro FDF independente (uma matriz/Fieldsenvolvida em%FDF-1.2), eExportFormDataToFDFStringdevolve uma string com a mesma estrutura, facilitando o armazenamento dos dados de formulário separadamente do PDF ou a sua fusão posterior; bytes não ASCII são escapados como octais de 3 dígitos segundo a ISO 32000-1
Version 3.81.0
Adicionado
- Adicionadas APIs de conveniência de página e estrutura:
SetPageTransitionescreve os efeitos de transição de apresentação (17 transições padrão para/Trans, incluindo Split/Blinds/Wipe/Dissolve/Glitter, etc.) e a duração de visualização da página para uma página especificada;GetPageFontCounteGetPageFontIDenumeram as fontes referenciadas por uma página especificada;SetMeasurementUnitaceita uma enumeração tipificada de unidades (adicionando twips e pontos aos pixels/milímetros/polegadas existentes), juntamente com os utilitários de conversão de unidadesConvertToPointseConvertFromPoints;SaveToFileOptionsagrupa opções de gravação, tais como a compressão, linearização e preservação da data de modificação num único registo
Version 3.80.0
Adicionado
- Adicionadas APIs de conveniência de segurança e assinatura:
EncryptFileExaceita um conjunto tipificado de permissões nomeadas (TPDFlibUserPermissions, distinguindo 8 bits de permissão nomeados, tais como impressão de baixa e alta resolução) em vez de um número inteiro em bruto de bits de permissão;TPDFlibSignatureVerifier.GetSignatureMetadatalê o nome do campo, Filter, SubFilter, tempo de assinatura, motivo, localização, informações de contacto, signatário e a validação da estrutura ByteRange diretamente do dicionário de assinaturas sem descodificação PKCS#7;PrintDocumentExespecifica o número de cópias impressas e o modo de intercalação numa única chamada
Version 3.79.0
Adicionado
- Adicionadas APIs de conveniência de edição:
MaskRectdesenha um retângulo preenchido opaco sobre uma região numa página especificada (para ocultar/redigir);SetPageThumbnailFromFileanexa uma página/Thumbdiretamente a partir de um ficheiro de imagem sem poluir o estado de desenho da stream de conteúdo;FlattenFormFieldsOnPageRangeachata todos os campos de formulário num intervalo de páginas (incorporando as aparências em conteúdo estático e removendo os campos ativos);InsertAnnotationinsere um dicionário de anotação construído numa localização especificada;NewMarkupAnnotationcria anotações de marcação de realce/rasurado/sublinhado/ondulado num único passo e escreve pontos quad, cor e opacidade;StampTexteStampImageaplicam marcas de água através de um intervalo de páginas, suportando opacidade, ângulo de rotação e posição de empilhamento
Version 3.78.0
Adicionado
- Adicionadas APIs de pesquisa de texto e enumeração de elementos da página:
SearchTextpesquisa um termo de consulta num intervalo de páginas especificado e devolve o número da página e o retângulo delimitador de cada correspondência, suportando opções de correspondência exata de maiúsculas/minúsculas e de palavras completas;EnumPageElementsenumera todos os blocos de texto e elementos de imagem embutidos numa página especificada, devolvendo uniformemente o tipo de elemento, o retângulo, o texto, o nome da fonte e o ID da imagem;GetTextInAreaExé uma versão doGetTextInAreaciente do retângulo, devolvendo cada bloco de texto dentro da área e o respetivo retângulo delimitador
Version 3.77.0
Adicionado
- Adicionadas APIs de introspecção só de leitura para colmatar a anterior assimetria "pode escrever mas não pode ler":
FindOutlineByTitleencontra marcadores pelo título (suportando 3 profundidades: apenas-irmão/apenas-filho/subárvore-completa);GetOutlineActionInfoeGetAnnotActionInfodevolvem o tipo de ação de um marcador ou anotação (GoTo/GoToR/URI/Launch/Named/JavaScript) e o respetivo URI, JavaScript ou carga útil do nome do ficheiro como uma estrutura tipificada;GetOutlineDestinationInfodevolve a página de destino, o tipo Fit (XYZ/Fit/FitH/FitV/FitR/FitB/FitBH/FitBV) e as coordenadas;EnumSignatures,GetSignatureFieldCounteGetSignatureFieldInfoenumeram os campos de assinatura e indicam se estão assinados
Version 3.76.3
Alterado
- O perfil Factur-X EXTENDED da demo E-Invoice agora utiliza 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) como 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 desta 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 da 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 da demo E-Invoice foram extraídos para uma unit partilhada que a GUI e a nova ferramenta de teste de validador externo reutilizam
Version 3.76.1
Corrigido
- Corrigido um encrave ao clicar em Gerar na demo E-Invoice: as fontes padrão integradas não estão disponíveis em modo PDF/A, pelo que a demo agora incorpora uma fonte TrueType para renderizar a página da fatura
Alterado
- A demo E-Invoice remove a opção PDF/A-3a (raramente utilizada em faturação eletrónica), e o perfil XRechnung agora utiliza PDF/A-3u por predefinição
Version 3.76.0
Alterado
- A GUI da demo E-Invoice agora é data-driven: número da fatura, data de emissão, comprador e vendedor, montante líquido, taxa de imposto e moeda são editáveis, e o XML da fatura corresponde exatamente aos montantes visíveis da página, em vez de utilizar conteúdo fixo de marcador
- A demo gera XML de fatura estruturalmente correto por perfil: Factur-X, XRechnung e ZUGFeRD 2.0 utilizam a estrutura
CrossIndustryInvoice, enquanto ZUGFeRD 1.0 COMFORT utiliza a sua própria estruturaCrossIndustryDocumentcom linhas de detalhe, totais de imposto e condições de pagamento - Os montantes são escritos no XML com formato inglês fixo de ponto decimal para evitar que separadores de milhares localizados ou vírgulas quebrem o esquema, e a entrada do utilizador é escapada antes da escrita
- A demo adiciona uma pré-visualização XML em direto, autoverificações de conteúdo ao nível do perfil, a análise do relatório de validação externo
.validation.jsoncom o 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 para ficheiros 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 passa a usar PDF/A-3u por predefinição
Version 3.75.5
Adicionado
- Adiciona uma demonstração GUI Delphi E-Invoice que pode escolher perfis Factur-X, ZUGFeRD e XRechnung, gerar facturas híbridas PDF/A-3, incorporar o nome de ficheiro XML e o guideline ID correspondentes, executar validação do contentor na interface e mostrar informações XMP da factura, problemas de validação e XML extraído
Version 3.75.4
Adicionado
- Adiciona suporte para ficheiros associados PDF/A-3 e XML de factura electrónica:
AddPDFA3AssociatedFileFromStringpode criar ficheiros associados Catalog/AFdirectamente a partir de bytes em memória,AddFacturXAssociatedFileFromStringpode escrever XML Factur-X, ZUGFeRD e XRechnung, sincronizar metadados XMP e validar a combinação de nome de ficheiro, perfil, namespace XMP e guideline ID XML, enquanto o lado de leitura adiciona APIs de detecção, validação, lista de problemas e extracção de XML
Version 3.75.3
Corrigido
- Função de mesclagem de PDF: as variáveis locais
GlobalRootObjNum,GlobalRootGenNum,StructRootGlobalObjNumeStructRootGlobalGenNumeram atribuídas apenas dentro de blocos condicionais, o que provocava avisos W1036 “variable might not be initialized” nos compiladores Delphi Win64 26 e 29 (RAD Studio 12 e 16); foi adicionada inicialização a zero na entrada da função
Version 3.75.2
Corrigido
- Compatibilidade de compilação entre versões: o ciclo
forno analisador de cadeias hexadecimais (PDFlibStruct) usava uma variável de controloInt64, que o Delphi XE3/XE5 (compiladores 26/27) rejeita por não ser ordinal; reescrito como um cicloWhilepara restabelecer a compatibilidade com RAD Studio 12 e 14 - Verificador de XObject de referência (
PDFlibPDFUA): o ponteiro do dicionárioDnão era inicializado no ramo não stream/não dicionário, causando uma dica do compilador em todos os alvos; o ramo foi reestruturado para atribuir sempreDantes da verificaçãoAssigned - Invólucro
CreateFontPackage(PDFlibFont): suprimiu o falso aviso W1035 “o valor de retorno pode ficar indefinido” no Delphi ≤ XE8, evitando ao mesmo tempo a dica complementar H2077 de atribuição morta em compiladores mais recentes, através da guarda{$IF CompilerVersion} - Gravador de DPI 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: a guarda de terminação do ciclo contra contagens de páginas excessivamente grandes era ineficaz porque
FPageCountestava declarado comoWord(máximo 65 535), tornando a comparação> 65535sempre falsa; alterado paraIntegerpara que a guarda dispare agora corretamente em ficheiros patológicos - Analisador de charset CFF/Type 2 (Format 1 e Format 2): removidas as atribuições mortas
Done := Trueque precediam imediatamente umBreake por isso nunca eram lidas, eliminando dicas do compilador
Version 3.75.0
Segurança
- Reforçada a análise de fontes incorporadas não fidedignas (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
- Reforçados os descodificadores de imagem (PNG, GIF, TIFF, JBIG2 e CCITT Group 3 e 4) contra leituras e escritas fora dos limites, transbordo inteiro nos cálculos de largura e altura e dereferências de paleta vazia a partir de imagens maliciosas
- Reforçados os filtros de stream (LZW, ASCII85 e preditores Flate) contra leituras além do buffer, divisão por zero e ciclos que não terminam em dados de stream forjados
- Reforçada a análise de cross-reference, reconstrução de documento e name-tree contra acesso fora dos limites e ciclos infinitos causados por dados de cross-reference malformados ou circulares
- A desencriptação AES-CBC agora valida o alinhamento dos blocos do ciphertext e inicializa a zero o seu buffer de saída, evitando que memória de heap não inicializada se perca em strings e streams desencriptados
Corrigido
- Os digests de assinaturas destacadas SHA-256, SHA-384 e SHA-512 são agora produzidos com o provider criptográfico correto; anteriormente devolviam um digest vazio e geravam assinaturas inválidas
- A descodificação ASCII85 e RC4 já não devolve dados não inicializados nem lança uma exceção com entrada truncada ou uma 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 assinaturas PAdES (VRI) que impedia a biblioteca de compilar
- Removido o último aviso do compilador e as dicas de variável não utilizada; todas as compilações das bibliotecas trial e release para Win32 e Win64 agora compilam sem avisos
Version 3.74.0
Adicionado
- Os caminhos diretos de ficheiro de
EncryptFileeDecryptFileagora leem PDFs cujos dados de cross-reference vivem em cross-reference streams, incluindo cadeias atualizadas incrementalmente e ficheiros hybrid-reference com uma secção lateral/XRefStm, em vez de recair no leitor completo mais lento: a proteção AES-256 de um documento de benchmark de 1.25 GB baixou de cerca de 4.4 para 2.5 segundos e a desencriptação de cerca de 1.7 para 1.3 segundos - Reescritas que transportam objetos armazenados em object streams comprimidos agora emitem um trailer de cross-reference stream, mantendo esses objetos endereçáveis na saída encriptada ou desencriptada
Corrigido
- Uma revisão sem um
/IDde documento num ficheiro atualizado incrementalmente já não apaga o identificador herdado de uma revisão anterior durante uma reescrita direta
Version 3.73.2
Alterado
DASaveAsFileagora agrega as suas gravações de saída e localiza a palavra-chave de fecho de cada objeto sem alocações de string em cada passo, reduzindo a reescrita 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 ficheiro de
EncryptFileeDecryptFileagora leem a origem através de uma janela deslizante e agregam as gravações de saída, para que a proteção AES-256 de PDFs muito grandes com milhões de objetos corra várias vezes mais depressa: num documento de benchmark de 2 GB, a encriptação baixou de cerca de 123 para 32 segundos e a desencriptação de cerca de 127 para 23 segundos - Os corpos de objeto que cabem na janela de leitura já não são obtidos do disco duas vezes durante uma reescrita direta AES-256
Corrigido
- As reescritas diretas AES-256 de PDFs hybrid-reference (ficheiros com uma entrada trailer
/XRefStm) fazem agora fallback para o leitor completo em vez de arriscar a perda de objetos comprimidos - A análise de cross-reference no caminho direto de ficheiro já não lê tudo da secção de cross-reference até ao fim do ficheiro de uma vez, o que podia esgotar a memória em ficheiros de vários gigabytes cuja cadeia
/Prevaponta para perto do início do ficheiro, e uma cadeia/Prevdanificada faz agora 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 do digest criptográfico de assinaturas CMS destacadas (
adbe.pkcs7.detachedeETSI.CAdES.detached) através da Windows CryptoAPI: os intervalos de bytes assinados são recalculados e comparados com a assinatura CMS, um documento alterado é reportado com o novo código de falha SG203 e cada assinatura inclui um campodigestValidde três estados nos relatórios JSON, CSV e HTML - Novas opções de automatização SigningWorkbench:
--quietimprime apenas o resumo do lote e os caminhos dos relatórios,--fail-fastpára o lote no primeiro ficheiro com falha e o relatório JSON agora regista a versão da biblioteca
Version 3.72.0
Adicionado
- O demo ComplianceWorkbench ganha fluxos de trabalho profissionais em lote:
--policy-filecarrega a política de auditoria a partir de um ficheiro JSON para que as equipas possam versionar e partilhar as suas regras de documentos,--baselinecompara a execução com um compliance-report.json anterior e lista novas falhas, ficheiros corrigidos e ficheiros que continuam a falhar, e--preflight-detailsincorpora linhas de problemas de preflight nos relatórios JSON e HTML - Novas opções de automatização ComplianceWorkbench:
--quietimprime apenas o resumo do lote e os caminhos dos relatórios,--fail-fastpára o lote no primeiro ficheiro com falha e o relatório JSON agora regista a versão da biblioteca
Version 3.71.2
Corrigido
AppendToFilevolta a acrescentar atualizações incrementais ao mesmo ficheiro PDF carregado comLoadFromFile; o carregador em fluxo mantém agora o ficheiro de origem legível sem bloquear o identificador de escrita necessário para a atualização
Version 3.71.1
Adicionado
- Os relatórios ComplianceWorkbench e SigningWorkbench incluem agora rótulos de severidade dos achados, campos de maior severidade por ficheiro, resumos de frequência de severidade do lote e saída correspondente em JSON, CSV, HTML e consola para uma triagem de políticas mais rápida
Version 3.71.0
Adicionado
- A inspeção do demo SigningWorkbench agora reporta a ordem das revisões e o nível de certificação DocMDP de cada assinatura, assinala algoritmos fracos de assinatura de certificados 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 assinatura de certificação com--require-certified(SG304) e verifica sempre se o signing time está dentro do período de validade do certificado (SG407) - O modo de assinatura SigningWorkbench passa agora a usar a API de processo de assinatura com novas opções
--subfilter(sha1, detached ou cades para assinaturas base PAdES) e--digest(auto até sha512), e o modernoadbe.pkcs7.detachedcom SHA-256 é o novo valor predefinido de assinatura - O novo acessor de leitura
TPDFlibSignDoc.GetSignatureDocMDPLevelByNamedevolve o nível de certificação DocMDP de um campo de assinatura segundo ISO 32000-1 §12.8.2.2
Version 3.70.0
Adicionado
- O demo ComplianceWorkbench também impõe agora 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 archive agora também exige um autor e uma data de criação, e o perfil accessible exige a permissão de cópia de que a tecnologia assistiva depende
- Os relatórios ComplianceWorkbench agregam agora um resumo da frequência dos códigos de falha em todo o lote, e as métricas por ficheiro incluem autor, data de criação, tamanho do ficheiro e os estados de permissão de impressão e cópia
Version 3.69.1
Corrigido
DecryptFilevolta a remover a encriptação de documentos protegidos por AES-128 e RC4, incluindo documentos que transportam apenas uma palavra-passe de proprietário; desde v3.67.4, o caminho rápido para ficheiros grandes relatava incorretamente estes documentos como tendo uma palavra-passe errada (error 404) em vez de os encaminhar para o caminho normal de desencriptação, enquanto os documentos AES-256 não eram afetados
Version 3.69.0
Adicionado
- Novo demo SigningWorkbench Delphi: uma ferramenta de consola de assinatura e certificado que inspeciona os campos de assinatura de um PDF ou de um diretório inteiro (SubFilter, signing time, ByteRange coverage e o certificado de assinatura com verificações de expiração), assina PDFs em lote com um certificado PKCS #12 e audita ficheiros PFX; cada violação mapeia para um código estável de falha de política (SG101–SG501) e os resultados são escritos como relatórios JSON, CSV e HTML com guias de demonstração localizadas para todos os 18 idiomas da documentação
- Novos acessores de leitura de assinatura em
TPDFlibSignDoc:GetSignatureFieldNameslista os campos de assinatura de um documento,GetSignatureTextValueByNamedevolve as entradas /M signing time, /Name, /Reason, /Location, /ContactInfo e /Type (com desencriptação em documentos encriptados) eGetSignatureValueByNamedevolve /Filter, /SubFilter, /Contents e as entradas ByteRange pelo nome do campo
Corrigido
- Corrigido o import Windows CryptoAPI
CertCloseStore, que tinha sido declarado sem o parâmetro flags e podia corromper a stack do chamador em Win32 quando um armazenamento de certificados era fechado
Version 3.68.0
Adicionado
- Novo demo ComplianceWorkbench Delphi: uma ferramenta de consola de 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 encriptação, intervalo de versão PDF, Tagged PDF, linearização e título do documento, reporta cada violação como um código estável de falha de política (PC101–PC501) e escreve relatórios JSON, CSV e HTML com códigos de saída amigáveis para automação
- O novo demo inclui 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 substituem os valores do perfil, e inclui guias de demonstração localizadas para todos os 18 idiomas da documentação
Version 3.67.4
Alterado
EncryptFileeDecryptFileusam agora um caminho direto de reescrita AES-256 para PDFs grandes com classic-xref, transmitindo dados encriptados entre ficheiros em vez de carregar e serializar novamente cada objeto; um ficheiro de benchmark de 2 GB conclui agora a encriptação e desencriptação AES-256 de ficheiro para ficheiro através da Direct File API com código de resultado 1 eLastErrorCode0
Corrigido
- Corrigido o tratamento direto de tokens de string AES-256 para que os delimitadores de dicionário não sejam confundidos com strings hexadecimais e as strings vazias encriptadas sejam desencriptadas corretamente
Version 3.67.3
Alterado
- Alargados os demos Delphi e C++Builder de DrawShapes, CreateWithImage, CreateTable, EditFormField e EmbeddedFonts para que os PDFs gerados demonstrem agora fluxos de trabalho práticos de desenho, colocação de imagens, disposição de tabelas, estilização 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
Corrigido
- Corrigido o demo CreateTable para definir um tamanho de página A4 explícito antes de renderizar a tabela, evitando a anterior variável de tamanho de página não inicializada no exemplo Delphi
Version 3.67.2
Corrigido
- Corrigida uma regressão da deteção preguiçosa no lado do carregador introduzida na v3.67.0: a deteção de funcionalidades de conteúdo podia correr no momento de guardar e sobrescrever uma versão de gravação explicitamente pedida (SetInformation 0) ou uma versão bloqueada (LockSaveVersion), pelo que uma gravação estrita para versão inferior deixava de rejeitar conteúdo de versão superior e uma versão bloqueada podia subir; a deteção agora corre antes de qualquer versão definida explicitamente e nunca corre para documentos que foram criados em vez de carregados, restaurando o comportamento de controlo de versão anterior à v3.67.0 enquanto mantém as poupanças do carregamento preguiçoso
Version 3.67.1
Alterado
- A deteção de funcionalidades agora lê objetos stream com uma análise superficial que inspeciona apenas o dicionário do objeto e ignora o corpo do stream, já que a varredura nunca examina o conteúdo dos streams; em documentos com grandes streams de imagem, isto evita ler os bytes do corpo durante a deteção, reduzindo o tempo de leitura de objetos de uma passagem de deteção em cerca de 40% (cerca de 13 s em vez de 20 s num ficheiro de 2 GB com 1,6 milhões de objetos), enquanto a lista de funcionalidades detetadas e a versão PDF efetiva permanecem idênticas
Version 3.67.0
Alterado
- A deteção de funcionalidades de conteúdo no lado do carregador é agora preguiçosa – em vez de varrer todo o documento durante o carregamento, é executada na primeira utilização, quando a versão PDF efetiva ou a lista de funcionalidades detetadas é consultada ou quando o documento é guardado; cargas de trabalho só de leitura como contagem de páginas, extração de texto ou imagem e renderização que nunca consultam a versão nem voltam a guardar saltam a varredura por completo, reduzindo o tempo de carregamento de documentos muito grandes em cerca de 80% (cerca de 10 s em vez de 56 s num ficheiro de 2 GB com 1,6 milhões de objetos), enquanto o conjunto de funcionalidades detetadas e a versão PDF efetiva permanecem idênticos assim que a deteção corre
Version 3.66.1
Alterado
- O carregamento de documentos muito grandes e multipágina está agora substancialmente mais rápido: a deteção de funcionalidades de conteúdo no lado do carregador ignora verificações de regras que já não podem alterar o resultado – tanto regras que já corresponderam como regras que não podem aplicar-se a um dado objeto – reduzindo para cerca de metade o tempo de carregamento em ficheiros enormes, mantendo idênticos os recursos detetados e a versão efetiva do PDF
Version 3.66.0
Alterado
- O carregamento de documentos muito grandes e multipágina usa agora muito menos memória em pico. A deteção de funcionalidades de conteúdo no lado do carregador já não materializa todo o modelo de objetos de uma vez – faz streaming através do leitor de acesso aleatório, um objeto de cada vez – reduzindo o conjunto de trabalho máximo em cerca de 90 % em ficheiros enormes, mantendo idênticos os recursos detetados e a versão efetiva do PDF
Version 3.65.0
Adicionado
- Documentos com mais de 2 GB já podem ser abertos. O buffer em memória anterior, que limitava o tamanho do documento a cerca de 2 GB, foi removido
Alterado
- Ao carregar um PDF a partir de um ficheiro, os dados dos objetos passam agora a ser lidos sob pedido a partir da origem, em vez de armazenar todo o documento na memória, reduzindo drasticamente o uso máximo de memória em ficheiros grandes
- Um documento carregado a partir de um ficheiro mantém esse ficheiro aberto com acesso de leitura partilhado até o documento ser fechado ou limpo
Corrigido
- Maior robustez ao carregar documentos que contêm bytes iniciais antes do cabeçalho %PDF- e ao tratar 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 – estão agora dramaticamente mais rápidas e já não bloqueiam. Um documento de 2 GB com cerca de 1,6 milhão de objetos que antes não conseguia terminar é agora encriptado em cerca de um minuto, e o tempo de processamento escala de forma aproximadamente linear com o documento em vez de se degradar à medida que o número de objetos cresce
- A encriptação de documentos grandes está substancialmente mais rápida – uma operação que antes levava muitos minutos conclui-se agora em segundos a cerca de um minuto – sem alteração da força da encriptação, da compatibilidade do texto cifrado ou da saída
Version 3.63.0
Corrigido
- Corrigida uma falha de processo ao carregar ficheiros PDF grandes cujos offsets internos de bytes atravessam o limite de 32 bits (cerca de 2 GB); o carregador usa agora offsets de 64 bits em toda a linha, pelo que ficheiros próximos de 2 GB são carregados de forma fiável e ficheiros em ou além de 2 GB devolvem graciosamente um erro de carregamento em vez de falhar
Version 3.62.0
Alterado
- A encriptação e desencriptação AES-256-CBC seguem agora o caminho AES-NI acelerado por hardware também em Windows de 32 bits, e não só em 64 bits, mantendo ainda um recurso automático para a implementação pura em C em processadores sem AES-NI. O texto cifrado é inalterado em todas as plataformas
Version 3.61.0
Alterado
- A encriptação e desencriptação AES-256-CBC usam agora um backend AES-NI acelerado por hardware no Windows de 64 bits, com recurso automático à implementação de software portátil em processadores que não dispõem de AES-NI. O texto cifrado é idêntico em todas as plataformas; apenas a velocidade da encriptação PDF AES-256 com palavra-passe muda
Version 3.60.0
Adicionado
MergeFileListmescla agora as árvores de estrutura lógica (Tagged PDF) dos documentos de entrada numa única árvore de estrutura alcançável, em vez de preservar apenas a árvore do primeiro documento e deixar as restantes como objetos inalcançáveis. São combinados os elementos de estrutura de nível superior, a parent tree (com as chaves de página/StructParentse de anotação/StructParentremapeadas),/RoleMap,/ClassMape/IDTree, e o catálogo mesclado é assinalado como Tagged (/MarkInfo /Marked true)
Alterado
- Ao mesclar documentos com chaves
/RoleMap,/ClassMapou/IDTreeem conflito, mantém-se a primeira ocorrência. O caminho rápido (MergeFileListFast) continua a descartar a informação de estrutura
Version 3.59.0
Alterado
MergeFileListmescla agora documentos numa única passagem (O(N) em vez de O(N²)), tornando as mesclas de vários ficheiros substancialmente mais rápidas; também herda a mescla de marcadores de vários documentos adicionada ao caminho rápido- Por predefinição,
MergeFileListagora ignora ficheiros de entrada ilegíveis ou encriptados e continua a mesclar os restantes, em vez de abortar toda a operação ao primeiro ficheiro inválido. Use o novoMergeFileListStrictpara restaurar o comportamento anterior de parar na primeira falha - Os objetos de estrutura lógica (Tagged PDF) das entradas são agora preservados por
MergeFileList(o caminho rápido continua a descartá-los)
Adicionado
MergeFileListStrictmescla uma lista de ficheiros, mas pára no primeiro ficheiro ilegível ou encriptado, mantendo a semântica estrita de parar na falha das versões anteriores
Version 3.58.0
Adicionado
MergeFileListFastagora mescla os esquemas de documento (marcadores) em todos os ficheiros de entrada, pelo que o caminho rápido de mesclagem preserva os marcadores além dos campos de formulário AcroForm- Os marcadores mesclados mantêm a sua hierarquia e os seus destinos de página; a contagem de marcadores de nível superior na saída mesclada é igual à soma das entradas
Version 3.57.1
Alterado
- As gravações via Direct File API (
DASaveAsFile,DASaveToStream,DASaveCopyToStream) estão agora significativamente mais rápidas em documentos muito grandes: os objetos inalterados são copiados diretamente dos bytes de origem em vez de serem novamente analisados e serializados. Guardar novamente um documento de 60 000 páginas / 883 MB passou de cerca de 33 segundos para cerca de 23 segundos
Version 3.57.0
Alterado
- O
TPDFlib.MergeFileListFastfoi ainda mais otimizado para mesclas de vários documentos: os objetos sem stream inalterados nos documentos anexados são agora reutilizados diretamente a partir dos bytes de origem originais com uma deslocação de referências indiretas ao nível de bytes, saltando a passagem de analisar e reserializar e melhorando a taxa de transferência em documentos multipágina. A saída da mescla é inalterada, com contagens de páginas idênticas - Os objetos que contêm streams ou pertencem à árvore de estrutura continuam a usar o caminho de descodificação existente, pelo que o caminho em bytes mais rápido é aplicado apenas onde é comprovadamente seguro
Version 3.56.44
Alterado
- O
TPDFlib.MergeFileListFastfoi otimizado ao pré-alocar os metadados de mescla e ao escrever os objetos inalterados do primeiro documento a partir dos dados de origem originais, reduzindo a pressão sobre a memória e o trabalho evitável de descodificação/saída de objetos em mesclas rápidas de vários ficheiros - A interface Delphi
MergePDFagora agrupa o registo dos resultados em modo rápido e evita varrimentos repetidos de todo o texto do memo, mantendo listas de entrada grandes mais responsivas depois de concluída a mescla
Version 3.56.43
Alterado
- O caminho normal de mescla de
TPDFlib.MergeFileListfoi otimizado alternando os seus ficheiros temporários intermédios em vez de copiar o PDF mesclado em crescimento antes de cada entrada adicional, reduzindo a E/S de disco em fluxos com vários ficheiros e preservando o contrato existente da contagem devolvida
Version 3.56.42
Adicionado
- Adicionada cobertura de regressão AES para casos de buffer de entrada/alias do resultado usados pelo rollback de gravação de streams encriptados, incluindo cargas úteis grandes de 504 KB que anteriormente expunham a falha
Alterado
- O fluxo da API normal
LoadFromFile,Encrypt,SaveToFile, recarregamento,DecrypteSaveToFilevolta agora a concluir em PDFs grandes já carregados, mantendo a otimização de desencriptação AES-CBC com menos cópias
Corrigido
- Corrigido o caminho de desencriptação AES-256 baseado em buffer introduzido na v3.56.41, para que os chamadores possam atribuir o resultado da desencriptação ao mesmo
AnsiStringque forneceu o buffer do texto cifrado sem violações de acesso
Version 3.56.41
Adicionado
- Adicionado
TPDFlib.DACopyFilepara fluxos Direct Access que precisam de uma contagem de páginas e de uma cópia de ficheiro inalterada sem construir o grafo completo de objetos normal - A demo Delphi
HugeFileBenchmarkinclui agora uma linhadirect-copye filtros--opse--skippara execuções focadas em ficheiros grandes
Alterado
- A desencriptação AES-256 foi otimizada com caminhos de desencriptação AES-CBC baseados em buffer e a sua utilização ao desencriptar strings e streams carregados, reduzindo cópias extra de texto cifrado em streams encriptados grandes
Version 3.56.40
Alterado
- As demos Delphi e C++Builder
HelloWorldcriam agora um PDF inicial mais rico com informação do documento, saída de uma fonte padrão selecionada, bloco de título estilizado, desenho vetorial simples e orientação para os passos seguintes, mantendo o mesmo fluxo de compilação e execução - Todas as notas de demonstração Delphi e C++Builder foram substituídas por páginas
Readme.htmlcompatíveis com o navegador, incluindo notas auxiliares sobre palavras-passe, ficheiros restritos e resultados de assinatura, e os índices das demos passam agora a apontar os utilizadores para as notas HTML
Version 3.56.39
Alterado
- Os caminhos de gravação da Direct File API agora constroem tabelas de pesquisa de cross-reference de forma linear, tornando
DASaveAsFilee os caminhos de gravação direta relacionados muito mais rápidos em PDFs com contagens de objetos muito elevadas ou árvores de páginas densas - O escritor otimizado preserva a mesma semântica da cadeia de objetos livres enquanto evita varrimentos repetidos dos números de objeto durante a geração completa de xref, melhorando fluxos de trabalho grandes de gravação direta sem alterar a API pública nem o contrato de saída
Version 3.56.38
Alterado
- O fluxo normal da API
LoadFromFile,Encrypt,SaveToFile, recarregamento,DecrypteSaveToFilepreserva agora o estado encriptado antes deDecryptexplícito, correspondendo ao comportamento da Direct File API para PDFs legados grandes
Corrigido
- Corrigida a saída de encriptação da API normal para que
Encryptcrie ou preserve o trailer/IDantes de escrever dados de segurança AES-256, mantendo os PDFs encriptados detetáveis aquando do recarregamento através deEncryptionStatus
Version 3.56.37
Adicionado
- Adicionado
TPDFlib.ComparePreflightReports, um comparador linha a linha para relatórios de preflight em texto simples que ignora linhas variáveis de marca temporalGenerated:e devolve uma cadeia vazia quando o conteúdo estável do relatório coincide - A demo Delphi
PreflightReportpassa agora a suportar--compare <file>no modo de um único ficheiro, escrevendo um relatório.diff.txtem UTF-8 e devolvendo o código de saída 2 quando o relatório de texto gerado difere da referência
Version 3.56.36
Adicionado
- A demo Delphi
PreflightReportpassa agora a suportar execuções em lote em diretórios com--input-dir,--output-dire--recursive, escrevendo um relatório por PDF como<basename>.preflight.<ext>
Alterado
- O modo em lote escreve um ficheiro UTF-8
preflight-summary.csvque regista cada PDF de origem, o estado pass/fail, a contagem de problemas e o caminho do relatório gerado, preservando o contrato de códigos de saída existente para automatização
Version 3.56.35
Adicionado
ReportFormat = 3adiciona saída CSV aTPDFlib.CreatePreflightReportExeTPDFlib.SavePreflightReportEx, produzindo linhas UTF-8 para metadados do relatório, cada verificação de conformidade selecionada, códigos e mensagens de problemas individuais e o resumo final- A demo Delphi
PreflightReportpassa agora a suportar--format csve--csv, para que as execuções de preflight pela linha de comando possam alimentar folhas de cálculo ou analisadores simples de CI sem pós-processar JSON nem extrair texto
Version 3.56.34
Adicionado
- Adicionadas as APIs sensíveis ao 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 de relatório existentes apenas em texto - A demo Delphi
PreflightReportpassa agora a suportar--format text|json|htmlalém dos atalhos--jsone--html, para que o mesmo fluxo de linha de comando possa produzir relatórios legíveis por pessoas ou artefactos CI legíveis por máquina
Version 3.56.33
Adicionado
- Adicionados
TPDFlib.CreatePreflightReporteTPDFlib.SavePreflightReportpara que as aplicações possam gerar relatórios reutilizáveis em texto simples a partir das verificações de conformidade PDF/A e PDF/UA-1 incorporadas, sem enumerar manualmente os identificadores das listas de strings
Alterado
- A demo Delphi
PreflightReportchama agora diretamente as APIs de relatório ao nível da biblioteca, mantendo o exemplo focado no fluxo de linha de comando, nas verificações selecionadas, no modo first-issue e nos códigos de saída preparados para automatização
Version 3.56.32
Adicionado
- Adicionado um novo demo de consola Delphi
PreflightReportque executa verificações PDF/A e PDF/UA-1 comCheckFileCompliance, enumera listas de problemas comGetStringListCounteGetStringListIteme escreve um relatório de preflight em texto simples
Alterado
- A demo suporta as opções
--input,--output,--pdfa,--pdfua,--bothe--first-issue, além de códigos de saída para resultados de aprovação, problema encontrado e erro de execução preparados para automatização
Version 3.56.31
Alterado
GetCustomKeys(2)agora oculta de forma consistente as entradas de sistema do Catalog geridas pela biblioteca, incluindo/OutputIntents,/Extensions,/Requirements,/Collectione/NeedsRendering
Corrigido
- As intenções de saída PDF/A criadas por
SetPDFAModejá não aparecem como chaves personalizadas do Catalog, mantendo a enumeração de metadados da aplicação separada das estruturas de conformidade PDF.
Version 3.56.25
Alterado
- O lado do escritor GetPDFUADiagnostics passa a ter o problema correspondente
MULTIPLE-H-CHILDREN:N, em paridade com o leitor10044da v3.56.24. ISO 14289-1 §7.4.4 proíbe mais do que um filho H direto por nó da árvore de tags — a verificação do lado do escritor dispara sempre que a árvore FStructElems em memória contém essa violação. - Um novo auxiliar aninhado CountMultipleHChildren percorre a árvore em profundidade, contando os filhos H em cada nível. A verificação corre a par das travessias LIST-STRUCT / LIST-NO-NUMBERING existentes e partilha o mesmo padrão de travessia FStructElems.
Version 3.56.24
Alterado
- A auditoria PDF/UA-1 ganha a verificação de unicidade da tag H ISO 14289-1 §7.4.4.
10044relata qualquer nó de estrutura que contenha mais de um filho H direto — a especificação proíbe isso em documentos fortemente estruturados, e a mesma restrição aplica-se a qualquer nó da árvore de tags, independentemente do modo de estrutura global. A outra cláusula §7.4.4 SHALL (um documento deve ser ou fortemente ou fracamente estruturado, não ambos) precisa de heurísticas em todo o documento e foi intencionalmente deixada fora desta auditoria. - Uma nova travessia pre-order da struct-tree (UAVisitStructNodeForHUniqueness / ScanStructTreeForHUniqueness) conta os filhos H diretos por nó e recursa em profundidade. Reutiliza o mesmo decodificador de forma K que as travessias existentes de heading / list / note.
Version 3.56.23
Adicionado
- Novo
Lib/PDFlibPDFUAFontInspect.pasimplementa uma travessia tolerante do diretório de tabelas SFNT e um parser do diretório de sub-tabelas cmap. A tabela Adobe Glyph List com 4281 nomes, adicionada como scaffold no commit de infraestrutura anterior, agora é ligada através da verificação Differences. Programas que não sejam analisados como SFNT (Type 1 PFB / PFA, coleção OpenType, lixo arbitrário) são ignorados silenciosamente — no nível da auditoria, preferem-se falsos negativos a falsos positivos.
Alterado
- A auditoria PDF/UA-1 ganha as 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 de adiar até existir um parser TrueType.
10034relata programas TrueType não simbólicos cuja tabela cmap SFNT embutida contém apenas a entrada simbólica (platformID=3, encodingID=0) — o primeiro parágrafo de §7.21.6 exige pelo menos uma sub-tabela cmap não simbólica para que o programa possa renderizar os codepoints declarados pela sua /Encoding.10035relata arrays TrueType não simbólicos/Encoding /Differencescujos nomes de glifo não pertencem à Adobe Glyph List (.notdefexceto) — o terceiro parágrafo de §7.21.6 exige que cada entrada Differences caia em AGL.
Version 3.56.22
Alterado
- A auditoria PDF/UA-1 ganha verificações de dados de media clip ISO 14289-1 §7.18.6.
10042relata dicionários de dados de media clip (identificados por/S /MCD, opcionalmente/Type /MediaClip) que não têm a entrada obrigatória/CTde content-type.10043relata os mesmos dicionários sem o array/Altobrigatório. A Tabela 274 da ISO 32000-1 lista ambas as chaves como opcionais, mas a ISO 14289-1 §7.18.6 promove-as a obrigatórias para que os leitores de ecrã possam anunciar uma descrição significativa para multimédia incorporada. - Esta é a Fase 6 do plano de auditoria aprofundada PDF/UA (
.superpowers/plans/2026-05-23-pdfua-deep-audit-plan.md). É executada sem qualquer dependência de parser de programas de fonte ou de content stream, pelo que é a primeira subclasse de seguimento 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 SignerInfo PAdES-B-B. Aceita códigos inteiros 1..6 mapeados para os OIDs de commitment ETSI bem conhecidosid-cti-ets-proofOfOriginatéid-cti-ets-proofOfCreation; passe 0 para limpar. Códigos fora do intervalo 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 o OID da política em decimal pontuado, o hash do documento de política como uma cadeia 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 transporta a SEQUENCESignaturePolicyIdcomsigPolicyId+sigPolicyHash(OtherHashAlgAndValueSEQUENCE).
Alterado
- Ambos os atributos só produzem efeito quando o SubFilter é
ETSI.CAdES.detached(o caminho PAdES-B-B); alargam o arrayrgAuthAttrexistente ao lado decontent-typeesigning-certificate-v2. A linha d) da Tabela 1 do PAdES proíbe combinarcommitment-type-indicationcom a entrada/Reasondo PDF Signature Dictionary; cabe ao chamador não definir ambos.
Version 3.56.20
Adicionado
- Novo
AddPAdESDSSVRIanexa uma entrada de subdicionário Signature VRI ao DSS que está a ser montado, completando a estrutura Validation Related Information da cláusula 5.4.2.3 do ETSI EN 319 142-1 v1.2.1. A entrada é indexada pelo SHA-1 em hexadecimal maiúsculas dos bytes/Contentsda assinatura; os subarraysCert/CRL/OCSPsão preenchidos referenciando os streams DSS pai correspondentes através de índices baseados em 0 fornecidos como listas separadas por vírgulas (por exemplo,"0,2,5").
Alterado
- O
TSmartPDFDocument.AddPAdESDSSWithVRIsubjacente rastreia os números de objeto de stream emitidos para cada cert / CRL / OCSP e usa-os para escrever os subarrays VRI como referências indiretas para os mesmos streams para que os arrays DSS pai já apontam, satisfazendo o requisito da especificação de que as entradas VRI partilhem armazenamento com o dicionário DSS pai. O ponto de entrada originalAddPAdESDSScontinua a funcionar inalterado para chamadores que não precisam de VRI. - Cada subdicionário VRI por assinatura inclui o marcador opcional
/Type /VRIpara que as ferramentas que percorrem o catálogo por tagsTypeconsigam reconhecer a estrutura sem voltar a resolver o caminho do pai.
Version 3.56.19
Adicionado
- Novo fluxo PAdES-B-T para associar um carimbo temporal da assinatura RFC 3161 / RFC 5816 (id-aa-signatureTimeStampToken, OID 1.2.840.113549.1.9.16.2.14) a uma assinatura PAdES-B-B existente.
NewPAdESSignatureTimeStampProcessFromFile/FromStream/FromStringabrem um PDF assinado,SetPAdESSignatureTimeStampFieldnomeia o campo,GetPAdESSignatureValueHashHexdevolve o hash SHA-256 (ou 384 / 512) dosignatureValuedo signatário para submissão a uma TSA,GetPAdESSignatureCMSBytesexpõe a carga CMS existente,SetPAdESSignatureCMSBytesaceita os bytes CMS aumentados que o chamador monta com a biblioteca CMS da sua escolha, eEndPAdESSignatureTimeStampProcessToFile/ToStream/ToStringinserem o novo CMS no espaço reservado original de/Contents. - Novo
SetSignProcessReserveContentsBytesamplia o espaço reservado/Contentsno momento da assinatura inicial para que o CMS aumentado posteriormente caiba sem exceder a reserva original. Os TimeStampTokens típicos emitidos por TSA acrescentam 2-6 KB ao SignerInfo; passe aqui 1024-8192 para deixar margem. Sem reserva suficiente, a chamada de aumento devolve13(output overflow).
Alterado
BuildPAdESSignatureTimeStampAttributeé um helper sem estado que encapsula um TimeStampToken emitido por TSA na SEQUENCE de atributo CMS queSignerInfo.unsignedAttrsespera, para que os chamadores que já tenham uma biblioteca CMS à mão possam dispensar a canalização OID + SET-of.- A biblioteca não inclui um cliente HTTP TSA; o chamador obtém o TimeStampToken (normalmente 30-50 linhas de pedido TSP + HTTP POST contra, por exemplo, FreeTSA ou DigiCert). O Windows CryptoAPI
CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTRem princípio automatizaria a injeção CMS na biblioteca, mas devolveCRYPT_E_INVALID_INDEX(0x80091008) na forma detached de SignedData que o PAdES emite, pelo que é usado o caminho dos bytes CMS fornecidos pelo chamador.
Version 3.56.18
Adicionado
- Novos auxiliares ASN.1
DER_IntegerFromLittleEndian(trata da ordem de bytes doCRYPT_INTEGER_BLOBWin32) eDER_ContextTagExplicit(embrulha uma carga numa etiqueta construída específica de contexto) completam o micro-encoderPDFlibASN1. Novas declaraçõesCERT_INFO/CRYPT_ALGORITHM_IDENTIFIER/CRYPT_INTEGER_BLOB/PCERT_CONTEXTemPDFlibCryptoAPIdão ao caminho de assinatura acesso aos campos de certificado analisados.
Alterado
- O atributo
signing-certificate-v2do PAdES passa agora a incorporar o campo opcionalIssuerSerialdefinido pela RFC 5035 (ESSCertIDv2). O Distinguished Name do issuer do certificado de assinatura é embrulhado numa CHOICEGeneralName [4] EXPLICIT directoryNamedentro deGeneralNames, seguido do número de série do certificado como um INTEGER ASN.1. Os bytes do número de série chegam em little-endian a partir do Windows CryptoAPI (CRYPT_INTEGER_BLOB) e são invertidos para big-endian, com o byte de preenchimento de inteiro positivo adicionado quando o bit mais alto está definido, correspondendo ao modo como OpenSSL e BouncyCastle emitem o mesmo campo. - Os validadores que cruzam o par nome do issuer + série com o seu conjunto de candidatos de construção de caminho (nomeadamente o EU DSS em modo estrito) encontram agora ambos os identificadores no atributo signing-cert-v2; a saída da v3.56.17 fornecia apenas a referência
certHash.
Version 3.56.17
Adicionado
- Novo módulo
PDFlibASN1fornece um micro-encoder DER (X.690) focado - prefixo de comprimento, OCTET STRING, SEQUENCE, SET, OBJECT IDENTIFIER - usado para construir o valor do atributoSigningCertificateV2. O encoder segue as regras standard para arcos OID base-128 e omite o campo opcionalhashAlgorithmquando ele apenas repetiria o SHA-256 predefinido, correspondendo ao que OpenSSL e BouncyCastle emitem.
Alterado
- O caminho de assinatura incorporado
ETSI.CAdES.detachedproduz agora assinaturas PAdES-B-B estruturalmente conformes. A biblioteca constrói ela própria os atributos autenticados CMS -content-type(id-data) esigning-certificate-v2da RFC 5035 / RFC 5816 com um hash SHA-256 do certificado de assinatura - e entrega-os aCryptSignMessageatravés dergAuthAttr. Assim que esse campo fica non-NULL, o Windows CryptoAPI deixa de injetar automaticamente o atributosigning-timeque o PAdES (ETSI EN 319 142-1 v1.2.1 Tabela 1) proíbe, pelo que oSignerInforesultante transporta apenas os atributos exigidos. ApplySignatureencaminha agoraETSI.CAdES.detachedpelo caminho de bytes brutos (o mesmo usado poradbe.pkcs7.detached) em vez de alimentar um digest pré-computado. O CryptoAPI calcula agora o atributo autenticadomessageDigestsobre o conteúdo realmente assinado, que é o que os validadores esperam.- SHA-384 e SHA-512 também são respeitados ao construir o atributo signing-certificate-v2: o campo
hashAlgorithmé emitido com oAlgorithmIdentifiercorrespondente em vez de depender do predefinido. O SHA-1 é silenciosamente promovido para SHA-256 neste contexto porque o PAdES-B-B não autoriza SHA-1 (cláusula 6.2.1).
Version 3.56.16
Adicionado
- Novo
SetSignProcessDigestAlgorithmseleciona o algoritmo message-digest da assinatura:1= SHA-1 (obsoleto),2= SHA-256 (predefinição moderna),3= SHA-384,4= SHA-512,0= auto (SHA-256 para todos os SubFilter exceto o caminho legadoadbe.pkcs7.sha1, que permanece em SHA-1 por compatibilidade retroativa estável ao nível dos bytes). ETSI EN 319 142-1 v1.2.1 §6.2.1 proíbe MD5 e remete para ETSI TS 119 312 no que toca aos conjuntos criptográficos recomendados, por isso os signatários PAdES devem escolher SHA-256 ou mais forte. - Adicionados auxiliares de hash
SHA256StreamRange,SHA384StreamRangeeSHA512StreamRangeao lado do existenteSHA1StreamRange; o caminho de assinatura usa-os para calcular o digest da PDF ByteRange segundo o algoritmo selecionado. O OIDSignerInfo.digestAlgorithmde PKCS#7 e os bytes de hash reais passam agora a coincidir garantidamente (o código anterior passava sempre o digest SHA-1, independentemente do algoritmo negociado).
Alterado
TPDFlibPFXFile.SignDataaceita agora um parâmetroDigestAlgorithme escolhe o OID correcto 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 correspondentes da famíliasha256WithRSAEncryptionpara o caminho legadoadbe.pkcs7.sha1.
Version 3.56.15
Adicionado
- Novo
SetSignProcessDocTimeStampmuda um processo de assinatura para o modo de carimbo temporal do documento PAdES segundo ETSI EN 319 142-1 v1.2.1 §5.4.3. O Signature Dictionary resultante transporta/Type /DocTimeStampe/SubFilter /ETSI.RFC3161, omite as chaves não permitidas/M,/Reason,/Location,/ContactInfoe/Name, e reserva em/Contentsum espaço hexadecimal de 8192 bytes (ou do tamanho indicado pelo chamador) para um RFC 3161 TimeStampToken obtido externamente.
Alterado
- O passthrough é ativado automaticamente quando o modo DocTimeStamp é selecionado porque o TimeStampToken vem de uma TSA externa. Chamadas a
SetSignProcessInfofeitas depois de mudar para o modo DocTimeStamp são ignoradas silenciosamente para manter o Signature Dictionary conforme a especificação. - O auto-injerto existente de
/Extensions /ESICdo PAdES adicionado na v3.56.8 já cobre o DocTimeStamp porque o seu SubFilter começa porETSI., por isso um PDF de carimbo temporal do documento declara a extensão de catálogo exigida sem mais configuração adicional.
Version 3.56.14
Adicionado
- Nova API de augmentação do Document Segurança Store (DSS) do PAdES.
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 a PAdES-B-LT de validação de longo prazo.
Alterado
- O processo DSS atualiza automaticamente a entrada
/Extensions /ESICdo catálogo para pelo menosExtensionLevel 1ao adicionar material de validação, cumprindo o requisito de §5, e funde novos certificados, CRLs e respostas OCSP nos arrays existentes/Certs//CRLs//OCSPsem invocações repetidas, para que as revisões se acumulem em vez de substituir. GetPAdESDSSProcessResult/ReleasePAdESDSSProcesscompletam o ciclo de vida, em espelho da superfície de APISignProcessexistente.
Version 3.56.8
Alterado
- Conformidade de base PAdES: quando uma assinatura é criada com um SubFilter PAdES (
ETSI.CAdES.detachedouETSI.RFC3161), o catálogo do documento passa a receber 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 através da mesma atualização incremental que transporta a assinatura, nunca rebaixa um/ExtensionLeveljá existente mais alto e segue referências/Extensionsou/ESICindiretas quando o PDF de origem já as guarda como objectos separados. - O marcador de extensão equivalente ao Adobe escrito por SetSignProcessCustomSubFilter para PDFs produzidos através de
TPDFlibpassa agora a ser/ADBE /BaseVersion /1.7 /ExtensionLevel 8(eraExtensionLevel 5), coincidindo com a declaração alternativa que as assinaturas base PAdES podem usar; o nível 5 só cobria as funcionalidades ISO 32000-2 forms / 3D / RichMedia e não identificava realmente as extensões PAdES.
Version 3.56.13
Alterado
- Quando SetPDFUAMode está ativo e o documento é guardado, qualquer elemento de estrutura L (list) que não tenha um atributo
ListNumberingexplícito passa agora a receber automaticamente/O = List /ListNumbering = None. ISO 14289-1 §7.6 exige que toda tag L declare o seu estilo de numeração; a nova correcção em tempo de gravaçãoApplyPDFUAListNumberingjunta-se à família já existenteApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationship/ApplyPDFUAStripTrapNet. - Os autores que se preocupam com um estilo de lista específico devem continuar a chamar SetStructElemListNumbering antes de EndTag; a correcção automática só dispara quando não existe atributo ListNumbering no momento da gravação, por isso os valores explícitos são preservados.
- A mensagem de diagnóstico do lado do escritor
LIST-NO-NUMBERING:Npassa agora a notar que a correcção automática vai mascarar o problema no momento da gravação, para que os utilizadores compreendam tanto o atributo em falta como o comportamento de reparação automática.
Version 3.56.12
Alterado
- A auditoria PDF/UA-1 ganha três novas verificações ISO 14289-1.
10031relata anotações Link cujo dicionário de ação URI transporta/IsMap = true(proibido por §7.18.5, a menos que funcionalidade equivalente seja fornecida noutro ponto do conteúdo; autores com um caso de uso legítimo de IsMap podem suprimir o diagnóstico por sua conta).10032relata elementos de estruturaNotesem a entrada/ID— §7.9 exige que cada tag Note declare um ID único.10033relata contagens de pares duplicados quando duas ou mais tags Note partilham o mesmo valor/ID. - A deteção de colisão de IDs Note é feita recolhendo os IDs numa TStringList ordenada e percorrendo pares adjacentes, pelo que um grupo de três Notas que partilhem um ID conta como dois pares duplicados.
- A verificação das ações URI percorre o array
/Annotsde cada página, filtra por/Subtype /Linke depois inspeciona/A /S /URIe o booleano/IsMap. As referências indiretas são desreferenciadas em cada passo, para que dicionários de ação separados se comportem da mesma forma que os inline.
Version 3.56.11
Alterado
- ISO 14289-1 §7.6 exige que cada elemento de estrutura L (list) transporte um atributo
ListNumberingexplícito.10030(lado do leitor) eLIST-NO-NUMBERING:N(lado do escritor) relatam tags L que o omitem. O walker do lado do leitor descodifica ambas as formas de/A(dicionário de atributo único, ou um array de dicionários misturado com inteiros de revisão) e procura a chave/ListNumberingindependentemente do proprietário. A verificação do lado do escritor inspeccionaTPDFStructElem.Attributespara o mesmo nome, tanto na lista de estrutura finalizada como na pilha de tags ainda aberta. - Os valores válidos de
ListNumberingsegundo ISO 32000-1 Tabela 347 sãoNone,Disc,Circle,Square,Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha. A auditoria verifica apenas a presença da chave, não o valor escolhido — toda tag L precisa de uma delas.
Version 3.56.10
Alterado
- A auditoria PDF/UA-1 ganha as regras de codificação TrueType ISO 14289-1 §7.21.6.
10028relata fontes TrueType não simbólicas cujo/Encoding(ou o/BaseEncodingdentro de um dicionário Encoding) não é nemMacRomanEncodingnemWinAnsiEncoding.10029relata fontes TrueType simbólicas que tragam qualquer entrada/Encoding(proibido pelo quarto parágrafo de §7.21.6). - A distinção entre simbólica e não simbólica é decidida a partir do bit 3 de
/Flagsdo FontDescriptor (máscara4), reutilizando o helper existenteUAFontDescriptorSymbolicda subclasse 4. O primeiro parágrafo completo de §7.21.6 (o programa TrueType embutido tem de conter entradas cmap correspondentes) requer analisar o programa de fonte TrueType e ainda está pendente; as regras ao nível do dicionário acima são a camada prática que esta auditoria consegue verificar sem um parser TrueType. - As regras do array Differences em §7.21.6 (nomes de glifo apenas AGL, presença de cmap Unicode Microsoft) ficam fora do âmbito 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 ISO 14289-1 §7.18.4.
10027relata anotações Widget cujo/StructParentresolve através da/ParentTreeda árvore de estrutura mas não cai num elemento de estrutura com/S = Form. A verificação parcial anterior da v3.56.7 (10026) só apanhava Widgets que não tinham/StructParentde todo; a nova verificação completa a regra ao seguir o ponteiro da number-tree e validar a tag de destino. - Um novo auxiliar
NumberTreeLookupimplementa a forma da number-tree ISO 32000-1 §7.9.7 (raiz plana/Nums,/Kidsintermédios delimitados por/Limits). Futuras auditorias que precisem de resolver entradas de página/StructParentsou etiquetas/PageLabelspodem reutilizá-lo. - A verificação da tag Form para anotações Widget usa um modelo em dois níveis: um Widget sem
/StructParenté reportado como10026; um Widget cujo/StructParentexiste mas não resolve para/S = Formé reportado como o mais específico10027. Isto 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 é guardado, quaisquer entradas de anotação
TrapNetsão agora removidas automaticamente do array/Annotsde cada página. ISO 14289-1 §7.18.2 proíbe anotaçõesTrapNet; a nova correção de gravaçãoApplyPDFUAStripTrapNetjunta-se à família existenteApplyPDFUATabOrder/ApplyPDFUAFormFieldTU/ApplyPDFUAAnnotContents/ApplyPDFUAEmbeddedAFRelationshippara que documentos em modo PDF/UA deixem de emitir silenciosamente restos deTrapNet. - A auditoria PDF/UA-1 ganha uma verificação parcial de §7.18.4.
10026assinala anotações Widget sem/StructParent— um Widget sem/StructParentnão pode ser alcançado a partir da árvore de estrutura e, por isso, não pode ser aninhado numa tag de estruturaForm. A verificação estrutural completa (resolver/StructParentatravés deParentTreee confirmar que o/Sdo pai éForm) fica para uma versão de seguimento. - O lado do escritor GetPDFUADiagnostics ganha o problema correspondente
WIDGET-NO-STRUCTPARENT:N. A mensagem TRAPNET-ANNOT existente agora também nota que SetPDFUAMode remove automaticamente estes itens no momento da gravação.
Version 3.56.6
Alterado
- A auditoria PDF/UA-1 ganha duas verificações de hierarquia de títulos ISO 14289-1 §7.4.2.
10024assinala quando o primeiro elemento de título na ordem do documento não é H1 (ou H).10025assinala o número de saltos de nível de título numa sequência descendente (por ex., H1 seguido de H3 sem H2). Ambas as verificações partilham uma única travessia em pré-ordem da árvore de estrutura que descodifica as formas/Kaninhadas (StructElem único, array de StructElems / IndRefs / MCRs). - O lado do escritor GetPDFUADiagnostics ganha o problema correspondente
FIRST-HEADING-NOT-H1, em paridade com o leitor10024. A verificação de escritor HEADING-LEVEL-SKIP, já existente, passa agora a ter uma companheira que também deteta problemas do tipo "o primeiro título foi H2".
Version 3.56.5
Alterado
- Quando SetPDFUAMode está ativo e o documento é posteriormente encriptado, a chave de permissões da encriptação (
/Pno dicionário de encriptação) passa agora a ter automaticamente definido o bit 10 (máscara$200, "Extract text and graphics in support of accessibility") mesmo quando o chamador não incluiuppCanCopyAccessnasTPDFExtraPermissionspassadas a Encrypt. ISO 14289-1 §7.16 exige que cada ficheiro em conformidade e encriptado permita extração de acessibilidade, e esse bit é fácil de esquecer de outro modo. Definir esse bit é sempre seguro — apenas concede acesso adicional à tecnologia de apoio, não a outras vias de extração. - O lado do escritor GetPDFUADiagnostics ganha um novo problema
ENCRYPT-NO-ACCESSque dispara quando PDFUAMode está ligado e o bit 10 de/Pdo dicionário de encriptação está limpo. Isto apanha o caso-limite da ordem das chamadas em que o utilizador chamou primeiroEncrypt()e SetPDFUAMode só depois — o diagnóstico indica ao utilizador para chamarEncrypt()novamente para que o dicionário de encriptação seja reemitido com o/Pcorrigido.
Version 3.56.4
Alterado
- O lado do escritor GetPDFUADiagnostics ganha cinco novas verificações ISO 14289-1 para que a auditoria de documento em memória apanhe as mesmas violações que a auditoria do lado do leitor CheckFileCompliance ComplianceTest=2.
SUSPECTS-TRUEassinala MarkInfo/Suspects=true (§7.1: ficheiros PDF/UA em conformidade exigem Suspects=false).ROLEMAP-STANDARD-REMAP:Nassinala chamadas AddRoleMap que remapeariam uma tag de estrutura padrão — §7.1 proíbe remapear tags padrão.DC-TITLE-MISSINGassinala um XMP dc:title vazio (separado de DOCINFO-TITLE-MISSING, que verifica /Info /Title).TRAPNET-ANNOT:Nassinala anotações TrapNet (§7.18.2 proíbe-as).ANNOT-PAGE-NO-TABS-S:Nassinala páginas que contêm anotações cujo dicionário de página /Tabs não é /S (§7.18.3 exige ordem de tabulação da árvore de estrutura nessas páginas). - As auditorias PDF/UA-1 do lado do escritor e do lado do leitor estão agora aproximadamente em paridade: cada problema que a auditoria do lado do leitor levanta num ficheiro guardado também é alcançável a partir do diagnóstico em memória, à exceção das convenções de formato de cada função (texto separado por novas linhas vs. lista de strings de código NNNNN).
Version 3.56.3
Alterado
- A auditoria PDF/UA-1 ganha as suas verificações de fontes de §7.21.
10020relata qualquer fonte não-Standard-14 cujo FontDescriptor não temFontFile/FontFile2/FontFile3(§7.21.4.1: cada fonte renderizada tem de incorporar o seu programa).10021relata descendentes CIDFontType2 sem uma entrada/CIDToGIDMap(§7.21.3.2).10022chama a atenção para fontes Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats e variantes negrito / oblíquo) referenciadas sem um programa incorporado — a §7.21.4 NOTA 5 deixa claro que não existe isenção de incorporação para estas fontes.10023relata fontes que não têm um CMap/ToUnicodee não correspondem à lista de isenções de §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). - As fontes Type 0 compostas são inspecionadas em ambas as camadas:
/ToUnicodeno próprio dicionário pai Type 0 e incorporação //CIDToGIDMapno primeiro CIDFont descendente. As fontes Type 3 saltam a verificação de incorporação (os seus glifos estão inline em CharProcs) mas continuam a participar na verificação/ToUnicode. - Os auxiliares do PDFlibPDFA para trabalho de fontes semelhante não foram partilhados intencionalmente — algumas rotinas curtas (remoção de prefixo de subconjunto, tabela de nomes Standard-14, presença de FontFile, sinalizador Symbolic) são duplicadas localmente como auxiliares
UA*para que a auditoria PDF/A possa continuar a evoluir 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 que cobrem anotações, ficheiros incorporados e conteúdo opcional.
10015relata anotações Link que não têm uma descrição alternativa/Contentsnão vazia (§7.18.5) para que os leitores de ecrã possam anunciar os destinos dos links.10016e10017assinalam dicionários FileSpec de ficheiros incorporados que não têm as chaves de nome de ficheiro obrigatórias/Fou/UF(§7.11).10018assinala dicionários de configuração de conteúdo opcional que omitem uma cadeia de texto/Namenão vazia (§7.10).10019assinala dicionários de configuração de conteúdo opcional que contêm a chave proibida/AS(§7.10). - A travessia de anotações por página que já alimentava as verificações TrapNet e
/Tabs /Srecolhe agora também dados Link //Contentsna mesma passagem, mantendo a auditoria em O(N) no número 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 de acessibilidade (bit 10 da chave/Pda encriptação) em ficheiros encriptados (§7.16).10011deteta formulários XFA dinâmicos através do elemento<dynamicRender>required</dynamicRender>dentro do pacote XDP XFA (§7.15).10012assinala Form XObjects que transportam uma entrada/Ref— os reference XObjects são proibidos (§7.20).10013assinala anotaçõesTrapNet(§7.18.2).10014percorre cada página e relata qualquer página que contenha anotações cujo dicionário de página não defina/Tabs /S(§7.18.3) para que a ordem das tabulações siga a árvore de estrutura. - Todos os cinco novos códigos passam pelo mesmo par de handles CheckFileCompliance + GetStringListItem que a versão anterior adicionou — não há nova superfície de API pública.
Version 3.56.0
Adicionado
- A nova auditoria do lado do leitor
CheckCompliancePDFUAvalida um PDF externo em relação à ISO 14289-1 (PDF/UA-1). Complementa a verificação existente do lado do escritor GetPDFUADiagnostics ao aceitar qualquer PDF de entrada (saída própria, saída de scanner, conteúdo de terceiros) e listar violações PDF/UA-1 da mesma forma que CheckFileCompliance já reporta problemas PDF/A.
Alterado
- CheckFileCompliance aceita agora
ComplianceTest = 2para executar a nova auditoria PDF/UA-1. O teste PDF/A emComplianceTest = 1não se altera, e a lista de problemas continua a voltar pelo par de handles existente GetStringListCount / GetStringListItem. - A primeira versão cobre as verificações de conformidade fundamentais de PDF/UA-1 de §5 (identificação XMP
pdfuaid:part) e §7.1 (fluxo/Metadatado Catalog, marcador de PDF etiquetado, árvore de estrutura, preferência do visualizador para o título, idioma do documento, XMPdc:title, valor/Suspectse a proibição de remapear tags de estrutura padrão). São emitidos oito códigos de diagnóstico —10001a10009— mantendo o intervalo numérico visualmente separado dos códigos PDF/A00xxx. - As cláusulas mais profundas de PDF/UA-1 (segurança, anotações, XObjects, subconjunto de fontes) ficam sinalizadas para versões de correção subsequentes sobre a mesma estrutura de auditoria.
Version 3.55.6
Alterado
- Cada pacote XMP recém-gerado inclui agora 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 da versão, conforme recomendado por ISO 19005-1 §6.7.2 (Cor2) e pelos guias de boas 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/) passa agora a fazer parte de SelectionNamespaces do pacote XMP; os novos auxiliares SetXMPMM e GenerateInstanceID sustentam a emissão de InstanceID e dão a base para suporte futuro de xmpMM:History / xmpMM:DerivedFrom.
- A descrição do esquema PDF/A Extension Schema (pdfaExtension / pdfaSchema / pdfaProperty / pdfaType / pdfaField) não é adicionada nesta versão. Criar um esquema de extensão personalizado exige construção em vários passos de bag / seq / structured-property para além da forma atual de SetDublinCore / SetXMPBasic; o trabalho está planeado para uma versão futura. Os documentos que precisam de declarar propriedades XMP personalizadas continuam a recorrer ao caminho LoadFromString.
Version 3.55.5
Alterado
- Os documentos PDF/A passam agora a ter os seus sinalizadores de anotação /F normalizados na gravação. ISO 19005-1 §6.5.3 exige que o bit Print seja 1 e que os bits Hidden / Invisible / NoView sejam 0 em cada anotação; o escritor aplica agora essa máscara no momento da gravação para que os chamadores não tenham de memorizar a disposição dos bits. O caso /Subtype /Popup está isento — popups são filhos de outras anotações e tradicionalmente não são impressos.
- O sinalizador AcroForm /NeedAppearances passa agora a ser forçado para false no momento da gravação quando o documento está em qualquer modo PDF/A. ISO 19005-1 §6.9 exige que o sinalizador esteja ausente ou false; anteriormente o escritor deixava ficar o valor definido pelo chamador, o que produzia documentos que pediam ao visualizador para regenerar as aparências na abertura e violavam silenciosamente a especificação quando o chamador o tinha definido como true. A correção também corre para documentos que anteriormente tinham o sinalizador ausente — o escritor emite um /NeedAppearances false explícito para não deixar ambiguidades para o validador.
Version 3.55.4
Alterado
- AddStandardFont passa agora a rejeitar chamadas em modo PDF/A. ISO 19005-1 §6.3.4 revoga a exceção da referência PDF de que as Standard 14 podem ficar não incorporadas: cada programa de fonte num ficheiro em conformidade tem de ser incorporado, e a biblioteca não inclui os contornos Standard 14. A fachada devolve silenciosamente 0; os chamadores devem mudar para AddTrueTypeFont ou AddType1Font com um ficheiro de fonte real.
- AddTrueTypeFont passa agora a promover silenciosamente Embed=0 (sem incorporação) para Embed=1 (incorporar fonte completa) quando o modo PDF/A está ativo. O caminho de referência sem incorporação produzia PDF que dependia do fallback de fontes do visualizador para uma instalação de Arial / Times / Courier do sistema, o que viola ISO 19005-1 §6.3.4. Os chamadores existentes que pediam incorporação (Embed=1 ou 2) não são afetados.
- A verificação de conformidade do /Encoding TrueType não simbólico (ISO 19005-1 §6.3.7 Cor2 exige WinAnsi ou MacRoman como nome de codificação ou BaseEncoding, sem /Differences) não é adicionada nesta versão porque a biblioteca já emite /WinAnsiEncoding para subconjuntos TrueType não simbólicos, e a aplicação mais profunda da regra exigiria rastrear o despacho simbólico vs. não simbólico através do caminho de subconjunto. CheckCompliancePDFA 00034 / 00035 (adicionados em v3.51.0) assinalam qualquer saída não conforme no momento da validação.
Version 3.55.3
Alterado
- Os dicionários de fonte TrueType-backed CIDFontType2 passam agora a incluir explicitamente /CIDToGIDMap /Identity. ISO 19005-1 §6.3.3.2 (Cor2) exige que a entrada esteja presente em cada CIDFont Type 2 incorporada; a referência PDF permite o valor predefinido implícito Identity, mas PDF/A exige um valor explícito. O escritor omitia anteriormente a chave por completo, fazendo com que veraPDF (e CheckCompliancePDFA 00033 adicionado em v3.51.0) assinalassem o ficheiro. O nome /Identity corresponde ao layout GID-como-CID que o escritor já estava a produzir implicitamente, por isso os documentos existentes são renderizados de forma idêntica.
- FontDescriptor /CharSet (para subconjuntos Type 1) e /CIDSet (para subconjuntos CIDFont) continuam por fazer; o escritor teria de acompanhar quais nomes de glifos / CIDs acabaram no subconjunto para os preencher com precisão. CheckCompliancePDFA 00031 e 00032 (também adicionados em v3.51.0) assinalam a ausência para que os utilizadores vejam o problema no momento da validação.
Version 3.55.2
Alterado
- AddImageDirectFromString rejeita agora filtros incompatíveis com PDF/A no ponto de entrada. Passar Filter = 'LZWDecode' é rejeitado para qualquer 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 constrangimentos de subespecificação (número de canais de cor, uniformidade da profundidade de bits, requisitos METH/APPROX) que a gate do lado do escritor não impõe — os chamadores nesses modos ainda têm de garantir que o fluxo JPEG 2000 é conforme. A fachada devolve silenciosamente 0 quando é pedido um filtro proibido.
- As 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 re-encoda com FlateDecode (ou DCTDecode para payloads JPEG), pelo que a 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 deixe passar um filtro proibido para a saída.
Version 3.55.1
Alterado
- AddLinkToHideField passa agora a rejeitar chamadas em modo PDF/A. A versão anterior deixou um comentário a afirmar que a ação era compatível com PDF/A, mas ISO 19005-1 Cor2 acrescentou /Hide à lista de ações proibidas (§6.6.1), e ISO 19005-2 / -3 herdam a restrição. A fachada devolve silenciosamente 0 quando chamada em modo PDF/A, em linha com AddLinkToJavaScript e AddLinkToImportData.
- AddSWFAnnotationFromFile passa agora a rejeitar chamadas em modo PDF/A. As anotações SWF / RichMedia encapsulam media Flash, que é proibido por ISO 19005-1 §6.5.2 (sem subtipos Movie / Sound) e reforçado por ISO 19005-2 §6.3.1 (sem 3D / Sound / Screen / Movie). A fachada devolve silenciosamente 0.
- AddEmbeddedFile e AddLinkToEmbeddedFile passam agora a rejeitar chamadas em 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 ficheiros PDF/A incorporados; em vez de verificar a conformidade PDF/A recursiva do conteúdo anexado, o escritor simplesmente recusa a chamada nestes modos. PDF/A-3 (SetPDFAMode 5 ou 6) continua permitido — ver v3.55.0 para a injeção automática de /AFRelationship.
- SetOpenActionMenu passa agora a rejeitar valores MenuItem fora da lista branca {NextPage, PrevPage, FirstPage, LastPage} quando o documento está em modo PDF/A. ISO 19005-1 §6.6.1 restringe as ações nomeadas a esse conjunto, pelo que anteriormente a API produzia silenciosamente dicionários Open-Action Find / Print / FullScreen não conformes que o veraPDF rejeitaria.
- NewOptionalContentGroup passa agora a rejeitar chamadas em 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 os constrangimentos dos respetivos §6.9, por isso a gate só dispara para PDF/A-1.
Version 3.55.0
Alterado
- Os documentos PDF/A-3 recebem agora automaticamente uma entrada /AFRelationship em cada ficheiro incorporado. Anteriormente, um ficheiro PDF/A-3 criado com a biblioteca podia falhar a validação porque ISO 19005-3 Annex E, Table E.1 exige AFRelationship em cada especificação de ficheiro incorporado. O escritor injeta agora o valor predefinido configurado ('Unspecified' por omissão) em qualquer dicionário FileSpec que não tenha a entrada no momento da gravação, espelhando a injeção automática de AFRelationship de PDF/UA introduzida anteriormente. Apenas os modos PDF/A-3 (SetPDFAMode 5 = PDF/A-3b ou 6 = PDF/A-3a) desencadeiam a injeção automática; PDF/A-1 e PDF/A-2 continuam a rejeitar ficheiros incorporados em bloco de acordo com ISO 19005-1 §6.1.11 e ISO 19005-2 §6.8.
- SetPDFA3DefaultAFRelationship é uma nova API que substitui o valor predefinido escrito pelo escritor quando um ficheiro incorporado não tem uma entrada /AFRelationship. Aceita os valores da Table E.1 da ISO 19005-3 'Source' (o ficheiro incorporado é o material de origem que produziu o conteúdo PDF), 'Data' (o ficheiro é os dados estruturados que suportam uma tabela ou gráfico visual), 'Alternative' (uma representação alternativa, como uma versão áudio), 'Supplement' (uma representação suplementar, como uma forma MathML de uma equação), 'Unspecified' (a relação não pode ser caracterizada pelos anteriores) ou qualquer nome de segunda classe registado. Uma cadeia vazia repõe 'Unspecified'. As substituições por ficheiro continuam 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 sRGB OutputIntent incluído por um perfil ICC externo carregado do disco. É necessária ao produzir documentos PDF/A nos espaços de cor DeviceCMYK ou DeviceGray, uma vez que a biblioteca apenas fornece um perfil sRGB. O uso típico é chamar primeiro SetPDFAMode (que inicializa o esqueleto OutputIntent), e depois LoadOutputIntentProfile('C:\path\to\FOGRA39.icc', 'DeviceCMYK') para trocar os bytes do perfil e marcar o documento com o novo espaço de cor. Devolve 1 em sucesso, 0 se o ficheiro não existir ou se o espaço de cor for desconhecido. Exposta 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 registado no fluxo DestOutputProfile.
- SetFillColorCMYK, SetTextColorCMYK, SetTextHighlightColorCMYK, SetTextUnderlineColorCMYK, AddSeparationColor, SetFillColorSep, SetLineColorSep, SetTextHighlightColorSep e SetTextColorSep passam agora a ter sucesso em modo PDF/A quando o perfil OutputIntent do documento é DeviceCMYK. Anteriormente, estas APIs rejeitavam todas as chamadas em modo PDF/A independentemente do OutputIntent, o que impedia a produção de documentos CMYK conformes. A gate passa agora a ser PDFAMode = 0 OR OutputIntentColorSpace = 'DeviceCMYK', em linha com a regra ISO 19005-1 §6.2.3.3 de que DeviceCMYK é permitido quando o OutputIntent usa um perfil CMYK, e com ISO 19005-1 §6.2.3.4 que permite alternates Separation cujo espaço de cor base também é conforme.
- SetTextShader passa agora a ter sucesso em modo PDF/A quando o perfil OutputIntent é DeviceRGB ou DeviceCMYK. Os shaders em si não são proibidos por PDF/A; o validador (lado do leitor) verifica se o espaço de cor interno do shader corresponde ao OutputIntent. O comportamento anterior de rejeição estrita impedia o uso de shaders conformes.
- O desbloqueio de CMYK / Separation / Shader depende da etiqueta 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 incluído), pelo que as chamadas CMYK continuam a ser rejeitadas por defeito — o novo comportamento é opt-in através de LoadOutputIntentProfile.
Version 3.53.0
Alterado
- O dicionário OutputIntent passa agora a conter os campos completos do esqueleto PDF/A recomendados por ISO 19005-1 §6.2.2 e pelo preflight do Adobe Acrobat: /OutputCondition (descrição legível por humanos da condição de cor), /Info (texto de identificação em forma longa) e /RegistryName (URL do registo, por omissão http://www.color.org). Os valores assumem por omissã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 recebe diretamente os quatro campos personalizados para que os chamadores os possam preencher para as 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 a funcionar sem alterações; agora 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 ICC incorporado (3 para DeviceRGB, 4 para DeviceCMYK, 1 para DeviceGray); o perfil incorporado propriamente dito continua a ser o fluxo sRGB incluído até que a futura API LoadOutputIntentProfile chegue em v3.54.0.
- TPDFDocument expõe OutputIntentColorSpace como uma propriedade de leitura/escrita que acompanha o espaço de cor da última chamada a AddOutputIntent. Isto torna-se a condição de gate para as restrições do lado do escritor em CMYK / Separation / Shader em v3.54.0, onde as APIs de cor que hoje rejeitam todas as chamadas em modo PDF/A só passarão a rejeitar quando o espaço de cor não coincidir com o OutputIntent.
Version 3.52.0
Alterado
- CheckCompliancePDFA audita agora anotações, estado gráfico, ações e form XObjects, completando a cobertura do validador PDF/A do lado do leitor para os capítulos 6.2-6.6 da ISO 19005-1 e as regras diferenciais equivalentes de PDF/A-2/-3. O validador reporta 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 isenção para /Subtype /Popup), anotação /AA (00054; §6.6.2), dicionário 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 apenas 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 de OpenAction de v3.50.0 por uma passagem completa que assinala 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 resida (anotação /A, widget /A, outline /A, catalog /OpenAction, etc.). ISO 19005-1 §6.6.1.
- Auditoria de XObject (00066, 00067) assinala XObjects PostScript e Referência, além de chaves proibidas em XObjects Form (/OPI, /PS, /Subtype2 = /PS) e XObjects Image (/Alternates, /OPI, /Interpolate true). ISO 19005-1 §6.2.4 - §6.2.7.
Version 3.51.0
Alterado
- CheckCompliancePDFA audita agora a conformidade de fontes e de espaços de cor para além das verificações estruturais adicionadas em v3.50.0. O validador assinala nove novas classes de problemas: pelo menos um programa de fonte não está incorporado (00030; ISO 19005-1 §6.3.4 exige que todos os programas de fonte, incluindo as substituições Standard 14, sejam incorporados), subset Type 1 sem /CharSet no 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 um /Encoding não conforme (00034; §6.3.7 Cor2 exige WinAnsi/MacRoman diretamente ou como BaseEncoding, sem /Differences), TrueType simbólico que ainda transporta /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 o respetivo fluxo de perfil (00037; §6.2.3.2), e um ficheiro que usa ao mesmo tempo DeviceRGB e DeviceCMYK (00038; §6.2.3.3 proíbe a mistura).
- A verificação /ToUnicode (00036) está limitada aos níveis de conformidade A e U porque só esses níveis exigem mapeamento Unicode segundo ISO 19005-1 §6.3.8 e ISO 19005-2 §6.2.11.7. Os ficheiros de nível B (PDF/A-1b, PDF/A-2b, PDF/A-3b) não são assinalados. A isenção de quatro classes reconhece codificações predefinidas (MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding), BaseFonts Standard 14 Type 1 como substituto para fontes Adobe Standard Latin / Symbol de nomes de glifos, e fontes Type 0 cujo CIDFont descendente usa registos Adobe-GB1, Adobe-CNS1, Adobe-Japan1 ou Adobe-Korea1.
- A auditoria de fontes percorre cada dicionário Font, classifica-o por Subtype (Type1, MMType1, TrueType, Type3, Type0 com o seu CIDFontType0 ou CIDFontType2 descendente) e depois despacha as verificações relevantes. As fontes compostas Type 0 delegam as verificações de incorporação e de subset ao respetivo CIDFont descendente, mantendo /ToUnicode no invólucro Type 0. A deteção de subset usa a convenção padrão do prefixo de seis letras maiúsculas.
Version 3.50.0
Alterado
- CheckCompliancePDFA reporta agora 15 problemas adicionais de não conformidade PDF/A que o validador anteriormente não detectava: array /ID do trailer em falta (00013), fluxo /Metadata do Document Catalog em falta (00014), /Filter aplicado ao fluxo /Metadata (00015), dicionários de fluxo que referenciam ficheiros externos através de /F, /FFilter ou /FDecodeParms (00016), ficheiros incorporados declarados através de /EF em qualquer dicionário de especificação de ficheiro ou através da entrada Name tree /EmbeddedFiles em documentos PDF/A-1 (00017, 00018), /OpenAction a apontar para um tipo de ação proibido (00019), dicionários de ação adicional /AA no Document Catalog ou em qualquer Página (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 assinala agora tipos de ação Catalog /OpenAction proibidos (/Launch, /Sound, /Movie, /ResetForm, /ImportData, /JavaScript, /Hide, /SetState, /NOP, /Trans, /GoTo3DView, /Rendition, /SetOCGState) e valores /N de ação nomeada fora da lista permitida {NextPage, PrevPage, FirstPage, LastPage} segundo ISO 19005-1 §6.6.1.
- As verificações específicas de filtro (JBIG2Decode, JPXDecode) e as verificações de ficheiros incorporados (/EF, /EmbeddedFiles) permanecem limitadas a PDF/A-1 porque ISO 19005-2 §6.2.8.3 e §6.8 aliviam explicitamente essas restrições para PDF/A-2 e PDF/A-3. As verificações de estrutura do documento (/Metadata, /AcroForm /NeedAppearances, /OpenAction, /AA, /Requirements, /Perms) aplicam-se a todas as partes PDF/A.
Corrigido
- O analisador PDFAID aceita o sufixo de conformidade U (PDF/A-2U, PDF/A-3U) juntamente com as variantes A e B existentes, pelo que CheckCompliancePDFA já não emite um aviso espúrio "00005 PDFA Mark NOT Found or invalid" ao analisar um ficheiro PDF/A-2U ou PDF/A-3U produzido por outra ferramenta. Os níveis de conformidade com mapeamento Unicode adicionados em ISO 19005-2:2011 são agora 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 ficheiro FDF externo quando o utilizador clica na ligação (ISO 32000-1 §12.6.4.8, Table 198). O parâmetro FileName é referenciado como um dicionário filespec, com as mesmas regras de normalização de caminhos usadas por AddLinkToFile / AddLinkToFileEx (barras invertidas convertidas em barras normais segundo 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 da ligação (Invert, Outline, Push), em linha com as 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 devolve silenciosamente 0 quando é chamada em 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 ocultação (/S /Hide) que alterna a visibilidade de um ou mais campos AcroForm quando o utilizador clica na ligação (ISO 32000-1 §12.6.4.10, Table 196). FieldNames aceita um ou mais nomes de campo totalmente qualificados separados por vírgulas, pontos 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, sendo ambas as formas permitidas pela especificação. HideFlag seleciona a direção da visibilidade: um valor não nulo oculta os campos listados (/H true) e zero mostra-os (/H false). O bit 0 de Options alterna a borda visível e os bits 1–3 selecionam o modo de destaque da ligação (Invert, Outline, Push), em linha com AddLinkToWeb / AddLinkToNamedAction. PDF 1.2 ou posterior. Compatível com PDF/A porque não é referenciado qualquer recurso externo. 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 desencadeia um dos quatro comandos de navegação do visualizador normalizados definidos em ISO 32000-1 §12.6.4.11, Table 194: NextPage, PrevPage, FirstPage e LastPage. O parâmetro NamedActionType seleciona o comando (0=NextPage, 1=PrevPage, 2=FirstPage, 3=LastPage); valores fora deste intervalo recaem em NextPage para que o escritor emita sempre um nome /N conforme a especificação. O bit 0 de Options alterna a borda visível e os bits 1–3 selecionam o modo de destaque da ligação (Invert, Outline, Push), em linha com AddLinkToWeb / AddLinkToPage. A anotação requer PDF 1.1 ou posterior e é compatível com PDF/A porque não é referenciado qualquer recurso externo. 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 dado, assinalando uma posição na página onde texto ou conteúdo foi inserido, omitido ou de outro modo precisa de atenção do revisor. Suporta dois tipos de símbolo (None e Paragraph) através de SymbolType (0 / 1), cor configurável, opacidade, título, contents e carimbos de data/hora 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 completa o preenchimento das anotações geométricas que começou com v3.44.0 Square+Circle. PDFlibPas cria agora anotações Text, Stamp, FreeText, TextMarkup (Highlight/Underline/Squiggly/StrikeOut), Square, Circle, Line, Polygon, PolyLine, Ink e Caret, para além do suporte já 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) que representa traços manuscritos ou marcas livres desenhadas na página. Os traços são fornecidos como uma única string, em que vários traços são separados por '|' ou por 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 distintos. Suporta largura da borda, cor da tinta, opacidade, título, contents e carimbos de data/hora 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 tem de conter um número par de valores (pelo menos quatro), caso contrário a chamada devolve 0 sem escrever qualquer anotação. O /Rect é calculado automaticamente a partir da extensão combinada de todos os traços, mais uma pequena margem, 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 poligonal fechada (PDF /Subtype /Polygon) com vértices fornecidos como uma string de pares de coordenadas separados por espaço, vírgula, ponto e vírgula ou tabulação (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, contents e carimbos de data/hora 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 de linha final configuráveis em cada terminal (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 requerem pelo menos dois pontos de vértice (quatro números) e um número total par de números; a chamada devolve 0 se a string de vértices não for analisada como uma lista válida de pares. O /Rect é calculado a partir da extensão dos vértices mais uma margem proporcional à largura da borda, para que as decorações finais permaneçam visíveis.
- Ambas as anotações elevam a versão do documento para PDF 1.5 quando emitidas sob um bloqueio de versão mínima inferior.
Version 3.44.1
Alterado
- AddLineAnnotation cria uma anotação de marcação de linha (PDF /Subtype /Line) entre dois pontos finais, com largura da borda configurável, cor da linha, cor de preenchimento interior opcional, estilos de linha final em ambas as extremidades (None, Square, Circle, Diamond, OpenArrow, ClosedArrow, Butt, ROpenArrow, RClosedArrow, Slash), opacidade, título, contents e carimbos de data/hora de criação/modificação. 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 uma margem proporcional à largura da borda, para que as decorações finais permaneçam dentro da caixa delimitadora da anotação.
Version 3.44.0
Alterado
- AddSquareAnnotation cria uma anotação de marcação retangular (PDF /Subtype /Square) no retângulo dado, com largura da borda configurável, cor da borda, cor de preenchimento interior opcional, opacidade, título, contents e carimbos de data/hora de criação/modificação. 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 elíptica (PDF /Subtype /Circle) inscrita no retângulo dado, com a mesma largura da borda, preenchimento, opacidade, título, contents e carimbos de data/hora configuráveis 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 um bloqueio 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) para que os fluxos de revisão existentes no Acrobat, Foxit e Edge as possam editar 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, exprimindo o espaçamento antes e depois de elementos ao nível de bloco em pontos. Definido em ISO 32000-1 §14.8.5.4.2 Table 340. Disponível na biblioteca Delphi, ActiveX (Dispids 73008051/73008052) e nas interfaces DLL.
- SetStructElemStartIndent e SetStructElemEndIndent definem os atributos /StartIndent e /EndIndent (Layout owner), exprimindo a indentação a partir das margens de início e fim do retângulo de conteúdo, conscientes do modo de escrita, em pontos. Definido em ISO 32000-1 §14.8.5.4.2 Table 340. Disponível na biblioteca Delphi, ActiveX (Dispids 73008053/73008054) e nas interfaces DLL.
- SetStructElemColor define o atributo /Color (Layout owner) como um trio RGB (cada componente 0.0-1.0), descrevendo a cor de primeiro plano do elemento para motores de reflow e verificadores de contraste de cor a jusante. Definido em ISO 32000-1 §14.8.5.4.2 Table 340. Disponível na biblioteca Delphi, ActiveX (Dispid 73008055) e nas interfaces DLL.
Corrigido
- Corrigido um bug de serialização em BuildStructElemDictRef: valores de atributos numéricos de um único token (como SpaceBefore, SpaceAfter, StartIndent, EndIndent) estavam a ser escritos como nomes PDF em vez de números PDF. A correção aplica-se tanto ao ramo de atributos de proprietário único como ao de vários proprietários.
Version 3.42.0
Alterado
- Foram adicionadas três novas verificações de conformidade: o código 00006 assinala documentos encriptados (a encriptação é proibida em todas as versões PDF/A); o código 00007 assinala documentos sem uma entrada OutputIntents no catálogo (exigida por todas as versões PDF/A); os códigos 00011 e 00012 assinalam documentos sem MarkInfo ou StructTreeRoot quando o nível de conformidade é -a (acessibilidade).
Corrigido
- CheckCompliancePDFA valida agora 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 do teto 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, nos quais o conteúdo opcional (camadas) é proibido. PDF/A-2 e PDF/A-3 permitem camadas e já não são assinalados.
Version 3.41.0
Alterado
- O modo PDF/A passa agora a impor operações proibidas ao nível da API. Quando um modo PDF/A está ativo (qualquer um dos modos 1-6), chamar SetEncryption, AddSeparationColor, SetFillColorCMYK, SetTextColorCMYK ou qualquer outra API CMYK/Separation/Shader devolve 0 e não produz efeito, em consonância com a exigência PDF/A de um único OutputIntent sRGB.
- A transparência é proibida em PDF/A-1 (modos 1 e 2): SetTransparency, SetBlendMode e SetPageTransparencyGroup devolvem 0 e não têm efeito 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 restringidos.
- As ações JavaScript são proibidas em todos os modos PDF/A (1-6): SetOpenActionJavaScript, PageJavaScriptAction, DocJavaScriptAction, AddGlobalJavaScript e AddLinkToJavaScript devolvem 0 e não têm efeito quando qualquer modo PDF/A está ativo. ISO 19005-1 §6.6.1 proíbe explicitamente JavaScript em documentos PDF/A.
- As APIs de anexação de ficheiros (EmbedFile, AddFileAttachment) são bloqueadas em modos PDF/A-1 e PDF/A-2 (1-4). Continuam funcionais em PDF/A-3 (modos 5 e 6), que permitem explicitamente ficheiros incorporados arbitrários.
Version 3.40.0
Adicionado
- SetPDFAMode passa agora a suportar 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 visa PDF 1.7 e permite camadas, formulários interativos, imagens JPEG2000 e transparência limitada. PDF/A-3 estende PDF/A-2 ao permitir ficheiros incorporados arbitrários (qualquer MIME type). Todas as variantes -a escrevem automaticamente /MarkInfo e os marcadores Tagged-PDF exigidos pelo nível de conformidade de acessibilidade.
Alterado
- GetInformation(201) devolve '1' a '6' correspondendo ao modo PDF/A ativo, em linha com a nova numeração dos modos.
Corrigido
- Corrigido: SetPDFAMode(1) (PDF/A-1a) era anteriormente um no-op devido a um bug interno de encaminhamento 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. Os valores válidos são LrTb (da esquerda para a direita, o 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 Table 340. Disponível na biblioteca Delphi, ActiveX (Dispid 73008049) e nas interfaces DLL.
- SetStructElemListNumbering define o atributo /ListNumbering (List owner) no elemento de estrutura atualmente aberto. Os 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 corretamente o tipo de lista. Definido em ISO 32000-1 §14.8.5.3.2 Table 336. Disponível na biblioteca Delphi, ActiveX (Dispid 73008050) e nas 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 Table 337. Disponível na biblioteca Delphi, ActiveX (Dispid 73008047) e nas 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 Table 337. Disponível na biblioteca Delphi, ActiveX (Dispid 73008048) e nas interfaces DLL.
- Ambas as funções são wrappers de conveniência equivalentes a chamar AddTagAttribute com Owner='Table' e o respetivo nome de atributo. Complementam SetStructElemScope para células de tabela totalmente descritas em tabelas complexas ou com cabeçalhos que atravessam várias colunas.
Version 3.37.2
Alterado
- GetPDFUADiagnostics passa agora a reportar FORM-NO-TOOLTIP:N quando N campos de formulário interativos (anotações Widget) não têm 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 utilizador quando o campo recebe foco. /TU é o nome acessível que os leitores de ecrã pronunciam 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 passa agora a reportar LIST-STRUCT:N quando N elementos de estrutura LI ou LBody aparecem fora do respetivo elemento pai obrigatório. ISO 32000-1 §14.8.4.4 exige que LI seja um filho direto de L (lista) e LBody um filho direto de LI (item de lista). O aninhamento incorreto de listas impede a tecnologia assistiva de percorrer e anunciar corretamente o conteúdo da lista e pode causar falhas de validação da estrutura do 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 numa única chamada. Para 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 único do elemento) e Expansion (/E, texto completo de uma abreviatura ou acrónimo). Passar uma string vazia para qualquer um destes três parâmetros adicionais é equivalente a omitir o setter correspondente. BeginTagEx2 reduz o boilerplate para elementos bem descritos — em vez de chamar BeginTagEx seguido de SetStructElemTitle, SetStructElemID e SetStructElemExpansion separadamente, todas as sete propriedades podem ser definidas numa única chamada. A função está disponível na biblioteca Delphi, ActiveX (Dispid 73008046) e nas interfaces DLL.
Version 3.36.1
Alterado
- GetPDFUADiagnostics passa agora a reportar TABLE-TH-NO-SCOPE:N quando N elementos de estrutura TH (célula de cabeçalho de tabela) não têm um atributo Scope. ISO 32000-1 §14.8.4.3.4 Table 337 define Scope (Row, Column ou Both) como o atributo que descreve a que células de dados se aplica uma célula de cabeçalho. Sem ele, os leitores de ecrã e outras tecnologias assistivas não conseguem associar de forma fiável as células de cabeçalho às células de dados em tabelas complexas ou com vários cabeçalhos, o que é exigido por ISO 14289-1 §7.5. Chame SetStructElemAttr('Table','Scope', 'Column') (ou 'Row' / 'Both') imediatamente após etiquetar 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 abreviatura ou acrónimo contido no elemento — por exemplo, "World Wide Web" para um Span cujo texto é "WWW". Os leitores de ecrã pronunciam 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 a língua natural possa ser determinada sem ambiguidade; /E é o mecanismo padrão para abreviaturas e acrónimos. A função está disponível na biblioteca Delphi, ActiveX e nas interfaces DLL.
Version 3.35.1
Alterado
- GetPDFUADiagnostics passa agora a reportar DOCINFO-TITLE-MISSING quando a entrada /Title do dicionário de informação do documento está ausente ou vazia. PDF/UA-1 (ISO 14289-1) exige um título de documento para que os leitores de ecrã o possam anunciar quando o documento é aberto. A verificação existente DISPLAYDOCTITLE-FALSE confirma que o título é mostrado 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 (title) no elemento de estrutura atualmente aberto (ISO 32000-1 §14.7.2 Table 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 utilizadores com dificuldades de renderização) e /ActualText (correção de texto ao nível do glifo); é mais útil em elementos contentores não textuais como Table, Figure, Form, Sect e Div. Passe uma string vazia para limpar um valor anteriormente definido. A função está disponível na biblioteca Delphi, ActiveX e nas 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 de o elemento ter sido aberto — útil quando a descrição é calculada separadamente do tipo do elemento. PDF/UA-1 (ISO 14289-1 §7.5) exige texto Alt em elementos Figure e Formula; GetPDFUADiagnostics já reporta FIGURE-NO-ALT:N para valores em falta. A função está disponível na biblioteca Delphi, ActiveX e nas interfaces DLL.
Version 3.33.1
Adicionado
- GetPDFUADiagnostics agora inclui uma verificação ROLEMAP-UNMAPPED:N que deteta 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 de apoio possa determinar como tratar o elemento. Quando são encontrados N tipos não mapeados, a descrição do problema inclui a lista de nomes de tipos para que os chamadores saibam de que entradas AddRoleMap precisam. Todos os 49 tipos de estrutura padrão definidos em ISO 32000-1 Table 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 substitui o idioma ao nível do documento declarado por SetDocumentLanguage ou SetPDFUAMode para o elemento e todos os seus descendentes, permitindo que documentos em vários idiomas assinalem cada span com a respetiva tag de idioma BCP 47 correta (por ex., 'en-US', 'fr', 'zh-Hant-TW'). Os leitores de ecrã usam o /Lang ao nível do elemento para selecionar o motor de síntese de voz ou a voz apropriados 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 abreviaturas com expansões não óbvias. ActualText complementa, em vez de substituir, o conteúdo renderizado; substitui o que a tecnologia de apoio e os extratores de texto leem para esse 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 reportar texto Alt em falta (FIGURE-NO-ALT:N). ISO 32000-1 §14.9.3 exige descrições alternativas tanto para figuras gráficas como para fórmulas matemáticas; anteriormente apenas os elementos Figure eram verificados.
- GetPDFUADiagnostics agora reporta 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 satisfazem 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 recolhidos numa name tree /IDTree na raiz da árvore de estrutura quando o documento é guardado, 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) a uma ou mais células de cabeçalho através 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, estas duas funções suportam marcação de tabelas complexas 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 separados 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 deteta saltos no nível de títulos na ordem do documento (por ex., um H1 imediatamente seguido por um H3 sem um H2 entre eles). A verificação executa uma travessia em pré-ordem de toda a árvore de elementos de estrutura e conta cada ocorrência em que o nível seguinte 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 conta como salto. WCAG 2.x Success Criterion 1.3.1 e ISO 14289-1 §7.1 exigem que os títulos estejam aninhados sem lacunas.
Version 3.30.0
Alterado
- Atributos de elementos de estrutura agora são suportados para PDF etiquetado e documentos PDF/UA. Três novas funções de API permitem que atributos sejam anexados ao elemento de estrutura atualmente a ser 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 é guardado, 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 num único dict, e atributos de owners diferentes são escritos como um array de dicts. 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 não tem um valor de texto Alt (reportado 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 (reportado como STRUCT-UNCLOSED:N). A verificação de figura executa 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 potenciais problemas de conformidade PDF/UA-1 (ISO 14289-1) e devolve uma lista de resultados separada por novas linhas. São realizadas seis verificações: se MarkInfo/Marked está definido (PDF etiquetado), 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 ficheiros incorporados sem uma entrada AFRelationship. Cada resultado é identificado por um código curto (por ex., LANG-MISSING, ANNOT-NO-CONTENTS:3) seguido de uma descrição legível. Devolve uma cadeia vazia quando não são encontrados problemas. 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 nem campo /T, o nome do ficheiro da especificação de ficheiro incorporado da anotação (/FS /UF ou /F) é agora usado como descrição acessível de reserva. Isto completa a cadeia de reserva de Contents da anotação: /T → Link URI → nome de Stamp → nome do ficheiro de FileAttachment. Os leitores de ecrã recebem o nome do ficheiro anexado em vez de silêncio, satisfazendo ISO 14289-1 §7.18.1 para os tipos de anotação mais comuns.
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 reserva (por exemplo, "Approved", "Draft", "Confidential", "Final"). Isto estende a cadeia de reserva de Contents da anotação introduzida em v3.28.3 para cobrir anotações de carimbo, que são comuns em fluxos de trabalho envolvendo documentos revistos 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 reserva. Isto aplica-se apenas durante o processamento de SetPDFUAMode e apenas a anotações Link que carregam uma ação /URI. Os leitores de ecrã 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 ficheiro de um ficheiro incorporado. Exigido por ISO 14289-1 (PDF/UA-1) §7.11, isto permite que os chamadores especifiquem a relação semântica de um ficheiro 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 ficheiro incorporado sem uma chave AFRelationship recebe automaticamente Unspecified; use esta função para substituir esse valor predefinido antes de guardar. Disponível na biblioteca Delphi, ActiveX e interfaces DLL.
Version 3.28.1
Alterado
- Quando SetPDFUAMode é chamado num documento cujos metadados XMP contêm o título genérico predefinido da biblioteca em vez de um específico do documento, o título é agora automaticamente substituído pelo valor da entrada /Info Title do documento (se existir uma presente). Isto 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, pelo que fazer ida e volta de um PDF que já tenha dc:title preserva corretamente esse título em vez de regressar ao placeholder predefinido.
Version 3.28.0
Alterado
- BeginArtifactEx(ArtifactType, ArtifactSubtype) é uma nova API de tagged PDF que estende BeginArtifact para expressar tanto o /Type do artifact como o /Subtype da Pagination numa ú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, segundo ISO 32000-1 §14.8.2.2.1. Se apenas um parâmetro não estiver vazio, é usada a forma correspondente de chave única. 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 segundo ISO 32000-1 §14.8.2.2.1 Table 330), o operador marked-content escreve /Type em vez de /Subtype. Outros valores, como Header, Footer e Watermark, continuam a ser escritos como /Subtype. Isto corrige a saída anteriormente incorreta que escrevia /Subtype /Pagination quando o chamador pretendia assinalar um artifact de paginação.
Version 3.27.1
Alterado
- Quando o modo PDF/UA está ativo e o documento contém ficheiros incorporados, cada dicionário de especificação de ficheiro que não tenha uma entrada AFRelationship recebe agora uma automaticamente no momento de guardar. O valor escrito é /Unspecified, satisfazendo o requisito ISO 14289-1 §7.11 de que cada ficheiro incorporado transporte uma chave AFRelationship. Isto aplica-se tanto aos ficheiros adicionados via EmbedFile como aos ficheiros incorporados já presentes num documento carregado.
Version 3.27.0
Alterado
- AddRoleMap(CustomType, StandardType) é uma nova API de tagged PDF que regista 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 guardados, 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 tags específicos da aplicação. Podem ser registados vários mapeamentos; chaves duplicadas são substituídas 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 tagged PDF que estende BeginTag com um atributo explícito de língua natural. Quando Lang não está vazio, é escrito no atributo /Lang do elemento de estrutura, permitindo anotação de língua por elemento exigida por ISO 14289-1 §7.2 para documentos multilingues. 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 predefinida do Windows (WinAnsiEncoding) recebem agora um fluxo CMap ToUnicode, permitindo extração fiável de texto Unicode e copiar/colar para essas fontes. Anteriormente, um fluxo ToUnicode só era escrito quando estava presente uma substituição explícita de code page ou um array Differences; o caminho comum da codificação predefinida não o tinha.
- A mesma correção aplica-se a fontes TrueType carregadas com uma code page não predefinida explícita mas sem um array Differences, e a fontes carregadas através do 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 tenham uma entrada Contents não vazia recebem agora uma automaticamente no momento de guardar. O valor /T (título / autor) da anotação é usado como valor de reserva, satisfazendo ISO 14289-1 §7.18.1 para anotações que transportam 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 tenham uma entrada TU (tooltip / descrição alternativa) recebem agora uma automaticamente no momento de guardar. O nome parcial do campo (entrada /T) é usado como valor de reserva, garantindo que os leitores de ecrã conseguem identificar cada campo. Botões push são corretamente excluídos deste requisito segundo ISO 14289-1 §7.18.4.
Version 3.23.1
Alterado
- GetInformation(200) devolve '1' quando o modo PDF/UA-1 está ativo no documento selecionado, permitindo que os chamadores consultem em tempo de execução o estado do modo de conformidade.
- GetInformation(201) devolve '1' para PDF/A-1a, '2' para PDF/A-1b, ou uma string vazia quando o modo PDF/A está desligado.
- GetInformation(313) devolve a string de versão PDF na qual o alvo de gravação está atualmente bloqueado, ou uma string vazia para documentos com versionamento livre.
Corrigido
- GetInformation(311) e GetInformation(312) devolvem agora corretamente a string de requisito de versão e o nome da funcionalidade 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 a flag MarkInfo.Marked seja definida 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 de guardar, satisfazendo o requisito de ordem de tabulação baseada na 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 utilização.
Version 3.22.0
Alterado
- BeginTag(TagType, AltText, ActualText) abre um elemento de estrutura tagged PDF no fluxo de conteúdo atual, escrevendo um operador BDC com um MCID atribuído automaticamente e registando 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) assinala uma região de conteúdo como um artefacto PDF (artefacto de paginação, fundo, etc.), escrevendo um operador BMC. SubType é opcional; quando fornecido, é escrito como /Artifact << /Subtype /SubType >>.
- EndArtifact fecha a região de artefacto com um operador EMC.
- No momento de guardar, quando qualquer elemento de estrutura tagged tiver sido registado, a biblioteca constrói automaticamente o StructTreeRoot completo, atribui chaves StructParents às páginas afetadas e escreve a tree ParentTree de números, satisfazendo os requisitos ISO 32000-1 §14.7 para tagged PDF.
- Fontes standard Type 1 (Helvetica, Times, família Courier, Symbol) e fontes Type 1 incorporadas com codificação WinAnsi recebem agora um fluxo CMap ToUnicode, permitindo extração fiável de texto Unicode e copiar/colar para estes 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, ativa DisplayDocTitle em ViewerPreferences, define Catalog.Lang quando Language não está vazio e escreve a entrada de namespace XMP pdfuaid:part = 1 exigida pela Secção 6.7.11 da ISO 14289-1.
- SetDocumentLanguage(Language) escreve diretamente a entrada Catalog /Lang, permitindo que a língua do documento seja declarada independentemente do modo PDF/UA.
- MarkInfo.Suspects passa agora a ser definido como false sempre que MarkInfo.Marked é definido como true, satisfazendo o requisito de estrutura tagged PDF de ISO 14289-1 (Secção 7.18.6).
- Encrypt passa agora a impor a flag de permissão CanCopyAccess (cópia de conteúdo para acessibilidade) quando o documento está em modo PDF/UA, conforme exigido por ISO 14289-1 Secção 7.17.
Corrigido
- Os campos de formulário Choice (dropdown) já não carregam um valor de tooltip codificado e sem significado; TU fica por definir para que o chamador possa atribuir um rótulo significativo através da API de propriedades do campo de formulário.
Version 3.20.3
Alterado
- Encrypt e AddSWFAnnotationFromFile devolvem agora 0 imediatamente com LastErrorCode 602 quando a versão de gravação está bloqueada abaixo do mínimo exigido pela força de encriptação ou tipo de anotação selecionados, em vez de prosseguirem silenciosamente e falharem apenas no momento de guardar.
- GetInformation(311) e GetInformation(312) refletem agora o requisito de versão em conflito no momento da escrita quando uma versão bloqueada impede funcionalidades de nível de extensão como AES-256 ou anotações RichMedia.
Version 3.20.2
Alterado
- AddU3DAnnotationFromFile eleva agora automaticamente a versão do documento para PDF 1.6 quando uma anotação 3D é adicionada a um documento de versão inferior, em linha com o comportamento de autoelevação de versão de todos os outros pontos de entrada da API PDF 1.6+.
Version 3.20.1
Alterado
- Os alvos de gravação PDF 1.2 são agora aplicados como contratos PDF 1.2 estritos. Guardar objetos PDF 1.3+ como dados page TrimBox sob um alvo PDF 1.2 falha antes de a saída ser escrita, em vez de gerar um ficheiro com versões misturadas.
- A conformidade com o nível de extensão Adobe PDF 1.7 faz agora parte da pré-validação de gravação. AESV3, AES-256, RichMedia, Projection, dicionários geoespaciais e subfiltros de assinatura ETSI são verificados em relação ao ExtensionLevel exigido.
- A encriptação AES-256, as anotações RichMedia, os dicionários geoespaciais e os subfiltros de assinatura ETSI declaram agora a entrada Adobe Extensions correspondente quando o PDFlib eleva automaticamente um documento para conteúdo de extensão PDF 1.7.
- Os salvamentos Append passam agora a usar o mesmo controlo de conformidade de versão que os salvamentos completos.
- As DLLs de tempo de execução opcionais do PDFium foram atualizadas para Win32 e Win64. O GDI+ continua a ser o renderizador predefinido; o PDFium mantém-se opcional através de SetPDFiumFileName e SelectRenderer(3).
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 207/207 cada, e o GoogleTest do C++Builder Win64x passou 61 testes com 2 testes existentes dependentes de amostras ignorados.
Version 3.20.0
Alterado
- Mais oito pontos de entrada do escritor PDFlib passam agora por Phase 3 EnsureMinVersion, para que a versão do documento seja 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 / ficheiro incorporado / XFA / SWF), o PDFlib eleva agora automaticamente FVersion em vinte e um pontos de entrada do escritor.
- NewOptionalContentGroup elevava anteriormente FVersion diretamente; agora passa por EnsureMinVersion para que LockSaveVersion seja respeitado e a elevação fique registada em AutoBumpedFeatures.
Version 3.19.0
Alterado
- A verificação de conformidade da versão PDF ao guardar e ao carregar reconhece agora também quatro funcionalidades anteriormente adiadas: Btn /Ff bit 15 NoToggleToOff (apenas em botões de opção) -> PDF 1.4 DeviceN /Subtype /NChannel (refinamento do espaço de cor) -> 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 ao formato de array do espaço de cor DeviceN [/DeviceN names alternateSpace tintTransform attributes] quando o dicionário de atributos no índice 4 contém /Subtype /NChannel.
- A regra FontFile3 OpenType só é acionada quando o stream é alcançado através de uma chave-pai chamada 'FontFile3', pelo que streams não relacionados que por acaso transportem /Subtype /OpenType não são assinalados.
- A tabela PDFFeatureRules passa agora a conter 103 regras (99 + 4 novas).
Version 3.18.6
Alterado
- A verificação de conformidade da versão PDF ao guardar e ao carregar reconhece agora /AA (ações adicionais) com consciência do tipo de contentor: Catalog /AA (disparadores ao nível do documento) -> PDF 1.4 Annot /AA (disparadores de anotação) -> PDF 1.4 Page /AA (disparadores de página) -> PDF 1.5
- Form-field /AA (PDF 1.2) continua abrangido pelo contrato de gravação PDF 1.3 existente; não é necessária qualquer regra.
- A tabela PDFFeatureRules passa agora a conter 99 regras (96 + 3 novas).
Version 3.18.5
Adicionado
- Nova regra: AcroForm /NeedAppearances é reconhecido como uma funcionalidade PDF 1.5 de acordo com a Tabela 218 do PDF 1.5.
Alterado
- A tabela PDFFeatureRules passa agora a conter 96 regras (95 + 1 nova).
Corrigido
- A verificação de conformidade da versão PDF ao guardar e ao carregar classifica agora corretamente Page /Tabs como uma funcionalidade PDF 1.5; anteriormente estava erradamente classificada como PDF 1.4. O documento de alterações da especificação PDF 1.4 (Adobe TN #5409) não lista /Tabs, e a Tabela 8.10 do PDF 1.5 introduz "Tabs (Optional; PDF 1.5)".
Version 3.18.4
Adicionado
- A cobertura de regressão do zlib-ng inclui agora payloads de tamanho de fronteira, dados de scanline semelhantes a PNG, streams armazenados de vários blocos e streams zlib conhecidos em todos os runners de teste Delphi e C++Builder.
Alterado
- O PDFlibZLib passa agora a usar sempre o backend estático de objetos zlib-ng incluído nas compilações normais da biblioteca, removendo o caminho de fallback restante para System.ZLib.
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 194/194 cada, e o GoogleTest do C++Builder Win64x passou 58 testes com 2 testes existentes dependentes de amostras ignorados.
Version 3.18.3
Alterado
- Os demos de Delphi e C++Builder que geram saída PDF ou texto abrem agora automaticamente o documento gerado após uma gravação bem-sucedida.
- O empacotamento do instalador mantém agora os artefactos de compilação fora das pastas de demonstração e torna as amostras C++Builder, bem como os módulos DLL e ActiveX/OCX, componentes opcionais; os ficheiros correspondentes só são instalados quando o componente é selecionado.
Version 3.18.2
Alterado
- Os demos EditFormField de Delphi e C++Builder limpam agora /NeedAppearances antes de atualizar os valores dos campos, para que cada campo de texto editado receba um stream de aparência normal atualizado no PDF guardado.
- Isto mantém o stream /AP guardado sincronizado com o valor /V armazenado e evita diferenças dependentes do visualizador em que, ao colocar o foco no campo, o texto que faltava na aparência estática do campo se torna visível.
Version 3.18.1
Alterado
- A verificação de conformidade da versão PDF ao guardar e ao carregar reconhece agora também sinalizadores de campo de formulário /Ff ao nível do bit e o bit AppendOnly de AcroForm /SigFlags: /Ff bit 21 (FileSelect, mask 1048576) -> PDF 1.4 /Ff bit 22 (MultiSelect, mask 2097152) -> PDF 1.4 /Ff bit 23 (DoNotSpellCheck, mask 4194304) -> PDF 1.4 /Ff bit 24 (DoNotScroll, mask 8388608) -> PDF 1.4 /Ff bit 25 (Comb, mask 16777216) -> PDF 1.5 /Ff bit 26 (RichText / RadiosInUnison, 33554432) -> PDF 1.5 /Ff bit 27 (CommitOnSelChange, mask 67108864) -> PDF 1.5 /SigFlags bit 2 (AppendOnly, mask 2) -> PDF 1.5
- A herança de /Parent não é seguida: só os dicionários que carregam explicitamente /Ff ou /SigFlags acionam as regras.
- A tabela PDFFeatureRules passa agora a conter 95 regras (87 + 8 novas ao nível do bit).
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 191/191 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.18.0
Alterado
- A verificação de conformidade da versão PDF ao guardar e ao carregar reconhece agora também nove subchaves e funcionalidades ao nível do bit: sinalizadores de anotação ao nível do bit (/F mask): Locked (128) -> PDF 1.4 ToggleNoView (256) -> PDF 1.5 LockedContents (512) -> PDF 1.7 subchaves distintas de catálogo e página: /BoxColorInfo (page) -> PDF 1.4 /Permissions, /Legal, /PresSteps -> PDF 1.5 /VP (viewport geoespacial da página) -> PDF 1.6 /Collection (coleção portátil de catálogo) -> PDF 1.7
- A tabela PDFFeatureRules passa agora a conter 87 regras (78 ao nível de capítulo + 9 ao nível de subchave / bit).
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 189/189 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.17.0
Alterado
- Mais oito pontos de entrada do escritor PDFlib passam agora por Phase 3 EnsureMinVersion, para que a versão do documento seja 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 ficheiro) 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 cobre agora treze pontos de entrada de gravação de alta versão de ponta a ponta.
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 187/187 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.16.3
Adicionado
- Nova API PDFlib: LockSaveVersion(Version) bloqueia o documento em Version e impede que o EnsureMinVersion na fase de gravação da Phase 3 eleve automaticamente a versão acima disso. UnlockSaveVersion remove o bloqueio.
Alterado
- O controlo de gravação não mudou: os recursos emitidos pelo escritor acima da versão bloqueada continuam a produzir LastErrorCode 602 no momento da gravação, em vez de elevarem silenciosamente o cabeçalho.
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 184/184 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.16.2
Alterado
- Os PDFs carregados passam agora a expor, através de GetInformation(103) ("ContributorFeatures"), uma vista apenas com as funcionalidades que contribuem para a deteção ao carregar. A lista contém apenas funcionalidades cuja versão mínima exigida é estritamente superior a HeaderVersion (chave 100), pelo que responde diretamente a "porque é que a versão efetiva é superior ao cabeçalho do ficheiro?".
- GetInformation(101) ("DetectedFeatures") permanece inalterado e continua a listar todas as funcionalidades correspondentes, independentemente da contribuição.
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 181/181 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.16.1
Adicionado
- Alargada a cobertura de deteção do lado do carregamento com seis fixtures sintéticas adicionais: ExtGState de transparência na página (sem elevação de versão), 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 várias funcionalidades e uma verificação de estabilidade de snapshot.
Alterado
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 179/179 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.16.0
Adicionado
- Novas chaves GetInformation: 100 devolve HeaderVersion (literal %PDF-X.Y), 101 devolve DetectedFeatures (funcionalidades correspondidas no carregamento, delimitadas por CRLF), 102 devolve AutoBumpedFeatures (funcionalidades delimitadas por CRLF que desencadearam EnsureMinVersion do lado de gravação).
Alterado
- Os documentos PDF carregados passam agora por uma análise de deteção de versão orientada pelo conteúdo: todos os objetos indiretos são percorridos pela tabela de funcionalidade-para-versão-mínima usada pelo controlo de gravação, 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 ficheiro indica PDF 1.4.
- O controlo de gravação não é afetado: os documentos cuja versão efetiva foi elevada ao carregar e depois explicitamente rebaixada com SetInformation(0, ...) continuam a produzir LastErrorCode 602 no momento da gravação.
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 173/173 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.15.0
Alterado
- Os pontos de entrada do escritor que produzem funcionalidades que exigem uma determinada versão mínima de PDF elevam agora automaticamente a versão PDF do documento. Ao chamar SetTransparency num documento marcado como PDF 1.3, o cabeçalho passa agora para PDF 1.4 em vez de a gravação falhar com LastErrorCode 602.
- O mesmo auto-bump foi ligado também a SetPageUserUnit (>=1.6), Encrypt com Strength 1/2/3/4 (>=1.4/1.6/1.7/1.7 respetivamente) e às variantes de duas páginas de SetPageLayout (>=1.5).
- Mudança de comportamento face a 3.14.x: as aplicações que antes dependiam da barreira v3.12.6 "save target rejects writer-emitted features" passam agora com sucesso na versão elevada. Os PDFs carregados que já contêm funcionalidades de versão superior continuam a passar pela barreira de gravação existente, pelo que carregar um PDF etiquetado e selecionar PDF 1.3 continua a falhar com LastErrorCode 602.
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 170/170 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.14.3
Alterado
- A verificação de conformidade da versão PDF ao guardar reconhece agora também os restantes tipos de dicionário 3D de PDF 1.6 (/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode) e os subtipos de anotação Redact, RichMedia e Projection de PDF 1.7, além dos dicionários companheiros /Type /Requirement e /ReqHandler.
- Validação: as suítes DUnitX de Delphi Win32 e Win64 passaram 168/168 cada, e o GoogleTest do C++Builder Win64x passou 57/57.
Version 3.14.2
Alterado
- A conformidade com a versão PDF no momento da gravação agora também reconhece funcionalidades PDF 1.5: formulários /XFA, /AlternatePresentations, a árvore de nomes /Renditions, os dicionários multimédia /Type /Rendition /MediaCriteria /MediaPermissions /MediaPlayers e o subtipo de anotação Screen
- Ao gravar como PDF 1.4, os documentos que incluam essas funcionalidades são agora rejeitados com LastErrorCode 602
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 166/166 cada, e o GoogleTest C++Builder Win64x passou 57/57
Version 3.14.1
Alterado
- A conformidade com a versão PDF no momento da gravação agora também reconhece funcionalidades PDF 1.4: PDF marcado /StructTreeRoot /MarkInfo e os dicionários StructElem, as entradas /Lang do documento e /Tabs da página, /OutputIntents e /OutputIntent, a assinatura de direitos de utilização /UR3 e os subtipos de anotação PDF 1.4 Polygon, PolyLine, Caret, Ink, Popup e Watermark
- Ao gravar como PDF 1.3, os documentos que incluam essas funcionalidades são agora rejeitados com LastErrorCode 602
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 165/165 cada, e o GoogleTest C++Builder Win64x passou 57/57
Version 3.14.0
Alterado
- A conformidade com a versão PDF no momento da gravação agora também reconhece funcionalidades PDF 1.3 como smooth shading, objetos de função, espaços de cor ICCBased e DeviceN, entradas de página /TrimBox /BleedBox /ArtBox, CMaps /ToUnicode, anexos de ficheiros e anotações /Sound e /Movie, dicionários /Type /Filespec e /Type /EmbeddedFile, as chaves /Group /EF /Alternates /Mask e ações JavaScript
- Os chamadores PDF 1.2 agora gravam sob o contrato PDF 1.3: o cabeçalho literal %PDF-1.2 é preservado, mas a verificação aceita funcionalidades PDF 1.3. As funcionalidades PDF 1.4 e posteriores continuam a ser rejeitadas com LastErrorCode 602
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 162/162 cada, e o GoogleTest C++Builder Win64x passou 57/57
Version 3.13.0
Alterado
- Foi refatorado para um módulo dedicado o gate de conformidade com a versão PDF que rejeita funcionalidades de versões posteriores no momento da gravação, para que o conjunto de regras possa crescer sem mexer no núcleo do documento
- Nenhuma alteração de comportamento visível para o utilizador face à v3.12.7: as mesmas funcionalidades fora da versão continuam a ser rejeitadas com LastErrorCode 602
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 155/155 cada, e o GoogleTest C++Builder Win64x passou 57/57
Version 3.12.7
Adicionado
- Foi ampliada a cobertura de testes automatizados para o fluxo de trabalho de renderização de acesso direto PdfToImage, tanto nos conjuntos Delphi DUnitX como nos conjuntos C++Builder GoogleTest
Alterado
- O runner de testes GUI Delphi VCL agora regista as fixtures Syntax e XRef, correspondendo à cobertura do runner de consola
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 147/147 cada, e o GoogleTest C++Builder Win64x passou 57/57
Version 3.12.6
Alterado
- Ao gravar como PDF 1.3, 1.4, 1.5, 1.6 ou 1.7, a versão selecionada passa agora a ser o contrato de saída da gravação completa
- As gravações completas removem substituições /Version do catálogo, removem entradas de extensão do catálogo e de metadados não suportadas para destinos inferiores, e suprimem fluxos de metadados XMP PDF 1.4 ao gravar como PDF 1.3
- SaveToFile, SaveToString e SaveToStream falham agora com LastErrorCode 602 quando a versão de destino PDF selecionada é inferior às funcionalidades ainda presentes no documento, como transparência, conteúdo opcional, JPX, UserUnit, 3D ou funcionalidades de crypt-filter AES
Version 3.12.5
Adicionado
- Adicionada cobertura de regressão para escapes desconhecidos de strings literais e sequências de escape mistas octais e não octais
Alterado
- Melhorado o parsing de strings literais PDF 1.7, de modo que sequências de escape desconhecidas ignorem a barra inversa conforme exigido pela norma
- Os escapes octais em strings literais agora consomem apenas dígitos octais e preservam um dígito não octal seguinte como dados normais da string
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 141/141 cada
Version 3.12.4
Adicionado
- Adicionada cobertura de regressão para delimitadores de nome com chaveta direita e entradas esparsas de xref stream de objetos comprimidos
Alterado
- Melhorado o parsing lexical PDF 1.7 para que os objetos de nome agora parem corretamente no delimitador de chaveta direita
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 139/139 cada
Corrigido
- Corrigido o carregamento SmartAccess de entradas de objetos comprimidos em xref stream cujo número de object stream é maior do que o comprimento em bytes do PDF
Version 3.12.3
Adicionado
- Os novos PDFs encriptados com AES agora escrevem os valores Length do crypt-filter como comprimentos em bits, em conformidade com o contrato do dicionário de crypt filter PDF 1.7
Alterado
- A compatibilidade com documentos encriptados PDF 1.7 foi melhorada para ficheiros de standard security handler que usam StrF, StmF, EFF, Identity, None ou crypt filters nomeados ao estilo StdCF
- Os fluxos de metadados agora respeitam EncryptMetadata=false durante os fluxos de trabalho de desencriptação, encriptação e cópia/gravação em vez de serem processados como fluxos normais
- Os fluxos de ficheiro incorporado agora transportam /Type /EmbeddedFile e usam o caminho de decisão de crypt-filter para ficheiros incorporados quando documentos encriptados são carregados ou gravados
- Os fluxos de ficheiro incorporado externo agora promovem FDecodeParms para DecodeParms quando FFilter é promovido para Filter, preservando os parâmetros de descodificação do fluxo
- Os valores Prev/XRefStm dos xref stream e os grandes deslocamentos numéricos mantêm agora precisão de 64 bits ao longo dos caminhos do parser e do SmartAccess
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 137/137 cada
Version 3.12.2
Alterado
- Melhorada a compatibilidade de descodificação de stream PDF 1.7. A descodificação genérica de streams agora respeita /DP como alias de DecodeParms, resolve entradas indiretas de arrays de parâmetros de descodificação e aceita as abreviaturas de filtro padrão /AHx e /LZW
- A saída PDF para ficheiros grandes agora escreve offsets xref, startxref, linearization e ByteRange de assinatura digital através de caminhos de formatação de 64 bits em vez de estreitar esses valores por meio de auxiliares inteiros de 32 bits
- Os documentos carregados agora tratam uma entrada /Version do catálogo como a versão PDF efetiva quando é mais recente do que a versão do cabeçalho do ficheiro
- Validação: os conjuntos DUnitX Delphi Win32 e Win64 passaram 134/134 cada
Corrigido
- Os trailers de xref-stream reescritos já não retêm chaves DecodeParms apenas de stream quando o PDFlibPas os grava como dicionários de trailer clássicos
Version 3.12.1
Alterado
- Os PDFs gerados agora abrem com a primeira página dimensionada para a altura disponível da janela do visualizador, para que a primeira página inteira fique visível de cima para baixo com o maior zoom que caiba na janela. Configure um OpenAction personalizado (SetOpenActionDestination, SetOpenActionMenu, SetOpenActionJavaScript) no documento para substituir este comportamento predefinido
Version 3.12.0
Adicionado
- Foram adicionados stubs CRT malloc/calloc/realloc/free alinhados a 32 bytes para as bibliotecas C estáticas e corrigido TPDFJPEGImage.Compress para libertar buffers jpeg_mem_dest através do mesmo caminho C free que os alocou
- As notas públicas de validação foram ampliadas para destacar a cobertura automatizada rigorosa por trás desta versão: compilações da biblioteca, round trips de compressão, saída HelloWorld /FlateDecode, renderização JPEG, fluxos de trabalho de imagens, fontes, formulários, segurança, assinatura, impressão e fluxos de trabalho derivados dos demos C++Builder
Alterado
- Os backends estáticos Windows agora incluem objetos NASM SIMD libjpeg-turbo para Win32 e Win64, além de objetos x86 SIMD dispatch zlib-ng para o conjunto zlib-ng Win64x
- Foram retrabalhados os scripts de reconstrução zlib-ng para que as compilações Win64x bcc64x e de diagnóstico MSVC compilem os ficheiros de origem genéricos, SSE2, SSSE3, SSE4.1/SSE4.2, PCLMULQDQ e AVX2 com flags de funcionalidade por ficheiro, em vez de depender de um único switch global do compilador
Version 3.11.0
Adicionado
- Adicionado um pequeno objeto ponte zlib-ng para compilações Win64, para que o código Pascal mantenha pontos de entrada estáveis compatíveis com zlib enquanto Delphi e C++Builder consomem os seus próprios conjuntos de objetos compatíveis com o linker
Alterado
- A compressão e descompressão Flate no Windows foi mudada para zlib-ng em modo compatível com zlib. Win32, Delphi Win64 e C++Builder Win64x ligam agora conjuntos estáticos de objetos zlib-ng compatíveis com ABI a partir de Lib\thirdparty\Win32, Lib\thirdparty\Win64 e Lib\thirdparty\Win64x
- Foram atualizados todos os projetos de demo C++Builder para definir PDFLIB_CPPBUILDER, correspondendo ao runner GoogleTest e impedindo que as demos Win64x liguem os objetos zlib-ng Delphi Win64
Corrigido
- O caminho Win64 já não passa pela unidade System.ZLib do Delphi, pelo que a compressão/descompressão de streams PDF pode beneficiar do backend zlib-ng tal como a compilação de 32 bits
Version 3.10.3
Adicionado
- A suite GoogleTest C++Builder foi alargada para cobrir todos os demos em Demo\C++Builder. O layout phase-1 com 7 fixtures cresceu para 15 fixtures / 52 casos GoogleTest, todos a passar em Win64x. Demos agora 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
- Foi adicionado em Tests\C++Builder um runner GoogleTest para C++Builder que exercita Lib\PDFlibrary.pas através dos mesmos cabeçalhos HPP emitidos por {$JPHNE} usados pelos demos C++Builder. A primeira fase espelha sete cenários Delphi essenciais (HelloWorld, DrawShapes, CreateTable, PdfEncrypt, ExtractText, PdfSigning, renderização PdfToImage) como 17 casos GoogleTest, todos a passar em Win64x
- A suite Delphi DUnitX foi alargada com Tests.Print, cobrindo os demos PrintPDF e ShowPrinterBins (enumeração da impressora predefinida, configuração de impressora personalizada, opções de impressão, trabalho de impressão redirecionado para ficheiro) e um teste de mudança de renderizador em Tests.Render que exercita a seleção do motor GDI+ / PDFium / Cairo do demo MultiFunction sobre o mesmo PDF de origem
Version 3.10.1
Adicionado
- Adicionados 57 tamanhos de página nomeados a 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 nativas de C++Builder para cada demo Delphi em Demo. Os demos de criação de PDF, manipulação de páginas, tipos de letra, imagens, segurança, assinatura, renderização e impressão podem agora ser compilados e executados a partir do C++Builder sem qualquer wrapper do lado Delphi
- Adicionado um Readme.txt breve em inglês a cada pasta de demo Delphi a descrever o que o demo mostra, a API em que se foca e como o executar; uma vista geral HTML em Demo\\Delphi\\index.html liga a todos eles agrupados por tópico
Alterado
- Cada novo demo vive em Demo\\C++Builder\\<Name>\\ como um projeto de consola que consome diretamente Lib\\PDFlibrary.pas e inclui os ficheiros de entrada necessários para o executar
- Foi espelhado o mesmo Readme.txt para cada demo C++Builder com uma secção Run reescrita para o fluxo de trabalho de consola (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ópicos
Corrigido
- Corrigida uma fuga de memória no demo ImportEMF (a instância TPDFlib foi criada mas nunca libertada)
Version 3.9.14
Alterado
- Ajustados os demos de texto quebrado e de paginação HTML para que cada um se concentre na sua própria API e seja executado a partir de um único botão
- Foram renomeados dois projetos de demo (EmbeddedFonts e PdfPermission) para que os executáveis compilados correspondam aos nomes das pastas em vez de nomes de protótipo mais antigos
Corrigido
- Corrigido o demo de cópia de intervalos de páginas para que realmente copie páginas em vez de reportar sempre falha
Version 3.9.13
Adicionado
- Foi introduzida uma suite automatizada de testes DUnitX (executores de consola e GUI VCL) que cobre unidades utilitárias — buffer, AES, ZLib, Unicode e digest hashing — e fluxos de trabalho ao nível da biblioteca, incluindo criação de documentos, gravação em ficheiro e em stream, round-trips de carregamento e encriptação AES-128/AES-256
Corrigido
- Corrigido um erro de posição de stream no leitor interno de buffers: as leituras de palavras de dois bytes avançavam o cursor de leitura em quatro bytes em vez de dois. Em buffers com mais de dois bytes, as leituras subsequentes caíam no offset errado e devolviam silenciosamente dados incorretos. O efeito era mais visível ao analisar estruturas de dados binárias que intercalam leituras de bytes e palavras
Version 3.9.12
Alterado
- A renderização de imagens GDI+ passa agora por defeito a usar interpolação bicúbica suave e de elevada qualidade ao escalar imagens raster para a resolução do ecrã ou de exportação. Antes, o valor predefinido era nearest-neighbor, que produzia artefactos visíveis em escada em imagens pequenas (logótipos, miniaturas) ampliadas para pré-visualização no ecrã ou exportação em alta DPI. Os chamadores que preferirem o modo nearest-neighbor mais nítido podem restaurar o comportamento antigo através de SetGDIPlusOptions
Version 3.9.11
Corrigido
- Corrigida a renderização Cairo de imagens PDF que usam transparência por color-key (uma matriz de intervalo de cor /Mask no dicionário da imagem). Antes, quando uma página continha uma imagem com esta forma de transparência, o renderizador Cairo omitía a imagem por completo em vez de a compor 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 uma saída visualmente consistente com o renderizador GDI+
Version 3.9.10
Corrigido
- Corrigida uma regressão de renderização Cairo em que todo o conteúdo da página após uma sequência de imagem recortada ficava incorretamente confinado ao retângulo de recorte da imagem. Páginas PDF que gravam o estado gráfico, aplicam um caminho de recorte, desenham uma imagem e depois restauram o estado — uma técnica de layout comum para imagens emolduradas ou com contorno — passavam a renderizar todo o texto, formas e gráficos subsequentes apenas dentro da região recortada. A gravação e a restauração de estado do Cairo mapeiam agora corretamente para os operadores q/Q do PDF, pelo que a região de recorte é descartada depois de a imagem ser desenhada
Version 3.9.9
Adicionado
- Adicionado um motor de renderização PDF baseado em Cairo como terceira opção de renderização ao lado de GDI+ e PDFium. Chame SelectRenderer(2) antes de renderizar para o ativar; o motor requer cairo.dll da pasta DLL\\Cairo fornecida. A renderização Cairo suporta os mesmos modos de saída que GDI+: exportação de ficheiro bitmap e de stream (BMP, JPEG, PNG, GIF, TIFF, G4 TIFF), renderização em device context e saída direta para impressora
Alterado
- O demo MultiFunction View/Print expõe agora um seletor de renderizador em três vias para que os utilizadores possam comparar a saída de GDI+, PDFium e Cairo lado a lado no mesmo documento sem qualquer alteração de código
Version 3.9.8
Corrigido
- Foram suprimidos dois diagnósticos espúrios do compilador na camada Win32 de runtime C que surgiram no RAD Studio 13.1 e posteriores. Um aviso de descontinuação (W1000) era emitido porque uma proteção de capacidade da versão do compilador não foi propagada para compiladores mais recentes do que Delphi 2009, levando-os a compilar contra uma API descontinuada do gestor de memória. Uma dica de variável não utilizada (H2164) era emitida para uma variável interna de compatibilidade necessária apenas para compilações Delphi 7; agora está limitada ao bloco condicional dessa versão. Ambos os problemas eram apenas de diagnóstico sem impacto em tempo de execução
Version 3.9.7
Adicionado
- Adicionada renderização opcional de páginas baseada em PDFium no Windows, incluindo renderização de stream BMP, renderização em device context, renderização em memória e saída para impressora
Alterado
- Foi atualizado o demo Delphi MultiFunction View/Print com um seletor de renderizador para que os utilizadores possam alternar entre o renderizador GDI+ existente e o PDFium
Version 3.9.6
Adicionado
- Foram adicionados scripts Inno Setup separados para o pacote completo PDFlibPas e para o pacote de avaliação, com exclusões focadas no release para metadados de controlo de origem, saídas de compilação, caches da IDE, ficheiros locais do agente e árvores de origem de terceiros incluídas que não fazem parte do pacote distribuído
Alterado
- O instalador de avaliação compila e empacota agora bibliotecas binárias de avaliação para RAD Studio 11.3, 12.3 e 13.1, bem como os demos Delphi de avaliação, antes de ser gerado o executável de instalação
Version 3.9.5
Corrigido
- Corrigidas as compilações de biblioteca Win32 no RAD Studio 9.0 / Delphi XE2. O script de compilação passava um argumento de diretório de saída DCU que só existe a partir do Delphi 2010; o compilador do XE2 interpretava o argumento de forma diferente, produzindo um caminho de saída corrompido e um erro fatal antes de qualquer ficheiro de origem ser processado. O script seleciona agora automaticamente o argumento adequado com base na versão do compilador de destino
- Corrigida uma proteção relacionada com a versão do compilador no código-fonte da biblioteca que chamava uma função de runtime qualificada por nome introduzida no XE4 sob uma condição XE2+. As compilações destinadas ao XE2 e XE3 resolvem agora a importação de compatibilidade correta
Version 3.9.4
Corrigido
- Corrigida a configuração da impressora para impressoras de rede e partilhadas em servidor, aplicando as definições de bandeja de papel, suportes, duplex, qualidade e outras definiçõ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 incluído para as fontes AES de 2018 de Brian Gladman tanto em Win32 como em Win64. Os scripts de compilação reproduzíveis permitem agora que os objetos AES estáticos sejam reconstruídos a partir da fonte em qualquer momento. No processo foi descoberto e corrigido um defeito de ABI nas ligações Pascal: as funções de encriptação e desencriptação AES-CBC não tinham a respetiva declaração da convenção de chamada C, pelo que as compilações Win32 passavam silenciosamente argumentos na ordem errada de registos, podendo produzir saída encriptada incorreta. As 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 de zlib, JPEG e stubs CRT possam ser lançados a partir da raiz do repositório bem como a partir do diretório thirdparty; anteriormente exigiam que o diretório de trabalho estivesse definido para 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 como em Win64. Ambas as plataformas usam agora ligação estática de objetos, pelo que a codificação e descodificação JPEG 2000 funcionam sem uma DLL de runtime adicional. O codec moderno traz o tratamento atual dos cabeçalhos JP2/J2K, uma API de stream orientada por callback e correções acumuladas de bugs e segurança do projeto upstream. A API pública TJpeg2000Bitmap não sofreu alterações
Version 3.9.1
Corrigido
- Corrigida a renderização de páginas JPEG e a exportação de imagens após a atualização do libjpeg-turbo, restaurando a conversão JPG PdfToImage e a saída de TPDFJPEGImage.SaveToStream em Win32 e Win64
- Corrigidas as ligações ABI do libjpeg-turbo em Win32 para que callbacks, alinhamento de estruturas, campos booleanos e destinos JPEG em memória correspondam ao libjpeg-turbo 3.1.90
- Corrigida a descompressão de streams FlateDecode em Win32 com o backend zlib 1.3.2 incluído, restaurando o carregamento de PDF xref stream para ficheiros como o documento de exemplo PdfToImage
Version 3.9.0
Alterado
- Atualizado o backend JPEG 2000 incluído do OpenJPEG 1.5 legado para OpenJPEG 2.5.4. O carregamento e a gravação de JPEG 2000 usam agora o codec moderno, a API de stream orientada por callbacks e o tratamento atual dos cabeçalhos JP2/J2K, preservando a API pública TJpeg2000Bitmap
Corrigido
- A saída JPEG 2000 seleciona agora automaticamente uma contagem válida de resoluções OpenJPEG para imagens pequenas, e o backend estático Win32 já não depende de exportações auxiliares MSVCRT em falta
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 ao nível do código removem as duplicações redundantes do lado Pascal (jpeg_std_error e os stubs de alocação jmemnobs passam agora a resolver apenas a partir da camada obj); os três símbolos obj bcc32 / vc64 restantes (jpeg_natural_order, jpeg_aritab, jpeg_nbits_table) que têm de continuar a ser resolvidos por link contra dados do lado Pascal têm agora os respetivos nomes de símbolo COFF removidos através de uma passagem de pós-processamento ObjConv durante thirdparty\\build-jpeg-vc64.bat. Sem alteração da API pública; saída limpa do linker para compilações Delphi Win32 e Win64
Version 3.8.0
Segurança
- O codec JPEG Win64 foi atualizado do libjpeg de estilo IJG para libjpeg-turbo 3.1.90, concluindo a migração JPEG iniciada em v3.7.0 (Win32). Os caminhos Win32 e Win64 partilham agora o mesmo codec JPEG moderno, com os mesmos loops internos otimizados para SIMD e mais de 30 correções CVE / fuzz acumuladas a montante. A API pública PDFlibPas permanece inalterada
Version 3.7.0
Segurança
- O codec JPEG Win32 foi atualizado do IJG libjpeg-6b para libjpeg-turbo 3.1.90. Codificação/descodificação JPEG significativamente mais rápida através de loops internos otimizados por SIMD, mais de 30 correções CVE / fuzz acumuladas a montante no libjpeg-turbo. A API pública do PDFlibPas (classe TPDFJPEGImage, funções DumpJPEG) permanece inalterada; os caminhos de código PDF/JPEG existentes executam mais depressa sem necessidade de alterações ao código-fonte
Version 3.6.0
Alterado
- O caminho zlib Win64 permanece inalterado nesta versão - continua a usar a unidade System.ZLib fornecida com o Delphi
- Ativado o shim CRT de ligação em 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 ficheiros obj zlib 1.3.2 referenciam
Segurança
- Zlib Win32 atualizada de 1.2.x para 1.3.2. Inclui as mais de 25 correções CVE / fuzz padrão acumuladas a montante desde 1.2.8, bem como os novos pontos de entrada inflateBack9 / inflateTree9 usados por streams 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 fontes OpenJPEG é obtida independentemente pelo utilizador (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 ligação em tempo de link para Win64 usado pelo backend Win64. Faz a ponte entre os ficheiros obj C compilados com MSVC e os linkers Win64 do Delphi (dcc64 / Win64x ld.lld / BCB ilink64), que não carregam msvcrt.dll automaticamente
Alterado
- Foram disponibilizadas novas infraestruturas de compilação para as bibliotecas C de imagem / compressão incluídas: zlib 1.3.2, libjpeg-turbo 3.1.90, libtiff 4.7.1. Os scripts de compilação para Embarcadero bcc32 (Win32) e MSVC cl.exe (Win64) ficam em Lib/thirdparty/ ao lado das árvores de fontes, para que qualquer pessoa com RAD Studio + VS2022 possa reconstruir os ficheiros obj estáticos a partir de fonte limpa
Version 3.4.0
Segurança
- Reforçada a geração da chave de encriptação, do vetor de inicialização AES e do bloco de permissões Perms contra fontes previsíveis de números aleatórios. Os PDFs encriptados produzidos em sistemas iniciados por volta da mesma hora já não são trivialmente correlacionáveis; os documentos AES-256 mantêm agora toda a sua força de chave
- Reforçado o parsing do dicionário de imagens contra PDFs malformados ou maliciosos que declaram contagens irregulares de Width, Height, BitsPerComponent ou componentes DeviceN. Os valores fora de intervalo são limitados antes de qualquer aritmética de buffer de pixels, prevenindo falhas ao abrir esses ficheiros
- Reforçada a travessia de cross-reference e da árvore de páginas contra documentos cujas cadeias /Prev xref ou ligações /Parent de páginas formam um ciclo ou são excessivamente profundas. O leitor rejeita agora estruturas malformadas de forma limpa em vez de recursar até esgotar a stack
Version 3.3.1
Adicionado
- Adicionados comentários inline de justificação em torno das correções de renderização em PDFlibRenderer.pas que já estavam presentes na base 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 têm de consumir os respetivos operandos. Sem alteração de comportamento em tempo de execução
Corrigido
- Simplificados os scripts de compilação Windows por componente. As pastas DLL/, OCX/ e Dylib/ já não têm variantes separadas build12-* / build13-*; cada plataforma tem agora 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 aplica agora a escala da transformação atual do canvas às larguras de linha PDF antes de chamar Picasso, evitando traços demasiado largos ou demasiado estreitos em caminhos cujas coordenadas já foram transformadas. Isto corrige contornos de glifos Type 3 que podiam renderizar como blocos grossos e irregulares
- Corrigido o tratamento d0/d1 do CharProc de fonte Type 3 no parser de content stream. d0 consome agora os seus dois operandos de largura e d1 consome os seus seis operandos de largura / bounding box antes de serem executados comandos de desenho posteriores, impedindo que operandos obsoletos corrompam a geometria do glifo ou do caminho