HotPDF Notas de versão

Histórico de versões dos recursos, correções, atualizações de compatibilidade e alterações de documentação visíveis ao usuário do HotPDF

Observação: apenas os 800 registros de alteração mais recentes são mantidos

Last release

  • Última versão: 2.974.0; Data de lançamento: 2026-10-11

Version 2.974.0

Added

  • Remove anotações de páginas por página exata e nome Unicode, incluindo cascatas de popups e replies, através de APIs nativas delimitadas, transações Windows, jobs JSON e callbacks versionados com permissões autenticadas e rollback de publicação

Version 2.973.0

Added

  • Faz intercâmbio de anotações FDF binárias com recursos de appearance preservados, grafos de objetos compartilhados e destinos de actions locais através de APIs nativas, interchange Windows e callbacks versionados

Version 2.972.0

Added

  • Renderiza default appearances de anotações com estado de texto preservado, fitting automático, spacing de rich text e clipping de texto, incluindo modos de rendering de 4 a 7

Version 2.971.1

Fixed

  • Previne falhas de range-check no cache público de shaped runs em builds FPC 3.3.1 Windows preservando multiplicação modular de hash de 32 bits explícita, isolamento exato de cache keys e eviction LRU

Version 2.971.0

Added

  • Faz match de :scope raiz e admite pseudo classes estáticas hover, active e focus com estado de interação inativo, preservando negação, seletores lógicos e relativos, support queries e aparências salvas de FDF/XFDF

Version 2.970.0

Added

  • Avalia grupos @supports nativos de rich text e imports supports() com queries de declarações e seletores suportadas, condições aninhadas delimitadas, probes cientes de namespaces, recuperação de cancelamento e aparências salvas computadas de FDF/XFDF

Version 2.969.0

Added

  • Avalia expressões finitas calc, min, max e clamp, comprimentos relativos à raiz e de viewport explícitos, e métricas de linha e spacing da fonte final na decodificação nativa de rich text, aparências de campos salvas e imports rich FDF/XFDF

Fixed

  • Admite dimensões mínimas exatas de media, resolução e tamanhos iniciais de fonte de forma consistente entre targets de compiladores enquanto continua recusando valores abaixo do limite suportado

Version 2.968.0

Added

  • Avalia preferências explícitas de rich-text de esquema de cores, movimento reduzido, transparência e dados, contraste, cores forçadas e invertidas e disponibilidade de scripting, preservando preferências omitidas desconhecidas e aparências salvas computadas

Version 2.967.0

Added

  • Aplica folhas de estilo rich-text vinculadas e importadas fornecidas pelo chamador, com conjuntos compartilhados preferred ou alternate de títulos, resolução delimitada de URIs e da base do documento, e publicação transacional nativa, Windows e Linux FDF/XFDF

Version 2.966.0

Added

  • Avalia media queries nativas de rich text com perfis print/screen explícitos, condições aninhadas e faixas de features delimitadas, retendo estilos computados em appearances salvas e em imports transacionais de FDF/XFDF

Version 2.965.0

Added

  • Cria, clona e edita árvores de formulário XFA nativas de forma transacional, preservando identidades de nodes sobreviventes, rollback de eventos, ocorrências suportadas de empty-merge e pacotes de formulário salvos, de forma independente dos templates originais

Version 2.964.0

Added

  • Gera appearances nativas plain, rich, shaped e family a partir de fontes OpenType CFF2 completas nas coordenadas de variação padrão, preservando identidade de glyphs, Unicode, larguras e permissões de embedding em saída CFF 1 estática delimitada com chaves CID

Version 2.963.0

Added

  • Aplica declarações de namespace CSS com escopo e seletores qualificados a campos nativos de rich text e a transações de formulários no Windows/Linux, preservando appearances computadas, lookup delimitado de namespaces, publicação no-op exata e compatibilidade com checked builds

Version 2.962.0

Added

  • Quebra o texto de anotações de fonte raw gerada em fronteiras de espaço e de hífen entre runs de estilo, preservando caracteres codificados completos, quebras forçadas, dimensionamento automático e cancelamento limitado

Version 2.961.0

Added

  • Renderiza appearances de texto de anotações ausentes com os programas de fonte Type1C, CIDFontType0C e Type1 puros originais, preservando mapeamentos Unicode, dimensionamento automático, espaçamento, altura de linha e recursos imutáveis limitados

Version 2.960.0

Added

  • Transporta appearances Form de Stamp XFDF padrão, rollover e down com recursos de fontes e imagens embutidos, grafos acíclicos limitados, transações nativas autenticadas e os callbacks Windows/Linux existentes

Version 2.959.0

Added

  • Aplica listas not complexas, listas is e where tolerantes, relações has ancoradas e posições nth-child filtradas às style sheets internas nativas de rich text, preservando especificidade de selectors, valores computados, fontes e appearances transacionais de FDF/XFDF

Version 2.958.0

Added

  • Acessa coleções de filhos do Data DOM nativas vivas por índices numéricos somente leitura em JavaScript e FormCalc, preservando a ordem atual de filhos, referências retidas de script objects, clones independentes, valores salvos e appearances PDF

Fixed

  • Rejeita atribuição numérica, exclusão e definição de propriedade tanto em coleções atuais quanto dentro de script objects lexicais retidos, com rollback e retry de eventos limitados

Version 2.957.0

Added

  • Aplica attribute selectors, combinadores de irmãos, pseudo classes estruturais e posicionais, correspondência de idioma herdada e negação composta às style sheets internas nativas de rich text, preservando valores computados reais, fontes, appearances salvas e importações transacionais de FDF/XFDF

Version 2.956.1

Fixed

  • Resolve paths de child-list de nodes FormCalc pelo compilador de eventos real, preservando coleções vivas de formulário/propriedade, acesso a itens do Data DOM, replay limitado, valores nativos salvos e appearances PDF

Version 2.956.0

Added

  • Gera appearances nativas de campos plain, rich e shaped a partir de fontes OpenType CFF completas, preservando identidades de glyphs indexadas por nome, charsets CID-keyed reais, mapeamentos Unicode, permissões de embedding e recursos de fontes compartilhados; renderiza appearances FreeText ausentes usando defaults OpenType embutidos

Fixed

  • Limita o parsing de CFF e as métricas de glyphs, retém cancelamento e readers imutáveis por estilo, e preserva o comportamento TrueType em seis targets nativos de compilador

Version 2.955.1

Security

  • Rejeita shared secrets X25519 e X448 totalmente zerados depois da serialização canônica de bytes, incluindo entradas de baixa ordem cujos limbs de campo fracos são não zero, e mantém o resultado do agreement como false com um secret vazio e um diagnóstico novo

Fixed

  • Preserva constantes portáveis de SHA3/SHAKE e a aritmética intencional de key agreement em módulo 2^64 quando as checagens de overflow e de faixa de inteiros estão habilitadas, incluindo trocas de largura completa P-256, P-384 e P-521 no Free Pascal de 32 bits

Version 2.955.0

Added

  • Adiciona coleções vivas de filhos de formulário/propriedade em JavaScript com length, leituras indexadas, item, namedItem, iteração e clones independentes; retém a identidade do owner entre eventos, edições de instâncias repetidas e criação implícita de propriedades, com valores nativos salvos e appearances PDF

Fixed

  • Mantém listas vivas retidas vinculadas ao owner de evento atual delas, rejeita owners removidos sem redirecionar a outra instância, e preserva valores nativos, estado retido e rollback de journal sob falhas de alocação, de operação e de prazo de coleções

Version 2.954.0

Added

  • Aplica style sheets XHTML internas a campos nativos de rich text e importações FDF/XFDF com selectors de type, class e ID, combinadores descendentes e de filhos, selectors agrupados, escapes de identificadores Unicode, especificidade, importance e ordem de origem

Fixed

  • Preserva estilos computados em valores salvos reais e appearances de widgets, com scanning e matching limitados, cancelamento, bytes exatos de no-op commitado e rollback transacional de callbacks

Version 2.953.0

Added

  • Adiciona coleções independentes de query nodes XFA com operações all, classAll, classIndex, clone e membership, referências retidas estáveis, replay transacional limitado e consumo nativo de PDF salvo

Fixed

  • Mantém instance managers de queries retidas vinculados ao grafo de evento atual e avalia paths SOM comuns e predicates dentro dos limites originais de default stack e de operações

Version 2.952.0

Added

  • Preserva destinos de anotações GoToR remotos por meio do exchange nativo de XFDF por callbacks comuns do Windows e versionados, incluindo coordenadas exatas, file specifications Unicode e comportamento opcional de janela

Fixed

  • Autentica importações comuns de anotações de documentos carregados contra permissões de encryption originais, assinaturas e field locks, retendo edições permitidas do chamador e lifetime independente da origem; lê inteiros de ByteRange de assinaturas sem rounding de Single e desanexa o armazenamento compartilhado de strings RC4 antes da encryption

Version 2.951.0

Added

  • Renderiza bordas cloudy limitadas para anotações Square, Circle, Polygon e FreeText sem appearances normais, preservando width, dash, opacity e os grafos de origem; compartilha bytes de fontes geradas imutáveis entre visões FreeText sem cobranças repetidas de bytes decodificados, retendo os orçamentos de parsing e o cancelamento

Version 2.950.0

Added

  • Cria, clona, renomeia, insere e remove nodes nativos do Data DOM XFA com posse limitada, namespaces herdados, referências importadas estáveis, refresh de binding e rollback completo de eventos; preserva atributos UTF-8 e referências FormCalc retidas por meio de XML salvo e consumidores nativos de PDF

Version 2.949.0

Added

  • Preserva a distinção entre nenhuma opção de choice selecionada e um export value vazio selecionado por meio do exchange XFDF nativo, do Windows e do Linux, com publicação exata de no-op, validação limitada e carregamento de documentos criptografados conferido

Version 2.948.0

Fixed

  • Renderiza masks de glyphs preenchidos com cobertura fracionária de clip capturada, preservando paths PDF, patterns, operadores alpha e blend, e confere a capacidade de memória de trabalho do raster antes da alocação

Version 2.947.1

Fixed

  • Preserva declarações explícitas e vazias de namespace XML default durante o parsing e a serialização XFA, impedindo que subárvores de dados não qualificados herdem um namespace de ancestral depois de salvar e recarregar

Version 2.947.0

Added

  • Renderiza bordas retangulares beveled e inset de anotações e captions de linhas Unicode ou rich medidas, preservando opacity, offsets de endpoints, appearances existentes, recursos de fontes limitados e clipping de anotações

Version 2.946.3

Fixed

  • Aplica xfa.host.resetData por meio de eventos nativos sem confundi-lo com uma importação de XML de dados, preservando defaults de template, valores vinculados, escopos repetidos, edições pendentes e rollback transacional

Version 2.946.2

Fixed

  • Corrige a aritmética de words de SHA-1, SHA-256, SHA-384 e SHA-512 com as checagens de faixa e de overflow do compilador habilitadas, preservando digests válidos e autenticação de passwords AES-256 sem mudar as interfaces públicas

Version 2.946.1

Fixed

  • Preserva atributos XFA presente-vazio e nomes, valores, namespaces e queries indexadas UTF-8 por meio da serialização XML nativa, defaults persistentes de propriedades, eventos de scripts repetidos e rollback transacional

Version 2.946.0

Added

  • Renderiza texto de anotações rich temporário com permissões de fontes explícitas read-only de Preview/Print e bytes completos de fonte inalterados, preservando políticas de embedding editáveis e appearances Screen existentes sem placeholders de mídia implícitos

Version 2.945.0

Added

  • Preserva páginas de anotações locais e named destinations por meio do exchange XFDF nativo e legado, com tokens decimais exatos e limitados, Adobe XML qualificado, validação de atributos duplicados e publicação transacional por callbacks de Windows/Linux

Version 2.944.0

Added

  • Gerencia itens de display e de export de choices XFA vivos por meio de JavaScript e FormCalc, preservando aliases sobreviventes, seleções exatas duplicadas ou vazias, listas nativas por instância e appearances salvas nativas ou legadas de PDF sob limites de mutação

Version 2.943.1

Fixed

  • Preserva os bytes exatos do PDF carregado quando transações nativas mistas de rich text scalar e tipado, ou lotes vazios, não fazem mudanças, retendo edições pendentes do grafo, políticas autenticadas de assinaturas e de encryption, limites de recursos e publicação atômica

Version 2.943.0

Added

  • Troca XFDF mapeado de anotações por meio de file jobs do Windows e callbacks V1 originais com transações de append autenticadas, dados binários e Unicode limitados, bytes exatos de no-op e publicação atômica

Version 2.942.0

Added

  • Renderiza anotações suportadas sem appearances normais por meio de geometria temporária limitada, line endings, ícones e FreeText Unicode, retendo recursos da origem, rich text, flags de view/print e cancelamento

Version 2.941.1

Fixed

  • Valida a unicidade de seleções de choices XFA nativas com ordenação limitada e cancelável, preservando export values exatos sensíveis a maiúsculas, a ordem original de seleção e o comportamento transacional de falha

Version 2.941.0

Added

  • Aplica CSS nativo com cascade independente e spacing de letras e de palavras tipado original a runs shaped, linhas físicas, fitting e appearances salvas, com serialização computada em pontos, rounding decimal exato e publicação JSON transacional de Windows/Linux

Version 2.940.0

Added

  • Troca dezoito tipos mapeados de anotações por meio de XFDF nativo limitado e operações JSON V1 de Linux, preservando rich contents Unicode, callouts, cores transparentes, anexos binários, links de popup e de forward-reply, permissões autenticadas e publicação transacional de append

Version 2.939.0

Added

  • Cria campos combo e list XFA legados com export values exatos de instâncias repetidas, rótulos de display, índices selecionados, posições de scroll e appearances Unicode estilizadas, preservando flags de alto nível de campos e rollback por campo com uma factory de choices detached com fonte fornecida e modo somente metadados

Version 2.938.0

Added

  • Renderiza os quatro color intents padrão através de graphics states, forms, imagens, shadings, patterns e transparency groups com overrides de imagem, fallback relativo para nomes desconhecidos e caching limitado e cancelável de transforms ICC

Version 2.937.0

Added

  • Cria radio groups XFA legados independentes a partir de escopos reais de instâncias repetidas, preservando export values exatos, estados selecionados e captions Unicode estilizadas com rollback de adoção do grupo inteiro e uma API nativa de member appearance detached com fonte fornecida

Version 2.936.1

Added

  • Analisa dictionaries e trailers PDF válidos com a checagem de overflow aritmético habilitada, retendo explicitamente os 32 bits baixos da multiplicação de hash FNV

Version 2.936.0

Added

  • Vincula line heights tipados de rich text JSON explícitos às appearances salvas de Windows e Linux, preservando runs autorais, métricas de parent fornecidas, planejamento agregado limitado e atualizações transacionais de campos mistos

Version 2.935.1

Added

  • Conta caracteres Unicode suplementares uma única vez em appearances de password XFA portáveis, retém os valores originais e aplica orçamentos agregados de glyphs antes de alocar masks com cancelamento de granularidade de scalar

Version 2.935.0

Added

  • Preserva line height de rich text, comprimentos CSS computados, fatores herdados e métricas de fonte do parent entre o layout nativo, appearances salvas, file jobs do Windows e callbacks, e importações JSON de FDF/XFDF de Linux com planejamento de metric fonts limitado

Version 2.934.0

Added

  • Cria appearances reais de texto, campos numéricos, data e password XFA legados Unicode com família e estilo de fonte efetivos por instância, recursos de fontes embutidos editáveis, masking de password scalar e adoção transacional de recursos

Version 2.933.0

Added

  • Avalia funções de cor cúbicas amostradas multidimensionais com a convenção scalar de quatro knots existente, fallback linear na dimensão curta, trabalho de tensor limitado, cancelamento e interpolação scalar inalterada

Version 2.932.0

Added

  • Decodifica componentes JPEG 2000 assinados e não assinados com até 26 bits, com precisão mista, subsampling e opacity, normaliza samples limitados e ignora declarações de BitsPerComponent de imagens JPX antes do render

Version 2.931.0

Added

  • Preserva export states on, off e neutral de checkboxes XFA legados, captions Unicode estilizadas e bundles nativos de appearances, codifica PDF names especiais de forma consistente e restaura recursos diretos de página depois da adoção cancelada de widgets

Version 2.930.0

Added

  • Avalia aplicações automáticas de usage de optional-content com contexto explícito de zoom, idioma e usuário, seleções manuais nativas persistentes e estado limitado de operações JSON de Linux; invalida contextos de rendering emprestados depois de mudanças no documento

Version 2.929.0

Added

  • Constrói texto scalar, células comb, rótulos de choices e marcas de botões a partir de famílias de fontes regulares ordenadas e fornecidas, atravessando setters nativos, jobs do Windows e callbacks versionados de Windows/Linux; preserva metadados scalar comuns e distingue uma seleção de choice vazia de um export vazio selecionado

Version 2.928.0

Added

  • Renderiza dash arrays e phases de ExtGState com scanning limitado e tipado de arrays PDF, preservando comentários, validação estrita de operands, geometria de stroke herdada, cancelamento e arrays de texto comuns

Version 2.927.0

Added

  • Pinta captions scalar e rich de push buttons do ApplyXFAAsAcroForm original do Windows com programas reais de família/estilo instalados, overrides persistentes por instância e bundles nativos de appearances normal/down/rollover, registrando recursos de fontes AcroForm genuínos

Version 2.926.0

Added

  • Expande o shorthand de fontes CSS inline limitado em candidates de size, weight, italic e família fornecida com cascade independente, preservando dimensionamento relativo herdado, resets de estilo omitido, prioridades de componentes important e appearances de fontes salvas reais

Version 2.925.0

Added

  • Seleciona famílias de fontes ordenadas fornecidas pelo chamador para graphemes completos de rich text estilizado por meio de file jobs do Windows e callbacks V1, preservando candidates CSS e tipados, transações genuínas de valor vazio e orçamentos agregados de fontes

Version 2.924.0

Added

  • Renderiza grupos e expressões de membership de optional-content default do documento através de conteúdo de página marcado, form XObjects e anotações, preserva o estado oculto de gráficos e de texto, e expõe usage explícito de view ou print pela interface JSON V1 nativa de Linux

Version 2.923.0

Added

  • Preserva listas ordenadas de candidates de fontes de rich text por meio de appearances nativas e JSON V1 de Linux, e vincula runs mistos scalar e tipados originais a file jobs do Windows e callbacks V1 inalterados com pintura precisa, programas de estilo fornecidos e publicação em duas fases

Version 2.922.0

Added

  • Seleciona visibilidade nativa de view ou print de anotações com as regras Invisible do PDF 2.0, reconhece appearances estáticas de RichMedia e Projection e transforms implícitas de Text, e retém a substituição atômica limitada e cancelável de PNGs do Windows com diagnósticos reais de erro do sistema operacional

Version 2.921.0

Added

  • Renderiza captions scalar e XHTML de push buttons XFA nativos com programas reais de família e de estilo fornecidos, separadores inline preservados e padding autoral, appearances reais de normal/down/rollover, visibilidade de captions e overrides persistentes de instâncias repetidas

Version 2.920.1

Fixed

  • Mantém mutações PDF da C ABI nativa de Linux bem-sucedidas alinhadas com o snapshot de origem commitado delas, de forma que importações FDF ou XFDF seguintes de mesmo valor preservem os valores de formulário publicados exatos, as appearances tipadas, o texto desenhado e as páginas importadas em vez de restaurar bytes de entrada desatualizados

Version 2.920.0

Added

  • Salva campos mistos scalar e runs originais de rich text tipado em uma transação de documento atômica independente, retém valores precisos de appearances e programas de fonte fornecidos, preserva políticas autenticadas e edições atuais do grafo, e reconhece no-ops genuínos de appearances read-only

Version 2.919.0

Added

  • Resolve graphemes Unicode estilizados completos por meio de famílias de fontes candidates explicitamente fornecidas, preserva valores autorais e estilos precisos de appearances, expõe fallback JSON nativo opcional de Linux por callbacks V1 inalterados, e retém a margem agregada real de fontes enquanto carrega os programas configurados

Version 2.918.0

Added

  • Renderiza captions Boolean nativas de XFA a partir de XHTML efetivo e fontes de estilo nomeadas fornecidas, preserva overlays de instâncias repetidas e XML de runtime salvo, e mede reservas automáticas de captions com extents finais de linhas lógicas de texto

Version 2.917.0

Added

  • Seleciona programas genuínos de família e de estilo nomeados para importações FDF e XFDF do Windows por meio de file paths aninhados ou callbacks versionados de fontes existentes, e isola leitas sincronizadas de origem aleatória da publicação sequencial de transações

Version 2.916.0

Added

  • Decodifica e renderiza 182 CMaps legacy embutidos com codes limitados de um a quatro bytes, writing modes exatos de parent e filho, mapeamentos Unicode, recuperação determinística de codes malformados, herança cancelável e avisos de redistribuição empacotados

Version 2.915.0

Added

  • Mantém as opções selecionadas de listas XFA nativas visíveis por meio de janelas de seleção por métricas de fonte e índices superiores persistidos, preserva arrays completos de opções e de valores, e retém mudanças de fontes de instâncias repetidas e rollback de eventos com preparação limitada de glyphs visíveis

Version 2.914.1

Fixed

  • Sobreposição de cache hits de memória de primeiro plano com cancelamento cooperativo de prefetch depois de adquirir a reserva real de memória, preserva telemetria do cache de operações e reconfere o cancelamento após esperas de cache lock ou de reserva, retendo a ordem estrita de misses e os joins de threads

Version 2.914.0

Added

  • Cria appearances Boolean nativas de XFA com seis marcas customizadas, bordas redondas ou quadradas, cores e tamanhos de marcas, cinco posicionamentos de captions e fontes de captions embutidas compartilhadas; preserva aliases reversíveis de export Unicode e estados legais neutros distintos por meio da execução de eventos e do reload de PDF salvo

Version 2.913.2

Fixed

  • Decodifica códigos de barra de matriz rotacionados completos antes de fragmentos desconectados e rejeita mismatches exatos de finders QR antes da amostragem do grid completo, retendo agrupamento mais apertado, comportamento original de barras lineares, orçamentos atômicos de scan e o prazo inalterado de dois segundos

Version 2.913.1

Added

  • Resolve valores XFA implícitos existentes por meio de contextos de dados vivos limitados sem repetir o parsing de selectors cobrado da margem de operações de scripts, preservando os prazos originais de transações e o comportamento explícito de binding

Version 2.913.0

Added

  • Seleciona famílias de fontes rich nativas configuradas por meio de callbacks JSON V1 de Linux inalterados para fills tipados e importações FDF ou XFDF, carrega programas reais de família e de estilo exigidos com orçamentos agregados, e anuncia os dois profiles rich implementados

Version 2.912.0

Added

  • Importa e exporta FDF ou XFDF reais por meio de file jobs do Windows e callbacks V1 com entrada imutável sob posse, preparação do grafo atual não salvo, appearances rich reais de quatro fontes, políticas autenticadas de AES assinado e commit de contexto apenas depois de ambos os callbacks de saída terem sucesso

Version 2.911.0

Added

  • Cria desenhos nativos de retângulo, linha e arco XFA e imagens inline PNG ou JPEG com decodificação real de samples, masks alpha, aspecto ajustado e posicionamento rotacionado, preparação limitada e posse transacional sob cancelamento

Version 2.910.0

Added

  • Ajusta appearances de anotações NoZoom e NoRotate ao redor do anchor retangular transformado do canto superior esquerdo, preservando UserUnit, geometria de formulário ajustada, opacity e o clip real da página entre escala e rotação

Version 2.909.0

Added

  • Seleciona famílias TrueType nomeadas reais fornecidas por run rich e por declaração limitada de font-family XHTML, preserva métricas de estilo por família e caches de marcas, e importa valores rich reais de FDF ou XFDF com comparação canônica com consciência de famílias

Version 2.908.1

Fixed

  • Aplica declarações inline de rich text válidas com prioridade important independente, bases de font-size computadas envolventes e propriedades herdadas explícitas, preservando as fronteiras de comentários CSS e de declarações entre aspas/função

Version 2.908.0

Added

  • Cria combo boxes, list boxes, campos de múltipla seleção, checkboxes e radio groups com escopo estrutural XFA nativos genuínos diretamente dos dados de runtime salvos, com pares de rótulos de display/export, itens por instância, flags de acesso e estados nativos independentes de appearances

Version 2.907.1

Fixed

  • Decodifica escapes PDF hexadecimais reais e bytes UTF-8 em campos de formulário com valor de nome e herdados, preservando export states de botões com espaços, pontuação e Unicode por meio do reload nativo de documentos salvos

Version 2.907.0

Added

  • Renderiza identidades reais de glyphs CFF CID-keyed e substituições notdef limitadas por meio de mapeamentos reais de CID-to-GID de fontes, preservando extração de texto independente e checagens de cancelamento durante todo o parsing de CMaps com escapes

Version 2.906.0

Added

  • Posiciona combining marks entre estilos usando bounds reais de glyphs selecionados e classes canônicas de combining quando anchors de attachment estão ausentes, com escalas de fontes independentes, stacking no mesmo lado e direções reais de itens resolvidos para marcas duplas

Version 2.905.1

Fixed

  • Resolve parâmetros de predictor com escapes dentro do dictionary DecodeParms real e localiza o token real de stream depois da sintaxe de dictionary externo balanceada, preservando payloads binários de xref com valores de whitespace no carregamento comum do Windows

Version 2.905.0

Added

  • Cria page trees PDF nativas, campos repetidos editáveis, push buttons e texto estático Unicode diretamente de XDP e valores de runtime salvos no Linux e no Windows, com appearances embutidas genuínas e preparação limitada de candidates antes da saída do chamador

Version 2.904.2

Fixed

  • Lê dictionaries reais externos de cross-reference streams sem confundir configurações de encryption aninhadas, resolve nomes de entradas com escapes e preserva dictionaries de encryption diretos em revisões incrementais comuns do Windows

Version 2.904.1

Fixed

  • Preserva controles completos de direção de parágrafos e brackets emparelhados por meio do shaping autônomo automático e do wrapping plain de campos multilinha, com contextos de junção de linhas físicas, caching imutável de parágrafos e saída total limitada de glyphs

Version 2.904.0

Added

  • Executa o runtime nativo de JavaScript XFA, journal de eventos, Data DOM, XML, FormCalc e locale ICU no Linux com leases de shared modules sob posse e clocks monotônicos reais, preservando a inicialização Unicode existente do Windows

Version 2.903.1

Fixed

  • Mantém clusters de shaping somente direcionais Unicode com advance de espaçamento de caracteres zero, retendo controles lógicos, identidades de glyphs e espaçamento normal de clusters visíveis e de palavras

Version 2.903.0

Added

  • Preserva embeddings direcionais, overrides, isolates e contexto de parágrafos de brackets emparelhados entre linhas rich estilizadas com wrapping, expõe APIs limitadas de ordenação física derivada de parágrafos e em cache, e shapeia itens reais de linha com levels e scripts resolvidos

Version 2.902.0

Added

  • Importa e exporta FDF e XFDF estilizados por meio de callbacks reais da C ABI JSON de Linux, embute font faces genuínas configuradas, preserva políticas de assinaturas e os bytes exatos da origem privada para importações no-op, e publica o estado atual do documento apenas depois de ambas as saídas de callback terem sucesso

Version 2.901.0

Added

  • Renderiza shadings de mesh de patches Coons e tensor com geometria cúbica limitada, interpolação de cores no espaço de origem, bordas de continuação, tratamento de dobras e limites transacionais de recursos e de cancelamento

Version 2.900.0

Added

  • Carrega e salva XML do Data DOM XFA nativo com consciência de namespaces de forma transacional, preserva conteúdo misto ordenado e identidades de data binding, cita valores do host em tempo linear e retém um lease exato de módulo JavaScript por sessão por meio de replay limitado da engine

Version 2.899.0

Added

  • Anexa combining marks estilizados a anchors reais de GPOS de base, de ligaduras e de marcas com escalas de fontes independentes, preserva outlines de glyphs com origem negativa dentro dos clips de widgets rich e reserva extents de linhas ajustadas para marks empilhados visíveis

Version 2.898.0

Added

  • Lê e escreve rich text limitado de FDF e XFDF, decodifica style spans XHTML nativos em quatro estilos de fontes embutidos genuínos e importa transacionalmente appearances reais em PDFs assinados ou criptografados, incluindo a comparação canônica de valores rich read-only existentes

Version 2.897.0

Added

  • Shapeia spans de estilo Unicode selecionados com contexto real de HarfBuzz ao redor, expõe APIs nativas de ordem e direção de parágrafos e posiciona itens rich tipados dentro de linhas físicas reais com wrapping, preservando estilos lógicos e posse de objetos

Version 2.896.0

Added

  • Resolve o SOM de binding XFA nativo por escopos de dados repetidos com travessia limitada de descendentes, nomes com escapes, matching Unicode, fallbacks de folhas ausentes por instância e sincronização transacional de valores de runtime

Version 2.895.1

Fixed

  • Compila o suporte estático de eventos XFA nativos uma vez por engine JavaScript sob posse e faz replay de argumentos completos de eventos dinâmicos compactos, preservando closures, host responses gravadas, isolamento de instâncias, orçamentos originais de journal e prazos de transações durante o rollback

Version 2.895.0

Added

  • Importa e exporta bytes reais de FDF e XFDF por meio de callbacks JSON nativos de Linux versionados existentes, preserva valores de campos Unicode, security AES e políticas autenticadas de assinaturas, e desfaz o documento atual depois de falha de publicação de saída ou de resultado

Version 2.894.0

Fixed

  • Quebra rich text tipado largo demais nas fronteiras completas de graphemes Unicode entre estilos de fontes e cores, mede as faixas estilizadas reais antes da atribuição de linhas e preserva clusters oversized indivisíveis, tamanhos de pontos mistos e espaçamento explícito de caracteres

Version 2.893.1

Security

  • Autentica evidências obrigatórias de CRL e OCSP assinadas pela Adobe dentro de timestamps RFC3161 genuínos de documentos antes de aceitar atualizações de formulário protegidas por políticas de assinatura, preservando a recusa transacional para evidências ausentes, revogadas, expiradas ou não confiáveis

Version 2.893.0

Added

  • Lê e escreve dados scalar limitados de campos nativos de FDF e XFDF e importa transacionalmente appearances reais de Unicode, choices e botões em PDFs publicados de forma independente, preservando políticas autenticadas de assinaturas e encryption AES

Version 2.892.0

Added

  • Renderiza shadings de malha triangular free-form e lattice limitados com semântica genuína de coordenadas, flags, funções, cores e transparência, e decodifica streams de paletas Indexed hexadecimais exatamente uma vez

Version 2.891.0

Added

  • Preserva comentários e processing instructions XML nativos XFA ordenados através da importação de eventos, serialização, clonagem e rollback transacional, excluindo-os da seleção de elementos scalar, rich text e SOM

Version 2.890.1

Fixed

  • Recupera locks transitórios de publicação atômica do Windows com no máximo oito tentativas canceláveis de substituição, preservando destinos exatos, bytes preparados, erros permanentes do sistema operacional e limpeza de staging sob posse

Version 2.890.0

Added

  • Preserva grupos legais Unicode de palavras, espaços não separáveis, pontuação e números entre runs de estilos rich tipados, ajusta grupos inteiros com advances reais de fontes estilizadas, retém baselines de tamanhos mistos e coalesce CRLF nas costuras de estilos

Version 2.889.0

Added

  • Sincroniza aliases scalar XFA materializados hidden e invisible depois dos commits de campos visíveis, preservando escopos nativos de dados repetidos, valores explicitamente vazios e rollback transacional exato

Version 2.888.0

Added

  • Aplica as propriedades completas do Unicode 17 e a quebra de linhas contextual por meio das APIs de documento existentes, expõe queries portáveis de propriedades raw ou resolvidas por LB1, preserva ordinais de enum estabelecidos e contratos de tailoring, e honra proibições de soft hyphen

Version 2.887.0

Added

  • Importa e serializa exData XML XFA nativo persistente com leitas imediatas de scripts, preservação de namespaces e de conteúdo misto, identidades retidas de instâncias repetidas, rollback transacional e rendering genuíno de XHTML salvo

Version 2.886.0

Added

  • Cria e autentica timestamps RFC3161 autônomos de documentos PDF com streaming limitado, imprints SHA256, SHA384 ou SHA512, identidade TSA confiável e binding de nonce, declarações obrigatórias de extensões ESIC e exceções autenticadas de certificação ou de field locks

Version 2.885.0

Added

  • Expõe oportunidades de line break default do Unicode 17 e as consome em campos rich nativos reais, preservando grupos de espaços não separáveis, hífens e pontuação e separadores explícitos Unicode com valores originais exatos de V e RV

Version 2.884.0

Added

  • Expõe fronteiras portáveis de graphemes estendidos default do Unicode 17 e quebra palavras rich largas demais em clusters completos, retendo o conteúdo real de appearances Unicode e corrigindo mudanças de largura de formas de junção depois do shaping de substrings

Version 2.883.0

Added

  • Cria filhos persistentes nativos de XFA de valores de imagem e geométricos e renderiza alpha real de PNG, DPI de imagens e geometria de aspecto, preservando isolamento de instâncias repetidas e rollback transacional; corrige pixels de imagens no FPC que antes eram renderizados em preto

Version 2.882.0

Added

  • Herdas recursos de fontes de child streams reais e parâmetros de texto PDF no rendering de Form, Type3 e Pattern, preserva saves de texto do graphics state, honra texto Type3 invisível e reseta defaults independentes de appearances de anotações

Version 2.881.0

Added

  • Autentica automaticamente assinaturas detached CAdES padrão com binding obrigatório do signing certificate e lê strings Contents genuínas hexadecimais ou literais com escapes de forma consistente para verificação, atualizações de formulário permitidas e evidências de validação de longo prazo

Version 2.880.2

Fixed

  • Retém o alinhamento de parágrafos rich entre runs iniciais vazios, mudanças de estilo inline e quebras de linha explícitas, e pinta bordas de retângulo ou círculo solicitadas e linhas destacadas medidas em vez de omiti-las silenciosamente

Version 2.880.1

Fixed

  • Observa o cancelamento antes da alocação do renderer de páginas e da instalação de contextos e durante a inicialização, preserva um context de cores do chamador ativo quando a construção é rejeitada de início, e libera display lists emprestadas sem publicar bitmaps parciais

Version 2.880.0

Added

  • Renderiza valores reais de draw e caption scalar nativos XFA depois da criação por scripts, preserva valores explicitamente vazios e isolamento de instâncias repetidas, e retém rollback exato quando o desenho nativo posterior esgota o orçamento dele

Version 2.879.0

Added

  • Cria filhos persistentes nativos de valores scalar XFA com sincronização imediata de campos, dados e aliases compartilhados, persistência tipada de formulários, commits de widgets, isolamento de instâncias repetidas e rollback transacional exato

Version 2.878.0

Added

  • Gera profiles reais de signature appearances do Windows com fontes Unicode embutidas para widgets mesclados e separados, workflows de rotação, encryption e certificação, e aplica o AppearanceFilter exigido contra o profile realmente gerado

Version 2.877.0

Added

  • Renderiza patterns PDF reais de tiling e shading, coloridos e sem cor, com origens de patterns herdadas, células aninhadas, sobreposição, pinturas de stroke e stencil, transparência e cancelamento limitado nos targets nativos de Linux e Windows

Version 2.876.1

Fixed

  • Preserva o binding completo de SOM XFA e a seleção real de dados de instâncias emitidas enquanto aplica defaults de formulário e de template de instâncias ausentes, sem tomar valores emprestados de outra ocorrência repetida

Version 2.876.0

Added

  • Embute evidências autenticadas de CRL e OCSP em atributos Adobe RevocationInfoArchival assinados do Windows, aplica seed policies reais e valida trusted status, autorização de responses e freshness antes de publicar assinaturas

Version 2.875.0

Added

  • Resolve defaults reais de campos XFA sem fabricar dados durante a leitura, preserva valores de instância explicitamente vazios e garante que edições escrevam dados de instância independentes sem modificar templates compartilhados

Version 2.874.0

Added

  • Edita campos nativos de rich text com runs de estilo Unicode tipados, fontes reais embutidas regular, bold, italic e bold-italic, baselines medidas de appearances de tamanhos mistos, decorações e valores V/RV sincronizados entre widgets e saída criptografada

Version 2.873.0

Added

  • Cria choices de UI XFA persistentes por instância por meio de scripts nativos e consome widgets reais de texto, password e choices com appearances de múltiplas linhas e de palavras longas medidas

Version 2.872.0

Added

  • Cria assinaturas de certificação DocMDP reais do Windows com permissões P1, P2 ou P3 e attestation legais Unicode autenticadas, honra seed policies exigidas e locks FieldMDP, e permite assinaturas subsequentes apenas onde a política assinada as admite

Version 2.871.1

Fixed

  • Executa bodies de eventos XFA no escopo lexical e strict próprio deles, preservando aliases de campos no escopo externo, o this do evento, returns explícitos e rollback exato de falhas

Version 2.871.0

Added

  • Cria propriedades XFA ausentes de fontes, parágrafos, fill, cor, borda, edge e corner por meio de event scripts nativos reais, persiste bindings estáveis de formulários por instância com rollback exato, e regenera appearances opcionais de widgets depois de mudanças de estilo efetivas

Version 2.870.0

Added

  • Renderiza saída real nativa Cairo do Windows com outlines explícitos de fontes padrão GDI e as convenções de chamada Win32 corretas do OpenJPEG, usando dependências nativas pinadas e reproduzíveis e aceite independente da saída

Version 2.869.0

Added

  • Assina documentos do Windows com callbacks reais síncronos de transport RFC 3161 da C ABI e imprints SHA256, SHA384 ou SHA512, trust TSA autenticado e checagens CRL, restrições exigidas de seed de timestamps e publicação transacional limitada

Version 2.868.0

Added

  • Gera appearances de campos de password mascaradas e file-select literais com valores Unicode preservados e políticas AES-256, transporta Unicode suplementar com escapes pela C ABI JSON nativa, retém tokens de origem PDF decimais subnormais e cria buffers de prefetch RGB sem um screen DC

Version 2.867.0

Added

  • Quebra rich text XFA entre estilos inline com fronteiras de palavras medidas, quebras de linha explícitas, baselines e alinhamento de linhas compartilhadas, gaps reais de palavras justificadas e geometria de links de fragmentos, preservando a persistência nativa de XDP de instâncias repetidas

Version 2.866.1

Added

  • Autentica tokens RFC 3161 de raw signatures usando o algoritmo real de message imprint SHA256, SHA384 ou SHA512 suportado por eles, retendo o default existente de requests SHA256 e as checagens completas de trust e de revogação de tokens

Version 2.866.0

Added

  • Alinha runs de rich text XFA de tamanhos mistos a uma baseline comum de PDF salvo, preserva o modo de posicionamento de texto do chamador e aplica a margem de parágrafo adjacente maior, incluindo transições de parágrafos vazios

Version 2.865.0

Added

  • Requesta e autentica timestamps RFC 3161 para message imprints explícitos SHA256, SHA384 e SHA512 sem dar hash ao imprint de novo, preservando comprimentos estritos de digests, nonces novos, transport limitado, trust chains e validação de revogação

Version 2.864.0

Fixed

  • Preserva o prazo original de scans de códigos de barra priorizando rasters lineares completos e grupos de candidates de quiet zone, e rejeita bordas de finder projetivas DataMatrix inválidas antes de amostrar os módulos internos sem mudar as tolerâncias de finder

Version 2.863.0

Added

  • Honra restrições herdadas válidas de seeds e de certificados de assinaturas do Windows com seleção real de digests e de CAdES, informações de assinatura Unicode, field locks indiretos normalizados, permissões autenticadas de locks históricos, segundas assinaturas permitidas e políticas de formulários criptografados

Version 2.862.0

Added

  • Renderiza shadings PDF reais nativos de function, axial e radial com geometria e avaliação de funções limitadas, clipping herdado, semântica de Domain, Matrix, Extend e BBox, cores calibradas e especiais, transparência, soft masks, blending e grupos knockout

Version 2.861.0

Added

  • Exporta PDFs reais nativos de contract review anotado e highlights Unicode explícitos com appearances normais visíveis, preservando o conteúdo de origem e as revisões incrementais de assinaturas, aplicando permissões autenticadas de anotações P3 e user rights criptografados, e preparando saídas limitadas antes da publicação por callbacks

Version 2.860.0

Added

  • Vincula opções nativas de assinatura e de verificação de Linux à seleção real de digests, metadados Unicode de assinaturas, profiles de appearances nomeados, bytes de trust explícitos, identidade de transport de timestamps e evidências autenticadas de revogação, com preparação privada limitada antes da publicação

Version 2.859.0

Added

  • Aplica overrides vivos por instância de fontes, parágrafos e body scalar XFA ao desenho e à medição reais de rich text, preserva a precedência de CSS inline e o conteúdo explicitamente vazio por meio da persistência nativa de XDP, e retém rollback transacional exato

Version 2.858.0

Added

  • Decodifica PDF names reais de fontes, encodings, glyphs, cores e recursos com escapes exatamente uma vez no rendering nativo e na extração compartilhada de texto, preserva keys literais de recursos com hash e mantém nomes equivalentes alinhados com outlines reais e métricas de glyphs

Version 2.857.0

Added

  • Compara documentos nativos por contagens de páginas e de objetos, texto Unicode, grafos estruturais normalizados e pixels reais renderizados RGB ou de luminância, com equivalência semântica de streams, entradas criptografadas autenticadas e preparação limitada antes da publicação por callbacks

Version 2.856.0

Added

  • Seleciona presets reais nativos de signature appearances pelo nome de profile registrado, gera layouts distintos de approval, certificação e compact, preserva metadados autenticados de profiles e políticas criptografadas, e rejeita profiles desconhecidos antes da publicação

Version 2.855.0

Added

  • Aplica defaults de property schema XFA nativas e preserva valores explicitamente vazios, estilos por instância e medidas fracionárias em pontos de fonte, borda e draw por meio da saída real de AcroForm e de PDF achatado

Version 2.854.0

Added

  • Expõe objetos nativos de propriedades e atributos XFA com bindings persistentes de formulários por instância, escritas sincronizadas de valor/dados e efeitos reais de layout de fonte, borda, parágrafo e UI, preservando rollback transacional e orçamentos de foco sem scripts

Version 2.853.0

Added

  • Embute evidências reais de revogação da Adobe como signed attributes CMS autenticados, valida chains completas de certificados e de timestamps contra trust explícito e evidências atuais de CRL ou OCSP antes da publicação, e aplica o embedding exigido de revogação de signature seeds

Version 2.852.0

Added

  • Escreve attestation legais Unicode autenticadas em assinaturas de certificação, honra requisitos de Legal seed apenas para certificação, preserva estatísticas legais existentes e permissões de catalog, e retém políticas criptografadas de strings

Version 2.851.0

Added

  • Renderiza cores de origem ICC Lab físicas e entradas limitadas de compatibilidade XYZ em paths, texto, imagens empacotadas e paletas Indexed, preserva tints alternativas calibradas e ICC por meio de grupos RGB ou CMYK, e aplica profiles JPX embutidos com alpha separado ou associado

Version 2.850.0

Added

  • Converte documentos compatíveis com fontes ausentes em texto pesquisável e PDF/A-4 vetorial com embedding limitado e explícito de fontes Ghostscript, validação genuína do veraPDF e publicação atômica, e seleciona fontes TrueType Unicode nativas de forma consistente entre distribuições

Version 2.849.0

Added

  • Renderiza fontes Type1 e Type1C simples embutidas com encodings Adobe exatos declarados ou built-in, mantém a extração ToUnicode separada dos outlines exibidos, e aceita stroke adjustment neutro validado e graphics state colorimétrico relativo

Version 2.848.0

Added

  • Resolve sufixos completos de paths descendentes XFA dentro de cada contexto de wildcard, preserva fronteiras locais de ocorrências e executa predicates no escopo de evento atual com rollback transacional exato

Version 2.847.0

Added

  • Aplica restrições herdadas nativas de signature seeds e de certificados com chains reais de issuers, políticas de subject e de key usage, digests CMS selecionáveis, metadados criptografados de assinaturas Unicode e transforms de documentos travados

Version 2.846.0

Added

  • Expõe datasets e data nodes XFA nativos com bindings bidirecionais de formulários, espelhamento dinâmico de dados de instâncias, referências retidas estáveis, valores de formulário não vinculados independentes e replay transacional de scripts

Version 2.845.0

Added

  • Emite referências FieldMDP autenticadas de field locks de assinaturas existentes ou herdados, preserva nomes de campos Unicode criptografados e referências de certificação, e aplica níveis de permissão de locks sem enfraquecer as políticas assinadas originais

Version 2.844.0

Added

  • Renderiza tints alternativas Separation e DeviceN com funções vetoriais limitadas, imagens empacotadas e blending de grupos CMYK, preserva a geometria knockout de None e mapeia cores de registro All de forma consistente

Version 2.843.0

Added

  • Resolve paths SOM dinâmicos XFA com ocorrências inferidas e relativas, predicates com escopo, selectors de class e de descendentes, coleções de wildcards e atribuições transacionais de propriedades de script objects

Version 2.842.0

Added

  • Fornece comparação de contratos semântica nativa de dois documentos pela C ABI e Pascal por meio de um core portátil compartilhado, com geometria de glyphs de origem, entradas criptografadas e de conteúdo aninhado, saída de review JSON ou HTML preparada e ordenação estável de locks concorrentes

Version 2.841.0

Added

  • Autentica revisões originais de CMS e CAdES antes das atualizações nativas de formulários, aplica permissões originais de DocMDP e FieldMDP e campos travados, preserva conteúdo e recursos assinados, e sincroniza metadados de captions de push buttons atomicamente

Version 2.840.0

Added

  • Renderiza cores de origem calibradas CalGray, CalRGB e Lab, blending calibrado de grupos e páginas, bases Indexed, samples de imagens de 16 bits e soft masks de luminância XYZ com conversão limitada e avaliação segura de gamma

Version 2.839.0

Added

  • Implementa cópia de valores FormCalc e referências estáveis de nodes com atribuição por referência, rebinding e desanexação de null, igualdade de identidade numérica, handles retidos e rollback transacional

Version 2.838.0

Added

  • Executa programas FormCalc Eval gerados em runtime com escopos de cálculo isolados, avaliação aninhada, origem Unicode, retries limitados de compilação e replay transacional de host responses

Version 2.837.0

Added

  • Gera appearances Unicode embutidas por meio do form filling nativo JSON de Linux para campos de texto, choices e multiselect, estados de checkboxes e radios e captions de push buttons, retendo a publicação transacional e a encryption

Version 2.836.0

Added

  • Fornece transport de timestamps RFC 3161 síncrono por meio de um record de operação de assinatura nativa estendido compatível, com responses limitadas, cancelamento compartilhado e validação explícita de trust e de revogação TSA

Version 2.835.0

Added

  • Executa de forma transacional o estado do host XFA, flags de páginas e de lifecycle, mudanças de foco por instância, validação de edições pendentes e operações de reset com identidade estável e replay de estado lexical

Version 2.834.0

Added

  • Valida identificadores de signing certificates CAdES contra o signer real independentemente do trust opcional de certificados, e resolve streams de Encoding CMaps embutidos pelo adapter nativo de fontes

Version 2.833.0

Added

  • Renderiza CMaps verticais Identity-V e predefinidos Unicode com origens W2/DW2 reais, matrizes, movimento de texto e clipping, e decodifica corretamente streams de Encoding CMaps embutidos

Version 2.832.0

Added

  • Assina pela ABI de callbacks nativa de Linux com identidades PEM ou PFX limitadas, campos novos de appearances Unicode e certificação, e retém o documento assinado preparado como o contexto atual depois da publicação bem-sucedida

Version 2.831.0

Fixed

  • Aplica restrições de signing seeds, locks e read-only de forma consistente a PDF names codificados, rejeita keys semanticamente duplicadas e valida dictionaries de políticas herdados

Version 2.830.0

Added

  • Executa picture clauses XFA avançadas numéricas, de calendário, de texto e compostas por meio de eventos reais de formulários, preservando precisão de entrada, semântica de locales e replay transacional de scripts

Version 2.829.0

Added

  • Importa grafos nativos de recursos de páginas e appearances de anotações transformadas em documentos plain ou criptografados e converte entradas compatíveis em texto pesquisável e PDF/A-4 vetorial com validação genuína antes da publicação atômica

Version 2.828.0

Added

  • Renderiza transparency groups e page groups CMYK e ICC de quatro componentes com todos os blend modes, geometria knockout aninhada e orçamentos compartilhados de color profiles

Version 2.827.0

Added

  • Executa pictures XFA de datas, horas, números e texto com consciência de locale com locale sets embutidos, queries transacionais limitadas de locales e aritmética IEEE de JavaScript protegida

Version 2.826.0

Added

  • Lê e escreve seleções de choices com valores em arrays Unicode, mantém índices de opções ordenados e gera appearances correspondentes para seleções de list boxes visíveis e com scroll

Version 2.825.0

Added

  • Assina documentos criptografados por meio de jobs JSON e C ABI do Windows preservando as revisões originais, as configurações de security AES, os document IDs e as permissões de assinaturas

Version 2.824.0

Added

  • Cria documentos HTML nativos de Linux, insere texto Unicode pesquisável visível ou ajustado, roda OCR Tesseract limitado e cancelável, e produz saída raster PDF/A-4 validada de forma independente pelas APIs Pascal e de callbacks
  • Renderiza masks Alpha/Luminosity do graphics state, transfer functions limitadas, transparência aditiva e page groups, formas knockout e samples estendidos de JPEG 2000, com cor e alpha embutidos
  • Valida evidências fornecidas de certificados, OCSP e CRL antes da publicação incremental de DSS/VRI preservando assinaturas existentes e encryption AES
  • Executa callbacks de transport XFA de host e FormCalc explícitos e tipados com requests limitadas, responses gravadas e replay transacional

Fixed

  • Preserva valores Unicode e diagnósticos de exceções retornados pela API QuickJS do Free Pascal

Version 2.823.0

Added

  • Embute timestamps RFC 3161 validados em assinaturas CMS headless com checagens de message imprint, nonce, autorização TSA, trust e evidências de revogação fornecidas, preservando os arquivos de destino quando um timestamp obrigatório falha
  • Retém o estado lexical de script objects XFA, closures aninhadas e módulos independentes de instâncias repetidas com replay transacional determinístico limitado
  • Aplica espaçamento explícito de caracteres e de palavras às appearances de texto Unicode headless medidas e geradas

Fixed

  • Usa a ordem de argumentos source/search do FormCalc At correta pela especificação e retorna a primeira posição para uma string de busca vazia

Version 2.822.0

Added

  • Executa eventos XFA gerais de QuickJS e FormCalc compilado com operações vivas de DOM de instâncias repetidas, persistência transacional de form packets padrão, lifecycle automático initialize/calculate/validate/ready, execução limitada e cancelamento

Fixed

  • Aplica parâmetros de funções financeiras XFA, fórmulas de cash flow, origens de datas gregorianas e comportamento de resto negativo corretos pela especificação, preservando precisão double entre Delphi e Free Pascal

Version 2.821.0

Added

  • Expande workflows nativos de documentos headless com uma C ABI de Linux versionada, operações reais de texto/formulário/render/assinatura baseadas em callbacks, cancelamento limitado e rollback de falhas, appearances de multiline/comb/rotacionado/choice/botão com shaping HarfBuzz/FriBidi, identidades PFX, campos novos de assinaturas visíveis e certificação DocMDP
  • Renderiza image masks limitadas, soft masks, cores Indexed/ICC, blend modes PDF, transparency groups RGB isolados, glyphs Type3 e clipping de texto, e decodifica streams de imagens JPEG, JPEG 2000, CCITT, JBIG2 e RunLength pelo caminho nativo autenticado de documentos

Version 2.820.0

Added

  • Preenche campos AcroForm nativos headless Unicode de linha única suportados com appearances TrueType embutidas genuínas, larguras exatas de glyphs e mapeamentos CIDToGID/ToUnicode, atualizações transacionais de múltiplos widgets, security AES preservada, embedding controlado de fontes e salvamento atômico limitado no Linux e no Windows

Version 2.819.0

Added

  • Renderiza paths PDF, texto horizontal, imagens, Forms e appearances de anotações existentes suportados para PNG com superfícies de CPU nativas Cairo/FreeType no Linux, aplica trabalho limitado e cancelamento, preserva as origens e publica arquivos PNG atomicamente

Fixed

  • Usa advances canônicos de AFM da Adobe para os doze estilos padrão Helvetica/Times/Courier quando as widths PDF estão ausentes, impedindo o acúmulo de drift de posicionamento de texto por métricas de fontes substitutas e preservando widths explícitas e embutidas

Version 2.818.0

Added

  • Publica assinaturas PDF incrementais CMS/CAdES nativas headless genuínas no Linux e no Windows usando campos não assinados existentes e credenciais PEM explícitas, preserva revisões anteriores e security AES-256, verifica os bytes assinados exatos e protege destinos existentes por meio de publicação atômica limitada

Version 2.817.0

Added

  • Completa document jobs JSON e C ABI limitados com assinatura incremental PFX validada, campos de assinaturas existentes, comparação de dois documentos, seis modos nativos de comparação e review de contratos em dois lados JSON/HTML/PDF anotado, incluindo cancelamento cooperativo, limites de recursos e publicação atômica de arquivos

Version 2.816.0

Added

  • Verifica assinaturas PDF nativas headless com binding exato de ByteRange/Contents e OpenSSL 3 em streaming, gera assinaturas detached CMS/CAdES genuínas a partir de credenciais PEM explícitas, e reporta o trust de certificados separadamente da integridade no Linux e no Windows

Version 2.815.0

Added

  • Usa o helper limitado de instance presentation XFA para eventos condicionais, binding repetido explícito, presence e acesso independentes de instâncias, identidade estável persistida, reflow transacional, pintura em canvas do host e registros de acessibilidade

Version 2.814.0

Added

  • Abre documentos nativos headless AES-256 R5/R6 no Linux e no Windows, autentica permissões de owner/user, decodifica objetos comprimidos criptografados e salva valores de formulários incrementais criptografados com preservação exata de prefixos de origem e saída atômica limitada

Version 2.813.0

Added

  • Reflowa texto em retângulos de páginas limitados entre baselines e invocações compartilhadas selecionadas de Forms, muda fontes e largura, inspeciona reports conservadores de colisões, e usa previews selados com commit ou rollback transacional

Fixed

  • Preserva edições de documentos carregados em saves repetidos depois da serialização de objetos, incluindo saves de stream para arquivo e retries após uma falha de saída

Version 2.812.0

Added

  • Converte documentos carregados compatíveis em PDF/A-4 preservando texto, vetores, imagens e recursos embutidos originais, compõe appearances visíveis de anotações/widgets, retém ou adiciona OCR pesquisável, reporta perdas explícitas e valida a preservação antes da publicação atômica de arquivos

Version 2.811.0

Added

  • Carrega cross-reference streams, seções de hybrid references e object streams comprimidos pela API nativa headless de documentos, valida índices de membros limitados e precedência de revisões, preserva valores originais exatos de números largos e salva saída incremental independente preservando a origem no Linux e no Windows

Version 2.810.0

Added

  • Corrige orientação de scans, skew de ângulos contínuos, sombras, bordas e quads de perspectiva explícitos com geometria reversível limitada, usa evidências confiáveis de orientação do Tesseract, e mapeia palavras, baselines, quadriláteros de página e layout semântico do OCR de volta ao scan original para saída estruturada editável

Version 2.809.0

Added

  • Configura engines locais Tesseract e RapidOCR de CLI ou DLL em jobs de OCR JSON e C ABI, retém texto Unicode pesquisável e pixels de scans, descobre adapters suportados, valida configurações explícitas e aplica orçamentos de rendering/reconhecimento com saída atômica e rollback de publicação que falhou

Version 2.808.0

Added

  • Carrega PDFs de classic xref em aplicações console nativas de Linux, extrai texto Unicode de páginas e de Forms aninhados com recursos herdados, inspeciona e preenche valores de texto AcroForm, e publica saída incremental preservando a origem com diagnósticos tipados, cancelamento, orçamentos de recursos e substituição atômica

Version 2.807.0

Added

  • Localiza múltiplos códigos de barra nativos separados em um raster, retém payloads repetidos em posições distintas, decodifica símbolos ECC 200 Data Matrix rotacionados e projetivos com geometria de quatro cantos, e aplica orçamentos agregados de scan com cancelamento e publicação atômica de resultados

Version 2.806.0

Added

  • Compare parágrafos de contrato e edições de palavra ou frase com registros de inserção, exclusão, substituição e movimentação, localização de página nos dois lados, preservação de cláusulas repetidas, exclusões explícitas de boilerplate, revisão HTML delimitada e saída em PDF anotado conferida contra a origem

Version 2.805.0

Added

  • Importe templates HTML de negócios com painéis flex/grid aninhados, linhas com quebra automática, spans de coluna de grid, imagens e controles de formulário em caixas paralelas, mais recursos font-face fornecidos explicitamente e retidos através do embutimento adiado, com um orçamento de cache separado para imagens decodificadas

Version 2.804.0

Added

  • O núcleo compartilhado de objetos PDF, I/O direto de arquivo, decodificação de conteúdo e fontes, compressão, criptografia e escrita agora compila como código Linux nativo com mapeamento e sincronização POSIX, preservando as APIs Windows e serializando corretamente as entradas clássicas de xref

Version 2.803.0

Added

  • Adiciona camadas versionadas de perfis de fatura e de regras por país, valida faturas CII XML explícitas ou híbridas com relatórios que respeitam o escopo, e executa as regras oficiais de fatura do XRechnung 3.0.2 e do CTC francês através de um engine Saxon configurado explicitamente, com seleção de perfil publicada e diagnósticos fail-closed

Version 2.802.0

Added

  • Exporta tabelas tipadas para planilhas XLSX independentes de Office através de APIs nativas, jobs JSON e da C ABI, preservando tipos de valor, formatos de moeda e porcentagem, células mescladas, inteiros grandes exatos e metadados de origem opcionais, com staging delimitado e publicação à prova de falhas

Version 2.801.0

Added

  • Jobs JSON e a C ABI podem exportar páginas carregadas selecionadas como HTML, XHTML, XML ou JSON semânticos, e tabelas tipadas como CSV ou JSON, com opções nativas, staging delimitado, cancelamento, compatibilidade com campos de assinatura, preservação do estado da origem e publicação atômica de arquivos

Version 2.800.2

Fixed

  • Os caches de relacionamentos de formulários carregados são invalidados antes do rollback do grafo, então jobs de assinatura e edições de documento que falharam deixam o documento original seguro para consulta e reuso

Version 2.800.1

Fixed

  • A renderização paralela ordenada agora admite reservas de memória na ordem de entrada, então páginas posteriores não conseguem esgotar o orçamento enquanto a entrega espera uma página anterior, preservando cancelamento e saída delimitada no Delphi e no FPC

Version 2.800.0

Changed

  • Texto SVG, appearances de FreeText carregadas e substituições de texto carregadas agora preservam os recursos de shaping do documento, as flags de auto-shaping de script e as seleções de script e idioma do GSUB, usando os dados OpenType de cada fonte selecionada e retendo os mapeamentos Unicode através de trocas de fonte

Version 2.799.0

Changed

  • Importações vetoriais SVG agora retêm dash arrays, dash offsets e limites de miter herdados para traços sólidos e de gradiente, enquanto a renderização nativa preserva padrões de dash com fase e de comprimento zero

Version 2.798.0

Changed

  • Texto Unicode estilizado agora retém as fontes em negrito e itálico durante o layout com fallback; os overloads de ResolveFontForCodePoint e AnalyzeUnresolvedGlyphs que consideram o estilo fazem o preflight corresponder à saída, e as character references XML do FPC preservam os Unicode scalars em vez de corromper o texto

Version 2.797.0

Fixed

  • Importações SVG agora compõem a opacidade de objetos e grupos através de Forms de transparência vetorial isolados, preservam o alpha independente de fill e stroke, e retêm o comportamento aninhado de recursos, clips, máscaras e links sob orçamentos explícitos

Version 2.796.0

Added

  • A conversão delimitada de arquivamento raster PDF/A-4 agora está exposta através de jobs JSON e da C ABI, com aceitação explícita de perda de informação, falhas estruturadas de orçamento, cancelamento cooperativo, restauração do estado da origem e saída atômica de arquivos

Version 2.795.0

Added

  • PDFs carregados agora podem ser normalizados em documentos raster PDF/A-4 validados, com renderização nativa estrita, cor sRGB verificada, decodificação e recursos raster delimitados, cancelamento, proteção de alias da origem e publicação atômica de arquivos; o relatório de conversão identifica o conteúdo interativo e anexado removido deliberadamente

Version 2.794.0

Changed

  • A importação de HTML5 agora usa linhas de texto de direção mista medidas, paginação com controle de viúvas e órfãos, hifenização opcional, layouts flex e grid delimitados e diagnósticos CSS observáveis; bitmaps nativos do FPC sincronizam o desenho GDI direto com os caches de imagem da LCL

Version 2.793.0

Changed

  • Adiciona eventos de presença de template e de adição/remoção delimitados no instance-manager dinâmico do XFA, com rebinding de layout, preservação do estado de edição, rollback atômico, limites de recursos e saída XDP persistente

Version 2.792.0

Changed

  • Amplia a importação SVG com fontes Unicode embutidas medidas, recursos PNG/JPEG, traços de gradiente e soft masks de Alpha e Luminosity de verdade, e corrige o alpha de grupos nativo e a composição de superfícies de bitmap no FPC

Version 2.791.0

Changed

  • Adiciona substituição de texto Unicode carregado com preview, fontes embutidas, políticas de quebra de linha e de largura, diagnósticos por ocorrência, detecção de plano desatualizado, recursos delimitados, commits atômicos e operações de preview e apply via JSON/C ABI

Version 2.790.0

Changed

  • Implementa as operações de stack e transient-array padrão do CFF Type 2 na renderização de glyphs e preserva as dependências de subroutines locais e globais derivadas de aritmética durante o subsetting de fontes

Version 2.789.0

Changed

  • Amplia a decodificação de código de barras embutida com Code 128, EAN/UPC, recuperação de QR consciente de perspectiva, Data Matrix ECC 200 e PDF417 com correção Reed-Solomon e decodificação de payload delimitada

Version 2.788.0

Changed

  • O Windows FPC agora suporta TIFF nativo, conversão JPEG/JPX, ICC, JBIG2 e Zopfli através de uma ponte de codecs validada por ABI, e usa worker threads de verdade para renderização de página, página ordenada, tile, banda e tile JPEG 2000, com orçamentos, callbacks ordenados, cancelamento e pixels determinísticos

Version 2.787.0

Changed

  • A C ABI e o processador de jobs JSON agora compartilham operações de documento versionadas por schema para capacidades, renderização, texto Unicode e formulários, camadas OCR, redaction e assinatura PFX, com orçamentos de recursos explícitos, rollback ante falha de callback e saídas de arquivo atômicas; entradas de callback multipágina são carregadas corretamente

Version 2.786.0

Changed

  • A edição de FreeText carregado agora reconstrói appearances embutidas Unicode e rich-text atomicamente, com quebra de linha, alinhamento, opacidade, rotação, callouts, insets e políticas explícitas de overflow; os payloads de stream reescritos são capturados antes da mutação, então o rollback da transação restaura o texto original

Version 2.785.0

Added

  • O demo de console SearchableOCR ganha engines de OCR embutido e de Tesseract via DLL ou CLI ao lado do RapidOCR, gera uma amostra de scan de três páginas e expõe seleção de páginas, filtro por confiança, orçamentos de reconhecimento e estatísticas detalhadas de conversão

Version 2.784.0

Changed

  • Importações em lote de FDF e XFDF agora fazem rollback das atualizações anteriores de campos e annotations após uma falha de importação, preservam as transações de propriedade do chamador e limpam os metadados de resultado do intercâmbio que falhou

Version 2.782.0

Added

  • O adapter OCR Tesseract local aceita segmentação de página, modo de engine de reconhecimento, limites de pixels e timeouts configuráveis através de THPDFTesseractOptions para reconhecimento de linha única, palavra única, texto esparso e blocos verticais

Fixed

  • O adapter Tesseract nativo usa a dimensão da caixa de texto transversal para baselines predominantemente verticais, evitando que o comprimento de palavras verticais inflacione os tamanhos de texto do PDF pesquisável

Version 2.781.0

Changed

  • As coleções de demos do Delphi e do C++Builder agora incluem um guia de campos de código de barras multipágina com etiquetas comerciais e um manual completo de navegação com bookmarks hierárquicos, named destinations e links funcionais para documentos complementares; as receitas mínimas de PDF/A vão para Miscellaneous, e os projetos redundantes isolados de outline e metadata são aposentados

Version 2.780.1

Fixed

  • A página de annotations do Showcase separa as legendas de preview de conteúdo das appearances ao vivo de free-text e stamp, evitando rótulos sobrepostos nos leitores de PDF e mantendo os exemplos identificáveis quando as appearances das annotations estão ocultas

Version 2.780.0

Changed

  • Os catálogos de demos agora priorizam workflows completos e movem dezessete exemplos mínimos, focados ou legados para subpastas de Miscellaneous; os projetos redundantes ImageCompression e AddDelPages foram removidos, com a funcionalidade deles mantida nos demos principais e nas suítes de regressão

Version 2.779.0

Added

  • Os demos Showcase do Delphi e do C++Builder agora abrem um estúdio de documentos completo com dez capítulos, preview embutido, destaque de busca, capas personalizadas, marcas d'água de revisão com um clique, exportação de páginas verificada e cópias protegidas com AES-256 R6 que retêm as edições; ambos usam o mesmo engine de documentos e suportam um comando de geração sem janela

Version 2.778.1

Removed

  • Os demos GUI TestNumeric redundantes do Delphi e do C++Builder foram aposentados em favor de testes de regressão numéricos automatizados que verificam dimensões de página fracionárias e operandos de desenho após salvar e recarregar PDFs sem compressão e com compressão Flate, com cobertura persistida de arrays numéricos

Version 2.778.0

Changed

  • Os demos de páginas e de relatórios de clientes agora oferecem workflows práticos: PageOperations edita PDFs reais através de comandos extract, delete, move, insert e append com verificação por recarga, enquanto DBTable usa o engine de tabelas para linhas com quebra, cabeçalhos repetidos e paginação automática com uma amostra padrão sem banco de dados

Version 2.777.1

Fixed

  • O OCR rejeita UTF-8 malformado, caracteres de controle não suportados e saídas incompatíveis de modelos de detecção nativos antes de publicar o texto, e contabiliza os resultados de reconhecimento descartados ao aplicar limites de palavras entre páginas

Version 2.777.0

Fixed

  • O OCR embutido aceita páginas em branco ou não reconhecidas como resultados vazios bem-sucedidos, então lotes de documentos escaneados podem continuar, preserva os pixels de bitmap do Windows FPC e verifica cancelamento e limites de tempo ao longo de toda a análise de imagem
  • A classificação de ângulo do RapidOCR nativo preserva as proporções de aspecto de linhas curtas e só gira recortes de texto quando a previsão de cabeça para baixo tem confiança alta
  • O adapter local Python do RapidOCR preserva o espaçamento de linha e a pontuação reconhecidos em vez de publicar caracteres individuais, que podem ganhar espaços indesejados, e o adapter Tesseract DLL rejeita caracteres de controle C1 antes de publicar o texto

Version 2.776.0

Added

  • Camadas de texto de PDFs escaneados podem substituir atomicamente os streams OCR marcados do HotPDF depois de salvar e recarregar, mantêm as camadas existentes quando o reconhecimento falha ou sai vazio, reportam as páginas substituídas, e um exemplo de console RapidOCR nativo multilíngue faz a conversão sem sobrescrever arquivos existentes

Fixed

  • Palavras OCR latinas e cirílicas adjacentes com vão entre palavras na mesma linha recebem espaços Unicode explícitos para busca de frases e cópia estáveis, enquanto palavras CJK adjacentes continuam sem separação
  • A renderização de scan JPEG no Windows FPC mantém os pixels decodificados ao converter para o formato de bitmap de OCR, evitando entrada de reconhecimento em branco por uma mudança de pixel format da LCL

Version 2.775.0

Added

  • O RapidOCR nativo ganha presets de modelos locais para chinês simplificado e tradicional, inglês, francês, alemão, espanhol, português, italiano, holandês, turco, japonês, coreano, russo, árabe e híndi, com dicionários de caracteres correspondentes, verificação da instalação dos modelos, ordem de leitura horizontal e saída Unicode multilíngue nos builds Delphi, C++Builder e Windows FPC/Lazarus

Fixed

  • Os adapters OCR de processo local tentam de novo a limpeza da saída temporária quando arquivos de diagnóstico continuam brevemente bloqueados depois do término do worker

Version 2.774.0

Added

  • Um adapter DLL do RapidOCR nativo mantém modelos ONNX locais no processo, reconhece snapshots de bitmap sem Python, suporta classificação de ângulo opcional e PDFs pesquisáveis Unicode, e valida orçamentos de saída com cancelamento cooperativo nos builds Delphi, C++Builder e Windows FPC/Lazarus

Version 2.773.0

Added

  • O adapter local do RapidOCR ganha configuração explícita de modelo ONNX, classificação de ângulo opcional, dicionários de caracteres e fontes locais, controles de threads de CPU, preflight offline e orçamentos de reconhecimento para PDFs pesquisáveis Unicode nos builds Delphi, C++Builder e FPC/Lazarus

Version 2.772.1

Fixed

  • Os adapters Tesseract DLL e CLI agora funcionam nos builds Win32 e Win64 do Windows FPC/Lazarus, preservando palavras OCR Unicode e lendo os pixels atuais da imagem LCL para camadas de texto pesquisáveis de PDF

Version 2.772.0

Added

  • Um adapter DLL nativo opcional do Tesseract adiciona OCR multilíngue com segmentação de página e modos de engine configuráveis, palavras Unicode, confiança, limites de palavra e baselines, além de cancelamento cooperativo, prazos de reconhecimento e orçamentos de saída para PDFs escaneados pesquisáveis

Version 2.771.1

Changed

  • O OCR embutido reconhece texto ASCII normal, negrito, itálico e negrito itálico em fundos claros ou predominantemente escuros, aceita texto desbotado com contraste suficiente em escala de cinza, e omite palavras que contêm glyphs retidos incertos em vez de descartar caracteres em silêncio

Version 2.770.175

Fixed

  • LoadedDocInspector e SignatureValidator retornam um código de saída de falha para PDFs ilegíveis e rejeitam argumentos de comando inválidos em vez de reportar uma inspeção vazia bem-sucedida

Version 2.770.174

Fixed

  • O LoadedImageExport valida todos os destinos de imagem antes de exportar qualquer página, evitando que alias de caminho sobrescrevam o PDF de entrada ou outra página selecionada, e rejeita nomes de formato não suportados

Version 2.770.173

Fixed

  • O cache em disco de páginas renderizadas ignora pastas de documentos vinculadas na recuperação, na busca, na gravação, na invalidação e no eviction, preservando arquivos fora do cache

Version 2.770.172

Fixed

  • Jobs JSON rejeitam sintaxe malformada, conteúdo ao final, números fora da faixa finita de Double e aninhamento excessivo antes de executar qualquer operação, liberando os valores parcialmente analisados em caso de falha

Version 2.770.171

Fixed

  • O PreflightCLI confere o plano completo de saída de relatórios antes de escrever, protegendo os PDFs de entrada contra alias de arquivo e rejeitando destinos de relatório em conflito; varreduras recursivas ignoram subdiretórios filhos vinculados para evitar ciclos

Version 2.770.170

Fixed

  • O CopyPage confere as identidades dos arquivos antes de exportar, rejeita alias de saída em conflito, e mantém as saídas com nome automático ao lado das entradas sem extensão em diretórios que contêm pontos

Version 2.770.169

Fixed

  • Valores de jobs JSON preservam caracteres nulos escapados, serializam números finitos fora da faixa de 64 bits com sinal sem overflow de inteiro, e retornam defaults para parâmetros inteiros fora da faixa sem mudar o locale do processo

Version 2.770.168

Fixed

  • A recuperação do parser de objetos simples termina ao encontrar colchetes de fechamento avulsos em corpos de array sem colchetes e preserva números válidos e chaves de dicionário logo após delimitadores malformados

Version 2.770.167

Fixed

  • O HotPDFCLI rejeita caminhos de saída que sejam alias dos arquivos de entrada e confere todos os caminhos gerados antes de iniciar a exportação em lote, evitando que os comandos trunquem ou substituam os dados de origem deles

Version 2.770.166

Fixed

  • O exemplo ExtractText protege o PDF de entrada dele quando uma saída usa uma junction de diretório ou um hard link, e o LoadedImageExport reporta falha para documentos ilegíveis ou exportações de página incompletas

Version 2.770.165

Fixed

  • Leituras diretas de arquivo invalidam recargas de cache incompletas depois de uma falha de I/O e delimitam com segurança as faixas de read-ahead perto do limite de offset de 64 bits com sinal

Version 2.770.164

Fixed

  • A decodificação RunLength aloca apenas o tamanho do payload decodificado e valida runs malformados antes de alocar a saída, evitando reservas excessivas de memória para streams com terminadores precoces

Version 2.770.163

Fixed

  • Os exemplos Delphi e C++Builder localizam imagens, metafiles, perfis de cor e fixtures opcionais de assinatura incluídos tanto nas pastas de projeto quanto em diretórios aninhados de saída de build

Version 2.770.162

Fixed

  • Os exemplos HugeFileBenchmark rejeitam caminhos de PDF gerado que coincidam com qualquer documento de entrada antes de iniciar um lote de benchmark
  • O exemplo C++Builder preserva subdiretórios de entrada relativos para os PDFs gerados, evitando que entradas recursivas com o mesmo nome compartilhem um arquivo de saída
  • Operações que falham, violações de limite de memória e cargas inválidas de zero páginas agora produzem um código de saída diferente de zero, mantendo o relatório de benchmark

Version 2.770.161

Fixed

  • As CLIs Preflight Delphi e C++Builder rejeitam caminhos de saída de relatório e agregado que coincidam com um PDF de entrada, evitando que relatórios sobrescrevam documentos de origem

Version 2.770.160

Fixed

  • O parsing ASN.1 rejeita codificações com high tag number que excedem a faixa de tags de 32 bits suportada em vez de aceitar um número de tag com wrap

Version 2.770.159

Fixed

  • A CLI Preflight do C++Builder preserva subdiretórios relativos para relatórios recursivos e links do dashboard, então PDFs com o mesmo nome não se sobrescrevem mais
  • Os dashboards Preflight do Delphi e do C++Builder codificam links de relatório corretamente para caracteres especiais e nomes de diretório não ASCII
  • Falhas de validação padrão no C++Builder agora retornam o código de saída 3 e aparecem como inválidas no dashboard para todo formato de relatório, incluindo entradas que não conseguem carregar

Version 2.770.158

Fixed

  • O exemplo de merge de PDF do C++Builder resolve caminhos de entrada relativos a partir do diretório do executável e impede que os diálogos de arquivo mudem o diretório de trabalho
  • Cada bookmark gerado agora aponta para a primeira página copiada do documento de entrada dele

Version 2.770.157

Fixed

  • O parser de objetos normaliza fins de linha CR e CRLF não escapados dentro de strings literais de PDF para LF, preservando retornos de carro escapados e continuações de linha

Version 2.770.156

Fixed

  • A compressão de stream LZW reporta o número real de bytes escritos para entrada vazia
  • Compressão e descompressão LZW completam a ida e volta corretamente com InitialCodeSize definido como 2, e a compressão rejeita literais fora de um alfabeto reduzido antes de escrever a saída

Version 2.770.155

Fixed

  • Nos builds Win64, importar dados de path SVG ou XPS com um número com expoente perto de 100, como 1e-100 ou 5e99, não levanta mais um overflow de ponto flutuante quando a aplicação desmascara exceções de ponto flutuante
  • Números assim agora são lidos com o valor real deles, então uma mantissa longa com expoente negativo grande é importada corretamente

Version 2.770.154

Fixed

  • DecodeLoadedPageBarcodes agora reporta os limites corretos do código de barras em páginas cujo CropBox difere do MediaBox quando nenhuma região de decodificação está definida; antes as posições eram deslocadas pelo offset do crop box, ou escaladas contra a altura de página errada
  • Os resultados de rosto do DetectLoadedRedactionFindings (com detecção de rosto habilitada) agora caem sobre os rostos detectados nessas páginas, em vez de ficarem deslocados em relação a eles
  • Os dois recursos renderizam a área visível da página (o CropBox recortado ao MediaBox) e agora mapeiam as posições detectadas de volta por essa mesma área; o page box passado a um IHPDFFaceDetector personalizado agora bate com o bitmap que ele recebe
  • A decodificação de código de barras com região explícita, e páginas sem CropBox ou cujo CropBox é igual ao MediaBox, ficam como estavam

Version 2.770.153

Fixed

  • ApplyLoadedOCRTextLayer agora posiciona a camada de texto invisível corretamente em páginas cujo CropBox difere do MediaBox; antes o texto pesquisável era deslocado pelo offset do crop box, ou escalado contra a altura de página errada, então seleções e destaques de busca não coincidiam com as palavras visíveis
  • O raster de OCR é renderizado a partir da área visível da página (o CropBox recortado ao MediaBox), e as posições das palavras reconhecidas agora são mapeadas de volta por essa mesma área
  • O page box entregue a um IHPDFOCREngine personalizado em THPDFOCRRequest agora é a área visível renderizada, batendo com o bitmap que ele recebe
  • Páginas sem CropBox, ou cujo CropBox é igual ao MediaBox, ficam como estavam

Version 2.770.152

Fixed

  • GetLoadedInvoiceSummary agora retorna o nome do comprador (BT-44) como texto decodificado, então nomes com letras não ASCII como "Müller & Söhne" não voltam mais como bytes UTF-8 brutos com o escape XML ainda no lugar
  • O nome do comprador agora sempre é lido da própria parte comercial do comprador, como o nome do vendedor e os outros campos do resumo
  • ValidateVisualXmlConsistency também ganha: um nome de comprador com letras acentuadas ou caracteres escapados agora é comparado com o texto visível da página como escrito

Version 2.770.151

Fixed

  • THPDFTable agora mantém na mesma página linhas amarradas por um RowSpan: quando o grupo não cabe no espaço restante, o grupo inteiro vai para a página seguinte junto com o cabeçalho repetido
  • Uma célula que abrange várias linhas não passa mais da margem inferior enquanto as linhas que ela cobre continuam na página seguinte
  • Um grupo de rowspan mais alto que uma página inteira ainda é dividido linha por linha, com as células de span cortadas na margem inferior de cada página
  • TotalHeightRendered reflete o grupo movido na última página

Version 2.770.150

Fixed

  • Células de THPDFTable com ColSpan ou RowSpan de zero ou menos agora são desenhadas como células únicas, no lugar em que a grade da tabela já as posicionou, em vez de empurrar as células seguintes para colunas erradas
  • Spans negativos não fazem mais a tabela ler fora da grade dela, e spans que passam da última coluna ou linha são cortados na borda da tabela também na medição e no desenho
  • Uma célula cuja primeira palavra é mais larga que a coluna não começa mais com uma linha vazia, então a linha dela não fica mais alta do que o texto quebrado precisa

Version 2.770.149

Security

  • Formulários XFA que declaram uma entidade interna no DOCTYPE deles não conseguem mais estourar a memória referenciando uma entidade grande muitas vezes: o texto substituído por entidades internas tem limite de 16 MB por documento
  • Um valor de entidade interna único maior que 1 MB é rejeitado
  • Documentos que excedem qualquer um dos limites falham ao carregar com um EHPDFXFAError em vez de expandir para gigabytes de texto; o uso comum de entidades não é afetado
  • Texto com muitas referências a entidades ou caracteres também é decodificado em tempo linear

Version 2.770.148

Fixed

  • RecalculateLoadedFormFieldsIncremental agora trata todo campo passado como alterado da mesma forma, independentemente da ordem em que os nomes são listados
  • Um campo calculado que foi escrito diretamente junto com um dos campos de origem dele mantém o valor escrito em vez de ser recalculado só quando listado depois dessa origem
  • Campos que dependem dos campos alterados ainda são recalculados uma vez, na ordem de cálculo

Version 2.770.147

Fixed

  • Códigos de barras GS1-128 com start code A (tipo 20 do THPDFBarcode) agora codificam os dados deles no code set A, como o Code 128 A faz
  • Letras minúsculas nesses códigos de barras agora são escritas com um SHIFT para o code set B em vez de um codeword do set B que os scanners leem como caractere de controle no set A
  • Símbolos GS1-128 A escaneados com texto em minúsculas então devolvem o texto original

Version 2.770.146

Fixed

  • Códigos de barras add-on EAN-2 e EAN-5 (tipos 18 e 19 do THPDFBarcode) não acrescentam mais um dígito calculado ao Text quando Checksum está habilitado
  • Desenhar tal código de barras repetidamente agora produz o mesmo símbolo a cada vez, em vez de crescer o texto em um dígito por redesenho e mudar o padrão de barras
  • Os símbolos add-on não carregam caractere de verificação por definição, então Checksum é ignorado para eles; o padrão de paridade continua derivado do valor como antes

Version 2.770.145

Fixed

  • A exportação XFDF agora decodifica valores de campos de formulário e texto de annotations como strings de texto de PDF (ISO 32000-1 7.9.2.2): valores UTF-16BE, strings hexadecimais e caracteres PDFDocEncoding como o bullet são escritos como o texto Unicode real em vez de dígitos hexadecimais ou lixo de code page
  • Conteúdos de annotation, autor, assunto, estado e texto de overlay exportados para XFDF mantêm caracteres não latinos, por exemplo comentários em chinês ou cirílico
  • Rich text (/RC, /RV) que começa com uma declaração XML agora é embutido sem ela, então o XFDF exportado continua sendo XML bem formado
  • A importação XFDF não converte mais texto pela code page ANSI do sistema: valores que o PDFDocEncoding pode representar são guardados como tal, qualquer outra coisa como string de texto UTF-16BE, tanto para campos de formulário quanto para texto de annotation
  • Arquivos XFDF exportados agora completam a ida e volta de caracteres fora da code page ANSI por ImportLoadedFormFromXFDF e ImportLoadedAnnotationsFromXFDF sem virar pontos de interrogação

Version 2.770.144

Fixed

  • Nomes e outros textos no resumo da fatura agora são decodificados do XML de fatura UTF-8, então um vendedor como "Müller GmbH" não volta mais como caracteres multibyte corrompidos
  • Caracteres de marcação escapados e referências de caractere são resolvidos, então "A & B" no XML é reportado como "A & B"
  • ValidateVisualXmlConsistency não reporta mais um nome de vendedor com letras acentuadas ou um ampersand como ausente do texto visível da página quando ele está impresso lá
  • O texto do resumo é retornado na code page ANSI do sistema, como os campos do record de resumo são strings ANSI; caracteres que essa code page não pode representar viram pontos de interrogação

Version 2.770.143

Fixed

  • GetLoadedInvoiceSummary agora reporta o total líquido no nível da fatura (BT-106) pelo somatório monetário do cabeçalho em vez do valor do primeiro item de linha
  • Total de impostos, total geral e valor a pagar também são lidos do somatório do cabeçalho, inclusive em faturas ZUGFeRD 1.0
  • A data de emissão (BT-2) agora é retornada como o valor de data puro, por exemplo 20260305, em vez de incluir a marcação DateTimeString aninhada
  • HPDFFacturXXMLElementText agora retorna os dados de caractere do elemento inteiro com as tags filhas removidas, e não casa mais elementos cujo nome apenas começa com o nome pedido

Version 2.770.142

Fixed

  • A exportação XFDF agora escreve caracteres fora do Basic Multilingual Plane, como emoji ou ideogramas CJK raros, como UTF-8 válido de quatro bytes em vez de codificar cada metade de surrogate separadamente, então readers XML estritos aceitam o arquivo
  • A importação XFDF agora decodifica referências de caractere acima de U+FFFF, como 😀, para o caractere completo em vez de truncá-lo para um caractere BMP sem relação
  • Referências de caractere que não nomeiam um valor escalar Unicode, e surrogates não emparelhados na exportação, agora viram U+FFFD em vez de corromper o texto
  • Arquivos XFDF escritos por versões anteriores ainda são importados corretamente

Version 2.770.141

Fixed

  • Valores de campo e texto de annotation com backslashes, como paths do Windows tipo C:\Data\2024\001, agora sobrevivem a uma exportação e importação XFDF sem mudança, em vez de ter sequências de dígitos viradas em caracteres de controle
  • Quando um backslash de outra forma seria lido de volta como escape, a exportação XFDF agora o escreve como o escape octal \134, como em uma string literal de PDF (ISO 19444-1 5.8.2)
  • A importação XFDF decodifica só os escapes octais que o formato usa para caracteres de controle e backslashes; outras sequências de backslash de arquivos de terceiros são mantidas literalmente
  • Texto SVG lido pelo mesmo leitor XML leve também não perde mais sequências de backslash

Version 2.770.140

Fixed

  • O cache persistente de páginas renderizadas habilitado por RenderCacheFolder agora funciona para documentos abertos com LoadFromFile, LoadFromStream e LoadFromRandomAccessSource; antes a camada de disco era pulada em cargas comuns, então nenhuma página era escrita na pasta ou lida dela
  • Documentos carregados de um arquivo são identificados pelo tamanho, pela data da última gravação e pelos bytes iniciais e finais, então reabrir um arquivo inalterado lê as páginas dele do cache sem fazer hash do arquivo inteiro
  • Documentos carregados de um stream ou de uma fonte de acesso aleatório são identificados pelo SHA-256 do conteúdo; defina RenderCacheFolder antes da carga para esses documentos usarem a camada de disco
  • Um documento editado depois de carregado não lê nem escreve mais entradas de disco pelo resto daquela carga, então páginas editadas nunca são servidas como, nem guardadas como, as páginas em cache do arquivo original
  • As entradas de disco agora também dependem do backend de renderização de página e do fluxo de proofing ICC, então um backend ou perfil de saída diferente não reusa páginas renderizadas com outras configurações; documentos criptografados nunca são escritos no cache de disco

Version 2.770.139

Fixed

  • A importação de arquivos XFDF grandes não fica mais lenta com o quadrado do tamanho do arquivo: um arquivo com milhares de campos ou annotations agora é analisado em milissegundos em vez de segundos ou minutos
  • Valores de campo com muitas quebras de linha ou outras referências de caractere são decodificados em tempo linear
  • A memória de pico ao analisar XFDF não cresce mais com o número de elementos vezes o tamanho do arquivo
  • Entrada SVG lida pelo mesmo leitor XML leve ganha o mesmo aumento de velocidade

Version 2.770.138

Fixed

  • Quando DecodeLoadedPageBarcodes repete a tentativa com uma página girada em 90 ou 270 graus, o raster entregue ao decodificador agora é girado no sentido horário, como AttemptRotationDegrees documenta
  • Símbolos encontrados só nessas repetições agora são reportados na posição real deles na página em vez da posição espelhada por ponto
  • A orientação reportada para esses símbolos agora bate com a direção de leitura deles na página em vez de sair 180 graus errada
  • Decodificadores de código de barras personalizados que contam com o giro horário documentado agora recebem rasters girados corretamente

Version 2.770.137

Fixed

  • Copiar páginas entre documentos (CopyPageFromDocument, CopyPageByPhysicalIndex, métodos de importação e merge de páginas) não transforma mais strings de texto que contêm "<<" e ">>" ou "[" e "]" em dicionários ou arrays; um comentário de annotation como "Read <<this>> [now]" era copiado como um dicionário quebrado
  • Strings hexadecimais, como nomes e identificadores de annotations, são copiadas em forma hexadecimal em vez de serem escritas como strings literais dos dígitos hexadecimais delas

Version 2.770.136

Fixed

  • Annotations criadas em páginas novas (AddStampAnnotation, AddTextAnnotation e os outros métodos de annotation do THPDFPage) agora escrevem /Rect com o canto inferior esquerdo primeiro, [llx lly urx ury]; vários deles escreviam a borda superior antes da inferior, por exemplo [395 712 575 652], o que viewers aceitam, mas validadores de PDF/A e algumas ferramentas de processamento rejeitam ou leem errado

Version 2.770.135

Changed

  • THotPDF.RenderCacheFolder agora é uma string (UnicodeString no Delphi 2009 e posteriores, UnicodeString no C++Builder) em vez de um AnsiString, então uma pasta de cache cujo caminho contém caracteres fora da code page do sistema, como um nome de usuário chinês em um Windows em inglês, é usada como passada em vez de virar pontos de interrogação
  • Código que atribui um AnsiString à propriedade continua compilando; o valor é convertido para Unicode na atribuição

Version 2.770.134

Fixed

  • SetOptionalContentGroupUsage com a categoria Zoom agora escreve a faixa de zoom como os números /min e /max, como a especificação de PDF os define; o valor inteiro era escrito como uma string de texto sob /Min, que os viewers ignoram, então a faixa de zoom da camada não tinha efeito
  • O valor de Zoom é a magnificação mínima seguida opcionalmente da máxima, separadas por um espaço (por exemplo '0.5 4'); um valor que não começa com um número agora lança uma exceção

Version 2.770.133

Fixed

  • O subsetting de fontes CFF/OpenType embutidas não descarta mais subroutines que glyphs ainda usam; glyphs com mais de oito hints, hints hstemhm ou counter masks eram varridos incorretamente, então uma subroutine em uso podia ser trocada por uma vazia e o glyph renderizado com contornos ausentes ou quebrados

Version 2.770.132

Fixed

  • RegisterNChannelColorSpace (o overload com definições de colorantes spot) agora escreve nomes de colorante que contêm espaços ou delimitadores, como "PANTONE 185 C", corretamente como chaves dos dicionários /Colorants, /Solidities e /DotGain; o nome bruto quebrava a sintaxe do arquivo
  • AddPDFX6ExternalOutputIntentSpotData escreve as chaves de colorante de solidity e dados espectrais dele da mesma forma

Version 2.770.131

Fixed

  • Os metadados XMP escritos com EnableXMPMetadata agora carregam Title, Author, Subject e Keywords como UTF-8 válido quando guardam texto na code page do sistema (por exemplo caracteres acentuados ou chineses atribuídos como AnsiString); os bytes brutos da code page deixavam o pacote como XML inválido, o que validadores de PDF/A e readers XMP rejeitam
  • Caracteres de controle que o XML 1.0 não permite ficam de fora desses valores de XMP

Version 2.770.130

Fixed

  • Imagens JBIG2 escritas com JBIG2Options.AccumulateGlobalsAcrossPages voltam a decodificar corretamente quando uma página posterior adiciona símbolos que as páginas anteriores não usavam; essas páginas continuavam apontando para o globals stream da primeira página, que não tem os símbolos novos, então os viewers as mostravam corrompidas ou não mostravam
  • Sempre que uma página adiciona símbolos, um globals stream com o dicionário completo até aquela página é escrito e usado daí em diante; páginas que não adicionam símbolos continuam compartilhando o mais recente

Version 2.770.129

Fixed

  • Salvar um documento carregado cujos objetos têm número de geração diferente de 0 agora escreve numerações de objeto consistentes: uma reescrita completa (SaveLoadedDocument e métodos relacionados) escreve todo objeto, referência e entrada de cross-reference com geração 0, onde headers de objeto e o trailer costumavam manter a geração antiga enquanto referências e a tabela de cross-reference usavam 0
  • Atualizações incrementais (SaveIncrementalUpdate e métodos relacionados) agora se referem a objetos existentes com o número de geração real deles; referências eram sempre escritas com geração 0 e por isso apontavam para objetos que não existem quando o original usava outra geração

Version 2.770.128

Fixed

  • THPDFPage.TextOutHTML com um MaxWidth não perde mais formatação na quebra de linha: quando vários runs com estilos diferentes moviam juntos para a linha seguinte, eram fundidos em um run desenhado com o estilo vigente na quebra, então a cor, o negrito ou itálico, a fonte, o tamanho, o offset de sub/superscript e o link deles se perdiam. Cada run agora mantém a formatação própria na linha nova

Version 2.770.127

Fixed

  • InvalidateRenderedPageCache agora também descarta as entradas de glyph Type 3 e halftone compartilhadas pela renderização paralela; depois de uma invalidação de todo o documento, a render paralela seguinte podia reusar glyphs em cache do conteúdo anterior
  • PreflightLoadedPAdES não esvazia mais o cache de renderização compartilhado como efeito colateral de checar o nível PAdES de uma assinatura, então renders depois de um preflight mantêm os glyphs em cache deles

Version 2.770.126

Fixed

  • A análise de revisão e modificação de documentos assinados agora reporta nomes de campo corretamente quando o nome contém parênteses ou termina com um, por exemplo "Total (net)"; o último caractere era cortado
  • Nomes de campo escritos com escapes octais ou com uma continuação de linha de backslash também são decodificados

Version 2.770.125

Fixed

  • SplitPDFToFiles não abre mais cada arquivo de saída no viewer de PDF padrão quando ele é escrito; os documentos internos que ele cria agora têm AutoLaunch desligado

Version 2.770.124

Fixed

  • GetLoadedTrailerID agora retorna o identificador permanente de arquivo do documento a partir do array /ID do trailer, como texto hexadecimal; ele procurava /ID no catálogo do documento, onde ele nunca está, e por isso não reportava identificador para praticamente todo arquivo

Version 2.770.123

Fixed

  • SetLoadedOpenActionPage agora escreve um destination que nomeia a página pedida; a referência de página era escrita como 0 0 R, então os viewers não conseguiam abrir o documento nessa página
  • O destination mantém a posição de view atual (left e top nulos) em vez de forçar 0 0, que saltava para o canto inferior esquerdo da página

Version 2.770.122

Fixed

  • SetLoadedViewerPreferences agora escreve HideToolbar, HideMenubar, FitWindow e DisplayDocTitle como valores booleanos; eles eram escritos como os nomes /true e /false, que os viewers não tratam como booleanos, então as preferências não tinham efeito

Version 2.770.121

Fixed

  • CheckLoadedSignatureSeedValue agora impõe o seed value /Reasons de um campo de assinatura quando as flags /Ff do campo o marcam como obrigatório (bit 4, valor 8); um motivo não listado passava antes
  • Motivos são comparados exatamente, como strings de texto são em PDF; "approved" não satisfaz mais um seed value que lista "Approved"

Version 2.770.120

Fixed

  • Aplicar stamp a uma página carregada mais de uma vez com StampLoadedPageText ou StampLoadedPageShape agora dá a cada stamp a opacidade própria, e a cada stamp de texto a fonte padrão própria; o segundo stamp e os seguintes reusavam a transparência e a fonte do primeiro stamp da página
  • Um stamp com a mesma opacidade e fonte que um anterior ainda compartilha os recursos, então stamps idênticos repetidos não fazem os recursos da página crescerem

Version 2.770.119

Fixed

  • ExtractLoadedPageStructureText agora segue elementos de estrutura cuja entrada /K é um número de marked-content simples (por exemplo /K 3 ou /K [0 1]), a forma mais comum em PDFs tagged; esses elementos eram ignorados, então o método não reportava ordem de estrutura para muitos documentos tagged ou devolvia o texto deles na ordem de desenho
  • O método não lê mais uma entrada de catálogo inválida quando um documento não tem objeto raiz utilizável

Version 2.770.118

Fixed

  • StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage e FlattenLoadedAnnotations não quebram mais páginas que herdam os recursos do nó /Pages pai; elas davam a essa página um dicionário /Resources novo e vazio, o que escondia as fontes e imagens herdadas, então o texto e as figuras originais da página deixavam de aparecer
  • A página agora recebe uma cópia própria dos recursos herdados antes de a fonte, imagem ou form nova ser adicionada

Version 2.770.117

Fixed

  • ComposeLoadedPagesNUp, ImposeLoadedPagesNUp, ImposeLoadedPagesBooklet e os métodos de page stitching agora levam adiante os recursos que uma página de origem herda do nó /Pages pai dela; essas páginas eram posicionadas sem as fontes e imagens delas, então o texto e as figuras delas ficavam ausentes ou errados na folha composta

Version 2.770.116

Fixed

  • SaveIncrementalUpdateAuthenticated agora pode gravar de volta no arquivo de onde a atualização incremental foi iniciada; a atualização aceita não conseguia substituir o alvo porque o documento ainda mantinha a origem aberta, e a chamada sempre falhava com um erro de acesso negado no commit
  • Como com um SaveIncrementalUpdate in-place, a origem é liberada antes da substituição, reaberta se a substituição falha, e BeginIncrementalUpdate precisa ser chamado de novo antes de outro save incremental

Version 2.770.115

Fixed

  • RepairPDFUA2Structure não leva mais tempo exponencial em árvores de estrutura cujos elementos são listados por mais de um pai (ou formam um ciclo); o reparo de herança de idioma, o reparo de ordem de headings e a varredura de marked-content por trás do reparo de texto alternativo agora percorrem cada elemento de estrutura uma vez. Uma árvore craftada com 24 elementos, cada um listando o seguinte duas vezes, antes levava cerca de 40 segundos

Version 2.770.114

Fixed

  • HPDFPaginateTable não adiciona mais páginas até a memória acabar quando uma linha não divisível não cabe abaixo das linhas de cabeçalho repetidas; em uma página que contém só cabeçalhos repetidos, a linha agora é dividida (ou, quando os cabeçalhos enchem a página, posicionada e podendo transbordar)
  • HPDFLayoutFootnotes e HPDFLayoutEndnotes não entram mais em loop infinito quando o separador não deixa espaço em uma página ou a altura mínima de fragmento de uma nota não pode ser atendida em uma página vazia; a nota é posicionada nessa página em vez disso

Version 2.770.113

Fixed

  • HPDFBalanceColumns não trava mais quando um item divisível tem uma linha mais alta que a altura da coluna; ele passava para a coluna seguinte para sempre. Uma linha assim agora é posicionada sozinha no topo de uma coluna vazia, transbordando, e o layout continua

Version 2.770.112

Fixed

  • Documentos criptografados com o standard security handler revisão 4 (crypt filters RC4 ou AES-128) abrem de novo quando o dicionário de criptografia deles omite a entrada /Length opcional de topo; a carga falhava com "Unsupported legacy Standard security handler V=4 R=4 Length=40"
  • Qualquer valor de /Length de topo é aceito para esses documentos, já que a chave do arquivo é sempre de 128 bits

Version 2.770.111

Fixed

  • ProcessObjectStreamsForDecompression e ExtractRawObjectFromStream não confiam mais na contagem /N declarada de um object stream: uma contagem acima de dez milhões é rejeitada e a contagem é limitada aos pares de número de objeto que o header do stream realmente pode conter, então um arquivo craftado não consegue mais fazer eles alocarem ou percorrerem milhões de entradas vazias

Version 2.770.110

Fixed

  • A Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 e métodos relacionados) agora lê /Root, /Info, /Encrypt, /Prev e /XRefStm de uma seção de cross-reference clássica apenas do dicionário de trailer da própria seção; em arquivos com atualizações incrementais ela podia pegar um /Prev dos objetos de uma revisão posterior (por exemplo um item de outline) ou do trailer e falhar ou ler a revisão errada
  • Uma cadeia de /Prev que volta para uma seção já lida agora para em vez de ler as mesmas seções de novo

Version 2.770.109

Security

  • ApplyLoadedRedactions agora remove o texto sob uma área de redaction em páginas cujo conteúdo é dividido em vários streams; quando um stream terminava com um operador e o seguinte começava com um (por exemplo ET seguido de BT), o texto depois da junção era casado com os operandos errados e continuava legível no arquivo salvo embora a área estivesse pintada por cima
  • Content streams sem dados são pulados de forma consistente, então os streams restantes coincidem com o texto que foi localizado na página

Version 2.770.108

Changed

  • GetLoadedOCGCount, GetLoadedOCGName, GetLoadedOCGVisibility e SetLoadedOCGVisibility agora usam todos o mesmo índice: a posição do grupo de optional content no array /OCGs de /OCProperties do documento. Count e name usavam a posição no array /ON da configuração padrão, visibility usava a posição em /OFF e o setter usava /OCGs, então um índice podia nomear três grupos diferentes; documentos sem /OCGs ainda fazem fallback para o array /ON
  • GetLoadedOCGVisibility agora reporta um grupo como oculto quando ele está listado em /OFF, ou quando não está em nenhum dos arrays e o /BaseState da configuração padrão é /OFF

Fixed

  • SetLoadedOCGVisibility não coloca mais o mesmo objeto de referência em /OCGs e em /ON ou /OFF (ele era liberado duas vezes quando o documento era liberado) e não vaza mais as entradas que remove

Version 2.770.107

Fixed

  • CopyLoadedPage não faz mais os dicionários das páginas de origem e destino compartilharem os mesmos objetos de entrada /Contents e /Resources; os objetos compartilhados eram liberados duas vezes quando o documento era liberado ou a entrada de destino era substituída, o que podia corromper a memória
  • A página de destino agora recebe a referência própria ao conteúdo e aos recursos de origem (valores diretos são copiados), e a entrada de cache de páginas renderizadas dela é atualizada

Version 2.770.106

Fixed

  • Carregar um PDF danificado não vaza mais memória para cada objeto de stream que não pode ser lido, por exemplo um stream sem entrada /Length e sem keyword endstream, ou um cujo dicionário ou dados não podem ser carregados; abrir esses arquivos repetidamente fazia o processo crescer sem limite

Version 2.770.105

Fixed

  • Números escritos com fração vazia como "21." (permitidos pela especificação de PDF) não fazem mais a carga falhar; um /Length de stream indireto escrito assim derrubava o stream inteiro, deixando a página em branco
  • Números com sinal de mais no início, parte inteira vazia como ".5", ou parte inteira além da faixa de 32 bits também são lidos corretamente

Version 2.770.104

Fixed

  • Demo PDFmerge: com bookmarks habilitados, cada bookmark de origem agora abre a primeira página mesclada daquela origem; antes todo bookmark apontava para a primeira página do arquivo mesclado
  • Demo PDFmerge: as fontes de exemplo padrão e o nome de saída, e quaisquer nomes relativos digitados no formulário, são resolvidos contra a pasta do demo; adicionar arquivos ou escolher a saída em um diálogo não muda mais o diretório atual e quebra as entradas relativas

Version 2.770.103

Fixed

  • Demo TextOut: o TextOut.pdf gerado agora realmente usa content streams comprimidos, como os comentários do demo prometem; ele define Compression como cmFlateDecode em vez de confiar no argumento de BeginDoc, que não controla a compressão

Version 2.770.102

Fixed

  • Imagens desenhadas com AlphaBlend em um enhanced metafile agora mantêm a opacidade gravada delas quando o metafile é convertido com THPDFEmfPatcher.RenderEmfDirect; elas eram mescladas com opacidade zero e desapareciam
  • O formato alfa gravado também é respeitado, então imagens sem canal alfa são mescladas com a opacidade constante delas em vez de falhar
  • Records de bitmap cujo header ou dados de pixel apontam para fora do record, ou cujos dados de pixel são mais curtos que o bitmap declarado, agora são pulados em vez de serem lidos além do record
  • Bitmaps maiores que 32768 pixels de lado ou 64 megapixels no total são pulados em vez de serem alocados por inteiro

Version 2.770.101

Fixed

  • StitchLoadedPage, StitchLoadedPageSideBySide e StitchLoadedPageSideBySideEx agora desenham a página de origem por meio de um Form XObject que carrega o conteúdo, o page box e os recursos da página; o dicionário da página em si era registrado como um XObject, que viewers não conseguem pintar, então a página costurada não aparecia
  • Costurar mais de uma página no mesmo destino mantém cada página costurada: cada uma recebe o nome de XObject próprio em vez de todas compartilharem um nome que substituía a página anterior

Version 2.770.100

Fixed

  • Form XObjects agora são recortados ao /BBox deles quando renderizados, como a ISO 32000-1 exige; conteúdo que um form desenha fora da bounding box dele não aparece mais na página
  • Form XObjects aninhados mais de quatro níveis agora são desenhados; eles eram descartados como se recorressem. O aninhamento é permitido até 32 níveis
  • Um form XObject que desenha a si mesmo, direta ou indiretamente por meio de outros forms, é detectado e a chamada repetida é pulada, com uma entrada de recursão nos diagnósticos de renderização

Version 2.770.99

Fixed

  • Demo PDFOptimize: a fileira de retângulos pequenos em cada página de texto agora recebe stroke, então as barras ficam visíveis e o content stream termina todo path com um operador de pintura como a ISO 32000-1 8.5.2 exige; os tamanhos reportados do PDF de texto mudam um pouco como resultado

Version 2.770.98

Fixed

  • Strings literais que contêm parênteses balanceados sem backslashes, como /Title (Report (draft) v2), agora são lidas por completo quando um documento é carregado; a string costumava terminar no primeiro parêntese de fechamento e o resto do dicionário era lido errado
  • Parênteses escapados continuam funcionando como antes

Version 2.770.97

Fixed

  • A carga não confunde mais um objeto de dicionário com um stream quando um dos valores de string ou name dele contém as letras "stream" no fim de uma linha, como um dicionário Info com /Title (Livestream); o objeto era lido como um stream e as entradas dele se perdiam
  • A keyword stream agora é reconhecida só como um token próprio depois do >> de fechamento do dicionário e no fim de uma linha, como a especificação de PDF define os stream objects

Version 2.770.96

Fixed

  • Demo Stamp: arquivos PNG e BMP oferecidos pelo seletor de imagens agora podem ser usados como o stamp de imagem; antes só JPEG funcionava e outros arquivos falhavam com um erro de bitmap inválido
  • Demo Stamp: a annotation de carimbo é posicionada na área superior direita de cada página como previsto, abaixo de um stamp de imagem no canto superior, em vez de no canto inferior direito, onde ela sobrepunha um stamp de imagem do canto inferior direito
  • Demo Stamp: os caminhos padrão de entrada, saída e imagem são resolvidos contra a pasta do demo, e escolher um arquivo em um diálogo não muda mais o diretório atual, então nomes relativos continuam apontando para os mesmos arquivos

Version 2.770.95

Fixed

  • Requisições de timestamp construídas com um policy OID (HPDFRFC3161BuildRequest, e assinatura com uma policy de time stamp authority) agora codificam a policy pedida como o object identifier puro que a RFC 3161 especifica
  • A policy era embrulhada em uma tag de contexto que a RFC 3161 reserva para extensões de requisição, então uma time stamp authority estrita rejeitava a requisição ou ignorava a policy
  • Requisições sem policy OID ficam como estavam

Version 2.770.94

Fixed

  • Demo ViewerPref: deixar Initial Zoom desmarcado agora significa de verdade "None (Default)"; o PDF gerado não abre mais em fit-height, que era o default do componente que o demo não restaurava

Version 2.770.93

Fixed

  • Demo FileAttach: as annotations de anexo no nível de página agora são criadas quando o demo roda de uma pasta cujo nome tem caracteres fora da code page ANSI do sistema; o arquivo anexado é passado pelo nome de arquivo puro dele em vez de um caminho absoluto

Version 2.770.92

Fixed

  • Demo HTMLText: um caminho de saída com caracteres fora da code page ANSI do sistema (por exemplo um nome de pasta grego ou cirílico) agora é escrito corretamente em vez de falhar
  • Demo HTMLText: o PDF gerado não é mais aberto automaticamente em um reader externo, batendo com os outros demos de console

Version 2.770.91

Fixed

  • A importação de paths SVG e XPS não levanta mais EOverflow em números com centenas de dígitos, ou em números longos combinados com um expoente grande; esses valores são rejeitados como qualquer outro número fora da faixa
  • Afeta imagens SVG posicionadas pelas APIs de importação SVG e geometria de paths XPS, em compiladores cujas exceções de ponto flutuante não são mascaradas
  • Números comuns, incluindo mantissas longas com expoentes negativos, são lidos como antes

Version 2.770.90

Fixed

  • Demo EmfDraw: uma conversão que falha (por exemplo um metafile de entrada faltando) agora termina com código de saída 1 em vez de 0, então scripts e etapas de build que rodam o demo detectam a falha

Version 2.770.89

Fixed

  • Demo CJKAnnotations: quando Arial Unicode MS não está instalada, o demo agora realmente faz fallback para o Microsoft YaHei; ele verifica as fontes instaladas em vez de esperar uma exceção que uma fonte faltando nunca levantava, então o texto CJK não acaba mais em uma fonte substituta sem cobertura CJK

Version 2.770.88

Fixed

  • Content streams que aninham mais de 32 operadores q não perdem mais o graphics state que os envolve: saves mais fundos eram ignorados enquanto o Q correspondente ainda restaurava, então texto e gráficos depois do bloco aninhado usavam o estado de antes de um q externo
  • Afeta a extração de texto pela interface de content device e a exportação SVG dessas páginas
  • Os estados salvos agora crescem com a profundidade do aninhamento; aninhamento muito profundo ainda é emparelhado corretamente

Version 2.770.87

Fixed

  • ImageDemo: o bookmark "Image zoom" agora salta para o heading IMAGE ZOOM em vez de um ponto perto da parte de baixo da primeira página

Version 2.770.86

Security

  • Abrir um PDF criptografado para um certificado de destinatário com chave de curva elíptica (ECDH key agreement) agora limpa o shared secret bruto e os buffers intermediários de derivação de chave assim que eles deixam de ser necessários, inclusive na nova tentativa com a ordem de bytes alternativa e em todos os caminhos de falha antecipada
  • Assinar com um certificado do repositório de certificados do Windows não deixa mais crypt32.dll e advapi32.dll carregadas quando uma função CryptoAPI necessária não pode ser encontrada

Version 2.770.85

Security

  • Fazer o outline de um glyph Type 1 cujo charstring usa sbw com operandos insuficientes não lê mais antes da operand stack; o operador malformado é ignorado
  • Um charstring Type 1 que termina com o byte de escape de um operador de dois bytes não lê mais além do fim do charstring

Version 2.770.84

Fixed

  • O comprimento em bytes dos códigos de caractere em um intervalo de codespace de CMap agora vem do comprimento das hex strings dele, como a ISO 32000-1 9.7.6.2 especifica; um intervalo como <0000> <00FF> era tratado como de um byte porque o limite superior dele cabe em um byte, o que partia códigos de dois bytes ao renderizar e extrair texto
  • Intervalos de codespace carregados de CMaps embutidos também carregam o comprimento de código deles

Version 2.770.83

Fixed

  • Embutir um subset de uma fonte TrueType instalada mantém cada componente de composite glyphs (letras acentuadas e semelhantes) cujos componentes trazem um scale ou uma transform 2x2; o componente depois de tal transform era lido errado, então podia sumir do subset ou ter a referência de glyph dele escrita por cima dos bytes da transform
  • Composite glyphs cujos componentes se referem entre si em ciclo, se referem além da contagem de glyphs da fonte ou apontam para um glyph vazio não fazem mais o font subsetting travar ou fechar
  • Em um subset, um composite glyph aninhado dentro de outro composite tem as referências de componente dele renumeradas uma vez em vez de duas

Version 2.770.82

Fixed

  • Números reais em dicionários de fonte CFF (FontMatrix, FontBBox, blue values e semelhantes) são lidos corretamente quando um byte guarda um sinal, ponto decimal ou expoente junto a um dígito; o dígito no mesmo byte costumava ser descartado, então -2.25 virava -0.5
  • Esses valores são interpretados com ponto como separador decimal independente das configurações regionais do Windows; em sistemas que usam vírgula decimal eles falhavam com um erro de conversão

Version 2.770.81

Fixed

  • A extração de texto e as consultas ToUnicode não devolvem mais uma string multi-caractere obsoleta para códigos em uma entrada de array beginbfrange que vem depois de outra entrada de array com alvos multi-caractere; esses códigos agora mapeiam para o próprio caractere único deles

Version 2.770.80

Fixed

  • Instanciar uma fonte variável TrueType em valores de eixo escolhidos (por exemplo por meio de SetVariableFontAxis) não distorce mais glyphs cujos dados gvar têm uma sparse tuple depois de outra tuple; a sparse tuple partia dos deltas da tuple anterior e movia esses pontos duas vezes
  • Pontos que uma sparse tuple deixa de fora agora são interpolados apenas a partir dos pontos que essa tuple lista, como as regras de gvar do OpenType exigem

Version 2.770.79

Security

  • AddTiffFromFile agora recusa uma página TIFF cuja largura vezes altura exige um raster de mais de 2 GB, lançando uma exceção em vez de alocar um buffer cujo tamanho havia sofrido wraparound e deixar o decoder escrever além do fim dele (heap overflow)
  • Uma página TIFF com largura ou altura zero é recusada do mesmo jeito
  • Páginas TIFF altas (1200 linhas ou mais) agora reportam uma falha de alocação em vez de decodificar em um buffer nil

Version 2.770.78

Fixed

  • Glyphs de fonte Type 3 agora seguem a escala horizontal (Tz): um texto desenhado a 200% de escala horizontal é desenhado duas vezes mais largo em vez de na largura natural dele
  • Glyphs de fonte Type 3 agora seguem o text rise (Ts), então superscritos e subscritos em fontes Type 3 são elevados ou rebaixados em vez de ficar na baseline
  • Os avanços dos glyphs já eram escalados; as formas dos glyphs agora se alinham com eles

Version 2.770.77

Fixed

  • Requisições de timestamp RFC 3161 construídas por HPDFRFC3161BuildRequest sempre codificam o nonce como um DER INTEGER mínimo; quando o nonce aleatório começava com um byte zero, a requisição carregava um zero à esquerda redundante, que servidores de timestamp estritos rejeitam como malformado
  • O nonce devolvido mantém o comprimento pedido, então chamadores que o comparam com a resposta de timestamp não são afetados
  • Arquivos PDF 2.0 criptografados (AES-256-GCM) cujos object streams decifram para conteúdo vazio não falham mais ao carregar com um erro de autenticação GCM; um object stream vazio com authentication tag válida agora é aceito, enquanto uma tag adulterada continua rejeitada

Version 2.770.76

Fixed

  • Demo Hyperlink: captions de links e URLs com caracteres fora da code page ANSI do sistema (por exemplo texto grego, cirílico ou acentuado) não viram mais pontos de interrogação; as captions são desenhadas como texto Unicode com um link URI colocado sobre elas
  • Demo Hyperlink: caracteres não ASCII em uma URL são percent-encoded como UTF-8 antes de serem guardados na link action, então readers abrem o endereço pretendido

Version 2.770.75

Fixed

  • Cores CalRGB com componentes fora de 0..1 não levantam mais uma exceção de ponto flutuante (EInvalidOp) durante a renderização; os componentes são clipados ao intervalo válido deles antes de o gamma ser aplicado
  • Essas cores agora renderizam como a cor mais próxima dentro do intervalo em vez de uma indefinida em compiladores cujas exceções de ponto flutuante são mascaradas

Version 2.770.74

Fixed

  • Reescritas da Direct File API (por exemplo DADirectEncryptFileAES256 e DADirectDecryptFileAES256) rodando em várias threads ao mesmo tempo não corrompem mais a saída umas das outras; a cópia de byte-range que elas compartilham usava um buffer de todo o processo

Version 2.770.73

Fixed

  • O cache de revocação compartilhado de THPDFSignatureValidationBatch agora encontra respostas OCSP para certificados de signatário cujo número de série tem o bit mais alto ligado; essas respostas eram guardadas sob um serial sem o byte zero à esquerda e consultadas com ele, então toda assinatura posterior perdia o cache
  • Respostas OCSP assinadas por um responder delegado, ou que identificam o responder pela chave, agora são guardadas sob o emissor do certificado e podem ser reutilizadas por assinaturas posteriores do lote; antes, eram guardadas sob o nome do responder ou não eram guardadas
  • Assinaturas que dependem de evidência em cache de uma assinatura anterior do mesmo lote agora chegam a um veredito confiável em vez de um status de revocação desconhecido nesses casos

Version 2.770.72

Fixed

  • Procurar um arquivo embutido pelo nome (GetLoadedEmbeddedFileSpec, ExtractEmbeddedFileBytes, SaveLoadedEmbeddedFileToDisk e métodos relacionados) não estoura mais a pilha quando a name tree /EmbeddedFiles do documento tem nós que se listam mutuamente ou a si mesmos como /Kids
  • Cada nó da name tree é pesquisado uma vez, então nomes alcançáveis por um nó compartilhado continuam sendo encontrados

Version 2.770.71

Fixed

  • Demo PageSizes: as páginas de formato chinês 8K e 16K agora imprimem a descrição completa delas em todos os sistemas; os nomes dos formatos chineses são dados em pinyin porque as descrições são desenhadas em Arial, que não tem glyphs CJK, e texto não ASCII virava pontos de interrogação em code pages não CJK

Version 2.770.70

Fixed

  • Shadings axiais (Type 2) agora cobrem toda a área pintada quando o eixo do shading fica longe dela, por exemplo um gradiente definido fora da borda da página com /Extend [true true]; essas áreas ficavam sem pintura
  • Vale para o operador sh e para shading patterns usados como cor de fill ou stroke

Version 2.770.69

Fixed

  • Demo Navigation: os named destinations chapter-1 e chapter-2 agora abrem as páginas deles no topo, 60 points abaixo da borda superior, em vez de rolar para o pé da página; coordenadas de destination são do PDF default user space com a origem no canto inferior esquerdo

Version 2.770.68

Fixed

  • A extração de texto de um PDF com uma fonte TrueType embutida não trava mais por minutos quando a cmap da fonte está truncada mas alega milhares de segmentos ou grupos; o comprimento da tabela agora é verificado antes de os segmentos e grupos serem lidos
  • Construir o mapa glyph-to-Unicode de uma fonte TrueType embutida percorre cada subtabela cmap uma vez por segmento ou grupo em vez de consultar todos os 65.535 code points BMP um a um, o que também acelera a extração com fontes CJK grandes
  • Consultas de glyph por uma subtabela cmap format 4 ou format 12 truncada param no fim dos dados da fonte em vez de varrer segmentos que não estão lá

Version 2.770.67

Fixed

  • Funções exponenciais (Type 2) e stitching (Type 3) agora respeitam um /Domain de uma entrada como [0 0.5]; ele era ignorado e substituído por [0 1], então as entradas eram clipadas ao intervalo errado
  • Uma função exponencial sem /C1 agora usa o padrão [1.0]; cores Separation e shadings definidos assim renderizavam em preto
  • Funções exponenciais agora avaliam C0 + x^N (C1 - C0) com a própria entrada em vez de reescalá-la para 0..1, batendo com a ISO 32000-1 para domínios diferentes de [0 1]
  • Saídas de funções exponenciais são clipadas ao /Range apenas quando ele está presente; spot colours com um espaço alternativo Lab (L* até 100) eram clipados a 0..1 e renderizavam quase pretos
  • Uma função exponencial cuja entrada está fora dos valores para os quais está definida é rejeitada em vez de levantar uma exceção de ponto flutuante

Version 2.770.66

Fixed

  • Arquivos PKCS#12 / PFX exportados sem senha por ferramentas que derivam as chaves delas de uma senha de comprimento zero agora abrem com senha vazia em HPDFParsePFX, HPDFParsePFXByLocalKeyID, HPDFEnumeratePFXIdentities e nos métodos de assinatura PFX; eles costumavam falhar com um erro de autenticação
  • Com senha vazia a encoding padrão da RFC 7292 é tentada primeiro e a forma de comprimento zero em segundo, tanto na verificação de integridade quanto na decifração da chave, então arquivos que já abriam continuam abrindo do mesmo jeito

Version 2.770.65

Fixed

  • O cabeçalho de página do demo DBTable do C++Builder agora mostra "Page 1" em vez de "Page1"
  • Um erro enquanto o demo DBTable do C++Builder escreve a tabela dele agora fecha o documento pela metade construído, então o próximo clique começa de um estado limpo

Version 2.770.64

Fixed

  • Os demos de console do C++Builder AnnotationInteraction, FormFields, CanvasDraw, EmfDraw, FormXObject, GraphicDraw, ImageDemo, ImageMask, LineGraphicsState e RtLTextOut mudam para a pasta do executável quando iniciados sem argumentos, como os demos Delphi, então os arquivos de entrada deles são encontrados e os PDFs deles são escritos lá mesmo quando executados de outro diretório
  • Os demos Graphic do C++Builder não enviam mais uma mensagem de fechar para toda janela cujo título contém o nome do PDF de saída deles, o que podia fechar janelas sem relação
  • O demo ImageMask do C++Builder agora funciona como a versão Delphi: verifica que Mask.bmp e Image.jpg existem, comprime a saída dele, não abre um viewer e reporta erros em vez de terminar com uma exceção não tratada
  • O demo EmfDraw do C++Builder reporta um erro, por exemplo um Sample.emf faltando, e devolve um código de saída diferente de zero em vez de terminar com uma exceção não tratada
  • O demo AddDelPages do C++Builder resolve nomes de arquivo de entrada e saída relativos contra a pasta do executável, como a versão Delphi

Version 2.770.63

Fixed

  • O demo FileAttach do C++Builder escreve FileAttach.pdf ao lado do executável, o nome que a versão Delphi e o readme usam, em vez de Output.pdf no diretório de trabalho, e mantém o anexo FileAttach.txt dele na mesma pasta

Version 2.770.62

Fixed

  • A Direct File API (DADirectEncryptFileAES256, DADirectDecryptFileAES256 e os outros métodos de reescrita direta) agora lê offsets de cross-reference stream além de 2 GiB corretamente; esses offsets eram truncados e viravam negativos, então objetos na parte alta de um arquivo grande não podiam ser encontrados
  • Offsets /Prev e /XRefStm além de 2 GiB no trailer ou cross-reference stream são seguidos em vez de serem lidos como 0, então revisões mais antigas e seções cross-reference híbridas de arquivos grandes não são mais puladas
  • O mesmo vale ao carregar um arquivo grande e ao inspecionar as revisões dele
  • Os novos helpers HPDFDirectReadUIntBE64 e HPDFFindNameInt64 devolvem o valor completo de 64 bits

Version 2.770.61

Fixed

  • Um cross-reference stream cujas larguras de campo /W são negativas ou maiores que 8 bytes agora é rejeitado em vez de decodificado; o carregamento cai para varrer o arquivo em busca dos objetos dele
  • Os métodos da Direct File API (por exemplo DADirectEncryptFileAES256) não leem mais memória fora da tabela decodificada e não podem mais travar nesse arquivo; em vez disso o recusam

Version 2.770.60

Fixed

  • A extração de texto, a busca e as posições de glyph agora leem o operador de texto " corretamente: o primeiro operando dele é o word spacing e o segundo o character spacing; os dois estavam trocados
  • Linhas escritas com " e word spacing ou character spacing diferente de zero não reportam mais posições de glyph deslocadas, o que podia juntar ou separar palavras no texto de página extraído e deslocar acertos de busca
  • A renderização de página não era afetada

Version 2.770.59

Fixed

  • Demo Table: as linhas cobertas pelo rowspan "Group A" agora mostram o item e a nota delas nas colunas Item e Notes; antes o texto da nota era deslocado uma coluna e descartado
  • Demo Table: o PDF gerado não é mais aberto automaticamente em um reader externo, batendo com os outros demos de console, e caminhos de saída fora da code page ANSI do sistema são mantidos intactos

Version 2.770.58

Fixed

  • Descomprimir dados Flate para um stream não vaza mais o estado do decoder (cerca de 40 KB cada vez) quando o stream de origem ou destino levanta uma exceção no meio do caminho, por exemplo quando uma escrita falha ou um stream atinge o limite de tamanho dele
  • Comprimir uma string não vaza mais o buffer temporário dela se a compressão levantar uma exceção
  • Compressão e descompressão bem-sucedidas se comportam exatamente como antes

Version 2.770.57

Fixed

  • Certificados cuja extensão name constraints não está marcada como critical não são mais rejeitados como ilegíveis durante a validação de certificado de assinatura; um certificado de CA desse tipo fazia toda chain por ele falhar ao ser construída
  • As constraints de tal certificado agora são aplicadas ao resto da chain como as critical, então nomes de signatário fora das subtrees permitidas continuam reportados como violação de name constraint

Version 2.770.56

Fixed

  • Funções de calculadora PostScript (Type 4) com procedures if ou ifelse profundamente aninhadas não estouram mais a pilha durante a renderização; tal função é tratada como inutilizável e a cor cai para o fallback como para qualquer outra função inválida
  • O aninhamento é limitado a 64 níveis, bem além do que programas de calculadora reais usam; tint transforms Type 4 comuns e shadings renderizam como antes
  • Avaliar funções de calculadora precisa de menos pilha por nível de aninhamento

Version 2.770.55

Fixed

  • Demo E-Invoice: o XML Factur-X / ZUGFeRD extraído é decodificado como UTF-8, então caracteres acentuados e outros não ASCII em nomes e endereços não aparecem mais corrompidos no painel XML
  • Demo E-Invoice: no Delphi XE2 e posteriores o veredito combinado de e-invoice agora decide o passo de business rules, então uma falha de arquivo de regras ou engine falha a validação em vez de passar em silêncio
  • Demo E-Invoice: uma divergência entre texto visível e XML da verificação heurística de consistência é reportada como warning e não falha mais sozinha a validação geral

Version 2.770.54

Security

  • A verificação de assinatura CMS (HPDFVerifyCMSSignature, HPDFVerifyCMSSignatureEx e assinaturas PDF carregadas) agora reporta uma assinatura malformada quando os signed attributes não têm o atributo content-type ou nomeiam um content type diferente do conteúdo assinado, como a RFC 5652 exige; tais assinaturas costumavam verificar como válidas, o que deixava signed attributes feitos para um content type serem apresentados como assinando outro
  • Assinaturas com o atributo content-type repetido são rejeitadas como antes
  • Countersignatures, que por definição não carregam atributo content-type, e tokens de timestamp RFC 3161 continuam verificando como antes

Version 2.770.53

Fixed

  • Clicar o botão do demo Annotations do C++Builder uma segunda vez não escreve o documento anterior de novo antes de o novo ser iniciado
  • Um erro enquanto o demo Annotations do C++Builder constrói o PDF dele agora fecha o documento pela metade construído, então o próximo clique começa de um estado limpo

Version 2.770.52

Fixed

  • Vários documentos ou instâncias de THotPDF em um processo que usam a mesma pasta de disk render cache agora compartilham um único índice de cache; antes cada instância mantinha o índice próprio e sobrescrevia o das outras a cada save, perdendo a ordem de uso recente
  • Os limites de contagem de documentos e tamanho total do disk render cache são aplicados entre todas as instâncias que compartilham uma pasta, então a pasta não cresce mais além do orçamento dela quando vários viewers ou render threads a usam ao mesmo tempo
  • A mesma pasta é reconhecida independente de maiúsculas ou minúsculas ou de um delimitador de caminho final

Version 2.770.51

Fixed

  • Reamostrar um bitmap com o kernel bicubic ou Lanczos3 agora funciona para todo formato de pixel de origem; uma origem de 32 bits, 8 bits ou 1 bit costumava ser lida como se tivesse pixels de 3 bytes, o que embaralhava os canais de cor dela ou lia além do fim das linhas dela
  • Essas origens são convertidas para 24 bits primeiro, então a imagem reamostrada tem as mesmas cores da origem; o resultado continua um bitmap de 24 bits como antes
  • Origens de 24 bits e o kernel halftone não são afetados

Version 2.770.50

Fixed

  • Demo PreflightCLI: -d em um único PDF agora escreve o índice do dashboard mesmo quando o arquivo falha no preflight
  • Demo PreflightCLI: arquivos que levantam um erro durante o preflight são listados como falhados no índice do dashboard, e o código de saída reflete cada arquivo falhado
  • Demo PreflightCLI: com -r, reports de PDFs de mesmo nome em subdiretórios diferentes são escritos em subpastas correspondentes em vez de se sobrescreverem, tanto com -o quanto no dashboard
  • Demo PreflightCLI: -f json e -f csv agora produzem o mesmo schema com ou sem --profile / --preset / --aggregate, incluindo a coluna spec do CSV
  • Demo PreflightReport: reports CSV gerados com um profile agora preenchem a coluna spec como reports sem um

Version 2.770.49

Fixed

  • O demo LargeFile do C++Builder agora gera o conjunto de entradas de benchmark que o readme dele descreve, como a versão Delphi: LargeFile-Text.pdf, LargeFile-Image.pdf, LargeFile-Mixed.pdf e o LargeFile-Encrypted.pdf criptografado com AES-256 em uma pasta BenchmarkInputs ao lado do executável; ele escrevia apenas um único LargeFile.pdf de 200 páginas
  • O demo LargeFile do C++Builder aceita as opções --output-dir, --scale (small, default, large, huge) e --pages e imprime o comando HugeFileBenchmark para a pasta gerada

Version 2.770.48

Fixed

  • O demo Outlines do C++Builder agora escreve Outlines.pdf ao lado do executável, o arquivo que o readme nomeia, em vez de Output.pdf no diretório de trabalho, e reporta onde foi salvo em vez de abrir um viewer
  • O demo Outlines do C++Builder agora constrói o mesmo documento de 10 páginas com page labels Arial que a versão Delphi; os labels no pé da página em y = 830 eram cortados na borda da página e os bookmarks "Bottom" da última página apontavam abaixo deles
  • Um erro enquanto o demo Outlines do C++Builder escreve o PDF não deixa mais o demo incapaz de criar outro documento

Version 2.770.47

Fixed

  • O disk render cache persistente agora funciona sob pastas cujos nomes contêm caracteres fora da code page ANSI do sistema (por exemplo uma pasta de perfil de usuário com caracteres não latinos); antes toda escrita de página falhava ali e o cache nunca produzia um hit
  • THPDFDiskPageCache recebe a pasta raiz dele como uma string Unicode e mantém todos os caminhos de cache em Unicode, incluindo a substituição atômica de arquivos de página e do índice de cache

Version 2.770.46

Fixed

  • A renderização de region e tile (RenderLoadedPageRegionToBitmap, RenderLoadedPageTiles, progressive region rendering) não deixa mais um tile em branco quando o único conteúdo dele vem de um form XObject colocado longe da origem; um form agora conta como cobrindo o /BBox dele conforme colocado pelo /Matrix dele e a transformação corrente
  • Texto colocado com TD, T*, ' ou " agora cai na linha certa ao decidir quais tiles o contêm, então linhas posteriores de um parágrafo não são mais descartadas dos tiles em que aparecem
  • Offsets Td são escalados pela text matrix e medidos do início da linha, batendo com como o texto é de fato desenhado
  • Character spacing, word spacing, escala horizontal e text rise são levados em conta ao estimar onde um text run termina, e glyphs não são mais presumidos mais estreitos que um em

Version 2.770.45

Fixed

  • O demo MemStream do C++Builder escreve MemStream.pdf ao lado do executável, o nome que a versão Delphi usa, em vez de Memory.pdf no diretório de trabalho
  • O demo MemStream do C++Builder agora recarrega o PDF em memória com LoadFromStream e verifica que ele tem uma página antes de salvá-lo
  • Um erro enquanto o demo MemStream do C++Builder escreve o PDF não deixa mais o demo incapaz de criar outro documento

Version 2.770.44

Fixed

  • O demo HelloWorld do C++Builder não envia mais uma mensagem de fechar para toda janela cujo título contém HelloWorld.pdf quando inicia, o que podia fechar janelas sem relação como um editor ou um gerenciador de arquivos
  • O demo HelloWorld do C++Builder escreve HelloWorld.pdf ao lado do executável e o abre apenas quando --open é dado; como a versão Delphi ele aceita um nome de arquivo de saída ou --output <file>

Version 2.770.43

Fixed

  • Carregar um PDF cuja page tree tem nós /Pages intermediários não descarta mais as páginas abaixo desses nós; tais documentos antes reportavam apenas as páginas listadas diretamente sob a raiz da árvore
  • As páginas mantêm a ordem da page tree delas, então índices de página, page boxes e conteúdo batem com o que outros viewers mostram
  • Uma página cujo /Type é guardado como um indirect object é reconhecida como página durante esse passo de ordenação

Version 2.770.42

Fixed

  • Carregar um PDF cuja page tree se refere de volta a si mesma (um nó /Pages listado entre os /Kids dele mesmo, ou dois nós que se listam mutuamente) não fecha mais com stack overflow; cada nó da page tree é percorrido uma vez e árvores absurdamente profundas são cortadas
  • Um nó da page tree cujo array /Kids ou nome /Type é guardado como indirect object agora carrega as páginas dele em vez de falhar ou ler memória inválida

Version 2.770.41

Fixed

  • THPDFPage.LastAnnotation agora devolve o link criado por AddGoToLink, AddURILink, AddNamedDestinationLink, AddGoToRLink, AddLaunchLink, AddStructureDestinationLink e AddGoToRStructureDestinationLink
  • Chamar SetAnnotationFlags, SetAnnotationBorderStyle ou AddPopupAnnotationFor com LastAnnotation logo após adicionar um link não faz mais silenciosamente nada nem muda a anotação criada anteriormente em vez disso

Version 2.770.40

Fixed

  • O job JSON passado para THPDFJobProcessor.Execute, HPDFDocRunJob e HPDFDocRunJobWithCallbacks agora é lido como UTF-8 do começo ao fim: escapes \uXXXX não colapsam mais na code page ANSI, e surrogate pairs escapadas como 😀 produzem o caractere pretendido em vez de dois quebrados
  • Nomes de arquivo de entrada e saída em jobs de merge, split, optimise, encrypt e validate mantêm caracteres fora da code page do sistema, escritos como UTF-8 bruto ou como escapes \u, então tais arquivos são encontrados e escritos com os nomes reais deles
  • Um escape \u malformado com menos de quatro dígitos hex é descartado sem engolir os caracteres seguintes ou a aspa de fechamento
  • Um byte order mark UTF-8 no início do texto do job é ignorado

Version 2.770.39

Fixed

  • Identificadores de objeto fornecidos pelo chamador ao construir assinaturas e requisições de timestamp (signature policy, commitment type, claimed role, timestamp policy e OIDs semelhantes) agora são codificados corretamente quando o primeiro arco é 2 e o segundo arco é 48 ou maior; o primeiro valor combinado costumava ser cortado para um único byte, produzindo um identificador diferente e errado
  • Um arco de identificador de objeto grande demais para representar agora é rejeitado com um erro em vez de silenciosamente dar a volta para outro valor

Version 2.770.38

Fixed

  • Demo HugeFileBenchmark: com --recursive --keep-output, PDFs que compartilham um nome de arquivo em subdiretórios diferentes não sobrescrevem mais os arquivos gerados uns dos outros; o diretório de trabalho agora espelha a árvore de pastas de entrada

Version 2.770.37

Security

  • Renderizar um PDF com uma fonte TrueType embutida cujos composite glyphs listam muitos componentes, cada um de novo um composite, não pode mais travar o renderer ou a exportação text-to-path; um glyph agora expande para no máximo 1024 componentes em todos os níveis de aninhamento
  • Um componente de composite glyph que se refere de volta ao próprio glyph dele é pulado em vez de ser expandido até o limite de aninhamento

Version 2.770.36

Fixed

  • Uma função stitching (Type 3) que se refere de volta a si mesma, diretamente ou por outras funções, não recursiona mais até a pilha estourar; ela é tratada como uma função inutilizável
  • Afeta tint transforms Separation e DeviceN, shading functions e transfer functions em PDFs malformados ou hostis renderizados com RenderLoadedPageToBitmap e os outros caminhos de render
  • O aninhamento de funções é limitado a 16 níveis; documentos legítimos aninham muito menos profundamente

Version 2.770.35

Fixed

  • O demo PageOperations do C++Builder agora roda o mesmo workflow que a versão Delphi: ele também insere uma página em branco de tamanho customizado com InsertLoadedBlankPage e imprime o texto das páginas 1-3 com ExtractLoadedPagesText
  • Os arquivos reordenados e extraídos do demo PageOperations do C++Builder agora contêm as mesmas páginas que os da versão Delphi, movendo a última página para a página 2 e extraindo as páginas 2 e 5

Version 2.770.34

Fixed

  • O demo Hyperlink do C++Builder continua em uma nova página quando a lista de links não cabe em uma página; links além do pé da primeira página eram escritos fora da página
  • Add, Remove e Make PDF no demo Hyperlink do C++Builder ficam desabilitados enquanto o PDF é escrito, então a lista de links não pode mais mudar, e o documento não pode ser iniciado uma segunda vez, no meio da geração

Version 2.770.33

Fixed

  • O demo Stamp do C++Builder agora posiciona a marca d'água de texto e a anotação rubber-stamp relativas ao tamanho de cada página; em páginas landscape e outras não A4 a anotação de stamp caía fora da página e a marca d'água saía do centro

Version 2.770.32

Fixed

  • Cada botão do demo ViewerPref do C++Builder agora parte de um documento novo; a direção de leitura, o zoom inicial e outras viewer preferences de um clique anterior permaneciam em efeito, então por exemplo Create PDF depois de Test Direction ainda escrevia texto da direita para a esquerda e preferences que não estavam mais selecionadas
  • O demo PDF_INFO do C++Builder agora escreve PDFInfo.pdf ao lado do executável, o nome de arquivo que a versão Delphi e o readme usam

Version 2.770.30

Security

  • A validação de caminho de certificados (HPDFValidateCMSCertificatePath, a variante online e lotes de assinaturas) não pode mais ser travada por uma assinatura que embute muitos certificados compartilhando um nome e uma chave; tal conjunto fazia a busca de caminho tentar toda ordenação possível, o que cresce fatorialmente e podia manter uma validação ocupada por horas
  • Cada assinatura de emissor em uma chain candidata agora é verificada uma vez por validação e o resultado dela reutilizado, em vez de ser verificada de novo para cada caminho que passa por ela
  • A busca de caminho é limitada a uma quantidade fixa de trabalho; quando o limite é atingido a validação reporta que nenhum caminho válido alcança uma trust anchor, e chains ordinárias ficam muito abaixo dele

Version 2.770.29

Fixed

  • ImportLoadedInterchangeFromFDF agora casa nomes de chave inteiros quando lê annotations e o status FDF: /T não para mais em /Type ou /Text, /F não mais em /FreeText, e /Status não mais em uma chave mais longa que começa do mesmo jeito, então as annotations importadas mantêm o author e as flags delas
  • Chaves de dicionários aninhados dentro de uma annotation importada, e texto parecido com chave dentro de strings, não são mais tomados pelas entradas da própria annotation
  • Literal strings em annotations e status FDF importados decodificam todos os escapes definidos pela ISO 32000-1: \t, \b, \f, octal \ddd e continuações de linha com barra invertida, além de \n, \r e parênteses escapados

Version 2.770.28

Fixed

  • Em builds feitos com versões do Delphi anteriores à XE2, que usam o PNG reader embutido, carregar um arquivo PNG com um chunk de texto comprimido (zTXt) não lê mais além de um buffer interno; texto com mais de 256 bytes saía corrompido e longo demais, e chunks grandes podiam fechar
  • O método de compressão de um chunk de texto comprimido agora é lido do byte correto, então chunks com um método sem suporte são ignorados em vez de serem decodificados como se fossem dados deflate
  • Texto comprimido truncado ou malformado não arrisca mais um loop de decodificação sem fim
  • Builds com Delphi XE2 e posteriores usam o PNG reader do sistema e não são afetados

Version 2.770.27

Changed

  • O demo SearchAndSelect do C++Builder agora funciona como a versão Delphi: ele cria um PDF de exemplo, o carrega, encontra o termo de busca com SearchLoadedDocumentText e adiciona uma highlight annotation sobre cada match com AddLoadedHighlightAnnotation
  • O demo SearchAndSelect do C++Builder aceita um PDF de entrada, um termo de busca, um arquivo de saída e as opções --case-sensitive e --whole-word, e confere a cópia salva quanto às novas annotations

Fixed

  • Os highlights do demo SearchAndSelect do C++Builder agora cobrem as palavras encontradas; eles eram colocados uma linha acima porque a posição do texto era tomada como a baseline em vez do topo do texto

Version 2.770.26

Fixed

  • O demo DigiPrint do C++Builder agora inicia em sistemas cujo separador decimal é ponto; os decimais com vírgula no demo.xml eram interpretados com o locale do sistema e levantavam um erro enquanto o form era criado
  • O demo DigiPrint lê demo.xml e os dois ícones JPEG dele da pasta do executável e escreve demo.pdf ali, e o projeto agora coloca o executável na pasta do demo ao lado desses arquivos
  • Os ícones de página do rodapé do demo DigiPrint são desenhados dentro da linha do rodapé em vez de abaixo da régua inferior da página, e o título, o ano e o texto do rodapé usam os tamanhos de fonte do estilo do report
  • Clicar o botão DigiPrint mais de uma vez não desloca mais a margem esquerda para a direita a cada clique
  • Um erro enquanto o demo DigiPrint constrói o PDF, como um arquivo de imagem faltando, não deixa mais o demo incapaz de criar outro documento

Version 2.770.25

Fixed

  • Demo Showcase: header bands, o fundo da capa, os gradient swatches e o accent da contracapa agora se alinham com as shapes que preenchem; coordenadas de gradiente são dadas no PDF default user space (origem no canto inferior esquerdo), então as cores não ficam mais deslocadas ou invertidas
  • Demo Showcase: Save Copy não troca mais o arquivo de trabalho, então Regenerate e Open External continuam usando a galeria principal em vez da última cópia escrita
  • Demo Showcase: quando a geração da galeria falha, o viewer é reconectado e continua mostrando a última galeria que carregou em vez de ficar em branco
  • Demo Showcase: caminhos de saída com caracteres fora da code page ANSI do sistema passam intactos

Version 2.770.24

Fixed

  • Carregar uma imagem JPEG 2000 com quatro componentes (RGB mais alpha, ou YCC mais alpha) em um TJpeg2000Bitmap agora põe red, green, blue e alpha nos bytes certos do bitmap de 32 bits; antes os canais de cor ficavam deslocados um byte e o canal alpha sobrescrevia um deles
  • Isso também conserta um round trip de um TJpeg2000Bitmap de 32 bits por SaveToStream e LoadFromStream, que voltava com cores embaralhadas
  • Imagens de cor com três componentes, imagens grayscale e imagens CMYK de quatro componentes carregam como antes

Version 2.770.23

Security

  • Uma text string cujo valor começa com << e termina com >> (por exemplo um título, autor, valor de form field ou texto de annotation como "<<URGENT>>") agora é sempre salva como string; ela era escrita verbatim, o que quebrava a sintaxe do arquivo e deixava texto forjado injetar um dicionário, como uma action, no documento salvo
  • Vale para documentos novos e para documentos carregados salvos com SaveLoadedDocument e métodos relacionados

Version 2.770.22

Fixed

  • O demo Barcodes do C++Builder escreve Barcodes.pdf ao lado do executável em vez de no diretório de trabalho corrente, e aceita um nome de arquivo de saída opcional como único argumento
  • O demo Barcodes do C++Builder não abre mais um PDF viewer depois de rodar, e como a versão Delphi comprime o conteúdo de página dele e abre no zoom fit-height
  • Erros no demo Barcodes do C++Builder são reportados com o texto de mensagem deles; o console mostrava um endereço de memória em vez disso

Version 2.770.21

Fixed

  • No stable C ABI, chamar hpdf_document_destroy enquanto outra chamada no mesmo handle ainda roda (de outra thread, ou de dentro de um callback de read, write, progress ou cancellation) não libera mais o documento sob essa chamada
  • O handle fica inválido assim que hpdf_document_destroy retorna; o documento em si é liberado quando a última chamada em execução sobre ele termina
  • Chamadas que consultam um handle concorrentemente com a destruição dele recebem HPDF_STATUS_INVALID_HANDLE em vez de tocar memória liberada

Version 2.770.20

Security

  • Dar shape a texto com uma fonte TrueType/OpenType cujos GSUB contextual lookups se referenciam não estoura mais a pilha e fecha; a profundidade de aninhamento agora de fato acumula entre níveis
  • Uma regra contextual que dispara muitos nested lookups não pode mais multiplicá-los em um loop quase infinito: cada match de topo roda no máximo 1024 nested lookups

Fixed

  • Uma chaining contextual substitution (GSUB lookup type 6) alcançada por outro contextual lookup agora é aplicada; ela era lida com o layout contextual simples e nunca casava, então algumas ligaduras e formas contextuais faltavam
  • Uma reverse chaining substitution (GSUB lookup type 8) referenciada por uma regra contextual é pulada como a especificação OpenType exige, em vez de ser lida errada como uma subtabela contextual

Version 2.770.19

Fixed

  • RenderLoadedPageToDC não levanta mais um access violation quando a página contém um image XObject ou uma inline image; as imagens são desenhadas no device context do chamador
  • GetLoadedPageMetafile não falha mais em páginas com imagens, e as imagens são registradas no metafile devolvido
  • O clipping de imagem contra a superfície visível agora usa o tamanho passado para RenderLoadedPageToDC quando o device context não tem clip region

Version 2.770.18

Fixed

  • JBIG2 halftone regions com grid skipping ligado não descartam mais células de grade que começam à esquerda ou acima da region mas ainda a sobrepõem; tais células eram tratadas como muito fora, os gray values delas eram pulados, e as células restantes da region eram decodificadas fora de sincronia
  • Coordenadas de grade negativas que não são pixels inteiros agora são arredondadas para menos infinito como a especificação JBIG2 exige, então células parcialmente visíveis caem no pixel correto
  • Halftone regions cuja grade fica inteiramente em coordenadas não negativas não são afetadas

Version 2.770.17

Fixed

  • Respostas OCSP cujo responder é identificado por key hash na forma padrão da RFC 6960 (uma tag [2] explícita em volta do key hash) são aceitas de novo; a validação de caminho de certificados costumava descartá-las, então a revocação ficava desconhecida para todo responder que se nomeia pela chave
  • Tanto responders diretos (a CA emissora) quanto certificados de assinatura OCSP delegados identificados pela chave são casados, e a forma mais antiga com tag implícita continua funcionando
  • HPDFDescribeValidationEvidence agora indexa descritores OCSP pelo DN do emissor do certificado nomeado em cada resposta, resolvido do issuer name hash da resposta, em vez de pelo DN do responder; respostas de responders delegados e respostas identificadas pela chave agora produzem descritores que uma consulta por emissor de certificado encontra
  • Adicionado um overload de HPDFDescribeValidationEvidence que recebe a assinatura CMS e certificados de emissor extras, para respostas que identificam o responder pela chave e não embutem certificado

Version 2.770.16

Fixed

  • Demo Viewer: o form não levanta mais um access violation na inicialização; a status bar agora existe antes de o viewer ser ligado ao documento e começa a reportar mudanças de página
  • Demo Viewer: apertar Enter na caixa de busca agora ativa o primeiro match em vez de pular direto para o segundo
  • Demo Viewer: bookmarks sem uma página de destination resolvível são listados sem um sufixo "(p0)" espúrio, e clicá-los não levanta mais um range error

Version 2.770.15

Fixed

  • O passo de descriptografia do demo Security do C++Builder agora de fato abre a amostra criptografada com a user password "user"; o argumento de senha era tomado como a flag de descriptografia automática, então a amostra era carregada sem a senha dela e Security-Decrypted.pdf não era uma cópia decifrada

Version 2.770.14

Fixed

  • Um clipping path definido com W ou W* agora entra em efeito depois de o path ser pintado, como a ISO 32000-1 exige, em vez de antes
  • Dar stroke em um path que também define o clip (re W S) agora pinta toda a largura de linha; a metade externa do stroke era cortada pelo clip do próprio path
  • Fill-and-stroke com um clip even-odd (W* B) agora preenche com a winding rule do próprio operador de pintura; o clip even-odd costumava furar o fill
  • B* e b* agora sempre preenchem com a regra even-odd, independente da fill rule deixada por uma operação anterior

Version 2.770.13

Fixed

  • JBIG2 halftone regions cujos planos de escala de cinza são codificados em MMR agora decodificam; antes os planos saíam invertidos, apenas cada oitava coluna era lida, e o fim de cada plano era localizado no byte errado, então os planos seguintes eram decodificados da posição errada
  • O marcador end-of-block depois de cada plano MMR é reconhecido tanto se segue a última linha diretamente quanto se vem após byte padding, e cada plano agora começa no byte boundary seguinte
  • Halftone regions com codificação aritmética não são afetadas
  • Vale para imagens PDF com o filtro JBIG2Decode que são carregadas, extraídas ou renderizadas com o decoder embutido

Version 2.770.12

Fixed

  • O JSON produzido pelo job processor (THPDFJobProcessor.Execute, HPDFDocRunJob, HPDFDocRunJobWithCallbacks) e pela comparação de documentos agora escapa aspas e barras invertidas como \" e \; as formas anteriores \x22 / \x5C não são JSON válido e faziam parsers padrão rejeitarem resultados que continham uma aspa ou um caminho Windows
  • Caracteres de controle são escritos como escapes \uXXXX e a saída é sempre UTF-8 bem-formado: bytes que não são UTF-8 válido são substituídos por U+FFFD em vez de serem copiados para o resultado
  • Mensagens de erro em resultados de job e no objeto de erro da comparação são codificadas como UTF-8, então texto de exceção e nomes de arquivo fora do inglês não chegam mais na code page ANSI

Version 2.770.11

Fixed

  • RedactLoadedRect, StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage e FlattenLoadedAnnotations não descartam mais o conteúdo existente de uma página quando o /Contents dela é um array de streams; os novos operadores são adicionados como um stream extra no fim do array, ou na frente para um underlay
  • Stamps underlay em uma página cujo conteúdo é dividido por vários streams mantêm cada stream original
  • Páginas cujo único content stream usa um filtro diferente de FlateDecode simples (ASCIIHex, ASCII85, LZW, RunLength, cadeias de filtros ou Flate com predictor) agora são decodificadas antes de novos operadores serem acrescentados, então o stamp, a caixa de redaction ou a aparência achatada é de fato pintada e o conteúdo original continua legível
  • Quando o content stream de uma página não pode ser decodificado de jeito nenhum, ele fica intocado e os novos operadores são escritos em um stream separado em vez de serem acrescentados aos bytes codificados

Version 2.770.10

Security

  • Renderizar um PDF cuja fonte CFF embutida (FontFile3, Type1C ou CIDFontType0C) guarda um offset INDEX de 0x80000000 ou mais não lê mais memória fora dos dados da fonte; tais offsets eram tratados como negativos e passavam nas verificações de limites
  • Fontes TrueType embutidas recebem o mesmo tratamento para glyph locations e comprimentos de tabela de 0x80000000 ou mais: o glyph ou a fonte é pulado em vez de ser lido do lugar errado
  • Um glyph CFF cujas subroutines se chamam muitas vezes seguidas não pode mais travar a renderização ou a exportação text-to-path; cada glyph agora tem um orçamento fixo de operações de charstring, bem acima do que fontes reais usam

Version 2.770.9

Fixed

  • Imagens JBIG2 cujas text regions usam codificação Huffman junto com symbol refinement no template de 13 pixels agora decodificam; os bytes de adaptive pixel do refinement no header da region eram pulados, então a contagem de instâncias e todo campo seguinte eram lidos do offset errado e a imagem era rejeitada
  • Text regions com codificação aritmética, ou com o template de refinamento de 10 pixels, não são afetadas e decodificam exatamente como antes
  • Vale para imagens PDF com o filtro JBIG2Decode que são carregadas, extraídas ou renderizadas com o decoder embutido

Version 2.770.8

Security

  • Com codec isolation ligado, o tamanho de uma imagem decodificada devolvida pelo codec worker isolado agora é conferido contra o limite de saída configurado e a memória compartilhada alocada pelo processo host, em vez de um campo de capacidade que o próprio worker pode sobrescrever
  • Um worker comprometido ou defeituoso não pode mais fazer o host copiar além do fim do bloco de memória compartilhada; tal resposta é rejeitada como erro de protocolo e a imagem não é desenhada a partir dela
  • A resposta do worker é copiada uma vez e validada a partir dessa cópia, então o header dela não pode mudar entre as verificações e a cópia de pixels

Version 2.770.7

Fixed

  • Requisições OCSP construídas para checagem de revocação ao vivo (HPDFCollectCMSRevocationRequests e a validação de caminho de certificados online) agora codificam o identificador do algoritmo SHA-256 do CertID corretamente; antes, os dois primeiros arcos do identificador de objeto eram escritos como bytes separados, então o algoritmo de hash era inválido
  • Responders OCSP que rejeitam requisições malformadas agora respondem a essas requisições com um status normal em vez de um erro, então checagens de revocação online não caem mais para evidência offline por causa da codificação da requisição

Version 2.770.6

Fixed

  • Renderizar uma fonte Type 3 agora pinta toda ocorrência de um glyph; antes um glyph repetido no mesmo text run, ou em qualquer outro lugar da página com o mesmo tamanho e orientação, era pintado apenas na primeira vez e ficava em branco depois
  • Afeta RenderLoadedPageToBitmap, RenderLoadedPageToDC, page metafiles e os caminhos de exportação de imagem, com ou sem o render cache compartilhado
  • Glyphs Type 3 repetidos continuam usando o glyph cache, então a correção não relê o procedimento do glyph para cada ocorrência

Version 2.770.5

Fixed

  • O stable C ABI não libera mais a input source duas vezes quando hpdf_document_load_from_io falha enquanto o documento está sendo interpretado, por exemplo quando o callback de leitura reporta um erro ou a operação é cancelada no meio; tal carga podia corromper o heap ou fechar o processo host
  • Uma carga que falha agora retorna o status do callback ou de cancelamento em vez de um erro interno, e o mesmo document handle pode ser carregado de novo depois
  • Carregar um novo documento em um handle existente libera a input source anterior apenas quando a nova carga assume

Version 2.770.4

Fixed

  • Resultados de barcode de DecodeLoadedPageBarcodes em páginas com /Rotate 90 ou /Rotate 270 agora reportam bounds na posição real do símbolo em vez de uma posição espelhada pela página
  • A orientação de barcode reportada nessas páginas agora bate com a direção em que o símbolo de fato se lê no espaço da página
  • O texto invisível colocado por ApplyLoadedOCRTextLayer em páginas giradas um quarto de volta agora fica sobre as palavras reconhecidas, então seleção e busca destacam o lugar certo
  • Achados de faces da detecção de redaction em páginas giradas um quarto de volta também são mapeados de volta para a área certa da página
  • Páginas não giradas e de cabeça para baixo não são afetadas

Version 2.770.3

Fixed

  • Em builds de 32 bits, carregar ou escrever uma imagem TIFF comprimida com PixarLog não fecha mais com stack overflow; selecionar o codec constrói as companding tables dele, que caíam em um helper de expoente infinitamente recursivo
  • Imagens TIFF SGILog (LogLuv) em builds de 32 bits passam pelos mesmos helpers de matemática corrigidos
  • O helper de arredondamento para baixo de 32 bits usado pelos codecs TIFF agora arredonda valores negativos para menos infinito e aceita magnitudes grandes sem erro de overflow, batendo com os builds de 64 bits

Version 2.770.2

Changed

  • Ao renderizar, uma imagem desenhada à metade do tamanho em pixels dela ou menos é reduzida ao tamanho exato desenhado por média de área logo após a decodificação, em vez de ser mantida no tamanho cheio e esticada durante o desenho
  • A imagem reduzida cabe no decoded-image cache: um transparency group desenhado duas vezes, sobre preto e sobre branco, para recuperar o alpha dele agora decodifica tal imagem uma vez em vez de uma por passada, e renderizar a mesma página de novo também
  • Uma imagem com soft mask é combinada com a máscara dela pixel a pixel no tamanho desenhado, onde a máscara também é reduzida; isso evita construir e premultiplicar uma cópia em tamanho cheio de uma imagem grande e da máscara dela, e a borda da máscara não é mais amostrada por nearest neighbour
  • Em uma página de exemplo com uma imagem mascarada de 4229 x 4629 desenhada a cerca de um quarto do tamanho dela dentro de tal grupo, a renderização levou cerca de 1,8 segundo em vez de 4,5
  • Stencil image masks mantêm a resolução cheia delas, e os métodos públicos de decodificação de região continuam devolvendo os tamanhos que documentam

Version 2.770.1

Fixed

  • Em builds de 64 bits, renderizar uma página com um transparency group falhava com um erro de índice de lista sempre que o grupo não definia soft mask próprio, uma regressão da versão 2.769.3; tais páginas agora renderizam de novo

Version 2.770.0

Added

  • A nova propriedade RenderColorimetricLuminosityMasks escolhe como um luminosity soft mask transforma cor em valores de máscara quando o grupo dele tem um blending space baseado em CIE (CalGray, CalRGB, Lab ou ICCBased)
  • Defini-la como true toma o CIE Y como a ISO 32000-1 11.5.3 descreve; bitmaps renderizados sob as duas configurações são cacheados separadamente

Changed

  • Por padrão um luminosity mask agora pondera a cor resolvida do grupo dele como DeviceRGB seja qual for o blending space, como viewers PDF comuns fazem. O CIE Y é medido em escala linear, então um cinza médio em um grupo ICC ou calibrado mascarava apenas cerca de um quinto, e drop shadows e fades saíam muito mais claros que em outros viewers
  • A cor de backdrop /BC de uma máscara segue a mesma configuração que a pintura dentro do grupo de máscara
  • Máscaras cujo grupo usa um device colour space renderizam como antes

Version 2.769.3

Fixed

  • Um transparency group pintado com um blend mode diferente de Normal, como os drop shadows Multiply que design tools exportam, agora combina a cor e o alpha dele com o backdrop (ISO 32000-1 11.3.6 e 11.4.8). Onde o grupo estava parcialmente transparente os pixels dele já guardavam o backdrop, que era então combinado com ele mesmo: uma sombra Multiply saía escura demais e na tonalidade do backdrop
  • O conteúdo de um transparency group parte do blend mode Normal, pois o blend mode se aplica ao grupo como um todo (11.6.6). Ele mantinha o modo com que o grupo foi pintado, então um grupo isolado multiplicava o conteúdo dele no início vazio dele e pintava preto
  • Um soft mask definido no mesmo graphics state que um blend mode desenha o grupo de máscara dele com blending Normal (11.6.5.2); o blend mode tornava um grupo de máscara branco preto e escondia o que a máscara deveria mostrar
  • Para achar o alpha de um grupo que não é isolado, o grupo é desenhado duas vezes, sobre preto e sobre branco, quando os graphics states dele combinam normalmente; tais páginas renderizam um pouco mais devagar

Version 2.769.2

Changed

  • Uma imagem com soft mask é decodificada no tamanho em que é desenhada, como já era uma imagem sem uma, e a máscara dela é decodificada nesse tamanho também; uma máscara JPEG passa pelo decoder JPEG de tamanho reduzido em vez de ser decodificada por inteiro
  • A imagem e a máscara dela são sempre decodificadas por inteiro, então a máscara não pode deslocar contra a imagem, e o clipping mantém o que é desenhado na parte visível
  • Em uma página com uma imagem de sombra de 4229 x 4629 e uma máscara JPEG de 2114 x 2314 desenhada com cerca de 1000 pixels de largura, renderizar a 72 dpi levou 1,6 em vez de 3,7 segundos
  • DecodeLoadedImageRegionAtResolution devolve uma imagem inteira de um formato sem region decoder como decodificada, sem copiá-la mais uma vez

Version 2.769.1

Changed

  • Soft masks são construídos mais rápido: construir uma máscara não mantém mais uma segunda cópia da página inteira para comparar, o que páginas com muitas máscaras, como os gradientes e drop shadows que design tools exportam, pagavam uma vez por máscara
  • Luminosity masks sobre um blending space calibrado ou baseado em ICC consultam a curva sRGB em tabela em vez de computá-la para cada canal de cada pixel, e conteúdo de máscara cinza, o caso comum, é convertido por uma única tabela
  • Uma página de 1125 x 1600 com cerca de vinte soft masks renderiza aproximadamente um quinto mais rápido; os pixels renderizados não mudam

Version 2.769.0

Changed

  • Definir a Width ou Height de uma página não esconde mais erros: uma falha agora levanta uma exceção em vez de deixar o tamanho silenciosamente sem aplicar, e definir o tamanho de uma página cujo canvas já foi fechado levanta a nova EHPDFPageClosedError com uma mensagem que diz por quê
  • Depois de tal falha a página não fica mais em um estado em que mudanças de tamanho posteriores só atualizam o MediaBox dela e não o tamanho de página usado para desenhar

Fixed

  • Redimensionar uma página de um PDF carregado não sobrescreve mais outros objetos: um MediaBox cujos números são objetos separados, ou um array MediaBox compartilhado por várias páginas, é copiado para a página sendo redimensionada, então outras páginas mantêm o tamanho delas
  • Redimensionar uma página carregada cujo MediaBox tem menos de quatro números agora escreve um MediaBox completo com o novo tamanho; o novo tamanho era ignorado antes

Version 2.768.20

Fixed

  • A extração de texto não entra mais em um Form XObject que pinta a si mesmo, diretamente ou por outros forms; tal form era lido de novo em cada nível de aninhamento, repetindo o texto dele até doze vezes, e um que se pintava duas vezes levava 4.096 passadas
  • Texto de um Form XObject que cai fora da bounding box do form, que o recorta, não é mais parte do texto da página

Version 2.768.19

Changed

  • Documentos grandes carregam rápido de novo: percorrer a page tree não pesquisa mais todos os objetos carregados para cada página, e a checagem de criptografia de LoadFromFile com AutoDecrypt lê o arquivo pelo mesmo buffer do carregamento. O PDF Reference 1.7 de 56 MB agora carrega em cerca de 8 segundos em vez de 22

Version 2.768.18

Fixed

  • A renderização de página agora encontra fontes instaladas que o Windows reporta sob um nome localizado, como Microsoft YaHei no Windows chinês ou Yu Mincho no Windows japonês; texto nessas fontes era desenhado em uma fonte substituta quando o PDF não as embutia
  • Nomes de fonte escritos sem espaços agora batem com famílias do Windows que mantêm algumas palavras unidas, como MicrosoftYaHei para Microsoft YaHei, MicrosoftJhengHei para Microsoft JhengHei e MSPGothic para MS PGothic; eles eram consultados com um espaço antes de cada letra maiúscula e nunca encontrados
  • O renderer lembra quais nomes de fonte estão instalados, então documentos com muitas fontes não instaladas não sondam mais o Windows por cada nome em cada página

Version 2.768.17

Changed

  • Documentos grandes carregam muito mais rápido: a telemetria de operação agora amostra a memória no máximo uma vez a cada 10 ms dentro de uma operação em vez de a cada objeto que o parser lê, amostra que percorria cada bloco do memory manager. O PDF Reference 1.6 de 1.236 páginas carrega em cerca de 2,5 segundos em vez de 30, e o PDF Reference 1.7 de 56 MB em cerca de 22 segundos em vez de mais de quatro minutos
  • A lentidão crescia com o tamanho do heap da própria aplicação, então aplicações que retêm muita memória são as que mais se beneficiam
  • UpdateOperationTelemetrySample ganha um parâmetro opcional Force que toma uma amostra independente do intervalo; o fim de cada operação ainda toma um

Version 2.768.16

Fixed

  • Carregar um arquivo vazio não trava mais; LoadFromFile costumava dar loop para sempre lendo de trás para frente desde o início do arquivo
  • Um arquivo em que nenhuma página pode ser encontrada, como um arquivo vazio, texto puro ou bytes aleatórios, não carrega mais como uma ou três páginas em branco adivinhadas pelo tamanho dele; LoadFromFile agora retorna 0 ou levanta uma exceção, como para outros arquivos ilegíveis
  • Um arquivo criptografado cujas páginas estão em object streams criptografados agora levanta uma exceção dizendo que a senha é necessária quando carregado sem uma, em vez de carregar como uma página em branco; carregue-o com o overload com senha

Version 2.768.15

Fixed

  • O texto da página não repete mais caracteres que são pintados de novo sobre si mesmos, como em logos overprinted e em negrito forjado desenhando o texto duas vezes com um pequeno offset; tal texto era extraído duas vezes, por exemplo "Bold wordsBold words", e buscas por ele podiam falhar
  • As extrações de texto plain, column, layout e semantic todas leem tal caractere uma vez; a lista de glyphs continua reportando cada glyph pintado

Version 2.768.14

Fixed

  • Nomes de glyph da Adobe Glyph List completa agora se resolvem na extração de texto e na renderização, entre eles as ligaduras fi, fl, ff, ffi e ffl e os nomes afii que fontes mais antigas de cirílico, hebraico e árabe usam; uma encoding de fonte que nomeava tais glyphs dava os caracteres errados, por exemplo "defined" era extraído como "deÞned"

Version 2.768.13

Changed

  • LoadFromFile lê arquivos abaixo de LocalFileMappingThreshold (8 MB por padrão), e todo arquivo quando o mapping está desligado ou indisponível, por um buffer de leitura de 64 KB; arquivos com muitos objetos e uma cross-reference table clássica carregam muito mais rápido, por exemplo o PostScript Language Reference Manual de 912 páginas em cerca de 1 segundo em vez de perto de 3 minutos

Version 2.768.12

Fixed

  • A extração de texto agora posiciona os glyphs de fontes CID-keyed (Type 0) cujo array de larguras /W não é ordenado por CID; a maioria dos glyphs recebia a largura padrão de em cheio, então linhas passavam da borda da página e as pontas delas eram descartadas do texto extraído e da busca

Version 2.768.11

Fixed

  • Letras acentuadas de fontes CFF (Type 1C) embutidas construídas a partir de uma letra base e um acento — como em muitas fontes convertidas de Type 1 — agora são renderizadas; letras como ü e é ficavam em branco, então palavras como "München" mostravam um vão
  • As mesmas letras agora ficam completas na exportação SVG com fontes embutidas

Version 2.768.10

Fixed

  • Composite glyphs de fontes TrueType embutidas agora posicionam cada parte no seu próprio offset: letras acentuadas como é e Å perdiam o acento, e aspas duplas curvas apareciam como uma aspa simples seguida de um vão
  • Os mesmos glyphs agora ficam completos na exportação SVG com fontes embutidas

Version 2.768.9

Fixed

  • Imagens marcadas com /Interpolate false agora têm média dos pixels calculada quando desenhadas menores que a própria resolução delas; antes eram amostradas um pixel sim, vários não, então gráficos colocados como imagens mostravam rótulos de eixo serrilhados e escuros e linhas finas quebradas onde outros viewers mostram suaves
  • Imagens ampliadas com /Interpolate false mantêm as bordas duras de pixel como antes

Version 2.768.8

Fixed

  • Texto desenhado com um stroke mais fino que um pixel — como documentos usam para falso negrito — agora é renderizado nessa largura; o stroke costumava ter um pixel inteiro de largura, então esses headings pareciam borrados e muito mais pesados que em outros viewers
  • Glyphs pequenos de fontes embutidas e instaladas recebem stroke com antialiasing nos modos de render de texto 1 e 2, na cor do stroke, depois do fill

Version 2.768.7

Fixed

  • Chamar ProcessObjectStreamsForDecompression em um documento carregado não descarta mais os object streams que a leitura havia lido: os objetos comprimidos continuam disponíveis para ExtractRawObjectFromStream e ExtractObjectFromStream depois disso, quando antes nenhum podia ser lido
  • Quando o método varre o próprio arquivo, como para um documento com uma tabela cross-reference clássica, ele agora encontra um object stream que vem logo após outro stream e lê a contagem de objetos e os offsets do dicionário dele
  • ExtractRawObjectFromStream decodifica um object stream de novo quando o cache de object streams o liberou, em vez de devolver um resultado vazio

Version 2.768.6

Fixed

  • O demo Stamp agora compila com sucesso para Win64

Version 2.768.5

Fixed

  • Nas edições chinesa, japonesa e coreana do Windows, documentos com cross-reference streams cujos dicionários guardam strings binárias, como os checksums de arquivos anexados, agora carregam em uma fração de segundo; um portfolio de 4 MB com nove arquivos PDF anexados levava dois minutos para abrir
  • O parser agora procura suas palavras-chave nos bytes brutos do arquivo em vez de em texto convertido pela code page do Windows, então dados binários ao lado de uma palavra-chave não conseguem mais escondê-la nem deslocar sua posição

Version 2.768.4

Fixed

  • Conteúdo dentro de um Form XObject agora é renderizado com a opacidade, a soft mask e o blend mode que ele define para si mesmo; antes, tudo dentro de um form era pintado com opacidade total, então marcas d'água e stamps translúcidos saíam sólidos
  • Um form pintado com uma opacidade própria continua sendo composto uma única vez como um todo, como antes

Version 2.768.3

Fixed

  • O texto da página agora inclui texto que a página pinta por meio de Form XObjects, como cabeçalhos e rodapés de página, marcas d'água e stamps; antes, apenas o texto no conteúdo da própria página era devolvido
  • O texto do form aparece onde o form é pintado, posicionado pela matrix do form e lido nas fontes do próprio form, e forms aninhados dentro de forms também são seguidos
  • Isso vale para o texto de página plain, layout, column e semantic; a extração em nível de glyphs continua devolvendo apenas os glyphs do conteúdo da própria página, cujas posições apontam para esse conteúdo

Version 2.768.2

Fixed

  • EncryptFile e DecryptFile com AES-256 não corrompem mais arquivos de fontes embutidas cujo dicionário lista /Length1 antes de /Length, como Ghostscript e outras ferramentas os escrevem; essas fontes eram criptografadas como um único byte, o que deixava a saída ilegível
  • Streams cujo comprimento fica guardado em um object stream comprimido mantêm todos os seus dados na criptografia e descriptografia AES-256; antes, o último byte de um desses streams podia se perder

Version 2.768.1

Fixed

  • Documentos cujos comprimentos de stream ficam guardados dentro de object streams comprimidos, como Ghostscript os escreve, agora carregam por completo; antes, cada content stream de página desse arquivo era descartado, então as páginas renderizavam em branco e não davam texto
  • Um stream cujo comprimento aponta para um objeto que não existe, ou que não tem comprimento algum, agora é lido até o marcador de fim em vez de ser descartado

Version 2.768.0

Added

  • BuildLoadedPageSVG e SaveLoadedPageAsSVG recebem um parâmetro opcional EmbedFonts; ele fica desligado por padrão, e as chamadas existentes exportam exatamente como antes
  • Com EmbedFonts como True, texto em fontes cujo programa TrueType ou CFF está embutido no PDF é desenhado a partir dos glyph outlines da própria fonte, então o SVG fica igual em sistemas onde essas fontes não estão instaladas
  • Cada glyph outline é escrito uma vez e reutilizado onde quer que o caractere apareça, o que mantém o tamanho do arquivo baixo em páginas com muito texto
  • O texto permanece no SVG como texto transparente sobre os outlines, então ainda pode ser selecionado, pesquisado e lido por screen readers
  • Texto fill, stroke e fill-and-stroke, larguras de linha, texto rotacionado ou escalado e texto usado como clipping path saem como na página renderizada
  • Fontes não embutidas, programas de fonte Type 1 e texto CJK vertical continuam como texto SVG comum

Version 2.767.4

Fixed

  • Texto outlined e fill-and-outline (modos de render de texto 1 e 2) em fontes não embutidas agora respeita a largura de linha ao ser renderizado; antes, todo outline saía com um pixel de largura, fosse qual fosse a largura de linha
  • Esses outlines agora são desenhados a partir das formas exatas de glyph da fonte instalada, em suas posições exatas, como o texto preenchido já era
  • Caracteres que a fonte instalada não tem, e que o Windows pega de uma fonte de fallback, também mantêm a largura de linha quando em outline

Version 2.767.3

Fixed

  • Texto em fontes não embutidas agora é desenhado com os caracteres que sua encoding nomeia. Os códigos de caractere iam para a fonte instalada sem alteração, e a fonte instalada os lê no seu próprio conjunto de caracteres, então cada entrada de /Differences e os códigos em que StandardEncoding ou MacRomanEncoding divergem do conjunto de caracteres do Windows desenhavam os caracteres errados, por exemplo aspas retas em vez de curvas em fontes Type 1 sem encoding
  • Nas edições chinesa, japonesa e coreana do Windows, letras acentuadas, aspas curvas, o sinal de copyright e outros caracteres acima do código 127 em fontes não embutidas eram desenhados como pontos de interrogação desde a versão 2.766.83; eles voltam a ser lidos no conjunto de caracteres da fonte instalada
  • Fontes Symbol mantêm seu próprio mapeamento de códigos

Version 2.767.2

Fixed

  • Glyphs grandes de fontes embutidas agora também são renderizados com antialiasing. Glyphs maiores que 64 pixels, como headings e títulos em resoluções de impressão, eram preenchidos sem antialiasing e mostravam bordas serrilhadas; agora eles recebem antialiasing até 256 pixels, enquanto texto maior de fontes instaladas mantém a saída de texto antialiased do sistema

Version 2.767.1

Fixed

  • A extração de layout text, column text e semantic text agora mede a página em unidades de página. Eles comparavam posições com o tamanho de fonte dado a Tf e com avanços em text space, que são uma fração das distâncias reais nos muitos documentos que dimensionam texto pela text matrix, então o layout text espalhava cada letra por várias colunas, o column text perdia todos os espaços entre palavras e o semantic text colocava quase cada palavra em sua própria linha
  • Os três agora devolvem apenas o texto dentro da caixa visível e separam palavras que um documento afasta movendo a posição do texto, como o texto de página plain
  • O layout text mantém as letras de uma palavra juntas, onde letras largas como m ou W empurravam um espaço para dentro da palavra
  • O semantic text não coloca mais uma linha em branco depois de cada linha de uma página de coluna única: uma sequência de linhas de largura completa forma uma zona, e uma mudança de zona separa linhas apenas quando estão afastadas por mais de um espaçamento de linha
  • As páginas de ajuda desses métodos descrevem o que eles devolvem, e o método column mostra sua sintaxe completa

Version 2.767.0

Added

  • LoadFromFile e LoadFromStream ganharam overloads com um parâmetro AutoDecrypt. Com AutoDecrypt True, um documento criptografado com user password vazia — como são os documentos que apenas restringem impressão, cópia ou edição — abre descriptografado na memória do mesmo jeito que os viewers abrem, então seu texto pode ser extraído e suas páginas renderizadas e exportadas sem fornecer senha
  • Documentos que precisam de senha, e documentos não criptografados, carregam exatamente como os overloads plain os carregam, e se a senha vazia abre o documento é verificado a partir de alguns pequenos trechos do arquivo antes de carregá-lo
  • Como nos overloads com senha, um documento aberto assim não fica mais criptografado na memória, e salvá-lo escreve uma cópia não criptografada

Version 2.766.83

Changed

  • Texto pequeno em fontes não embutidas, como as 14 fontes padrão e fontes Office e chinesas instaladas, agora é renderizado a partir dos glyph outlines sem hinting em sua posição exata, com o mesmo antialiasing das fontes embutidas. A saída de texto do sistema usada antes colocava cada glyph em um pixel inteiro e ajustava sua forma à grade de pixels, então texto pequeno ficava com espaçamento irregular e aparência manchada; as páginas renderizadas agora batem muito mais de perto com as formas e o espaçamento de outros viewers
  • Glyphs que a fonte instalada não tem e glyphs grandes continuam desenhados com a saída de texto do sistema, que pode pegar caracteres faltantes de fontes linked

Fixed

  • Glyphs pequenos de fontes embutidas são desenhados mais rápido, porque os bitmaps por trás do antialiasing deles são reutilizados em vez de criados para cada glyph

Version 2.766.82

Fixed

  • Texto desenhado com fontes instaladas em páginas renderizadas agora usa antialiasing em tons de cinza. Ele seguia a configuração de ClearType do sistema, então texto preto em bitmaps renderizados carregava franjas vermelhas e azuis que dependiam da máquina e permaneciam em imagens salvas, impressas ou escaladas

Version 2.766.81

Fixed

  • Texto pequeno em fontes CFF e OpenType CFF embutidas agora é renderizado com antialiasing, como o texto TrueType já era. Esses glyphs eram preenchidos sem antialiasing, então em tamanhos pequenos e resoluções normais de tela hastes mais finas que um pixel desapareciam e o corpo do texto se partia em fragmentos; forms e documentos compostos em fontes como Helvetica Neue agora são legíveis a 72 DPI

Version 2.766.80

Changed

  • A extração de texto de página devolve apenas o texto que a página mostra. Glyphs fora da área visível — o crop box dentro do media box — ficam de fora, então marcas de impressão, slug lines e outro conteúdo fora da página aparada não aparecem mais no texto extraído. A extração em nível de glyphs continua devolvendo cada glyph com sua posição

Version 2.766.79

Fixed

  • A extração de texto de página não quebra mais uma linha em um sobrescrito erguido ou uma baseline levemente deslocada em texto dimensionado pela text matrix. Uma nova linha era iniciada sempre que o texto subia ou descia metade do tamanho de fonte dado a Tf, que costuma ser 1 nesses documentos, então um movimento de meio ponto bastava
  • Texto rotacionado, como rótulos subindo pela lateral da página ou marcas d'água diagonais, não coloca mais cada caractere em sua própria linha. As linhas agora são distinguidas pelo movimento na direção transversal àquela em que o texto corre, comparado com metade da altura do texto na página

Version 2.766.78

Fixed

  • Quando a exportação SVG cai em uma família de fontes genérica para uma fonte que não está instalada, ela agora nomeia primeiro uma face comum desse tipo: Times New Roman antes de serif, Arial antes de sans-serif e Courier New antes de monospace. Um browser escolhe a face de uma família genérica pura pelas suas configurações de idioma, e browsers chineses ou japoneses escolhiam fontes CJK cujas letras latinas largas se sobrepunham nas posições tiradas do PDF

Version 2.766.77

Fixed

  • A exportação SVG agora nomeia famílias de fontes chinesas instaladas para fontes conhecidas por seus nomes legados GB2312, como KaiTi_GB2312 ou sua grafia em chinês. Aplicativos Windows alcançam essas fontes pelos font substitutes do sistema, mas browsers não, então esse texto aparecia na fonte padrão do browser
  • Uma fonte nomeada em apenas um idioma também recebe o outro nome da família instalada, por exemplo SimHei junto com seu nome em chinês, e uma família genérica que combine com seu estilo

Version 2.766.76

Added

  • THPDFGlyphRecord ganhou GlyphEndX e GlyphEndY, o fim em page space da largura do próprio glyph ao longo da baseline, sem espaçamento de caractere e de palavra

Fixed

  • A extração de texto de página agora separa palavras que um documento afasta movendo a posição do texto em vez de mostrar um caractere de espaço. Muitos producers escrevem [(PDF)-240(Reference)] ou posicionam cada palavra com seu próprio operador de posicionamento, e essas palavras antes se juntavam como PDFReference
  • Um espaço é adicionado onde a lacuna depois da largura do próprio glyph excede 0.15 da altura do texto, medido em unidades de página para que texto dimensionado pela text matrix seja tratado como texto dimensionado pelo tamanho de fonte
  • Kerning, espaçamento levemente folgado, espaçamento de caractere apertado que ajustes de posição devolvem, texto em overprint e caracteres de espaço reais ficam como estão, e nenhum espaço é adicionado entre dois caracteres chineses, japoneses ou coreanos, por mais distantes que a justificação os coloque

Version 2.766.75

Fixed

  • A extração de texto, a exportação SVG e a renderização agora reconhecem os nomes de glyph da fonte Symbol, como copyrightsans, registerserif, trademarksans e as peças de colchetes e chaves grandes (parenlefttp, braceex, integralex, ...). Fontes Symbol em subset costumam re-encodar esses nomes, e os caracteres saíam como códigos de controle crus
  • Todos os nomes de glyph ITC Zapf Dingbats (a1 a a206) também são reconhecidos, então checks, cruzes, setas e números circundados que uma fonte seleciona por esses nomes — como form fields e listas com bullets costumam fazer — são extraídos como seus caracteres Unicode
  • A busca de nome de glyph para um caractere continua preferindo o nome comum, como arrowright ou spade, a um nome ZapfDingbats

Version 2.766.74

Fixed

  • HPDFExtractGlyphsViaDevice não falha mais com uma operação de ponteiro inválida. O device de extração de texto que ele cria tem reference counting, e a função o liberava explicitamente também, então toda chamada terminava liberando o device uma segunda vez

Version 2.766.73

Fixed

  • A extração de texto agora restaura o estado de texto com Q como a especificação exige (ISO 32000-1 9.3.1). Antes, apenas a transformação era restaurada, então uma fonte, um espaçamento de caractere ou um leading definidos dentro de q ... Q continuavam valendo para o texto seguinte
  • Quando a fonte selecionada dentro de q ... Q usava códigos de dois bytes e a fonte de fora códigos de um byte, o texto depois de Q era decodificado como códigos de dois bytes e se perdia. Word e producers parecidos escrevem páginas assim, tipicamente perdendo os leaders do sumário e palavras latinas entre trechos chineses
  • A correção cobre tanto a API de texto de página quanto a interface de extração de texto baseada em device

Version 2.766.72

Fixed

  • Texto desenhado depois de RestoreState agora sempre tem sua fonte selecionada. A página pula uma seleção de fonte que repete a última escrita, mas não levava em conta que RestoreState (o operador Q) devolve o leitor à fonte em vigor antes de SaveState. Texto mostrado depois de RestoreState na fonte escolhida dentro do par saía sem fonte ou com a fonte errada, então viewers podiam descartá-lo e a extração de texto não conseguia lê-lo
  • Espaçamento de caractere, espaçamento de palavras, escala horizontal e leading seguem SaveState e RestoreState da mesma forma, então um valor definido de novo depois de RestoreState é escrito em vez de ser pulado enquanto o leitor já voltou ao valor anterior
  • Selecionar uma fonte Type 3 não faz mais com que a próxima seleção da fonte anterior seja pulada
  • Documentos XPS convertidos para PDF eram afetados, porque cada trecho de glyphs é desenhado dentro do seu próprio graphics state salvo

Version 2.766.71

Fixed

  • A extração de texto e a exportação SVG liam os códigos de uma simple font (Type 1, TrueType ou Type 3) como dois bytes quando o CMap /ToUnicode dela declarava um codespace de dois bytes, como alguns producers escrevem para toda fonte. Códigos de simple fonts são sempre de um byte (ISO 32000-1 9.6.6), então cada par de caracteres era tomado como um código desconhecido e a maior parte do texto desaparecia, restando apenas strings de um único caractere

Version 2.766.70

Fixed

  • A exportação SVG movia texto pelos operandos de Td, TD, T*, ' e " em unidades de página em vez de text space (ISO 32000-1 9.4.2). Texto cujo tamanho vem da text matrix — com 1 Tf e um Tm escalado, como processadores de texto costumam escrever — tinha suas linhas empilhadas umas sobre as outras perto da primeira baseline; agora ele é disposto como no PDF
  • A mesma correção vale para o extrator de texto baseado em content device THPDFTextExtractDevice

Version 2.766.69

Fixed

  • O renderizador de página passava para o Windows nomes de fonte com escapes #xx junto com os escapes, então fontes não embutidas nomeadas assim — comum em fontes CJK como KaiTi_GB2312 escrito em caracteres chineses — não casavam com nenhuma fonte instalada e eram desenhadas em uma face substituta. Os escapes agora são decodificados; nomes UTF-8 mantêm seus caracteres e os demais bytes são lidos na code page do sistema

Version 2.766.68

Fixed

  • A exportação SVG escrevia nomes de fonte com escapes #xx como os próprios escapes, então nomes de fontes CJK guardados como bytes UTF-8 (como o nome KaiTi_GB2312 em caracteres chineses) chegavam ao font-family como #e6#a5#b7... e nunca casavam com uma fonte instalada. Os escapes agora são decodificados; um nome que é UTF-8 válido é mantido, e bytes de outras codificações são descartados como antes

Version 2.766.67

Fixed

  • A exportação SVG não restaurava o estado de texto no Q: fonte, tamanho, espaçamento, escala, leading, rise e modo de render definidos dentro de q ... Q se arrastavam para o texto seguinte. Páginas que engrossam um heading com 2 Tr dentro de um estado salvo desenhavam todo o body text seguinte com stroke e pesado. O estado de texto agora é salvo e restaurado junto com o resto do graphics state (ISO 32000-1 9.3.1)

Version 2.766.66

Fixed

  • A exportação SVG aplicava stroke a texto nos modos de render de stroke (1, 2, 5 e 6) sem uma largura de stroke, então valia o padrão do SVG de uma unidade de text space; texto que producers de PDF engrossam com um stroke fino, como 2 Tr 0.25 w, saía muito mais pesado. A largura de linha agora é convertida de user space para o espaço do elemento de texto, largura zero dá uma linha de um pixel, e o line join é mantido

Version 2.766.65

Fixed

  • Documentos cujo trailer dá /Encrypt como um dicionário direto em vez de uma referência, como alguns PDF writers produzem, eram carregados como não criptografados: mesmo com a senha certa, suas páginas renderizavam em branco, a extração de texto e a exportação SVG não devolviam nada, e o SaveLoadedDocument escrevia um arquivo danificado que descartava o /Encrypt mas mantinha os streams criptografados. Eles agora abrem, descriptografam e salvam como documentos com um encryption dictionary indireto
  • O loader de cross-reference cortava o trailer no primeiro >>, então entradas depois de um dicionário aninhado no trailer se perdiam; agora ele lê o trailer até o delimitador de fechamento correspondente

Version 2.766.64

Fixed

  • A renderização, a exportação SVG, o viewer e a impressão mostravam o /MediaBox inteiro de uma página carregada. Uma página é exibida e impressa pelo seu /CropBox, clipado ao /MediaBox (ISO 32000-1 14.11.2), então páginas com crop box saíam grandes demais, deslocadas e com conteúdo que deveria ficar escondido
  • RenderLoadedPageToBitmap, os renderizadores tile, band, metafile e device-context, BuildLoadedPageSVG, a geometria de página, highlights e snapshots de região do viewer, e a impressão agora cobrem a caixa visível; páginas sem /CropBox ficam como estavam

Added

  • THotPDF.GetLoadedPageVisibleBox devolve a caixa visível de uma página carregada, o /CropBox dela clipado ao /MediaBox
  • THPDFPageDisplayList.CropBox dá a mesma caixa para uma display list compilada

Version 2.766.63

Fixed

  • A lista de glyphs interna era pesquisada até uma contagem 13 entradas menor que a tabela, então os nomes de glyph que ordenam por último (y, z, zero, zeta, yen, ydieresis, zcaron e outros) nunca eram encontrados. A extração de texto ignorava entradas de /Differences de uma fonte que os nomeavam, e o renderizador de página desenhava y, z e 0 de fontes CFF embutidas com WinAnsiEncoding ou MacRomanEncoding em uma fonte de sistema substituta
  • A busca do nome de glyph de um acento como U+0060 devolvia o nome de small capital do MacExpertEncoding (Gravesmall) em vez de grave, então esses acentos também se perdiam em fontes CFF embutidas

Version 2.766.62

Fixed

  • O renderizador de página usava a largura de linha e os comprimentos de tracejado como pixels de device em vez de unidades de user space (ISO 32000-1 8.4.3.2 e 8.4.3.6); linhas mantinham a mesma largura em pixels em toda resolução e ignoravam qualquer escalamento de cm. Slides exportados via macOS Quartz, que aplicam stroke a formas com largura em EMUs sob uma escala de 1/12700, ficavam completamente cobertos pela cor do stroke
  • A largura de stroke e os tracejados agora seguem a escala do CTM em vigor quando o path recebe stroke, inclusive para texto desenhado em um modo de render de stroke

Version 2.766.61

Fixed

  • A exportação SVG deixava de fora shadings Type 1 baseados em função (ISO 32000-1 8.7.4.5.2), fossem pintados com sh ou usados em um shading pattern; agora ela amostra a função do shading ao longo do /Domain dele em uma imagem PNG embutida posicionada pelo /Matrix do shading, clipada ao /BBox dele, com a cor de fundo do pattern por baixo

Version 2.766.60

Fixed

  • O renderizador de página pintava a cor /Background de um mesh shading mostrado com o operador sh, o que o PDF ignora (ISO 32000-1 8.7.4.5.1), então toda a área de clipping ao redor do mesh ficava com essa cor
  • A cor de fundo de shading patterns baseados em função, axiais e radiais não era pintada pelo renderizador de página; agora ele preenche a área do pattern antes do shading, então ela aparece onde quer que o shading não alcance
  • A exportação SVG agora pinta a cor de fundo de shading patterns da mesma forma e, como o renderizador, a ignora para sh

Version 2.766.59

Fixed

  • O renderizador de página ignorava o /BBox de shadings baseados em função, axiais e radiais (ISO 32000-1 8.7.4.5.1); um shading estendido pintado com sh ou usado em um shading pattern cobria toda a área de clipping em vez de parar na sua caixa. Mesh shadings já o respeitavam

Version 2.766.58

Fixed

  • A exportação SVG escrevia texto em fontes Type 3 como texto SVG em uma fonte instalada, então páginas que desenham seu texto ou símbolos com glyph procedures mostravam as formas erradas; agora ela desenha o procedure de cada glyph, posicionado pelo /FontMatrix da fonte, pelo tamanho da fonte e pela text matrix (ISO 32000-1 9.6.5)
  • Glyphs Type 3 que começam com d1 são pintados na cor de fill corrente, e glyphs que definem suas próprias cores as mantêm

Version 2.766.57

Fixed

  • A extração de texto e a exportação SVG tomavam os /Widths de uma fonte Type 3 como milésimos de um em, embora estejam em glyph space e escalados pelo /FontMatrix da fonte (ISO 32000-1 9.6.5); glyphs de uma fonte com matrix [0.01 0 0 0.01 0 0] eram posicionados a um décimo do seu avanço de distância, o que também fundia palavras no texto extraído

Version 2.766.56

Fixed

  • Renderizar uma página carregada lia toda fonte Type 0 como se usasse Identity-H, dois bytes por código e cada código com seu próprio CID. Fontes codificadas com os CMaps UCS2 e UTF16 predefinidos das coleções chinesa, japonesa e coreana, como UniGB-UCS2-H, ou com um CMap embutido agora mapeiam seus códigos para CIDs, então larguras de /W e glyphs embutidos são buscados nos CIDs certos; antes, por exemplo, letras latinas minúsculas em um texto STSong-Light ficavam espaçadas um em inteiro
  • Os códigos são lidos pelos ranges de codespace do CMap, então códigos de um byte e de quatro bytes (pares surrogados) são lidos inteiros, e nomes terminados em -V selecionam escrita vertical

Version 2.766.55

Fixed

  • Renderizar uma página carregada desenhava fontes não embutidas que trazem uma parte de estilo ou uma grafia PostScript no nome — como TimesNewRoman,Bold, TimesNewRomanPS-BoldMT, Arial,BoldItalic ou SegoeUI-Semibold — em uma face substituta; a parte de família do nome agora é buscada entre as fontes instaladas, também com espaços entre suas palavras (Times New Roman, Segoe UI), e o estilo vem do nome e do font descriptor

Version 2.766.54

Fixed

  • Fontes padrão sem array de /Widths — o que a ISO 32000-1 9.6.2.2 permite para as 14 fontes padrão — eram dispostas com um avanço fixo de meio em ao renderizar uma página carregada, exportá-la para SVG ou extrair seu texto, então as letras se amontoavam; as famílias Helvetica, Times e Courier, também sob os nomes Arial, TimesNewRoman e CourierNew, agora tiram suas larguras das Arial, Times New Roman e Courier New instaladas, que compartilham suas métricas
  • Uma fonte Type 1 padrão sem /Encoding agora decodifica pela StandardEncoding implícita, então por exemplo o código 39 lê como uma aspa simples de fechamento

Version 2.766.53

Fixed

  • Renderizar uma página carregada ignorava o array de /Widths de uma fonte quando ele era um objeto indireto, como muitos producers escrevem, e dispunha o texto com um avanço fixo de meio em; esse texto agora é espaçado pelas suas larguras
  • Font descriptors dados como objetos indiretos agora são lidos ao renderizar, então as flags ForceBold e Italic e o ângulo itálico de fontes não embutidas passam a valer
  • A flag SmallCap não deixa mais o texto em negrito: o negrito agora segue a flag ForceBold (ISO 32000-1 Table 123)

Version 2.766.52

Fixed

  • Renderizar uma página carregada agora faz clipping para texto mostrado nos modos de render 4 a 7 (ISO 32000-1 9.3.6): os glyphs passam a fazer parte do clipping path no fim do objeto de texto, até o graphics state ser restaurado. Antes, texto no modo 7 era ignorado e um shading ou imagem que deveria aparecer através das letras cobria a área toda, e os modos 4 a 6 pintavam o texto sem clipping
  • O texto de clip é tirado dos mesmos glyph outlines do texto pintado, incluindo fontes embutidas e glyphs Type 3

Version 2.766.51

Fixed

  • A exportação SVG agora faz clipping para texto mostrado nos modos de render 4 a 7 (ISO 32000-1 9.3.6): os glyphs viram um clipping path do SVG do fim do objeto de texto até o fim do graphics state, então um shading ou imagem desenhado através do texto aparece apenas dentro das letras
  • Texto no modo de render 7 não se perde mais sem nada clipado, e os modos 4 a 6 ainda aplicam fill ou stroke ao texto como os modos 0 a 2 fazem

Version 2.766.50

Fixed

  • Shadings axiais, radiais e baseados em função cujo /Function é um array de funções de uma saída, uma por componente de cor (ISO 32000-1 8.7.4.5.1), não eram desenhados ao renderizar uma página carregada; agora são desenhados, com as funções do array dadas diretamente ou como objetos indiretos
  • A exportação SVG escreve shadings axiais e radiais assim como gradientes, inclusive quando preenchem um path através de um shading pattern

Version 2.766.49

Fixed

  • A exportação SVG escrevia texto em negrito e itálico no estilo regular: o texto agora recebe font-weight="bold" e font-style="italic" da parte de estilo do nome da fonte, como Arial-BoldMT, Helvetica-Oblique ou MinionPro-It, e do weight, das flags e do ângulo itálico do font descriptor
  • Fontes fora das 14 famílias padrão eram escritas com a parte de estilo dentro do nome de família (SegoeUI-Semibold), que não casa com nenhuma fonte instalada; a família agora é nomeada sozinha e com espaços entre suas palavras (SegoeUI, Segoe UI), seguida de uma família genérica vinda das flags do descriptor ou do nome

Version 2.766.48

Fixed

  • A exportação SVG desenhava o conteúdo de form XObjects em preto em vez das cores de fill e stroke em vigor onde o form é pintado (ISO 32000-1 8.10.1); um Q dentro do form agora restaura essas cores também
  • Content devices podem iniciar conteúdo aninhado a partir das cores de quem chama pela nova interface IHPDFContentInheritedColorDevice

Version 2.766.47

Added

  • A exportação SVG agora preenche paths que usam um tiling pattern com um <pattern> do SVG que repete a célula do pattern no espaçamento de XStep e YStep dele, clipado ao /BBox da célula; antes, esses paths eram preenchidos de preto ou mantinham a cor anterior
  • Tiling patterns sem cor (PaintType 2) pintam a célula na cor dada junto com o pattern, como os componentes em /CS0 cs 0 0 1 /P1 scn
  • Paths preenchidos com um shading pattern recebem o shading axial, radial ou mesh do pattern, clipado ao path
  • A pattern matrix é aplicada no espaço da página ou do form que usa o pattern (ISO 32000-1 8.7.2), então patterns não escalam nem se movem com a matriz de transformação corrente, e Q traz de volta um pattern salvo com q
  • Content devices podem receber seleções de pattern pela nova interface IHPDFContentPatternDevice

Version 2.766.46

Added

  • Imagens com um array de /Mask color-key (ISO 32000-1 8.9.6.4) agora são mascaradas ao renderizar uma página carregada: pixels cujos componentes caem todos dentro dos ranges de key ficam sem pintura, então a página aparece através deles
  • A exportação SVG aplica as mesmas máscaras color-key e escreve essas imagens como imagens PNG com um canal alpha
  • A key é comparada com as amostras como armazenadas, então uma imagem Indexed mascara pelo índice de paleta mesmo quando duas entradas compartilham uma cor, e imagens de 1, 2 e 4 bits por componente ficam cobertas
  • O novo método DecodeLoadedImageColorKeyMask devolve a máscara de uma imagem carregada como um bitmap preto e branco; ele cobre imagens Flate, LZW e sem filtro, já que codecs com perda não mantêm valores de amostra exatos

Version 2.766.45

Changed

  • CompressDocument e CompressLoadedDocument deixam cada object stream guardar até 250 objetos em vez de 100; menos contêineres, maiores, comprimem melhor e precisam de menos dicionários
  • PDFs carregados que já foram escritos de forma compacta com object streams agora saem com cerca do tamanho do original, a maioria levemente menor, em vez de levemente maior
  • Um limite definido via ConfigureAdaptiveObjectStreamPacking é mantido, o CompressDocument restaura o limite no EndDoc, e saves plain de object stream mantêm 100 objetos por contêiner

Version 2.766.44

Changed

  • O cross-reference stream de arquivos escritos com object streams usa a menor largura de campo de que cada coluna precisa, então offsets em arquivos abaixo de 16 MB ocupam 3 bytes em vez de 4 (ISO 32000-1 7.5.8.2), e o dicionário dele é escrito de forma compacta
  • Arquivos escritos com cross-reference stream mas sem object streams ficam como estão

Version 2.766.43

Changed

  • Arquivos não criptografados escritos com object streams agora também empacotam o catálogo do documento e o dicionário de informações do documento em object streams, onde eles ficam comprimidos; a ISO 32000-1 7.5.7 só deixa de fora o encryption dictionary
  • Arquivos criptografados mantêm os dois dicionários no nível de topo, como antes

Version 2.766.42

Changed

  • Arquivos escritos com object streams, incluindo os gerados por CompressDocument e CompressLoadedDocument, escrevem dicionários e arrays de forma compacta, dispensando os espaços e quebras de linha de que a sintaxe PDF não precisa (ISO 32000-1 7.2.2); os stream dictionaries, que não podem entrar em object streams e seguem sem compressão, são os que mais ganham
  • Signature dictionaries e o encryption dictionary mantêm o layout espaçado, então assinar um documento escrito com object streams funciona como antes
  • Arquivos escritos sem object streams permanecem idênticos byte a byte

Version 2.766.41

Fixed

  • Arquivos PDF escritos com object streams não começam mais com o cabeçalho %PDF- e a linha de comentário binário duplicados; isso afetava todo salvamento com UseObjectStreams, CompressDocument ou CompressLoadedDocument
  • Viewers toleravam o cabeçalho repetido, mas validadores estritos podiam sinalizá-lo, e ele custava 15 bytes por arquivo

Version 2.766.40

Fixed

  • PDFs carregados que guardam um número puro dentro de um object stream, como muitos produtores fazem com os comprimentos de stream, agora podem ser editados e salvos; qualquer mudança parava o salvamento com "Cannot rewrite compressed object N: the source member could not be loaded"
  • Esse número agora é lido como número; antes o parser procurava uma referência indireta além do fim do membro e desistia, então o membro não podia ser carregado de jeito nenhum
  • Salvar esse arquivo sem mudanças não era afetado, porque um arquivo intacto é copiado como está

Version 2.766.39

Fixed

  • Anotações stamp em documentos PDF/A-2 e posteriores e PDF/X-6 mostravam apenas a moldura, sem o nome do stamp como APPROVED ou CONFIDENTIAL
  • O nome agora é desenhado na fonte atual da página — que é embutida junto com o texto da página — em maiúsculas e na cor da anotação, centrado no retângulo
  • Nomes longos como NOTFORPUBLICRELEASE são definidos em tamanho menor para caberem na largura do retângulo
  • Os documentos continuam passando na validação PDF/A; stamps em outros documentos são escritos como antes

Version 2.766.38

Added

  • Novo overload de CompressLoadedDocument com opções que deixa um PDF carregado o menor possível sem mudar o visual: ele descarta recursos de página não usados, mescla fontes e forms idênticos, faz subsetting das fontes embutidas, recomprime streams com Flate e escreve o próximo salvamento com object streams
  • Cada passo é sem perdas e imagens não são reamostradas nem recomprimidas; um documento de três páginas que embute Arial e SimSun completas cai de cerca de 10 MB para cerca de 20 KB, e outros três PDFs de amostra encolheram de 15 a 50%
  • Documentos com campos de assinatura são recusados por default e ficam intactos, porque cada passo reescreve bytes assinados; AllowSignatureInvalidation os comprime mesmo assim
  • SubsetLoadedFonts ganha a opção CompactTrueTypeSubsets, desligada por default, que monta subsets compactos de fontes TrueType usadas via fontes CIDFontType2 com mapeamento CID identity; color fonts e fontes com /CIDSet ficam com o subset normal
  • O CompressLoadedDocument sem parâmetros mantém o comportamento de recomprimir apenas streams sem filtro

Version 2.766.37

Added

  • Nova propriedade CompressDocument, desligada por default: uma única chave que escreve o próximo documento o menor possível sem mudar o visual
  • Para esse documento ela liga compressão Flate no nível máximo, cross-reference stream com object streams (ISO 32000-1 7.5.7 e 7.5.8), subsetting de fontes e subsets compactos de fonte; um documento de três páginas com texto misto de inglês e chinês cai de cerca de 10 MB para cerca de 20 KB
  • Object streams pedem PDF 1.5, então uma Version mais antiga sobe para 1.5, a menos que a versão esteja travada; a saída PDF/A-1 mantém a cross-reference table clássica
  • Suas próprias configurações não são mexidas: depois do EndDoc, Compression, CompressionLevel, UseXRefStream, UseObjectStreams, as opções de subsetting de fontes e a versão são lidas de volta como você as definiu
  • Imagens não são reamostradas nem recomprimidas

Version 2.766.36

Added

  • Nova propriedade CompactFontSubsetting, desligada por default: os subsets de fonte renumeram os glifos que mantêm, então a fonte embutida não carrega mais uma entrada para cada glifo da fonte de origem; um stream /CIDToGIDMap explícito mapeia os códigos de glifo da página para os glifos renumerados (ISO 32000-1 9.7.4.2)
  • Fontes CJK são as que mais encolhem: dois caracteres chineses em SimSun ocupam cerca de 3 KB de dados de fonte em vez de cerca de 25 KB, e um documento em Microsoft YaHei cai de 114 KB para 6 KB
  • Vale para fontes TrueType escritas como fontes Type 0 com o EnableFontSubsetting ligado, e para a fonte registrada com RegisterUnicodeTTF, que até agora só ganhava subsets compactos sob PDF/A
  • Conteúdo da página, larguras de glifo e extração de texto ficam inalterados; fontes OpenType-CFF mantêm o subset normal, e fonte que não pode ser compactada volta para ele

Version 2.766.35

Fixed

  • Texto desenhado com avanço explícito por caractere não sai mais do lugar depois de um caractere fora do Basic Multilingual Plane, como um símbolo musical ou um emoji, quando a fonte Unicode registrada o cobre. Cada caractere seguinte recebia o avanço do vizinho; agora o caractere avança pela soma das duas entradas dele
  • Caixas de texto Unicode justificado com esses caracteres encostam na borda da caixa, e o sublinhado ou strikeout desse texto tem o mesmo comprimento do texto

Version 2.766.34

Added

  • A exportação SVG agora desenha image masks (/ImageMask), incluindo as inline, como estênceis na cor de preenchimento atual: as partes não pintadas ficam transparentes em vez de sair como uma figura preto e branco
  • Imagens com soft mask /SMask ou estêncil /Mask explícito são exportadas como imagens PNG com canal alfa, então as partes mascaradas não cobrem mais o que está atrás delas
  • /Decode [1 0] em uma máscara ou image mask é respeitado, e uma máscara mais fina que a imagem dela mantém o detalhe

Version 2.766.33

Fixed

  • A renderização de páginas agora respeita o estêncil /Mask explícito de uma imagem: as partes que a máscara cobre ficam sem pintura em vez de a imagem inteira ser desenhada, inclusive quando a imagem está girada ou espelhada
  • Um array /Decode [1 0] na máscara inverte quais partes ficam
  • Soft masks e máscaras mais finas que a imagem delas são aplicadas na resolução da máscara, então uma máscara 1-bit detalhada sobre uma foto de baixa resolução mantém as bordas

Version 2.766.32

Fixed

  • A renderização de páginas agora desenha imagens pela matriz de transformação completa: imagens giradas de um quarto de volta ou de qualquer outro ângulo, imagens espelhadas e toda imagem numa página com /Rotate não são mais desenhadas aprumadas e sem espelho dentro da bounding box delas
  • Image masks (/ImageMask true) agora são pintadas como estênceis na cor de preenchimento atual, com bordas anti-aliased quando reduzidas, em vez de saírem como uma figura cinza
  • Image masks com /Decode [1 0] agora pintam as amostras de valor 1, como o PDF especifica
  • Image masks inline (BI /IM true) voltam a ser desenhadas, e o array /D delas é respeitado
  • Imagens com soft mask mantêm a máscara quando giradas ou espelhadas

Version 2.766.31

Added

  • A exportação SVG agora converte cores definidas com k/K (DeviceCMYK) e com cs/sc/scn em qualquer color space nomeado: cores ICCBased, calibradas, Lab, Indexed, Separation e DeviceN saem como o renderizador de páginas as mostra em vez de preto
  • Selecionar um color space com cs/CS agora define a cor inicial dele — tint cheio para uma spot color, por exemplo — e restaurar o graphics state com Q traz de volta uma cor definida desse jeito
  • Color spaces que se referem a perfis ICC, lookup tables ou funções de tint por referência são resolvidos através do documento exportado durante a exportação SVG
  • A enumeração de paths agora reporta cores CMYK de fill e stroke em vez de manter a cor anterior

Version 2.766.30

Fixed

  • THPDFEmfPatcher.RenderEmfDirect desenha os bitmaps de um enhanced metafile no mesmo tamanho e posição em qualquer Resolution. Com Resolution diferente de 72 eles saíam escalados por 72 / Resolution

Version 2.766.29

Added

  • A exportação SVG agora aplica clipping paths W e W*: cada um vira um clip path SVG que recorta o que é desenhado depois dele até o graphics state ser restaurado, então imagens, shadings e paths que um PDF corta não são mais desenhados por inteiro
  • Form XObjects são recortados pelo /BBox deles na exportação SVG, e shadings axial e radial pelo /BBox
  • Clipping even-odd (W*) mantém a fill rule, e um path pintado junto com W é desenhado antes do novo clip valer, como o PDF especifica

Version 2.766.28

Fixed

  • Gráficos desenhados com DrawChart mantêm o layout em qualquer Resolution. Margens, títulos, rótulos de eixo e larguras de linha são valores em points e encolhiam com a Resolution
  • A fonte default de uma página nova, e de uma página que volta a ser a atual, é 12 points em qualquer Resolution em vez de 12 unidades de desenho
  • O overlay de diagnóstico de layout mantém a largura de linha e o tamanho de rótulo em qualquer Resolution

Version 2.766.27

Fixed

  • DrawInlineImage e DrawFormXObject dimensionam a imagem ou o form em unidades de desenho, como a posição. Com Resolution diferente de 72 largura e altura eram tratadas como points, então o objeto saía grande demais

Version 2.766.26

Fixed

  • Uma página que volta a ser a atual via CurrentPageNumber continua desenhando nas unidades em que foi diagramada. Com Resolution diferente de 72 ela trocava para points, então tudo desenhado nela depois saía com tamanho e posição errados
  • A página também mantém a Resolution própria dela quando é revisitada

Version 2.766.25

Fixed

  • Imagens posicionadas com ShowImage mantêm o tamanho numa página dimensionada via Width e Height quando a Resolution do documento não é 72. Com Resolution 144 elas saíam com metade do tamanho e deslocadas
  • ExtTextOut posiciona cada caractere nos avanços informados numa página assim, em vez de metade deles
  • Runs de glifos embutidos mantêm os offsets e avanços de glifo numa página assim

Version 2.766.24

Added

  • A exportação SVG agora respeita a entrada /Extend de shadings axial e radial: uma ponta sem extensão — que é o default — fica sem pintura como no PDF em vez de espalhar a cor final dela pelo clip todo
  • Em shadings radiais isso também deixa o interior do círculo inicial vazio, a menos que o início seja estendido

Version 2.766.23

Fixed

  • O flattening de rotação de página agora gira os appearance streams das anotações junto com a página, então anotações bakeadas ou achatadas ficam iguais a como eram na página rotacionada em vez de serem espremidas de lado dentro do retângulo girado
  • A rotação de widget (/MK /R) é ajustada pelo giro da página, então appearances de form field regeneradas depois do flattening mantêm a orientação
  • Anotações com a flag NoRotate continuam aprumadas e com o tamanho delas depois do flattening, fixadas pelo canto superior esquerdo, como os viewers as mostram numa página rotacionada

Version 2.766.22

Fixed

  • O flattening de rotação de página num PDF tagged não gira mais um retângulo de anotação duas vezes quando a structure tree é alcançada antes da page tree
  • O flattening de rotação de página não rotaciona mais a bounding box de Form XObjects usados na página; a geometria deles vive no form space e o giro da página já lhes chega pela transform de conteúdo
  • Layout bounding boxes de structure elements pertencentes a outra página não são mais alterados quando uma página passa por flattening

Version 2.766.21

Fixed

  • A leitura do bleed, trim ou art box de uma página carregada não pega mais um /BleedBox, /TrimBox ou /ArtBox pendurado num nó /Pages pai; essas caixas não são herdáveis no PDF, então uma página sem entrada própria agora reporta o crop box, como a especificação pede
  • O flattening de rotação de página não copia mais um bleed, trim ou art box desse nível de pai para a página

Version 2.766.20

Fixed

  • Texto desenhado no Canvas da página ou num metafile posicionado com ShowMetafile mantém o tamanho quando a Resolution do documento não é 72. Com Resolution 144 ele saía com metade do tamanho enquanto o resto do desenho ficava correto
  • O Canvas da página e o ShowMetafile desenham no tamanho certo numa página dimensionada via Width e Height, que desenha em points. Com Resolution 144 o desenho saía duas vezes maior
  • O Canvas da página e o ShowMetafile também respeitam uma Resolution definida na própria página em vez de encolher o desenho por ela

Version 2.766.19

Fixed

  • Caixas de texto Unicode justificado agora terminam na borda da caixa quando há espaçamento de caracteres definido. Cada caractere recebia o espaçamento por cima da posição justificada, então cada linha passava da borda direita pelo espaçamento vezes o número de caracteres
  • Caixas de texto Unicode justificado com escala horizontal preenchem de novo a largura toda da caixa em vez de parar antes pelo fator de escala
  • O espaçamento de palavras agora conta na largura natural de uma linha justificada, a mesma largura em que a linha foi quebrada
  • Texto desenhado com avanço explícito por caractere cai nessas posições não importa qual espaçamento de caracteres ou escala horizontal esteja valendo

Version 2.766.18

Fixed

  • O flattening de rotação de página agora gira páginas com /Rotate 90 e /Rotate 270 no sentido horário, então a página achatada fica exatamente igual ao original rotacionado em vez de sair de cabeça para baixo em relação a ele
  • Anotações, destinos de link e geometria de estrutura se movem com a página do mesmo jeito
  • O flattening de uma página sem CropBox não adiciona mais um que cortava a página num quadrado; só as page boxes que a página realmente tem são rotacionadas

Version 2.766.17

Fixed

  • Cadeias de fallback de fontes agora encontram faces como SimSun e Microsoft YaHei em sistemas Windows que as reportam por nome localizado, então texto CJK misturado em WideTextOutBox, WideTextOutBoxEx e TextOutWithFallback é desenhado na face de fallback em vez de mostrar quadrados vazios
  • Texto cuja própria fonte é uma dessas faces não é mais partido em runs de fallback nem reportado como não resolvido pelos diagnósticos de glifo não resolvido
  • Uma face pode entrar numa cadeia por qualquer family name que carregue, em qualquer idioma; face que o Windows só substitui por outra fonte continua sendo pulada

Version 2.766.16

Fixed

  • A composição N-up agora coloca páginas com /Rotate 90 e /Rotate 270 giradas no sentido horário dentro das células delas; antes elas giravam para o outro lado e eram empurradas para fora da célula, muitas vezes para fora da folha
  • Páginas com /Rotate 180 agora são giradas na folha em vez de serem compostas aprumadas
  • A composição N-up agora respeita page boxes e /Rotate herdados da page tree, então essas páginas não são mais puladas nem compostas sem rotação
  • Páginas em branco inseridas num documento carregado, incluindo as folhas N-up compostas, não são mais giradas nem cortadas por um /Rotate ou /CropBox herdado da page tree

Version 2.766.15

Fixed

  • HPDFTokenizeContentStreamAppend agora pode reutilizar um token array depois que a contagem dele volta a zero: os tokens que sobraram da rodada anterior são liberados primeiro, então as strings deles não vazam mais e os itens de array ou dados de imagem inline deles não aparecem mais nos novos tokens
  • Anexar muitos content streams pequenos a um token array agora cresce o array pelo menos em dobro em vez de realocar e mover a cada append, o que deixava páginas montadas a partir de milhares de streams pequenos lentas de compilar

Version 2.766.14

Fixed

  • Páginas com /Rotate 90 ou /Rotate 270 agora são renderizadas giradas no sentido horário, como a especificação PDF define, em vez de espelhadas na diagonal; antes o canto superior esquerdo de uma página de 90 graus acabava no canto inferior direito
  • A correção cobre renderização de página e de região, exportação bitmap, metafile e PNG ou TIFF em bands, e o backend de renderização SIMD
  • As conversões de coordenadas página-para-view e view-para-página do viewer e os overlays de busca e destaque seguem o mesmo giro horário, então hits e hit-testing se alinham com a página renderizada

Version 2.766.13

Fixed

  • A exportação SVG de páginas agora escreve texto como UTF-8, como o documento declara, então caracteres acentuados e CJK sobrevivem em vez de virar interrogações ou bytes que deixam o arquivo ilegível; códigos de controle que o XML não aceita viram U+FFFD
  • Texto depois do primeiro run de uma linha, e texto depois de um ajuste de kerning TJ, agora é posicionado certo quando a text matrix escala ou rotaciona o texto — que é como muitos produtores de PDF definem o tamanho da fonte
  • Text rise e escala horizontal agora seguem uma text matrix escalada ou rotacionada, e ajustes TJ respeitam a escala horizontal
  • Texto desenhado com render modes 4 a 6 (paint e clip) é exportado em vez de descartado, texto invisível continua movendo a posição do texto, e texto com stroke mantém a opacidade de stroke
  • O espaçamento de palavras não é mais aplicado a códigos de dois bytes que por acaso valem 32, e sequências de espaços são mantidas para cada caractere ficar na posição dele
  • Glifos de ligadura exportam todos os caracteres que representam, e fontes com códigos mistos de um e dois bytes são lidas código a código
  • Páginas cujo /MediaBox não começa na origem agora caem no canvas SVG em vez de saírem deslocadas para fora dele

Version 2.766.12

Fixed

  • Desenho no THPDFPage.Canvas e metafiles tocados como gráficos vetoriais com ShowMetafile em posição e escala não perdem mais parte das bordas esquerda e superior quando definem um clip region. Cada clip region entrava uma unidade desses dois lados, então uma borda ou preenchimento ao longo da borda esquerda ou superior saía mais fino que o mesmo à direita ou embaixo
  • Clip regions agora batem com as mesmas regiões quando preenchidas, e cobrem a mesma área em qualquer THotPDF.Resolution

Version 2.766.11

Fixed

  • Sublinhados e strikeouts de texto Unicode desenhado com TextOut, UnicodeTextOut, RtLTextOut e ExtTextOut agora cobrem exatamente o texto. Eram medidos sobre o texto convertido para a code page do sistema, então runs com cirílico, hebraico, grego, CJK ou outras letras fora dessa code page ganhavam barras que paravam antes do texto ou passavam dele
  • As barras também seguem espaçamento de caracteres, espaçamento de palavras, escala horizontal e os deslocamentos passados ao ExtTextOut

Version 2.766.10

Fixed

  • Os add-ons de exportação de report e grid (FastReport, QuickReport, ReportBuilder, DevExpress e DBGrid) não sobrescrevem mais a saída uns dos outros quando várias exportações rodam ao mesmo tempo, por exemplo num servidor. O arquivo temporário era nomeado por um timer que só muda a cada 10 a 16 ms, então exportações iniciadas juntas escreviam o mesmo arquivo

Version 2.766.9

Fixed

  • TextWidth agora mede o texto do jeito como ele é desenhado quando há espaçamento de caracteres, espaçamento de palavras ou escala horizontal definidos. O espaçamento não era escalado pela escala horizontal, espaçamento de palavras negativo era ignorado e um espaço no fim não recebia espaçamento de palavras, então continuação de parágrafo, retângulos de link e texto centralizado ou alinhado à direita ficavam fora do texto desenhado
  • TextWidth e GetWideTextWidth devolvem a mesma largura para o mesmo texto

Version 2.766.8

Fixed

  • O device do ReportBuilder (TppHotPDFDevice) agora desenha texto nativo dentro da caixa de texto dele. O texto era posicionado como se a posição fosse a baseline, então todo objeto de texto começava uma linha abaixo do devido e a última linha passava da caixa
  • Texto nativo centralizado e alinhado à direita é medido com as larguras Unicode com que é desenhado, então texto com letras fora da code page do sistema — como chinês num sistema ocidental — se alinha corretamente

Version 2.766.7

Fixed

  • A exportação do FastReport agora coloca o texto do memo dentro do memo. O texto era posicionado como se a posição fosse a baseline, então o texto de todo memo começava uma altura de fonte abaixo do devido, e texto alinhado por baixo era desenhado abaixo do memo, onde o clipping o escondia
  • Alinhamento vertical topo, centro e base mede tudo a partir do topo da primeira linha, para memos simples e com tags HTML

Version 2.766.6

Fixed

  • O filter de exportação do FastReport (TfrxHotPDFExport) compila de novo. A propriedade NotEmbeddedFonts lia um campo de outro tipo, e a exportação nativa de pictures usava uma propriedade Clipped que TfrxPictureView não tem
  • A exportação nativa de pictures agora recorta cada picture na view dele, como o FastReport faz, então um picture maior que a view não vaza mais sobre os objetos vizinhos
  • Um picture centralizado mantém frame e clip nos limites da view; só a imagem em si é centrada. O frame costumava se mover junto com a imagem

Version 2.766.5

Fixed

  • O add-on do DBGrid agora mede o texto de célula com as larguras de texto Unicode com que desenha, antes de cortá-lo para caber na coluna. Texto com letras fora da code page do sistema, como chinês num sistema ocidental, era medido como interrogações e passava da célula; texto double-byte em sistemas chinês, japonês ou coreano era cortado bem antes da célula encher
  • Um corte nunca deixa metade de um surrogate pair antes do ...

Version 2.766.4

Fixed

  • O add-on do DBGrid (TDBGridHotPDFExport e DBGridHotPDFExportToFile/ToStream) agora desenha o texto de célula dentro das células. O texto era posicionado como se a posição fosse a baseline, então o texto de cada linha sentava na borda inferior da célula e era cortado pela grid line da linha seguinte
  • Texto de header fica centrado na linha de header, e o título não encosta mais no topo da tabela

Version 2.766.3

Fixed

  • GetLoadedPDFVersionString agora devolve %PDF-1.7 e afins em sistemas cujo locale usa vírgula decimal; lá ele devolvia %PDF-1,7
  • O campo pdfVersion de GetLoadedDocumentReport está corrigido do mesmo jeito

Version 2.766.2

Fixed

  • A importação de HTML (RenderHTML e RenderHTML5) produz a mesma página em qualquer THotPDF.Resolution. Comprimentos CSS e o Margin, BaseFontSize, ListIndent e BlockSpacing do importador são points, mas com Resolution 144 texto, margens, listas e tabelas saíam com metade do tamanho
  • Texto e gráficos que você desenha antes e depois da importação continuam usando 1/Resolution de polegada
  • Documentos montados na Resolution default de 72 saem exatamente como antes

Version 2.766.1

Fixed

  • Forms XFA achatados com ApplyXFAAsAcroForm ou FlattenLoadedXFA mantêm as posições, tamanhos e tamanhos de fonte do template em qualquer THotPDF.Resolution. Com Resolution 144 o form inteiro saía com metade do tamanho no canto superior esquerdo da página
  • Texto e gráficos que você desenha antes e depois do flattening continuam usando 1/Resolution de polegada
  • Documentos montados na Resolution default de 72 saem exatamente como antes

Version 2.766.0

Added

  • THPDFPage.UserWidth e THPDFPage.UserHeight devolvem o tamanho da página nas unidades em que você desenha, 1/Resolution de polegada, então código de layout pode compará-lo com coordenadas, margens e TextWidth em qualquer THotPDF.Resolution. Width e Height continuam devolvendo points, e código existente lê os mesmos valores de antes

Fixed

  • Com THotPDF.Resolution num valor diferente de 72, parágrafos agora quebram linha no espaço real entre as margens e pulam para a próxima página na margem inferior. Eles mediam a página em points, então com 144 um parágrafo de margens largas podia quebrar depois de cada caractere e se espalhar por muito mais páginas do que devia
  • Um parágrafo que continua numa página nova mantém o mesmo tamanho de página, coordenadas e tamanho de fonte em qualquer Resolution. Com 144 a página de continuação trocava para coordenadas em points e o texto nela saía com metade do tamanho
  • THPDFTable só abre página nova quando uma linha alcança a margem inferior; com 144 uma tabela na metade de baixo da página colocava cada linha numa página própria
  • A importação de HTML diagrama o texto por toda a largura da página em qualquer Resolution em vez da metade esquerda
  • Metafiles desenhados centrados na página e clip regions de metafile que cobrem a página toda usam a página inteira em qualquer Resolution
  • Diagnósticos de layout para page layers e páginas flushed reportam o tamanho da página em unidades de desenho
  • Documentos montados na Resolution default de 72 saem exatamente como antes

Version 2.765.52

Fixed

  • Senhas AES-256 com letras não-ASCII agora funcionam em outros leitores de PDF. O HotPDF gerava o hash da senha na code page do sistema, enquanto a ISO 32000-2 a define como UTF-8, então outros leitores rejeitavam uma senha chinesa ou acentuada, por exemplo; revision 5 e revision 6 estão corrigidas
  • Senhas AES-256 com mais de 127 bytes agora são cortadas para 127 bytes como o padrão define, então leitores que o seguem as aceitam
  • O HotPDF agora abre arquivos AES-256 de outros produtores cuja senha tem letras não-ASCII
  • Arquivos que versões anteriores criptografou com essas senhas continuam abrindo no HotPDF com a mesma senha

Version 2.765.51

Fixed

  • Texto ANSI escrito depois de texto Unicode na mesma fonte não aparece mais como quadrados vazios. Quando uma página desenhava texto Unicode com TextOut e depois usava TextBox ou TextOutBoxEx na mesma face (por exemplo Arial noutro tamanho), o texto ANSI ia parar na fonte Unicode e os viewers não achavam os glifos dele; agora ele ganha recurso de fonte próprio e exibe e extrai corretamente
  • Páginas que usam só texto ANSI ou só texto Unicode produzem a mesma saída de antes

Version 2.765.50

Fixed

  • Documentos criptografados com AES-256 revision 6 (UseAES256R6, e AES-256 do PDF 2.0) agora abrem em outros leitores de PDF. O hash da senha era calculado com o salt em toda rodada e sem a entrada de usuário no lado do owner, então qpdf, MuPDF e outros leitores rejeitavam as duas senhas; o HotPDF só aceitava os próprios arquivos
  • O HotPDF agora abre arquivos revision 6 criados por outros produtores com a senha de user ou owner deles em vez de reportar senha incorreta
  • A amostra AES-256 R6 do demo Security abre em outros leitores

Version 2.765.49

Fixed

  • Caixas de texto Unicode justificado não espalham mais as letras nem passam da borda direita da caixa. Com fonte escolhida por nome, como Arial, cada linha justificada saía com cerca do dobro da largura da caixa e sobrepunha o que estivesse ao lado; agora toda linha justificada termina na borda da caixa
  • Texto desenhado com avanço explícito por caractere agora cai onde foi pedido no mesmo cenário, em vez de cada caractere ser empurrado uma largura extra de caractere para a direita

Version 2.765.48

Changed

  • Os demos HelloWorld, CJKAnnotations, TextOut e RtLTextOut para Delphi e C++Builder agora embutem só os glifos que usam. Eles embutiam fontes de sistema inteiras como Arial Unicode MS, então um hello world de uma página saía com cerca de 15 MB e a amostra da direita para a esquerda com cerca de 30 MB; as mesmas páginas agora ficam entre 80 KB e 650 KB com o mesmo visual

Version 2.765.47

Fixed

  • Texto da direita para a esquerda não sai mais com letras na ordem errada em algumas fontes. Hebraico em Arial Unicode MS tinha letras vizinhas trocadas em muitas palavras, e árabe em Microsoft Sans Serif não era revertido de jeito nenhum, porque os números de glifo dessas fontes eram confundidos com marcas de acento na hora de pôr a linha em ordem visual
  • As linhas em hebraico do demo RtLTextOut agora são lidas corretamente

Version 2.765.46

Fixed

  • GetWideTextWidth agora inclui o espaçamento de caracteres e de palavras com que o texto é desenhado, como o TextWidth já fazia. Texto Unicode com quebra de linha e centralizado, com espaçamento definido, era medido estreito demais
  • TextOutHTML agora mostra o espaçamento de palavras definido com SetWordSpacing: ele posiciona cada run na largura medida, o que deixava o espaçamento de fora. O word-spacing e o letter-spacing CSS da importação de HTML passam pelo mesmo layout

Version 2.765.45

Fixed

  • SetWordSpacing agora funciona com fontes embutidas. Texto em fonte embutida é escrito com códigos de caractere de dois bytes, e o PDF aplica o espaçamento de palavras apenas ao código de espaço de um byte, então o espaçamento era ignorado em silêncio sempre que FontEmbedding estava ligado ou o texto pedia uma fonte Unicode
  • O espaçamento é adicionado depois de cada espaço como um ajuste de posicionamento de texto, que todo viewer de PDF respeita; texto sem espaçamento de palavras é escrito exatamente como antes
  • A linha de word-spacing do demo TextOut agora mostra o espaço extra

Version 2.765.44

Fixed

  • Os demos AnnotationInteraction para Delphi e C++Builder agora encaixam cada legenda de link dentro do retângulo do link. O texto começava baixo demais, então a borda do retângulo atravessava ele, e era mais largo que o retângulo

Version 2.765.43

Fixed

  • Texto com strikeout (fsStrikeOut) agora é traçado pelo meio das letras minúsculas. A linha era desenhada meia linha abaixo da baseline, sob o sublinhado, então texto tachado parecia duplamente sublinhado; isso também afetava <s> no TextOutHTML
  • Texto rotacionado agora ganha o sublinhado abaixo da baseline em vez de ao longo do topo das letras, e o strikeout através das letras
  • Linhas de strikeout são tão grossas quanto sublinhados em todo caminho de texto; os caminhos Unicode e Latin simples desenhavam uma linha bem mais fina

Version 2.765.42

Fixed

  • O demo HTMLText agora produz uma única página com as cinco amostras nela. Ele adicionava uma segunda página depois daquela com que o documento já começa, deixando a primeira página vazia, e começava a escrever perto do rodapé da página, então a amostra de entities e o parágrafo com quebra de linha caíam fora da página

Version 2.765.41

Fixed

  • Os demos Layer para Delphi e C++Builder agora mostram o texto das camadas deles. O texto da camada visível era desenhado na cor do retângulo atrás dele e não dava para ver, e o texto da camada oculta era quase branco
  • A legenda dos demos Patterns é desenhada em preto em vez de ser preenchida com o tiling pattern, que a quebrava em fragmentos de pattern
  • A legenda dos demos AlphaTransparency não é mais desenhada em verde semi-transparente com o blend mode Multiply; as formas transparentes agora ficam com a transparência só delas

Version 2.765.40

Fixed

  • Os demos GraphicDraw para Delphi e C++Builder agora desenham as retas tangentes dos exemplos de curva corretamente. A primeira linha de control point da curva da esquerda parava antes do ponto rotulado, e a curva da direita mostrava um traço horizontal curto em vez das linhas do ponto inicial, passando pelo control point, até o ponto final
  • Os títulos de seção das páginas de retângulo e elipse voltam a ser pretos em vez de herdar a cor da última forma desenhada

Version 2.765.39

Fixed

  • Texto e formas desenhados depois de PrintHyperlink mantêm as cores definidas antes dele. Um cinza voltava como outra cor (branco virava azul), e cores definidas em CMYK ou via um color space voltavam como uma cor RGB antiga
  • A cor do hyperlink agora vale só para o texto do link, não importa qual color space a página estava usando

Version 2.765.38

Fixed

  • TextOutOutline agora desenha os contornos de glifo no tamanho da fonte com qualquer Resolution. Com Resolution diferente de 72 os contornos eram escalados para baixo mais uma vez, por exemplo à metade do tamanho com 144
  • Contornos de fontes com menos de 1000 units por em, como SimHei, não são mais desenhados várias vezes maiores

Version 2.765.37

Fixed

  • Os demos CJKUnicode para Delphi e C++Builder agora mostram a linha em coreano deles em sistemas sem Arial Unicode MS. Eles a desenhavam com a primeira fonte chinesa encontrada, que não tem Hangul, então a linha ficava vazia; agora usam Malgun Gothic quando a fonte escolhida não consegue mostrar coreano

Version 2.765.36

Fixed

  • Texto chinês e japonês escrito com fontes como SimHei não amonta mais os caracteres uns sobre os outros. Quando a mesma fonte era usada num segundo run de texto, muitos ideogramas recebiam larguras de poucas units em vez de um em inteiro
  • As fontes afetadas guardam menos advance widths que glifos; os glifos depois da última largura guardada agora usam essa largura, como o formato TrueType exige

Version 2.765.35

Fixed

  • Texto Unicode em fontes cuja grade de design tem menos de 1000 units por em, como SimHei e SimSun com 256, agora é espaçado corretamente. As larguras de glifo escritas no PDF eram cerca de quatro vezes maiores, então viewers deixavam buracos largos depois de espaços e de outros caracteres usados pela primeira vez

Version 2.765.34

Fixed

  • O cenário de imagem escaneada do demo PDFOptimize agora comprime uma página de texto de verdade. A imagem de teste 1-bit dele saía toda preta, então CCITT G4 e JBIG2 eram comparados sobre um retângulo sólido
  • Os cenários de imagem do demo PDFOptimize agora embutem só os glifos do rótulo de página deles, então os tamanhos reportados mostram a diferença entre os métodos de compressão de imagem em vez de ser dominados por uma fonte inteira embutida

Version 2.765.33

Fixed

  • O demo E-Invoice agora diagrama a página visível da fatura de cima para baixo: o título fica no topo da página e a fatura, as partes e os valores vêm abaixo dele. A página era desenhada de ponta-cabeça na ordem, com o título perto da borda inferior e a nota de rodapé no topo

Version 2.765.32

Fixed

  • Imagens JBIG2 codificadas estritamente lossless (Lossless com LossyLevel = 0) agora mantêm todos os pixels. A remoção default de pontinhos pretos como ruído de scan ignorava essas configurações, então os pontos finais e os pingos dos i e j em texto pequeno desapareciam de imagens que deviam ser sem perdas
  • Os defaults pensados para scan (LossyLevel = 5 com RemoveIsolatedBlackPixels) continuam removendo speckles como antes

Version 2.765.31

Fixed

  • Exportar páginas carregadas para PNG ou TIFF não falha mais com "received too many rows" em resoluções em que uma render band não é um número inteiro de points, como os 150 DPI default do SaveLoadedPagesAsImages com página Letter. O arredondamento fazia cada band ficar uma linha de pixel mais alta que o planejado, então as bands somavam mais linhas que a imagem

Version 2.765.30

Fixed

  • TextWidth, TextHeight, GetWideTextWidth e GetWideCharAdvances agora respondem nas unidades de página da Resolution, as unidades em que o texto é desenhado. Com Resolution diferente de 72 eles respondiam em points, então o texto medido não batia com as coordenadas em que era posicionado
  • Com Resolution diferente de 72, texto desenhado com TextOut agora começa no Y dele em vez de alto demais, e sublinhados e strikeouts cobrem o texto todo na distância e espessura certas em vez de uma fração
  • Em qualquer Resolution, TextBox, TextOutBoxEx e WideTextOutBoxEx centralizam e alinham à direita as linhas pela largura real do texto, células de tabela e parágrafos quebram texto por ela, e os runs estilizados do TextOutHTML não se sobrepõem mais
  • Um run de fallback de fonte dentro do WideTextOutBoxEx mantém o tamanho da fonte em qualquer Resolution em vez de encolher
  • Saída com Resolution 72 fica inalterada

Version 2.765.29

Fixed

  • Quando o Windows não consegue aplicar por conta própria o world transform de um metafile EMF, o HotPDF combina as transforms sozinho. O offset vertical de uma transform combinada usava o termo errado, então o conteúdo desses metafiles podia aparecer deslocado para cima ou para baixo

Version 2.765.28

Fixed

  • Mostrar um metafile EMF não imprime mais linhas de diagnóstico como [WMF_DEBUG] EMR_POLYGON16 record found na saída padrão de aplicações console. O trace de metafile tinha ficado ligado no build de release

Version 2.765.27

Fixed

  • Texto em metafiles EMF mostrados com ShowMetafile agora fica na altura em que o Windows o desenha. Texto alinhado pelo topo — o default do TCanvas.TextOut — era desenhado uma altura de linha acima, e texto alinhado por baixo também ficava alto demais
  • Texto de metafile alinhado pela baseline e rotacionado fica inalterado

Version 2.765.26

Fixed

  • ShowMetafile com posição e escala agora desenha o metafile com o canto superior esquerdo no ponto informado e na escala pedida. Antes ele ignorava esses argumentos e sempre desenhava o metafile no canto superior esquerdo da página no tamanho natural
  • ShowMetafile sem posição fica inalterado

Version 2.765.25

Fixed

  • Desenhos AngleArc em metafiles EMF mostrados com ShowMetafile agora desenham o arco que descrevem, em qualquer direção, seguido das linhas que continuam do fim do arco. Era desenhado um círculo completo no lugar, e o tamanho dele errava sempre que o metafile tinha um offset

Version 2.765.24

Fixed

  • Sob PDF/A e PDF/X, anotações free text com conteúdo ASCII simples agora mostram o texto delas. A aparência delas desenhava só a moldura e o preenchimento, porque a Helvetica nomeada na default appearance da anotação não pode ser usada sem embutir ali
  • O texto é desenhado a 12 pt na fonte atual da página — embutida junto com o texto da página — com quebra de linha na caixa da anotação e alinhamento pela justificação escolhida, como já era feito para conteúdo não-ASCII
  • Fora de PDF/A e PDF/X, anotações free text só com ASCII são escritas exatamente como antes

Version 2.765.23

Fixed

  • Com AutoShapeArabic ligado, TextOut e UnicodeTextOut agora juntam letras árabes, persas e urdu nas formas inicial, medial e final delas e nas ligaduras, como RtLTextOut já fazia. Toda letra aparecia na forma isolada
  • O mesmo vale para AutoShapeSyriac, AutoShapeNko, AutoShapeAdlam, AutoShapeHanifiRohingya e para a reordenação de pontos hebraicos (sfHebrewReorder em ShapingFeatures)
  • Com essas opções ligadas, texto cujos números de glifo caíam por acaso nas faixas de caracteres árabes ou hebraicos podia aparecer com os glifos errados; isso não acontece mais
  • Anotações free text desenhadas na fonte da página são moldadas do mesmo jeito que o texto da página
  • Saída com essas opções desligadas fica inalterada

Version 2.765.22

Fixed

  • Formas curvas agora respeitam valores de Resolution diferentes de 72. Ellipse, Circle, Arc, DrawArc, Pie, DrawPie, Chord e ArcTo eram desenhados no lugar e tamanho errados, enquanto linhas retas, retângulos e retângulos arredondados ficavam corretos
  • Saída na resolução default de 72 fica inalterada

Version 2.765.21

Fixed

  • Fatias de pizza desenhadas com Pie ou DrawPie agora são formas fechadas únicas, então o contorno delas ganha cantos de verdade onde as arestas retas encontram o arco em vez de duas pontas de linha soltas
  • Chords em metafiles EMF mostrados com ShowMetafile agora fecham pela linha reta entre as pontas do arco delas. A linha ia parar num ponto bem longe da forma

Version 2.765.20

Fixed

  • DrawArc e DrawPie agora desenham a parte da elipse que a documentação deles descreve: no sentido anti-horário do ponto inicial ao ponto final, como fazem as chamadas Arc e Pie do Windows GDI. Eles desenhavam a outra parte, então um arco de um quarto saía como três quartos
  • Fatias de pizza, chords e arcos ArcTo em metafiles EMF mostrados com ShowMetafile agora batem com a figura que o Windows desenha, nos dois sentidos de arco. Eles mostravam a parte oposta da elipse; arcos simples já estavam corretos
  • Os métodos Arc, Pie, Chord e ArcTo baseados em ângulos ficam inalterados

Version 2.765.19

Fixed

  • Retângulos rotacionados desenhados com RectangleRotate agora são formas fechadas, como os desenhados com Rectangle. Traçar o contorno de um deles deixava de fora o quarto lado, então um retângulo rotacionado só com contorno mostrava três arestas
  • Retângulos rotacionados preenchidos, e as barras de sublinhado e strikeout de texto rotacionado, ficam iguais a antes

Version 2.765.18

Fixed

  • Números negativos escritos em PDFs gerados agora são arredondados corretamente. Valores como -50 eram escritos como -49.99, então coordenadas, offsets e posições negativos no conteúdo de página, retângulos de anotação e entradas parecidas podiam errar por até 0.01 units
  • Valores negativos agora são arredondados half away from zero, espelhando exatamente os positivos; valor negativo que arredonda para zero é escrito como 0
  • Saída para zero e números positivos fica inalterada

Version 2.765.17

Fixed

  • Anotações free text com conteúdo chinês, japonês, coreano, árabe, cirílico ou outro não-ASCII agora mostram o texto delas em qualquer viewer. Elas dependiam do viewer desenhar o texto em Helvetica, que só representa caracteres ocidentais, então viewers como o Poppler exibiam apenas a pontuação ASCII
  • Essas anotações agora carregam a própria aparência (ISO 32000-1 12.5.5): o texto é desenhado na fonte atual da página, embutida e em subsetting junto com o texto da página, com quebra de linha na caixa da anotação (entre palavras, ou entre caracteres para texto sem espaços), alinhado pela justificação escolhida e colocado sobre a mesma moldura e preenchimento de antes
  • A aparência também é escrita sob PDF/A, onde a fonte embutida mantém o documento conforme e o texto da anotação fica visível em vez de uma caixa vazia
  • Anotações free text com conteúdo apenas ASCII são escritas exatamente como antes

Version 2.765.16

Fixed

  • Páginas em branco inseridas em documentos carregados com InsertLoadedBlankPage agora trazem o dicionário de recursos que toda página exige (ISO 32000-1 Table 30), então validadores como o qpdf não reportam mais a árvore de páginas como danificada e o conteúdo pode ser adicionado à página depois

Version 2.765.15

Fixed

  • No demo Table o valor do subtotal agora se estende pelas colunas Qty e Price como esperado; ele usava o índice de célula errado, o que deixava a coluna Qty como uma célula vazia

Version 2.765.14

Fixed

  • Imagens em células do THPDFTable agora são desenhadas dentro da própria célula e respeitam o alinhamento vertical; elas ficavam posicionadas uma altura de imagem mais abaixo, fora da célula e fora da tabela

Version 2.765.13

Fixed

  • As larguras de texto Unicode (GetWideTextWidth e a medida de justificação) agora batem com a fonte; em fontes como Arial elas saíam cerca de duas vezes maiores que o devido
  • Tabelas, texto com quebra automática de linha e texto alinhado à direita, centralizado ou justificado construídos sobre essas larguras voltam a ser diagramados corretamente: texto curto de célula não quebra mais linha, valores alinhados à direita alcançam a borda da célula e texto HTML em células de tabela não mostra mais espaços grandes entre palavras

Version 2.765.12

Fixed

  • Formulários com check boxes ou radio buttons agora listam a fonte ZapfDingbats (/ZaDb) nos recursos padrão do formulário. Viewers que desenham esses campos por conta própria (o padrão quando AutoFormAppearances está desligado) procuram a fonte lá para desenhar a marca de seleção; antes, viewers baseados em Poppler reportavam fonte desconhecida e não mostravam marca nenhuma

Version 2.765.11

Fixed

  • No demo CJKAnnotations o primeiro ícone de nota de cada linha de idioma agora se alinha com os outros ícones da linha; ele ficava 5 points mais acima

Version 2.765.10

Fixed

  • Fontes pedidas pelo nome em inglês agora são encontradas em sistemas Windows em outros idiomas. Um pedido por SimSun, Microsoft YaHei ou MS Gothic em Windows chinês, japonês ou coreano era tratado como fonte ausente, porque o Windows reporta o nome no idioma do sistema, e o texto era definido em Arial Unicode MS sem aviso nenhum

Version 2.765.9

Fixed

  • Fontes que o Windows mantém em coleções TrueType (.ttc), como SimSun, Microsoft YaHei e MS Gothic, agora são embutidas como fontes independentes válidas. Antes, cada tabela da fonte embutida apontava para os dados errados, então viewers rejeitavam a fonte e caíam para uma fonte do sistema, e em computadores sem essa fonte o texto mostrava glifos errados
  • Isso também afetava documentos cuja fonte pedida estava ausente e que o Windows mapeava para uma fonte de coleção, por exemplo texto Unicode com Arial Unicode MS em sistemas onde só havia SimSun

Version 2.765.8

Fixed

  • Arquivos-fonte com texto não ASCII voltam a ser salvos como UTF-8 com byte order mark. Sem ele, o Delphi lê o arquivo-fonte na code page do computador que faz o build, então em Windows chinês, japonês, coreano e outros não ocidentais o texto CJK, árabe, hebraico e acentuado dos demos saía embaralhado nos PDFs gerados, e as mensagens de erro da biblioteca mostravam caracteres errados
  • Os demos CJKAnnotations, Annotations, HelloWorld, RtLTextOut, PageSizes, TextOut, Showcase e ViewerPref de novo produzem o texto esperado onde quer que sejam compilados

Version 2.765.7

Fixed

  • Informações de documento passadas como UTF-8 (Title, Author, Subject, Keywords, títulos de article threads e SetLoadedDocumentInfo com a família SetLoadedTitle) agora são armazenadas como Unicode, então viewers mostram texto acentuado e CJK corretamente e a informação do documento bate com os metadados XMP
  • Texto na code page do sistema (por exemplo um título chinês em um Windows chinês) também é armazenado corretamente, já que bytes que não formam UTF-8 válido são lidos nessa code page

Version 2.765.6

Fixed

  • A visão inicial de documentos novos (InitialZoom) agora grava destinos fit-width e fit-height completos; faltava o operando que a ISO 32000-1 Table 151 exige, então viewers como o Poppler reportavam um array de destino curto demais para todo documento criado com a configuração padrão

Version 2.765.5

Fixed

  • Page labels que não começam na primeira página agora também cobrem as páginas anteriores ao primeiro intervalo, que mantêm números simples; a árvore de page labels precisa incluir a primeira página (ISO 32000-1 12.4.2), e sem isso viewers podiam mostrar rótulos errados
  • SetLoadedPageLabel agora mantém os intervalos em ordem de página e substitui um intervalo que começa na mesma página, então viewers mostram os rótulos esperados; antes, intervalos novos eram anexados fora de ordem e podiam se repetir
  • SetLoadedPageLabel não descarta mais os rótulos existentes de documentos que os guardam em um objeto separado, e também atualiza árvores de rótulos divididas em vários nós
  • Prefixos de page label passados como UTF-8 agora são armazenados como Unicode

Version 2.765.4

Fixed

  • Descrições de link passadas como UTF-8 (AddURILink, AddGoToLink, AddGoToRLink, AddLaunchLink, AddNamedDestinationLink e os links de structure destination) agora são gravadas como Unicode, então screen readers e viewers mostram texto acentuado e CJK em vez de caracteres embaralhados
  • O mesmo vale para o texto e o autor de annotations adicionadas a documentos carregados com os métodos AddLoaded...Annotation, no mesmo padrão das annotations criadas em documentos novos

Version 2.765.3

Fixed

  • AddGoToLink agora pode apontar para uma página que só é adicionada depois em um documento novo, então um sumário na primeira página pode ter links para frente; esses links antes eram descartados sem erro nenhum
  • Um link cuja página alvo nunca é adicionada mantém a área mas fica sem action, em vez de apontar para uma página inexistente

Version 2.765.2

Fixed

  • SetLoadedOutlineOpen agora abre e fecha bookmarks em documentos carregados; antes, ele gravava uma key que os viewers ignoram e o bookmark mantinha o estado
  • AddLoadedOutline, SetLoadedOutlineURI e SetLoadedOutlineDestination agora agem no bookmark pedido; com qualquer índice acima de 0 eles alteravam o bookmark errado ou não faziam nada
  • Adicionar um bookmark a um documento carregado agora atualiza as contagens de itens visíveis do pai, dos ancestrais e do outline, então viewers não mostram mais estados de expansão nem totais de itens errados
  • Definir um web link em um bookmark carregado agora remove o destination de página dele, e definir um destination remove a action, já que um bookmark só pode carregar um dos dois
  • Títulos de bookmark passados como UTF-8 para AddLoadedOutline e SetLoadedOutlineTitle agora são armazenados como Unicode em vez de bytes embaralhados

Version 2.765.1

Fixed

  • Bookmarks em documentos novos agora registram quantas entradas estão visíveis, como a ISO 32000-1 12.3.3 exige: antes, o outline e todo bookmark aberto contavam todas as entradas aninhadas, inclusive as de dentro de bookmarks fechados
  • Definir Opened em um bookmark depois de adicionar os filhos agora o abre no viewer; antes, a mudança nunca chegava ao arquivo
  • Atribuir Title a um bookmark existente agora muda o título mostrado no documento
  • Títulos de bookmark com texto não ASCII passados como UTF-8 agora são gravados como Unicode, então títulos acentuados e CJK aparecem corretamente em vez de caracteres embaralhados
  • Bookmarks agora carregam a referência ao pai que a especificação exige

Version 2.765.0

Added

  • HPDFTokenizeContentStreamAppend tokeniza um content stream direto para dentro de um array de tokens existente, então chamadores que combinam vários streams evitam um array temporário por stream

Changed

  • Compilar uma página para renderização não aloca mais memória para cada número e operador do content stream dela, e o conteúdo da página é tokenizado direto na display list da página em vez de ser copiado para lá
  • A renderização paralela de páginas escala muito melhor em um documento frio: em um documento de teste vetorial de 128 páginas, 4 workers agora terminam cerca de 3 a 3,5 vezes mais rápido que 1 worker (antes cerca de 1,4 vez em builds de 32 bits e 1,7 vez em builds de 64 bits)
  • A compilação e a renderização de página single-threaded também ficam cerca de 35% mais rápidas nesse documento; tokens, display lists e a saída renderizada não mudam

Version 2.764.7

Changed

  • Renderizar conteúdo que salva e restaura o graphics state com frequência (q/Q) não aloca mais memória a cada save, o que fazia as worker threads da renderização paralela de páginas se esperarem dentro do memory manager
  • A renderização paralela fria de um documento de teste vetorial de 128 páginas fica cerca de 7–10% mais rápida com 4 workers e cerca de 5% mais rápida com um worker; a saída renderizada não muda

Version 2.764.6

Fixed

  • A renderização paralela de páginas não cai mais para uma página por vez quando as páginas já foram renderizadas antes e as display lists delas ainda estão em cache
  • Antes, toda página esperando para ser desenhada mantinha a reserva de memória enquanto só uma página era desenhada por vez, então os outros workers travavam no orçamento de memória compartilhado; agora, quando há tantas páginas esperando quantos workers, elas são desenhadas em paralelo
  • A primeira página continua chegando cedo, e a memória reservada por um lote agora fica proporcional ao número de workers em vez de encher o orçamento inteiro

Version 2.764.5

Fixed

  • SetStructureClassMapEntry agora pode registrar um attribute dictionary sob vários nomes de classe, ou de novo sob o mesmo nome, sem liberá-lo
  • Antes, remover ou substituir uma dessas entradas liberava o dicionário compartilhado, então as entradas restantes do /ClassMap apontavam para memória liberada e salvar o documento podia gravar lixo ou disparar um access violation
  • Um attribute dictionary criado diretamente agora vira um objeto indireto quando é registrado, e toda entrada do /ClassMap faz referência a ele; o documento é dono do dicionário, então chamadores não devem liberá-lo

Version 2.764.4

Fixed

  • RemoveUnusedLoadedPageResources não grava mais em uma tabela de recursos depois de removê-la, quando a tabela de recursos /Font, /XObject ou outra de uma página está gravada diretamente dentro de /Resources e toda entrada nela está sem uso
  • Antes, essa gravação ia para memória liberada, o que geralmente passava despercebido, mas podia corromper a memória ou disparar um access violation mais tarde na sessão
  • Tabelas de recursos esvaziadas continuam sendo removidas de /Resources, e a saída salva não muda

Version 2.764.3

Fixed

  • Abrir um PDF criptografado por public key (certificado) com PubSecKeyMaterial, por LoadFromFile ou BeginIncrementalUpdate, não lê mais envelopes de destinatário de memória que já tinha sido liberada durante a recuperação da file key
  • A falha dependia de como a memória acontecia de ser reutilizada: o documento normalmente abria, mas podia ser rejeitado como se nenhum key material tivesse sido atribuído, ou desembrulhar os bytes errados
  • Documentos com vários destinatários, o callback de seleção de destinatário e key materials adicionais registrados com AddPubSecKeyMaterial usam todos a mesma lista de envelopes corrigida

Version 2.764.2

Fixed

  • As aparências de campo geradas para formulários carregados, por AddLoadedTextField e os demais métodos de campo AddLoaded*, EnsureLoadedFieldAppearanceStream ou FlattenFormFields, agora guardam uma referência própria à fonte do /DR do AcroForm em vez de compartilhar a entrada do /DR
  • Substituir ou excluir o dicionário /DR do AcroForm, ou remover o último campo de formulário (o que também remove o AcroForm), não deixa mais essas aparências apontando para objetos de fonte liberados
  • Antes, liberar o documento em seguida podia esbarrar em um access violation oculto que deixava o resto do documento sem liberar, ou corrompia a memória, principalmente em builds de 64 bits
  • Uma fonte gravada diretamente dentro do /DR vira um objeto indireto na primeira vez que uma aparência a usa, assim a aparência do campo e o /DR se referem ao mesmo objeto de fonte no arquivo salvo

Version 2.764.1

Fixed

  • Chamar ProcessObjectStreamsForDecompression depois de LoadFromFile não lê mais o stream do arquivo que o carregamento já tinha fechado; em vez disso, ele rescaneia o arquivo carregado, assim os membros de object stream continuam disponíveis para ExtractObjectFromStream
  • A falha dependia de como a memória acontecia de estar organizada: normalmente passava despercebida, mas podia disparar um access violation ou escanear memória sem relação, principalmente em builds de 64 bits
  • FindAllObjectStreams, ScanAndLoadReferencedObjects e ForceLoadMissingReferencedObjects agora não fazem nada quando chamados fora de um carregamento, em vez de tocar o stream fechado

Version 2.764.0

Changed

  • Uma instância de THotPDF, por exemplo um componente solto em um formulário, agora pode gravar qualquer número de documentos, um após o outro: BeginDoc depois de EndDoc inicia um documento novo e independente em vez de disparar uma exceção
  • EndDoc descarta tudo o que foi registrado para o documento gravado, incluindo imagens, fontes, campos de formulário, outlines, o JavaScript do documento, destinos nomeados, page labels, perfis ICC e output intents, e o próximo BeginDoc libera as páginas e os objetos desse documento, assim nada disso chega ao próximo arquivo; com ReproducibleOutput ativado, um segundo documento de uma instância reutilizada é byte a byte igual a esse documento vindo de uma instância nova
  • Os registros feitos entre EndDoc e o próximo BeginDoc, como AddPDFAOutputIntent ou scripts adicionados por meio de Names, pertencem ao próximo documento e o BeginDoc não os limpa mais
  • As configurações de propriedades como FileName, Compression, PDFACompliance, Author e Title, junto com as camadas de página e as cadeias de fallback de fontes, seguem para o próximo documento; uma versão de PDF elevada automaticamente para um documento volta ao valor da propriedade Version
  • O documento gravado continua disponível depois de EndDoc até o próximo BeginDoc, então ValidatePDFUA2Structure, CurrentPageNumber, PagesCount e os diagnósticos de layout continuam funcionando nele
  • Como as senhas são limpas assim que um documento protegido é criptografado, BeginDoc dispara uma exceção quando ActivateProtection continua ativado e nenhuma senha nova foi definida, em vez de proteger o próximo arquivo com senhas vazias
  • Iniciar um documento novo depois de regravar um documento carregado na mesma instância também produz um arquivo limpo

Version 2.763.1

Fixed

  • Converter um EPUB, ou importar HTML com o perfil HTML5, não corre mais o risco de um access violation quando um parágrafo não cabe na página atual; o parágrafo agora é sempre desenhado na página nova
  • A mesma correção cobre os parágrafos, os itens de lista e as linhas horizontais do renderizador de blocos compacto usado pelo HPDFRenderHTMLDocument
  • A falha dependia de como a memória acontecia de estar organizada, então aparecia só de vez em quando, principalmente em builds de 64 bits, e podia deixar uma conversão sem saída ou corromper o conteúdo dela

Version 2.762.1

Fixed

  • Chamar BeginDoc de novo em uma instância de THotPDF que já gravou um documento novo não termina mais em access violation; ela dispara uma exceção que pede uma nova instância, porque a instância ainda guarda os objetos, imagens, fontes e campos de formulário do documento concluído
  • Passado o crash, o segundo documento teria carregado os objetos do primeiro, incluindo o conteúdo e os campos de formulário dele; uma instância por documento novo mantém cada arquivo com o próprio conteúdo
  • Carregar um documento existente com LoadFromFile e regravá-lo não é afetado

Version 2.762.0

Fixed

  • Anotações de texto, free text, linha, quadrado, círculo, stamp e anexo de arquivo ficam visíveis em documentos PDF/A-2, PDF/A-3, PDF/A-4 e PDF/X-6; elas traziam um stream de aparência vazio que só servia para satisfazer o validador, e como os visualizadores desenham a aparência, nada aparecia
  • Essas aparências agora desenham a anotação: as bordas do quadrado e do círculo, a linha, um ícone de nota e um ícone de anexo na cor da anotação, a moldura do stamp e a caixa de free text preenchida com a cor de fundo dela
  • A saída PDF 2.0 dá a cada uma dessas anotações, às anotações de markup estendidas e aos campos de formulário novos um stream de aparência, como a ISO 32000-2 Tabela 166 exige, e grava /NeedAppearances false; fora de PDF/A e PDF/X o free text e o nome do stamp são desenhados em Helvetica
  • Em PDF/A e PDF/X as aparências de free text e de stamp não desenham texto, porque toda fonte usada ali precisa estar embutida; o texto fica na anotação para os visualizadores exibirem

Version 2.761.6

Fixed

  • Anotações de anexo de arquivo (AddFileAttachmentAnnotation) podem ser abertas e salvas de novo nos visualizadores: a especificação de arquivo gravava o próprio stream do arquivo embutido como /EF, onde a ISO 32000-1 Tabela 44 exige um dicionário /EF que guarde o stream sob /F, então os readers informavam que a entrada do arquivo estava faltando
  • O stream do arquivo embutido de um anexo desse tipo é tipado como /EmbeddedFile, e o texto da anotação também é guardado como a descrição do arquivo

Version 2.761.5

Fixed

  • Destinos nomeados, JavaScript de documento e anexos de documento são gravados com as chaves da árvore de nomes em ordem de classificação, como a ISO 32000-1 7.9.6 exige; eles eram gravados na ordem de registro, e readers que buscam na árvore podiam perder entradas (o qpdf reportava as árvores como não ordenadas)
  • Anexar dois arquivos com o mesmo nome de arquivo não cria mais duas entradas com uma chave só, o que deixava apenas um anexo alcançável; o segundo recebe uma chave numerada como a (2).txt e mantém o nome de arquivo original
  • Mudanças de AddLoadedDocumentJavaScript e AddLoadedNamedDestination são salvas; a árvore de nomes editada não era gravada de volta quando vivia em um dicionário direto, então as novas entradas se perdiam. Ambas inserem na posição ordenada, inclusive em árvores divididas em nós /Kids, e substituem uma entrada existente de mesmo nome
  • AddLoadedDocumentJavaScript guarda uma ação JavaScript como o valor da árvore de nomes em vez de um stream de script puro, e AddLoadedNamedDestination grava o operando de zoom do destino /XYZ dele
  • RemoveLoadedJavaScript e RemoveLoadedJavaScriptAll removem os scripts do próprio documento; antes, só a lista devolvida pelos getters mudava e os scripts ficavam no arquivo salvo
  • SetDocumentAttachmentMetadata renomeia o anexo que recebe; ele renomeava a chave do último anexo da árvore, e a entrada renomeada agora se move para a posição ordenada

Version 2.761.4

Fixed

  • AcroForms novos sempre definem a fonte Helvetica que as strings de aparência padrão dos campos citam nos recursos padrão (/DR) do formulário, como a ISO 32000-1 12.7.3.3 exige; sem AutoFormAppearances a fonte estava ausente, então visualizadores que montam a aparência dos campos ficavam sem fonte para montá-la
  • AddLoadedComboBox cria uma caixa de combinação de verdade; ele definia a flag Edit em vez da flag Combo, então o campo era uma caixa de listagem que os visualizadores mostravam como uma lista com todas as opções
  • Campos adicionados a um documento carregado gravam /NeedAppearances como o booleano true em vez do nome /true, e um AcroForm criado para eles recebe a string de aparência padrão e os recursos padrão aos quais as strings /DA deles se referem
  • AddLoadedTextField, AddLoadedCheckBox, AddLoadedComboBox, AddLoadedListBox e AddLoadedPushButton dão ao campo novo um stream de aparência, então ele aparece em visualizadores que não montam aparências e em documentos cujo formulário define /NeedAppearances false
  • Aparências geradas para push buttons carregados (ao adicionar, redesenhar ou nivelar) desenham a legenda, onde eram vazias

Version 2.761.3

Fixed

  • Mudar o valor de um campo de texto ou choice em um formulário carregado agora redesenha o campo: SetFormFieldValue, ResetLoadedFormField e atualizações de caixa de listagem de seleção múltipla regeneram o stream de aparência, onde o arquivo salvo continuava mostrando o texto antigo em todo visualizador e na impressão, porque os visualizadores desenham a aparência, não o valor armazenado
  • Aparências geradas de campos de texto de senha mostram um asterisco por caractere em vez da senha em forma legível (ISO 32000-1 Tabela 228), tanto para campos novos com AutoFormAppearances quanto para campos carregados que são redesenhados ou nivelados
  • AnalyzeLoadedSignatureRevisions classifica como preenchimento de formulário o novo dicionário de aparência, o stream de aparência e os recursos dele que um preenchimento adiciona depois de assinar, como já fazia com o próprio campo, então preencher um formulário certificado em uma atualização incremental não é mais reportado como mudança fora das estruturas reconhecidas

Version 2.761.2

Fixed

  • Bitmaps de paleta de 1 e 4 bits adicionados com compressão Flate mantêm suas cores; eles eram remapeados para a paleta de sistema de 256 cores, o que deslocava toda cor que essa paleta não contém. Agora são embutidos na própria profundidade de bits, com a própria paleta, o que também deixa os dados da imagem menores
  • Bitmaps de 1 bit cuja paleta lista branco antes de preto não saem mais como negativo com compressão CCITT Group 3, CCITT Group 4 ou JBIG2, incluindo os caminhos de JBIG2 em lote e entre páginas; a cor mais escura da paleta é sempre codificada como preto
  • icAutoMono e AddMonochromeImageAuto mantêm um bitmap de 1 bit com paleta colorida em Flate em vez de transformá-lo em preto e branco com CCITT ou JBIG2
  • Imagens bidimensionais CCITT Group 3 (icCCITT32) agora seguem o próprio parâmetro /K: a primeira linha e cada segunda linha são codificadas unidimensionalmente e /K vale 2, onde cada linha era codificada bidimensionalmente sob /K 1, que não permite linha bidimensional alguma (ISO 32000-1 Tabela 11, ITU-T T.4)

Version 2.761.1

Fixed

  • Imagens JPEG adicionadas com compressão DCT mantêm o próprio modelo de cor: JPEGs em tons de cinza são gravados como DeviceGray e JPEGs CMYK como DeviceCMYK, onde todo JPEG era declarado DeviceRGB; com isso os readers mostravam arquivos em tons de cinza embaralhados ou truncados e arquivos CMYK com cores erradas
  • JPEGs CMYK que carregam o marker da Adobe (a saída usual do Photoshop) recebem o array /Decode invertido de que seus valores de amostra precisam (ISO 32000-1 8.9.5.2 e 7.4.8)
  • As checagens de colorspace do PDF/A agora enxergam o uso de imagens JPEG em tons de cinza e CMYK como DeviceGray e DeviceCMYK em vez de DeviceRGB
  • StampLoadedPageImage aplica o mesmo modelo de cor quando um JPEG é estampado numa página carregada
  • Nomes de arquivo como PHOTO.JPG ou scan.jpeg agora carregam como JPEG com todo tipo de compressão; a overload de arquivo do AddImage reconhece dados JPEG pela assinatura em vez de uma extensão .jpg sensível a maiúsculas e não tenta mais ler esses arquivos como bitmaps

Version 2.761.0

Added

  • O novo AddLoadedSignedSignatureField adiciona a um documento carregado um campo de assinatura pronto para assinar, de modo que um PDF já assinado pode receber uma segunda assinatura (contrassinatura ou aprovação) em uma atualização incremental
  • O campo reserva o espaço de assinatura que SignPDFWithPFX, PreparePDFForSigning e InsertSignatureHex preenchem; depois de BeginIncrementalUpdate e SaveIncrementalUpdate, a nova assinatura cobre o arquivo inteiro enquanto as assinaturas anteriores continuam válidas
  • Motivo, local e informações de contato opcionais, o SubFilter e o tamanho de assinatura reservado podem ser definidos por campo; o AcroForm é marcado como assinado e append-only, e nenhuma flag de regeneração de aparência é adicionada ao documento assinado

Fixed

  • O workflow de assinatura múltipla documentado para BeginIncrementalUpdate agora descreve passos que funcionam; a descrição anterior se apoiava em uma página atual que não existe depois de carregar o documento e em um campo de assinatura sem espaço de assinatura reservado, então a assinatura falhava

Version 2.760.1

Fixed

  • DrawQRCode, DrawDataMatrix, DrawPDF417 e DrawAztec restauram a cor de preenchimento da página depois de desenhar, como documentado; formas preenchidas em seguida ficavam com a cor do barcode
  • Esses barcodes são desenhados como um único path, com cada sequência de módulos escuros em uma linha mesclada em um único retângulo, de modo que o conteúdo da página fica menor e os visualizadores não mostram mais emendas tênues entre módulos adjacentes

Version 2.760.0

Changed

  • Definir CryptKeyLength como aes256 eleva a saída para PDF 1.7 quando ela está abaixo disso, do mesmo jeito que outros recursos dependentes de versão já fazem, de modo que os documentos fiquem realmente protegidos com AES-256. Na saída padrão PDF 1.6, eles eram gravados com AES-128 sem aviso algum; com StrictVersionLock definido, uma versão menor ainda recua para AES-128

Fixed

  • As páginas de ajuda das propriedades de proteção mostravam nomes de permissões que não existem; os exemplos e as descrições de prPrint e prPrint12bit agora batem com as opções reais, e as notas de criptografia de chave pública listam os tipos de chave suportados

Version 2.759.0

Fixed

  • PDFs assinados agora deixam a string /Contents inteira, incluindo os delimitadores < e >, fora dos byte ranges assinados, como a ISO/IEC 32000-1 12.8.3.3 exige; os delimitadores antes eram assinados, e validadores que conferem o byte range contra o valor da assinatura relatavam um byte range inválido
  • A validação de PDF MAC em assinaturas que carregam um MAC anexado aceita tanto o byte range padrão quanto o que versões anteriores gravavam

Security

  • A verificação de assinaturas rejeita um documento cuja lacuna não assinada entre os dois byte ranges contenha qualquer coisa além da própria string /Contents da assinatura, fechando uma brecha de signature wrapping em que conteúdo fora dos bytes assinados era relatado como coberto; assinaturas feitas por versões anteriores continuam validando

Version 2.758.1

Fixed

  • A aparência padrão que AttachSignatureFieldAppearance dá a um campo de assinatura sem assinatura desenha de novo o fundo cinza-claro: o retângulo de preenchimento estava sem dois operandos e definia a cor dentro do path, o que os visualizadores rejeitam
  • Anotações free-text criadas em uma página nova carregam a string de aparência padrão que a ISO 32000-1 exige, de modo que os visualizadores conseguem compor o texto delas em vez de mostrar uma caixa vazia

Version 2.758.0

Fixed

  • O decodificador JBIG2 embutido posiciona cada símbolo depois do primeiro na faixa de texto onde a ISO/IEC 14492 o coloca; cada símbolo seguinte caía um pixel mais à direita, então o texto em scans JBIG2 feitos por outros encoders ia se separando
  • Imagens JBIG2 gravadas com o encoder aritmético nativo e um dicionário de símbolos com um único glifo agora podem ser lidas por outros visualizadores de PDF; os identificadores de símbolo eram codificados com um bit em vez de nenhum, o que fazia esses visualizadores falharem no primeiro glifo
  • Dicionários de símbolos que combinam glifos por refinement e aggregation são decodificados com o espaçamento padrão, igual aos demais decodificadores JBIG2
  • Imagens JBIG2 que compartilham um dicionário de símbolos global gravam /DecodeParms como um array casando com o array /Filter; outros visualizadores ignoravam o dicionário único e não achavam os glifos compartilhados, então essas imagens não eram exibidas

Version 2.757.0

Fixed

  • DirectDrawBarcode e as funções de barra Simple* agora desenham barcodes de verdade para cada symbology; a maioria delas retornava barras alternadas uniformes sem dado algum. GS1-128 com code set C (tipo 22) é desenhado em vez de cair no Code 39, e as barras curtas do POSTNET são desenhadas a 40% da altura
  • DirectDrawBarcode escala as larguras e alturas das barras pelo sistema de coordenadas da página, de modo que os barcodes continuam legíveis quando a escala do documento não é de um ponto por unidade
  • Code 128, Code 93 e a família EAN / UPC mantêm larguras exatas de elementos de um a quatro módulos, não importa qual Ratio esteja definido; qualquer ratio diferente de 2 os tornava ilegíveis
  • EAN-8, EAN-13, UPC-A e UPC-E que recebem apenas os dígitos de dados ganham o check digit acrescentado; o último dígito de dados era tomado como check digit. Com Checksum habilitado, o UPC-A não descarta mais o último dígito de dados, e o check digit do UPC-E (que também escolhe a paridade das barras) é calculado a partir do número UPC-A expandido
  • Os check digits do MSI ficam corretos para números com quantidade ímpar de dígitos, os códigos POSTNET ganham o dígito de correção, e o Interleaved 2 of 5 preserva o último dígito de um número de comprimento ímpar adicionando um zero à esquerda
  • O Code 128 A codifica letras minúsculas via SHIFT em vez de transformá-las em espaços ou caracteres de controle, o Code 39 converte minúsculas em maiúsculas, e o Codabar mantém os caracteres de start e stop fornecidos
  • Caracteres que uma symbology não consegue representar agora disparam exceção; Code 39 e Code 128 antes descartavam ou substituíam esses caracteres, e o Codabar lia fora da sua tabela de caracteres
  • GS1-128 com Checksum habilitado não acrescenta mais outro check digit ao Text a cada vez que o barcode é medido ou desenhado

Version 2.756.0

Fixed

  • QR Codes desenhados com DrawQRCode ou construídos com THPDFQRCode agora escaneiam em readers padrão: a informação de formato é posicionada como a ISO/IEC 18004 especifica, e a estrutura de blocos de correção de erro fica correta para toda versão de 10 a 40 (e para a versão 7-Q)
  • A seleção automática de modo mantém texto em minúsculas no byte mode, de modo que uma URL como https://example.com não é mais codificada e lida de volta em maiúsculas
  • Texto cujo comprimento termina em um ou dois dígitos ou em um caractere alfanumérico ganha um símbolo grande o bastante para ele; os últimos caracteres antes eram descartados
  • Codificar duas vezes com a mesma instância de THPDFQRCode não mistura mais o símbolo anterior no novo
  • Encode retorna False quando a versão pedida explicitamente é pequena demais ou o modo numérico ou alfanumérico solicitado não consegue representar os dados, em vez de produzir um símbolo truncado
  • A seleção de máscara aplica as penalidades de padrão semelhante a finder e de balanceamento de módulos escuros do ISO/IEC 18004 7.8.3
  • O decodificador de barcode embutido lê QR Codes padrão: símbolos multi-bloco com verificação Reed-Solomon, segmentos numéricos, alfanuméricos, byte e ECI, payloads UTF-8 e versões com vários alignment patterns

Added

  • HPDFQRFunctionMap e HPDFQRExtractDataWords expõem o layout de módulos e o de-interleaving de blocos com detecção de erro para código que lê símbolos QR

Version 2.755.9

Changed

  • A renderização de soft masks de imagem reutiliza índices exatos de amostras horizontais e usa premultiplicação alfa SSE2 em alvos Delphi x86 e x64 suportados, preservando o arredondamento de pixels e o cancelamento com armazenamento temporário limitado e um fallback escalar

Version 2.755.8

Fixed

  • A renderização em primeiro plano pode retomar depois que o prefetch de páginas cancelado liberar os recursos do documento, sem esperar que a thread de trabalho termine de sair; cancelamento explícito, substituição, recarga e destruição ainda aguardam a thread, e faixas de páginas inválidas não vazam mais um worker suspenso

Version 2.755.7

Fixed

  • A renderização de páginas preserva o path atual através de restores de graphics state e isola paths de Form XObject e glifos Type3, clipping e estado salvo, incluindo restores extras malformados e cancelamento

Version 2.755.6

Fixed

  • O renderizador de retângulos SIMD agora honra regras de preenchimento compostas even-odd e nonzero, preservando buracos, direção de subpaths refletidos e posicionamento de arestas fracionário; o cancelamento durante a rasterização descarta o bitmap parcial e se propaga corretamente

Version 2.755.5

Fixed

  • Importações de formulários multi-seleção agora reservam valores de opções exatos antes de interpretar grafias de compatibilidade hexadecimais no XFDF, evitando que valores literais selecionem uma opção diferente e mantendo os valores armazenados consistentes com os índices de seleção

Version 2.755.4

Fixed

  • A extração de texto de texto CID vertical (WMode 1) agora move a caneta pelo deslocamento ISO 32000-1 9.4.4, de modo que o espaçamento de caracteres encurta o passo descendo a coluna como a especificação define, em vez de alongá-lo
  • Um ajuste de posição TJ em texto vertical agora move a caneta para baixo ou para cima pela coluna em vez de para o lado, de modo que as colunas extraídas não se separam mais e a ordem de leitura continua de cima para baixo
  • O array /DW2 do CIDFont é lido na ordem especificada [v1y w1y] durante a extração, de modo que glifos que dependem dos padrões avançam um em completo em vez de 0,88 em
  • As origens dos glifos verticais extraídos permanecem na linha central da coluna, e as caixas dos glifos são posicionadas na origem vertical menos o vetor de posição, com o componente horizontal por padrão na metade da largura do glifo
  • Entradas de lista /W2 que descrevem vários CIDs consecutivos agora aplicam suas métricas a cada CID da sequência durante a extração, em vez de apenas ao primeiro
  • O renderizador de páginas e o interpretador de extração de texto agora compartilham uma única implementação das regras de deslocamento de glifos e TJ, de modo que posições renderizadas e extraídas não podem divergir

Version 2.755.3

Added

  • THPDFQCStatementInfo ganha HasPSD2Statement, PSD2RolesOfPSP, PSD2NCAName e PSD2NCAId; o descritor no nível de CMS carrega os mesmos campos
  • HPDFParsePSD2QcStatement analisa uma declaração PSD2 que você já possua como DER e rejeita qualquer entrada malformada

Deprecated

  • PSD2RolesPayer e PSD2RolesPayee permanecem por compatibilidade de código-fonte, mas estão sempre vazios, porque a especificação não define listas de papéis de pagador nem de recebedor; use PSD2RolesOfPSP

Fixed

  • A declaração PSD2 de certificados qualificados agora é lida com sua estrutura ETSI TS 119 495, relatando cada papel do provedor de serviços de pagamento com o OID e o nome do papel, o nome da autoridade nacional competente e o identificador da autoridade; certificados PSD2 reais antes não relatavam papel algum
  • Uma declaração PSD2 malformada, incluindo comprimentos excedentes ou não mínimos, componentes ausentes ou em excesso, tipos de string incorretos e nomes que não são UTF-8 válido, agora é ignorada como um todo em vez de ser relatada parcialmente

Version 2.755.2

Fixed

  • A renderização de páginas de texto vertical (WMode 1) agora avança cada glifo pelo deslocamento no espaço de texto ISO 32000-1 9.4.4: o espaçamento de palavras não é mais escalado pelo tamanho da fonte e não é mais somado a códigos CID de dois bytes, pois se aplica apenas ao código de espaço de um byte
  • O espaçamento de caracteres em texto vertical é aplicado ao longo da direção de escrita exatamente como a especificação o define, de modo que colunas compostas com Tc diferente de zero são renderizadas na mesma altura que em outros visualizadores conformes
  • Texto invisível (modo de renderização 3 e conteúdo opcional oculto) avança colunas verticais com as mesmas regras do texto pintado, mantendo glifos visíveis posteriores no lugar correto
  • O array /DW2 do CIDFont é lido na ordem especificada [v1y w1y], de modo que fontes que dependem dos padrões avançam um em completo em vez de 0,88 em
  • Glifos verticais são pintados na origem vertical menos seu vetor de posição, com o componente horizontal por padrão na metade da largura do glifo, o que centraliza as colunas na posição da caneta
  • Entradas de lista /W2 que descrevem vários CIDs consecutivos agora aplicam suas métricas a cada CID da sequência, em vez de apenas ao primeiro

Version 2.755.1

Fixed

  • O ExportLoadedFormToFDF agora gera o corpo FDF completo antes de criar o arquivo de destino, de modo que uma falha no meio da exportação não substitua mais o destino por um documento truncado
  • O scanner de intercâmbio de streams FDF acompanha strings hexadecimais, mantendo os dicionários de campos intactos quando um valor hex termina exatamente junto ao terminador do dicionário
  • A reconciliação de índices de seleção de choice decodifica grafias mistas de PDFDocEncoding, UTF-16 e hexadecimal com um único matcher, de modo que valores de exportação equivalentes reconstruam o /I de forma consistente
  • A importação XFDF aceita a grafia hexadecimal de um valor de exportação de opção entregue como texto literal simples, restaurando round-trips escritos por ferramentas de terceiros
  • A exportação FDF pula campos apenas de widget sem nome de campo, alinhando-se ao exportador XFDF e ao comportamento de todos os importadores
  • A demo Stamp do Delphi ancora sua marca d'água e a anotação de carimbo ao tamanho real da página, mantendo-os visíveis em entradas paisagem e não A4
  • A demo DigiPrint do C++Builder libera suas imagens e listas de linhas por página, inicializa o fator de espaçamento de linhas do cabeçalho e reporta a ausência do demo.xml em vez de travar
  • Os scripts de build da DLL de ABI Win64 e dos workers de codec localizam o dcc64 em bin64 no RAD Studio 12 e mais recentes, e os builds completos da biblioteca C++Builder detectam e limpam resíduos de trial do diretório de saída compartilhado

Version 2.755.0

Added

  • Campos choice carregados de seleção múltipla agora trocam valores selecionados individuais pelas APIs de arquivo e stream FDF e pelos callbacks de XFDF conscientes de array, preservando os limites das opções e sincronizando os índices de seleção na importação

Version 2.754.6

Fixed

  • O SetLoadedFormFieldExportValue agora usa o caminho normal de atualização de valor de campo, preservando tipos de valor de botão, índices de seleção, estados de aparência, strings codificadas e o rastreamento de mudanças de cálculo

Version 2.754.5

Fixed

  • Valores de formulário XFDF e elementos de texto de anotações agora preservam o conteúdo exato sem inserir whitespace de formatação, incluindo espaços no início e no fim, tabs e quebras de linha

Version 2.754.4

Fixed

  • Os helpers de valor, valor padrão e comprimento máximo de campos carregados agora honram entradas herdadas e indiretas, enquanto os resets de campo preservam os tipos do valor padrão, sincronizam seleções de choice e estados de botão e deixam os campos irmãos inalterados; as aparências de botão regeneradas retêm o estado selecionado e limites de renderização válidos

Version 2.754.3

Fixed

  • Campos carregados filhos com nome agora permanecem endereçáveis individualmente quando o tipo de campo deles é herdado, com tipo, flags e opções herdadas disponíveis pelos helpers de campo, e a remoção preserva os campos irmãos e os widgets deles

Version 2.754.2

Fixed

  • As aparências regeneradas de campos choice carregados agora exibem rótulos de opções Unicode enquanto preservam os valores de exportação, renderizam opções de lista não selecionadas e destacam seleções únicas ou múltiplas de forma consistente com os valores e índices do campo

Version 2.754.1

Fixed

  • Atualizar um campo choice carregado agora mantém os índices das opções selecionadas consistentes com o novo valor, incluindo valores de exportação de opções e entradas editáveis fora da lista de opções, sem modificar arrays de seleção compartilhados

Version 2.754.0

Added

  • As fábricas opcionais HPDFCreateTesseractOCREngine e HPDFCreateRapidOCREngine conectam programas de reconhecimento locais e modelos fornecidos por quem chama a camadas de texto pesquisáveis, com texto Unicode, coordenadas de palavras, timeouts, cancelamento e orçamentos de saída

Fixed

  • Corrigidos avanços da matriz de texto, larguras de fontes CID indiretas, restauração de clipping de q/Q e Form, orientação de JPEG reduzido, soft masks de imagem e paletas de streams Indexed para restaurar o layout de texto e o conteúdo de imagem nas páginas afetadas
  • Glifos preenchidos pequenos de TrueType embutidos agora usam antialiasing de cobertura local para melhorar traços finos em DPI baixo; requisições de OCR canceladas são reportadas como cancelamento mesmo quando o motor de reconhecimento retorna falha
  • O RenderOutputDither agora se aplica em todos os backends de renderização e na renderização paralela de páginas, com invalidação de cache e cancelamento consistentes

Version 2.753.0

Added

  • O SetLoadedFreeTextPlainText converte explicitamente anotações FreeText carregadas suportadas em texto simples ASCII Helvetica e reconstrói a aparência visível delas para reescritas completas e salvamentos incrementais

Fixed

  • A conversão de páginas carregadas e a validação de salvamento agora resolvem page boxes indiretos e herdados, preservando dimensões de página compartilhadas em vez de substituí-las por A4

Version 2.752.5

Fixed

  • A inicialização de bitmaps de página agora verifica cancelamento enquanto limpa blocos limitados, libera bitmaps não concluídos e evita atrasar a renderização em primeiro plano enquanto trabalho de prefetch cancelado termina a inicialização

Version 2.752.4

Fixed

  • Fechar ou recarregar um documento agora libera os grafos de objetos PDF e payloads de streams que ele possui, incluindo propriedade compartilhada e cíclica, sem liberar referências vinculadas duas vezes

Version 2.752.3

Fixed

  • Mudanças de valor de checkbox carregado agora sincronizam os estados de aparência mesmo quando o dicionário de aparência normal contém apenas o estado selecionado

Version 2.752.2

Fixed

  • Ativar a saída reproduzível após a construção do documento agora fixa o timestamp de criação para que salvamentos equivalentes permaneçam idênticos byte a byte entre tiques do relógio

Version 2.752.1

Fixed

  • Nomes de campos de formulário carregados agora decodificam strings PDF de forma consistente, permitindo que campos com nomes UTF-16 sejam encontrados e atualizados sem mudar a identidade deles

Version 2.752.0

Fixed

  • Mover uma anotação carregada que não é widget agora mantém a identidade do objeto da anotação e atualiza a referência opcional de página dela para a página de destino

Version 2.751.0

Fixed

  • Excluir páginas carregadas agora mantém named destinations, destinos de outline, árvores de estrutura, árvores de pais e referências de objetos de anotações, eliminando referências nulas alcançáveis tanto em reescritas completas quanto em salvamentos incrementais

Version 2.750.0

Fixed

  • Reescritas completas de PDF agora expandem objetos comprimidos não lidos antes de substituir contêineres de object streams, preservando fontes, espaços de cor e ActualText enquanto corrigem texto chinês embaralhado, aparência de página alterada e texto de extração alterado
  • Documentos criptografados com senha de usuário vazia agora carregam e começam a reescrita diretamente, enquanto object streams travados falham de forma clara em vez de produzir um documento incompleto
  • Objetos numéricos não modificados retêm a precisão da origem, evitando desvios sutis de cor e transparência após uma reescrita
  • Páginas copiadas retêm os nomes e referências de recursos validados, corrigindo erros de dicionário de recursos indiretos e imagens vinculadas incorretamente

Version 2.748.6

Fixed

  • Corrigida a subseção de referências cruzadas que declara mais entradas do que a tabela contém percorrendo toda a contagem declarada sem sobrar dado algum para ler, o que fazia rejeitar um arquivo malformado de quarenta bytes levar dezenas de segundos
  • Corrigido o job runner que perdia todo resultado já produzido quando uma operação disparava exceção, e a importação HTML que perdia um objeto de imagem quando o stream em volta dele não podia ser criado

Version 2.748.5

Fixed

  • Corrigida a falha em que arquivos PKCS#12 com senha não ASCII não abriam: a senha é uma byte string UTF-8, mas era alargada um byte por vez em vez de decodificada, então a chave derivada saía errada para todo caractere fora do ASCII. Arquivos protegidos com o esquema moderno PBES2 não eram afetados, e por isso os dois se comportavam de forma diferente
  • Corrigido o validador de lote de assinaturas e a cache de evidências de revogação dispararem access violation em vez do próprio erro quando construídos com opção inválida, porque o destructor rodava antes dos membros que ele libera terem sido criados
  • Corrigida a task de download de evidências que falhava no destructor quando seus argumentos eram rejeitados, já que as checagens rodavam antes da própria thread ser criada
  • Corrigido o provider de assinatura em nuvem codificar um algorithm identifier cujo segundo arco excede 39; um identificador malformado agora dispara o erro do próprio provider em vez de um erro de conversão
  • Os containers de certificado e assinatura agora rejeitam um elemento aninhado que declara um comprimento que alcança além do elemento que o contém, então o que é validado e o que é coberto pela assinatura não podem mais divergir
  • Os valores de private key são apagados da memória depois da assinatura RSA em vez de ficarem no heap para a próxima alocação

Version 2.748.4

Fixed

  • Corrigido o carregamento de fontes Type 1 ler toda propriedade da primeira linha do programa da fonte: a lista de tokens era reabastecida sem ser esvaziada, então as strings de versão, família e peso, as stem hints e o comprimento da chave charstring saíam de tokens obsoletos. Fontes Type 1 agora reportam seus próprios metadados
  • Corrigido o comprimento da chave charstring ser mantido como ponteiro para uma string já liberada e ser usado sem checagem de range; agora é guardado como valor e clampado ao range que o formato permite
  • Corrigido o caso em que fontes não embutidas sempre caíam na face padrão do sistema: o nome da face pedida era copiado byte a byte para o registro de fonte wide-char, então nenhuma família instalada jamais batia
  • Corrigido o parse de TrueType e OpenType embutidas ler além do fim de um programa de fonte truncado ao decodificar outlines de glyphs, argumentos de composite glyphs e a tabela CFF de um container OpenType, e um character map malformado não pede mais um array de glyphs negativo
  • Corrigido o overflow dos números de objeto declarados em cross-reference tables e streams: uma entrada reivindicando número perto do limite de inteiro virava um índice negativo e era escrita fora da tabela, e uma contagem de objetos declarada ou um /Size muito maior do que o arquivo podia conter dimensionava os arrays do loader só com base nessa reivindicação

Version 2.748.3

Fixed

  • Corrigida a rejeição de entrada válida no Data Matrix: o tamanho do símbolo era estimado dividindo a contagem de dígitos por dois, mas só dígitos adjacentes compartilham um code word, então um texto como 1a2a3a escolhia um símbolo pequeno demais para os próprios dados e falhava ao codificar
  • Corrigidos caracteres UTF-8 de quatro bytes no XFDF, como emoji, decodificando para o surrogate pair errado, e um byte não reconhecido não engole mais os três caracteres seguintes
  • Os region records do enhanced-metafile agora limitam a contagem de retângulos pelo tamanho do record em vez de confiar na contagem do header da região, que podia ler muito além do record
  • Imagens PNG cuja largura declarada vezes altura excede o range endereçável são rejeitadas no header em vez de alocar um buffer de pixels de comprimento negativo
  • O resampling de imagem de alta qualidade agora reporta requisição fora do range em vez de estourar o tamanho do buffer intermediário
  • Uma imagem meta prefix WebP que reivindica mais entropy groups do que tem pixels é rejeitada em vez de alocar centenas de megabytes de tabelas prefix a partir de poucas centenas de bytes de entrada
  • Corrigidos leaks nos caminhos de falha da codificação Aztec, da decodificação de bitmap WebP e do worker pool de decodificação de object stream, onde um objeto parcialmente construído ficava abandonado quando um passo seguinte disparava exceção

Version 2.748.2

Fixed

  • Corrigidos símbolos QR Code descartando os últimos bits de code word: o passe de posicionamento de módulos pulava a coluna mais à esquerda, então a cauda do último bloco de correção de erro nunca era escrita no símbolo
  • Corrigido o terminador QR encher de bits zero todo o restante do bloco de dados, sem deixar espaço para os pad code words 0xEC / 0x11 que a ISO/IEC 18004 exige; um símbolo da versão 1 levava seis code words zero no lugar
  • Um novo teste lê o símbolo gerado de volta a partir dos módulos, então o bloco de dados, os pad code words, o bloco de correção de erro, a máscara e o posicionamento são todos conferidos contra o padrão, não contra a saída do próprio encoder

Version 2.748.1

Fixed

  • Corrigidos três parsers que travavam diante de entrada malformada em vez de reportá-la: o parser de objetos diante de um >> dentro de um array ou um ] dentro de um dicionário, o leitor de CMap diante de um colchete ou chave solto, e o leitor de XFDF diante de uma construção sem nome de tag (uma document type declaration, por exemplo) ou um byte solto entre atributos. Cada um parava de avançar o cursor, então um único byte inesperado virava o parse em loop infinito
  • Corrigidas seções CDATA no XFDF serem lidas como markup: o conteúdo agora é tratado como texto do elemento, e o marcador de seção é medido corretamente em vez de engolir o primeiro caractere
  • Corrigido o comprimento de chunk WebP perto de 2 GB estourar a checagem de tamanho, de modo que a cópia do payload lia além do fim do buffer do arquivo; comprimentos de chunk agora são checados em aritmética de 64 bits
  • Corrigido o comprimento de chunk PNG de 0xFFFFFFFF liberar o buffer do chunk enquanto ele ainda reportava o comprimento declarado, o que deixava leituras seguintes apontando para memória liberada; chunks longos demais são rejeitados
  • Corrigida a decodificação de fax CCITT estourar o cálculo do tamanho do row buffer com geometrias de página declaradas muito grandes, o que podia escrever além do buffer; o armazenamento de linhas agora é limitado e a decodificação para de forma limpa no limite
  • Corrigido o encoder CCITT ler um byte além do fim de uma scan line para larguras múltiplas de oito
  • Corrigidos comment records do enhanced-metafile serem lidos por um ponteiro truncado a 32 bits em builds de 64 bits, o que lia um endereço sem relação em todo EMF com um comentário GDI
  • Corrigidas imagens de 8 bits com menos de 256 entradas de paleta publicarem memória não inicializada como cauda da tabela de cores; a tabela agora declara sua contagem real de entradas
  • Corrigidas estruturas BER de comprimento indefinido profundamente aninhadas esgotarem a stack ao parsear um container de assinatura ou certificado; aninhamento além de 128 níveis é rejeitado

Version 2.748.0

Fixed

  • Corrigida a correção de erro de todo barcode 2D que a biblioteca desenha: QR Code, Data Matrix, PDF417 e Aztec montavam o polinômio gerador do termo constante para cima, mas dividiam por ele como se o termo líder viesse primeiro, então cada símbolo carregava check words que nenhum reader conforme aceita. Os check words agora batem com os exemplos resolvidos da ISO/IEC 18004, ISO/IEC 16022 e ISO/IEC 15438
  • Corrigidos símbolos Aztec perderem o payload: o encoder divide o array de code words in place e quem chama emite esse mesmo array, então as message words eram sobrescritas pela divisão e o símbolo não levava nem os dados nem uma mode message válida
  • Corrigido o polinômio gerador do Data Matrix começar as raízes um expoente abaixo, o que produzia um polinômio diferente do que a ISO/IEC 16022 Anexo E prescreve
  • Corrigido o finder pattern do Data Matrix: o L sólido é agora a coluna da esquerda e a linha de baixo, e a trilha de clock alternada é a linha de cima e a coluna da direita, cada uma começando em escuro no canto que compartilha com o L. Os dois estavam trocados, então os readers não conseguiam estabelecer a orientação do símbolo

Version 2.747.4

Fixed

  • Corrigida a edição de documentos carregados que gravava números PDF com o separador decimal do sistema: a emenda de páginas (page stitching), a redação de retângulos, os stamps de texto e imagem, as formas de marca d'água compostas e as appearances de elipse agora sempre emitem um ponto, então documentos editados num locale de vírgula decimal (por exemplo Windows em alemão ou francês) não contêm mais content streams que os viewers rejeitam
  • Corrigido o carregamento de fontes Type 1 dependente do locale do sistema: os números reais de FontMatrix, BlueValues, stem hints e charstring são parseados como números PostScript com ponto, então fontes PFB mantêm as métricas e os contornos em sistemas de vírgula decimal em vez de quebrar silenciosamente
  • Corrigido o parse do tamanho e da cor da fonte da default appearance (/DA), dos atributos HTML de largura e size, dos resultados FormCalc e dos números JSON do job, que seguiam o locale do processo; agora usam o formato invariante em todas as direções
  • Corrigido o desenho de barcode embutido gravar os retângulos das barras por um formato dependente do locale, o que produzia um content stream inválido num sistema de vírgula decimal
  • Os builds de Free Pascal agora fazem parse e formatam operandos de content stream, métricas de extração de texto e números JavaScript com o formato invariante, ficando iguais aos builds de Delphi em vez de cair na conversão dependente do locale
  • O number writer não reescreve mais o separador decimal das configurações de formato globais da aplicação hospedeira a cada chamada, o que mudava como o resto do programa formatava os próprios números e não era seguro quando várias threads produziam documentos ao mesmo tempo

Version 2.747.3

Fixed

  • Corrigida a perda de edições em páginas comprimidas: redação de retângulo, emenda de páginas (page stitching), formas de marca d'água compostas e achatamento de anotações anexavam seus operadores a um content stream de página ainda comprimido, de modo que a barra de redação, a página emendada, a forma da marca d'água ou a anotação achatada ficava silenciosamente ausente do arquivo salvo. O conteúdo da página agora é expandido antes que qualquer coisa seja anexada
  • Corrigida a fusão do conteúdo anexado com o último operador já presente na página quando ela não terminava com espaço em branco, o que produzia um token ilegível como Q0.5 e podia fazer um viewer rejeitar a página inteira; um fim de linha agora é inserido onde necessário

Version 2.747.2

Added

  • Adicionado suporte a Free Pascal Win32: o pacote Lazarus agora compila tanto para i386-win32 quanto para x86_64-win64 por entry points de build dedicados, as smoke suites aceitam um argumento de arquitetura, e os problemas do compilador de 32 bits e do linking de símbolos C foram corrigidos; criação e carga de PDF, compressão Flate, criptografia AES e manipulação de documentos CBZ estão cobertas nos dois targets

Version 2.747.1

Fixed

  • Corrigido o retry de máscara rotacionada do decodificador de código de barras embutido, que deixava bytes velhos em células não tocadas da máscara rotacionada, inventando tinta fantasma e tornando ilegíveis os símbolos Code 39 girados em 90 graus; o buffer rotacionado agora é zerado explicitamente, então fotos e scans de Code 39 girados decodificam pelo retry de rotação

Version 2.747.0

Added

  • Adicionada importação de imagens WebP: AddImageFromFile agora aceita arquivos .webp por meio de um decodificador lossless (VP8L) embutido que implementa a RFC 9649 — prefix codes canônicos, spatial meta prefix codes, referências backward LZ77 com o distance map de vizinhança, o color cache e as quatro transforms inversas (predictor, cor, subtract-green, color indexing com pixel bundling); frames com perda do VP8 são rejeitados com uma mensagem clara

Version 2.746.0

Added

  • O decodificador de código de barras embutido agora lê símbolos QR em qualquer uma das oito orientações em que uma página fotografada ou escaneada pode chegar: os finder patterns identificam o canto que falta, e a matriz de módulos amostrada é rotacionada ou espelhada para o layout esperado antes de decodificar, então capturas giradas em 90 graus e espelhadas são lidas sem pré-processamento

Version 2.745.0

Added

  • Adicionada avaliação de certificados qualificados eIDAS para assinaturas carregadas: GetLoadedSignatureQCStatements reporta os QCStatements ETSI EN 319 412-5 do certificado do signatário — valores de QcCompliance, QcSSCD e QcType, a moeda/valor/expoente do QcLimitValue e as localizações de PDS — além dos papéis de pagador e recebedor PSD2 do TS 119 495, e aciona uma heurística de assinatura qualificada quando QcCompliance e QcSSCD estão ambos afirmados (a decisão de confiança do QTSP fica com o chamador)

Version 2.744.0

Added

  • Adicionada imposição N-up para documentos carregados: ComposeLoadedPagesNUp reflui cada página para folhas compostas em grade no tamanho de papel de origem (2-up, 4-up, 6-up, até 16x16) para saída pronta para impressão, incorporando o /Rotate de cada página na matriz de posicionamento, compartilhando os recursos da página com o Form XObject composto e, opcionalmente, desenhando molduras de célula finas com gutter ajustável

Version 2.743.0

Added

  • FlattenLoadedAnnotations agora faz o bake de anotações sem appearance stream em vez de pular silenciosamente: widgets têm a aparência do campo gerada primeiro a partir do valor do campo (o caso /NeedAppearances comum em formulários impressos pelo navegador), então o valor digitado sobrevive no conteúdo da página
  • Anotações de markup sem /AP recebem uma aparência sintetizada desenhada a partir das próprias propriedades — texto FreeText e Stamp com estilo /DA e alinhamento /Q, formas Square e Circle com cor /C / /IC e largura /BS, traços Line e Ink, e markup de quadriláteros Highlight / Underline / StrikeOut / Squiggly respeitando /QuadPoints e a opacidade /CA
  • Anotações ocultas (a flag hidden de /F) continuam como anotações quando não têm aparência, porque fazer bake de uma nota invisível a tornaria visível

Version 2.742.0

Fixed

  • Corrigida a falha dos builds do pacote Free Pascal desde o 2.738.0: as declarações de membros de evidências LTV e seed value ficaram dentro de um bloco condicional exclusivo do Delphi enquanto as implementações eram incondicionais, então o pacote Free Pascal não compilava mais; as implementações agora carregam o mesmo condicional e o pacote volta a compilar

Added

  • A importação de HTML agora resolve tabelas numa grade de ocupação completa, então células com rowspan e colspan reivindicam suas colunas corretamente e as linhas seguintes pulam as posições ocupadas em vez de se deslocar para a esquerda
  • As alturas de linha das tabelas vêm da quebra de linha (wrap) do texto da célula com a própria fonte da célula, em vez de uma estimativa por contagem de caracteres, então conteúdo misto de partes estreitas e largas não produz mais células com transbordo ou tamanho exagerado
  • As larguras de coluna seguem as dicas de largura de <col> e os atributos de largura por célula, e linhas de cabeçalho marcadas com <thead> (ou linhas iniciais totalmente <th>) se repetem no topo de cada página de continuação quando a tabela cruza uma quebra de página
  • Um grupo de rowspan permanece inteiro entre quebras de página: as linhas unidas por uma célula com span mudam juntas para a próxima página, então a célula com span nunca é cortada

Version 2.741.0

Fixed

  • Corrigido o caso de builds Free Pascal encerrarem o processo em vez de reportar erro quando um documento precisasse de um dos codecs que esses builds não linkam: abrir um TIFF, decodificar uma imagem JPEG 2000 ou JBIG2, ler um JPEG progressivo ou de escala reduzida, aplicar uma transform de cor ICC ou pedir recompressão Zopfli matava o processo na hora
  • Cada uma dessas operações agora falha do jeito que o chamador já espera, então um documento que usa uma delas carrega com aquela funcionalidade pulada em vez de derrubar a aplicação

Added

  • Adicionada extração de texto na ordem estrutural: ExtractLoadedPageStructureText percorre a árvore de estrutura do documento na ordem de autoria (ISO 32000-1 14.8.4) e concatena os runs de marked-content de uma página por MCID, então documentos com tags, como formulários de governo e publicações acessíveis, extraem a ordem de leitura oficial em vez de um chute geométrico; glyphs que a árvore nunca reivindica caem numa cauda geométrica e entram na contagem do relatório untagged

Version 2.740.0

Fixed

  • Corrigida a perda de transparência dos glyphs coloridos em builds Free Pascal: bitmaps de cor embutidos eram lidos por um caminho que descarta o canal alpha, então todo glyph de emoji ou de fonte colorida era desenhado como um retângulo opaco. Os bitmaps agora mantêm o alpha por pixel

Fixed

  • Habilitado o key agreement ECDH P-384: a subtração condicional final da multiplicação Montgomery CIOS comparava contra o limb P mais o borrow, o que dá wrap para zero nos high limbs com todos os bits em 1 dos primos P-384 / P-521 e fazia o borrow errado silenciosamente; a comparação agora detecta o borrow sem a soma que estoura e o shared secret P-384 bate byte a byte com os vetores de referência do OpenSSL

Version 2.739.0

Added

  • Builds Free Pascal agora criptografam e descriptografam documentos: os entry points AES são atendidos pela implementação FIPS-197 da própria biblioteca em vez de reportar erro de operação não suportada, então arquivos protegidos com AES-128 e AES-256 podem ser criados e abertos neles
  • Criptografia e descriptografia AES-GCM, incluindo o contexto de streaming usado para payloads grandes, disponíveis em builds Free Pascal
  • O smoke test Free Pascal agora confere a cifra contra o known answer do FIPS-197, exercita round trips PKCS#7 e GCM e cria e recarrega um documento protegido com AES-256 com rejeição de senha

Added

  • Adicionada tipografia de parágrafo CSS2.1 ao engine de importação HTML5: text-align (com o atributo align legado e o mapeamento da tag center), letter-spacing e word-spacing pelos operadores Tc / word-space do PDF, text-indent para recuo de primeira linha e regras text-decoration underline / line-through, então importações HTML existentes de web e email mantêm títulos centralizados, recuos e sublinhados
  • Estendeu o decodificador QR embutido além da versão 1: a versão do símbolo agora deriva da geometria dos finders pela divisibilidade da grade (versões 2-40 com grade de módulos limpa decodificam), o teto de comprimento do byte-mode segue a capacidade da Tabela 7 do ISO/IEC 18004 por versão, e o mapa de function modules cobre alignment patterns e blocos de informação de versão para símbolos maiores

Version 2.738.0

Added

  • Builds Free Pascal agora comprimem e descomprimem documentos nativamente: o codec deflate vem de um backend embutido sobre a implementação Pascal de zlib que acompanha o Free Pascal, então conteúdo FlateDecode não reporta mais erro de operação não suportada
  • Documentos comprimidos podem ser criados e recarregados no Free Pascal com a configuração de compressão default, e cross-reference streams, object streams, arquivos embutidos e conteúdo de página comprimido decodificam todos lá
  • O backend cobre os wrappers zlib e deflate cru, o wrapper gzip e a detecção automática de header, então importações SVG e o fallback de descompressão multi-window-size se comportam como no Delphi
  • O smoke test Free Pascal agora verifica o codec com um self test de wrapper e checksum mais um round trip de documento comprimido

Added

  • Adicionado completamento de cadeia via AIA caIssuers: HPDFFetchAIAIntermediates percorre os endpoints do access method 1.3.6.1.5.5.7.48.2 de um conjunto de certificados CMS pelo transport do chamador (corpos DER puros e PEM decodificam ambos), e a opção de validação FetchMissingIntermediates alimenta os intermediates obtidos no path building, então assinaturas de cloud signer com um único certificado end-entity validam em vez de falhar no path building
  • Adicionada habilitação LTV numa única chamada: PopulatePAdESLTVEvidence percorre cada assinatura carregada, busca os intermediates mais as evidências OCSP/CRL online e escreve o material no DSS do documento, elevando um documento de assinatura B-B recém-gerado a B-LT sem arrays de evidências montados à mão
  • Adicionada aplicação de seed value na assinatura: CheckLoadedSignatureSeedValue lê o dicionário /SV de um campo de assinatura e checa um SubFilter, DigestMethod, Reason e perfil DocMDP candidatos contra as respectivas restrições, com a semântica de force-bit do ISO 32000-1 12.7.5.5, então as restrições do autor do formulário são respeitadas antes de aplicar a assinatura

Version 2.737.0

Added

  • Adicionada verificação estrita de salvamento via a propriedade VerifySavedOutput: depois de gravar, uma instância nova de leitor com recuperação de cross-reference desabilitada recarrega o arquivo, então serialização corrompida lança no ponto da chamada em vez de aparecer no próximo consumidor
  • Estendeu o ReproducibleOutput a documentos criptografados: streams AES-CBC usam a convenção estática de IV 14*(1+i), key material e salts derivam deterministicamente, e o ID canônico do documento normaliza os timestamps voláteis do Info, entregando salvamentos criptografados idênticos byte a byte para pipelines de regressão

Version 2.736.0

Added

  • Adicionada reamostragem de alta qualidade e dithering monocromático por uma nova unit HPDFResample: kernels separáveis Catmull-Rom bicúbico e Lanczos3 substituem a semântica de stretch do GDI no downsampling de imagens via a propriedade ImageDownsampleKernel, e o RenderOutputDither aplica difusão de erro Floyd-Steinberg depois da composição da página, então a saída do print preview mantém o detalhe fotográfico em preto e branco puro

Version 2.735.2

Fixed

  • Corrigido o caso dos streams de descompressão Flate passarem o endereço da variável de buffer em vez do buffer em si ao recarregar do stream de origem, o que corrompia a memória a cada leitura e podia derrubar o processo; carregamento de documentos comprimidos, as classes de inflate stream e os helpers de stream de compressão e descompressão são todos afetados

Version 2.735.1

Fixed

  • Corrigido o caso de campos XFA expansíveis sem data source colapsarem numa única linha ao serem achatados: a altura agora é medida a partir do texto que o próprio template declara, que é o que esse tipo de campo exibe. Campo ligado a dados vazios continua medindo como vazio

Version 2.735.0

Added

  • Builds Free Pascal agora cobrem a biblioteca inteira: toda unit compila com FPC 3.2.2 e Lazarus, quando antes só o caminho central de criação e carregamento compilava
  • Contêineres XPS, EPUB e CBZ podem ser importados no Free Pascal, por meio de um leitor ZIP embutido somente leitura que trata tamanhos ZIP64, entradas stored e deflated, verificação CRC e entradas criptografadas à moda tradicional, com o mesmo callback de senha do caminho Delphi
  • Achatamento de formulários XFA, o engine de cálculo FormCalc, o runtime de widgets, os componentes de visualizador de documentos, os handlers de fontes Type 1, importação de HTML, verificação de assinaturas e o job runner compilam todos em builds Free Pascal; achatar os pacotes XFA de um documento carregado precisa, além disso, do codec deflate, que esses builds não linkam

Fixed

  • Corrigido o byte swapping 64-bit da unit auxiliar de PNG, que retornava valores incorretos no Win64 e tinha deixado a unit de fora do build por completo

Added

  • Adicionada detecção de glyphs faltantes na hora do desenho: a propriedade TrackUnresolvedGlyphs registra todo code point que renderizaria como um box tofu .notdef pela face Unicode ativa, dispara o evento OnUnresolvedGlyph por achado e deixa documentos pure-GDI não registrados intocados
  • Adicionado suporte à tabela kern legada: RegisterUnicodeTTF captura a tabela kern da era Apple/GDI e a emissão de kerning cai para a busca binária de pares format-0 dela quando a fonte não tem lookups kern no GPOS, restaurando o espaçamento clássico de pares em fontes como a Arial de fábrica
  • Adicionado fallback de fonte por run dentro do layout de parágrafo: o WideTextOutBox agora divide cada linha quebrada nos code points que a fonte atual não consegue mapear e desenha cada run na fonte de fallback resolvida, então parágrafos com latim, emoji e CJK misturados renderizam sem tofu quando cadeias de fallback estão registradas

Version 2.734.0

Added

  • Adicionada a infraestrutura de requisição de timestamp RFC 3161: HPDFRFC3161BuildRequest emite o TimeStampReq DER com um nonce INTEGER positivo novo, policy OID opcional e certReq, e o HPDFRFC3161ParseResponse decodifica o header PKIStatusInfo e extrai o token, então callbacks de transport para TSA viram três linhas em vez de um estudo de DER
  • Adicionada a declaração de extensão de desenvolvedor ISO/TS 32002 (THotPDF.EnsureISO32002Extensions) cobrindo algoritmos de assinatura EdDSA e as curvas ECDSA adicionais em documentos PDF 2.0, idempotente e condicionada à versão como a declaração SHA-3 do 32001

Version 2.733.0

Added

  • Adicionado key agreement portátil X25519 e X448 por Montgomery ladder mais ECDH de curvas NIST P-256 / P-521 com multiplicação Montgomery CIOS, permitindo que recipients de chave pública por key agreement (KARI) sejam criados e desembrulhados (unwrap) inteiramente em processo; vetores de referência da RFC 7748 e gerados pelo OpenSSL fixam o comportamento do ladder na suíte de regressão
  • Adicionados HPDFUnwrapKeyAgreementRecipientEnvelope junto com os entry points AddPubSecAgreementKeyMaterial e AddPubKeyAgreementRecipientWithSecret, então documentos criptografados com recipients ECDH / X25519 / X448 podem ser abertos com o scalar privado do destinatário e criptografados sem ferramentas ECDH externas

Version 2.732.0

Changed

  • Os salvamentos agora roteiam a saída do serializador por um stream de escrita com buffer de 1 MiB, colapsando as chamadas Write por token de headers de objetos, chaves de dicionário e linhas de xref em pushes em lote nos destinos respaldados em arquivo
  • Payloads de cross-reference stream aplicam predição PNG Up (/DecodeParms /Predictor 12) antes do FlateDecode e colapsam os buracos da free-list por subseções /Index, encolhendo os contêineres de xref em todo documento PDF 1.5+ e em intervalos esparsos de objetos
  • A propriedade CompressionLevel agora também seleciona o esforço Flate dos contêineres de cross-reference stream e object streams, então clMaximum produz streams estruturais menores durante o salvamento

Fixed

  • As larguras de campo /W do cross-reference stream agora se adaptam ao intervalo real de offsets em vez do layout fixo [1 4 2], cujo cast para Cardinal truncava silenciosamente offsets acima de 4 GiB em saída corrompida

Version 2.731.0

Changed

  • Reconstruiu o OCR embutido de template matching com extração de glyphs por componentes conexos, pontuação de cobertura em escala de cinza contra templates multi-fonte em cache, binarização Otsu com fallback de janela local, separação de palavras por vãos bimodais, baselines por palavra, rejeição de ruído speckle e um alfabeto estendido de 62 caracteres que reconhece texto ASCII com caixa mista por clustering de alturas no nível de linha e preferência por contexto de caixa

Version 2.730.0

Added

  • Adicionado suporte a Win64 para Free Pascal 3.2.2 e Lazarus 4.6, incluindo um runtime package, script de build reproduzível, camada de compatibilidade e um smoke test sem GUI de criar-e-recarregar; integrações nativas estáticas de codecs continuam exclusivas do Delphi e reportam erro explícito de operação não suportada em builds Free Pascal

Version 2.729.0

Added

  • Adicionado um runtime de widgets XFA dinâmicos independente do host, com edição Unicode, focus e hit testing, binding que distingue instâncias, validação e cálculo atômicos, reflow delimitado e uma factory somente leitura de documentos carregados que preserva o XFA de origem

Version 2.728.0

Fixed

  • Corrigiu a medição intrínseca e a continuação de texto do XFA para preservar valores vazios explícitos e valores calculados, usar o contexto de binding de cada campo ou de linhas repetidas, manter as ações breakAfter, evitar colisões de nomes sintéticos e aplicar um limite de medição global em cache

Version 2.727.0

Changed

  • O layout XFA agora aplica dimensões mínimas e máximas intrínsecas, mede campos expansíveis a partir do texto a que estão ligados e divide atomicamente conteúdo textEdit elegível entre áreas de conteúdo e páginas, com campos de continuação somente leitura e limites de texto, fragmento e medição

Version 2.726.0

Added

  • Adicionados atributos process e spot de NChannel completos, mixing hints, streams delimitados de tintas espectrais CxF/X-4 do PDF 2.0 e checagens de consistência no nível do documento para definições de tint spot e tabelas de colorantes externas de output intent

Version 2.725.0

Added

  • Adicionado um backend de renderização SIMD por scanline determinístico e thread-safe que faz preflight das display lists de retângulos suportadas, grava a superfície de bitmap final em blocos vetoriais sem cópia intermediária de bitmap e retorna motivos exatos de recusa por requisição pelo pipeline existente de fallback por software e telemetria

Version 2.724.0

Changed

  • Ampliou o avaliador FormCalc nativo delimitado com agregações gerais de node-sets SOM, argumentos mistos de escalares e node-sets, chamadas numéricas e de string aninhadas e funções determinísticas de seleção, string, trigonometria, logaritmo e conversão, sob os limites existentes de operações, arrays, profundidade, tempo e saída

Version 2.723.0

Changed

  • SubsetLoadedFonts agora faz subsetting com segurança de programas Type 1 PFB embutidos e PFA binários divididos e em hex, retém dependências recursivas de composites TrueType e fecha as dependências de outlines COLR v0/v1 preservando as tabelas de cor, bitmap, variação e shaping

Version 2.722.0

Added

  • Adicionados callbacks de senha delimitados para entradas XPS, EPUB e CBZ criptografadas com ZIP clássico, incluindo limites de retry por entrada, checagens de cancelamento, tratamento de credenciais somente em memória e rejeição fail-closed de criptografia indisponível, inválida ou não suportada

Version 2.721.0

Changed

  • DownsampleLoadedImages agora redimensiona amostras de imagem 8-bit Separation e DeviceN suportadas direto no espaço de componentes e preserva o grafo original de espaços de cor, a tint transform, os colorantes, os intervalos /Decode e a semântica de overprint entre salvamento e recarga

Version 2.720.0

Added

  • Adicionados overloads delimitados de reconhecimento embutido para OCR de ASCII maiúsculo de alto contraste, Code 39 horizontal e símbolos QR versão 1 byte-mode limpos e alinhados aos eixos, permitindo camadas de texto pesquisável e decodificação de código de barras de páginas carregadas sem engine fornecida pelo chamador, enquanto entrada ambígua ou não suportada falha de forma fechada (fail-closed)

Version 2.719.0

Added

  • Adicionado refinamento JPEG 2000 delimitado por resolução e quality layer via THPDFJpeg2000Decoder.LoadProgressiveFromByteArray, mais codificação multi-layer via TJpeg2000Bitmap.QualityLayers, com pixels finais idênticos para as ordens de progressão LRCP, RLCP, RPCL, PCRL e CPRL

Version 2.718.0

Changed

  • Embutiu CMaps completos UniJIS, UniGB, UniCNS e UniKS UCS2 e UTF16 horizontais e verticais, incluindo escalares suplementares e os defaults verticais padrão, então a extração e a geometria de texto CJK não dependem mais de arquivos externos de mapeamento Unicode nem de chutes de meio em (half-em)

Version 2.717.0

Added

  • Adicionados intervalos explícitos de dependências de shared objects em PDFs linearizados e um agendador de redesenho por chegada de intervalo, para que as páginas possam desenhar antes de todas as dependências opcionais chegarem e redesenhem exatamente quando dados recém-disponíveis mudarem o resultado

Version 2.716.0

Added

  • Adicionado reparo delimitado do grafo de objetos para achados acionáveis de preflight de xref, trailer, catálogo, árvore de páginas e árvore de nomes, com commit de transação validado e rollback completo ante entrada insegura ou ambígua

Version 2.715.0

Added

  • Adicionados wrappers de payload criptografado do PDF 2.0 em que o conteúdo visível do documento continua legível antes da autenticação, enquanto nomes, descrições e bytes de arquivos embutidos ficam protegidos até um unlock explícito por senha

Version 2.714.0

Changed

  • A exportação SVG de páginas carregadas agora emite gradientes axiais e radiais, representações PNG delimitadas de mesh shadings Type 4 a Type 7 e imagens inline decodificadas, sem incrementar os contadores de skip correspondentes

Version 2.713.0

Changed

  • Glyphs coloridos OpenType SVG agora usam o pipeline delimitado de Form XObject para arcos, gradientes vetoriais, opacidade, máscaras geométricas e reuso local de #id, continuando a rejeitar scripts, recursos externos, imagens e conteúdo ativo não suportado

Version 2.712.0

Changed

  • ReplaceLoadedPageText agora substitui correspondências que atravessam itens de string e arrays de TJ por meio de spans de origem de glyph, preservando números de kerning, prefixos e sufixos sem correspondência, operandos não relacionados e a estrutura original do content stream

Version 2.711.0

Added

  • Adicionada resolução de SyntheticBase de FontSets CFF com valores Top e Private DICT herdados, CharStrings, charset, Encoding e Local Subrs, além de semântica determinística de override e rejeição delimitada de herança inválida, cíclica ou profunda demais

Version 2.710.0

Added

  • Adicionada seleção determinística e delimitada de predictors Flate via HPDFSelectFlatePredictor, usando amostras de linhas distribuídas, custo estimado em bytes, peso de CPU configurável e limites explícitos de bytes, linhas e trabalho

Version 2.709.0

Added

  • Adicionada saída opt-in nativa de dicionários de símbolos Huffman e regiões de texto JBIG2 via THPDFJBIG2Options.UseHuffmanEncoding, incluindo as tabelas padrão DH, DW, BMSIZE, FS, DS e DT, bitmaps coletivos brutos, tabelas de symbol-ID, roteamento nativo determinístico e round trips de decodificação exatos ao pixel, mantendo os defaults aritmético e MMR

Version 2.708.0

Changed

  • Cacheou mapeamentos cmap reversos de formas de apresentação árabes e combinadas por geração de fonte registrada, substituindo varreduras repetidas de U+FB00..U+FDFF e U+FE70..U+FEFF em ApplyArabicGSUBRefinement, ApplyArabicGSUBContextualRefinement e no caminho genérico de GSUB contextual, preservando a precedência de codepoints e a saída com shaping

Version 2.707.0

Added

  • Adicionado o encoder de código de barras 2D Aztec (ISO/IEC 24778) via THPDFPage.DrawAztec e a unit standalone THPDFAztec: codificação de alto nível por programação dinâmica com mode latches, shifts e sequências de binary-shift, bit stuffing, correção de erros Reed-Solomon sobre GF(16) até GF(4096), seleção automática de símbolo compacto 15x15..27x27 ou full 19x19..143x143 e controle de camada forçada para tamanhos de símbolo fixos
  • Adicionada montagem de texto vertical de página: THotPDF.ExtractLoadedPageText e as APIs de agregação de range/stream agora agrupam glyphs WMode 1 em colunas pelo X da origem do glyph, ordenam as colunas da direita para a esquerda e percorrem cada coluna de cima para baixo, em vez de despedaçar texto CJK vertical em linhas por glyph

Fixed

  • Corrigida a exportação de bandas em paralelo falhando com divergência de largura de banda PNG em páginas de dimensões de pixel fracionárias (A4 a 96 DPI): o tamanho do raster agora é arredondado com Ceil de forma uniforme com os band writers, então os tiles entregues sempre batem com a largura do encoder

Version 2.706.0

Added

  • Adicionada exportação PNG em streaming de páginas carregadas e exportação TIFF multi-página em bandas via THotPDF.SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded e SaveLoadedPagesToTiffStreamBanded, gravando dados de imagem comprimidos linha a linha por band encoders, para que páginas muito grandes não exijam um framebuffer completo; THPDFBandImageExportInfo reporta telemetria de página, banda, linha, worker, memória, saída, tempo e cancelamento

Version 2.705.0

Added

  • Adicionada finalização PDF/A aos caminhos de salvamento de documentos carregados: THotPDF.SaveLoadedDocument e SaveLoadedDocumentToStream agora validam o OutputIntent GTS_PDFA1 (herdado do catálogo de origem ou recém-registrado) e emitem a identificação XMP pdfaid:part / pdfaid:conformance quando PDFACompliance está ativo, preservando um pacote pdfaid existente byte a byte ao salvar de novo
  • Adicionado consumo de escrita vertical (WMode 1) no lado do carregamento: as métricas de célula /W2 e /DW2 de CIDFonts agora dirigem a extração de texto e a renderização de página, percorrendo colunas pelo eixo y do espaço de texto com o vetor de posicionamento v1x/v1y em vez dos avanços horizontais de /W

Version 2.704.0

Added

  • Adicionada renderização paralela de tiles e bandas de páginas carregadas via THotPDF.RenderLoadedPageTilesParallel e THotPDF.RenderLoadedPageBandsParallel, com callbacks na thread chamadora em ordem row-major, bitmaps emprestados, cancelamento cooperativo, memória in-flight controlada pelo chamador, admissão por pico de memória e um cache delimitado e imutável de glyphs Type 3 e halftone screens compartilhado entre contextos de renderização isolados

Version 2.703.0

Added

  • Adicionados lotes de digests multisign CSC delimitados via THPDFCSCSignatureProvider.SignHashBatch, usando um único SAD com hash pinado e uma requisição signatures/signHash para um lote ordenado de mesmo algoritmo, respeitando os limites locais e de credencial de multisign, cardinalidade estrita de resposta, ordenação de resultados síncrona ou assíncrona, chaves de idempotência endereçadas por conteúdo SHA-256 e replay de lote concluído

Version 2.702.0

Added

  • Estendeu o THotPDF.RenewPAdESLTATimestamp com evidências de certificado, OCSP e CRL fornecidas pelo chamador, mescladas no DSS existente antes do novo timestamp de documento RFC 3161, preserva todas as revisões anteriores byte a byte e deduplica com exatidão os streams de validação entre renovações sucessivas

Version 2.701.0

Added

  • Adicionado preflight de perfis baseline e extended do PAdES endereçável por cláusula via THotPDF.PreflightLoadedPAdES, reportando cada requisito aplicável com ID de regra estável, perfil, nível normativo, cláusula da norma, caminho PDF, número de objeto, revisão assinada ou atual e status de aprovação, validando cardinalidades de CMS, referências ESS do certificado do signatário, restrições do dicionário de assinatura, cobertura de byte-range, trusted time, evidências do DSS e cobertura do timestamp do documento

Version 2.700.0

Added

  • Adicionados carregamento de chaves privadas PFX / PKCS#12 e assinatura de documentos CMS de ponta a ponta para ECDSA, Ed25519 e Ed448, incluindo ECDSA CNG de curva nomeada, PureEdDSA OpenSSL 3 opcional, decodificação de chaves RFC 8410, regras de digest e parâmetros RFC 8419, SHAKE256 com saída de 512 bits para Ed448, seleção automática do algoritmo de chave e pareamento estrito certificado-chave

Version 2.699.0

Added

  • Adicionada seleção determinística de credenciais multi-identidade PFX / PKCS#12 via HPDFEnumeratePFXIdentities, HPDFParsePFXByLocalKeyID e THPDFCMSSignOptions.PFXLocalKeyID, incluindo exigência estrita de atributos de bag localKeyId e friendlyName single-valued, pareamento por chave pública, bags safe-content recursivos, diagnósticos delimitados de ambiguidade e ciclos, e embutimento automático da cadeia de certificados intermediária e raiz correspondente com deduplicação exata de DER

Version 2.698.0

Added

  • Ampliou a descriptografia PBES2 de PFX / PKCS#12 em processo com AES-128-CBC e AES-192-CBC mais PRFs PBKDF2 HMAC-SHA-384 e HMAC-SHA-512, incluindo validação opcional de keyLength específica da cifra e checagens delimitadas de salt, iterações, IV e padding, mantendo a compatibilidade com AES-256-CBC e HMAC-SHA-1 / SHA-256

Version 2.697.0

Added

  • Adicionada herança de FixedPage.NavigateUri em Canvas XPS e OpenXPS conforme a especificação, para que visuais Path, Glyphs e Canvas aninhados descendentes recebam a URI do escopo, salvo se a sobrescreverem, preservando ações LinkTarget externas, de mail, de página do pacote e percent-decoded através de transforms, clips aninhados, grupos de opacidade isolados, supressão de visuais reutilizáveis, restauração após overrides aninhados e os limites existentes de link, URI, cancelamento e scheme inseguro

Version 2.696.0

Added

  • Adicionados grupos de transparência delimitados e nativos em Canvas XPS e OpenXPS, para que valores de Opacity e de Canvas.OpacityMask sólidos, de gradiente ou de imagem componham visuais filhos sobrepostos uma única vez por Form XObjects DeviceRGB isolados, com alpha uniforme fundido, soft masks de alpha variável compartilhados, grupos aninhados, clips transformados, transferência de recursos, links preservados e fail-closed para conteúdo malformado, não suportado, singular ou grande demais

Version 2.695.0

Added

  • Adicionada conversão delimitada e nativa de Canvas.Clip XPS e OpenXPS para geometria abreviada, valores PathGeometry de StaticResource locais ou remotos, elementos de propriedade diretos, figuras estruturadas de linha, Bézier, quadrática e arco, transforms de geometria, clips vazios e clipping aninhado EvenOdd ou NonZero via W* ou W do PDF, com limites de navegação recortados, limites de parsing de 100.000 valores e fail-closed para transforms malformadas ou singulares

Version 2.694.0

Added

  • Adicionada navegação nativa e delimitada de XPS e OpenXPS para visuais Path e Glyphs transformados, preservando links HTTP, HTTPS e mail como anotações URI do PDF e resolvendo páginas relativas ao pacote mais fragments LinkTarget percent-decoded como ações GoTo do PDF (forward ou backward) depois que todas as páginas existem, com limites de clique baseados em métricas, limites de 65.536 links e 8.192 caracteres, supressão de captura de VisualBrush, cancelamento e diagnósticos fail-closed de scheme inseguro

Version 2.693.0

Added

  • Adicionada conversão delimitada e nativa de VisualBrush XPS e OpenXPS para visuais Canvas, Path e Glyphs inline ou respaldados em recursos, busca hierárquica e remota em ResourceDictionary, Viewbox absoluto, Viewport absoluto ou relativo, modos de tile None, Tile e refletido, transforms, opacidade, Form XObjects reutilizáveis, tiling patterns compartilhados, transferência de recursos token-aware e limites fail-closed de ciclo, entrada malformada, recursão, conteúdo, cache e posicionamento

Version 2.692.0

Added

  • Adicionado embutimento nativo de fontes de pacote XPS e OpenXPS para programas TrueType e OpenType, fragments de membros TTC, recursos ofuscados por GUID, glyph IDs diretos ou derivados do cmap, clusters Unicode um-para-muitos, avanços e offsets explícitos, origens RTL com largura correta, recursos de fonte compartilhados, permissões de embutimento e no-subsetting, subsetting opcional de glyphs, mapas ToUnicode delimitados e saída de runs posicionados em tempo linear amortizado, sem substituição de faces GDI

Version 2.691.0

Added

  • Adicionado layout delimitado de Indices de Glyphs OpenXPS para contagens estritas de code units e glyphs por cluster, avanços explícitos em centésimos de em, offsets horizontais e verticais, progressão reversa para BidiLevel ímpar, preenchimentos sólidos por atributo ou elemento de propriedade, opacidade, agrupamento TJ nativo do PDF, fallback de clusters Unicode posicionados, extração de texto preservada, diagnósticos fail-closed de entrada malformada e buffers lineares amortizados limitados a 65.536 mapeamentos

Version 2.690.0

Added

  • Adicionado suporte a Path.OpacityMask do OpenXPS para máscaras sólidas, de gradiente linear multi-stop com alpha variável e de gradiente radial elíptico, e máscaras ImageBrush PNG comuns, em tile ou refletidas, via alpha uniforme fundido, grupos de transparência DeviceGray nativos delimitados, shading patterns e streams de soft mask de imagem compartilhados, tratamento fail-closed de conteúdo não suportado e o builder reutilizável RegisterLuminositySoftMaskState com binding de recursos de imagem de alpha

Version 2.689.0

Added

  • Adicionados modos Tile, FlipX, FlipY e FlipXY de ImageBrush OpenXPS por meio de tiling patterns nativos do PDF com um, dois ou quatro posicionamentos recortados independentemente, recursos de imagem e soft mask PNG compartilhados, matrizes compostas de fixed-page, path e brush, e a API delimitada RegisterImageTilingPattern para patterns respaldados em imagem reutilizáveis

Version 2.688.0

Added

  • Adicionado suporte a ImageBrush.Transform do OpenXPS para matrizes de atributo finitas de seis parâmetros e elementos de propriedade MatrixTransform, concatenadas depois do clipping nativo de Path e antes do clipping de viewport e do posicionamento da imagem, para que o brush possa rotacionar, escalar, inclinar ou transladar sem alterar a geometria vetorial que o contém; RelativeTransform fora do padrão e recursos de matriz não resolvidos continuam gerando diagnósticos explícitos

Version 2.687.0

Added

  • Adicionado posicionamento de image XObjects controlado por matriz via THPDFPage.ShowImageMatrix e estendida a importação de fixed-pages XPS com preenchimentos ImageBrush de JPEG, PNG, TIFF e JPEG XR do pacote, mapeamento Viewbox e Viewport absoluto ou relativo aos limites, clipping nativo de path e de viewport único, opacidade de imagem e path, alpha de soft mask PNG, dimensionamento com noção de DPI em 96 DPI, cache compartilhado de recursos decodificados e diagnósticos fail-safe para tiling, transforms, conversão de cor e traços de imagem não suportados

Version 2.686.0

Changed

  • Adicionado registro reutilizável e delimitado de gradientes radiais multi-stop e estendida a importação nativo-vetorial de paths XPS com valores elípticos de RadialGradientBrush por elemento de propriedade, spread Pad, alpha uniforme dos stops, opacidade do brush, mapeamento relativo ou absoluto de centro, origem e raio, shading Type 3 nativo do PDF e restauração de coordenadas que deixa a geometria do path inalterada

Version 2.685.0

Changed

  • Estendeu a importação ordenada e nativo-vetorial de paths XPS com parsing de elementos de propriedade consciente de aspas e delimitado, brushes de gradiente linear sólidos e multi-stop, shading patterns nativos do PDF, alpha do brush e dos stops, coordenadas de gradiente relativas aos limites por default ou absolutas explícitas, interpolação de stops fora do intervalo e diagnósticos fail-safe para transforms, spread modes, interpolação de cor, alpha variável e eixos degenerados não suportados

Version 2.684.0

Changed

  • Adicionada importação ordenada e nativo-vetorial de paths XPS com geometria abreviada delimitada, regras de fill, preenchimentos e traços sólidos RGB e ARGB, opacidade de path, largura de traço, transforms de seis parâmetros e diagnósticos fail-safe para recursos de desenho não suportados

Version 2.683.0

Changed

  • Reforçou a validação PDF/X-6 de conteúdo efetivamente pintado com estado gráfico de shading patterns no momento da definição, semântica ExtGState de patterns nonstroking, checagens fail-closed de subtipo de soft mask e backdrop, métricas exatas de glyphs Type 3 e regras de cor herdada, classificação estrita de alpha combined-paint, inferência de cor JPX delimitada e composição de anotações consciente da aparência

Version 2.682.0

Added

  • Adicionado suporte a produtor e verificador para assinaturas ECDSA brainpoolP256r1, brainpoolP384r1 e brainpoolP512r1, incluindo a matriz de digests SHA-2 e SHA3 específica por curva, validação de assinatura que falha antes do provider, parâmetros de certificado estritos de curva nomeada, identificadores de algoritmo ECDSA sem parâmetros, valores de assinatura DER canônicos, importação de curvas nomeadas no Windows CNG e diagnósticos determinísticos para parâmetros explícitos, extras, desconhecidos ou divergentes

Version 2.681.0

Changed

  • Unificou a execução de conteúdo de bitmap não progressivo, direct-DC, Form e display-list via HPDFInterpretContentTokensDevice e a extensão opcional completa IHPDFContentOperatorDevice, com um checkpoint de cancelamento por operador, cache de índice de operadores em tempo de compilação para replay de display-list sem scan de operandos, métricas OperatorCount públicas, compatibilidade de dispositivos semânticos preservada, semântica corrigida dos operadores ", v e y e tratamento legal do terminador EI sem diagnósticos de fallback falsos

Version 2.680.0

Added

  • Adicionados overloads transacionais e delimitados de RepairPDFA4 com opções tipadas, relatórios de reparo detalhados, proveniência compartilhada de achados, normalização segura de header PDF 2.0, ID de trailer, metadados, Catalog e apresentação, reparo de identificação PDF/A consciente de namespaces, política de commit configurável de conformidade parcial ou total, detecção de regressão de erros, rollback byte-exato do grafo e do XMP, e um limite estrito que preserva conteúdo de página, fontes, cor, transparência, imagens, operadores gráficos e texto extraído

Version 2.679.0

Added

  • Adicionada validação PDF/X-6 de conteúdo efetivamente pintado com regras selecionáveis ISO 15930-9:2020 ou errata 2025 resolvida, checagens reais de header e canais ICC, travessia consciente de recursos de arrays de conteúdo, Form XObjects, tiling e shading patterns, imagens, glyphs Type 3, soft masks e aparências de anotações, diagnósticos de overprint-mode e de transparência combined-paint, proveniência estável de regras e trabalho delimitado de bytes decodificados, tokens, objetos, issues, recursão e estado gráfico

Version 2.678.0

Added

  • Aprofundou a validação PDF/A-4 delimitada com checagens em cache de header e componentes ICC, consistência de output intent de documento e página, análise real de cor de dispositivo pintada e transparência em arrays de conteúdo, Form XObjects aninhados, imagens, image masks, shadings e aparências de anotações, estado gráfico herdado, embutimento de fontes de renderização, relações CIDFont e CMap, flags de anotação e estados de aparência estritos, validação de pacote e namespaces XMP UTF-8, localizações lógicas na árvore de páginas, diagnósticos estáveis conscientes de cláusula e tetos configuráveis de bytes decodificados e tokens de conteúdo

Version 2.677.0

Added

  • Completou a validação delimitada de documentos PDF/UA-2: strings legíveis por humanos, optional content, anotações, AcroForm, destinos de estrutura, outlines, arquivos embutidos e page labels aninhadas, incluindo posse física de ParentTree, filhos de estrutura escalares, restrições de appearance streams, propriedades XMP baseadas em namespace-URI, detecção de Unicode private-use e diagnósticos conscientes de cláusula; a exportação estruturada para HTML, XHTML, XML e JSON agora compartilha um modelo de leitura acessível tagged-first com idioma, título, navegação, page labels, links seguros, anotações, controles de formulário não sensíveis, substituições de marked-content, artifacts, alternativas de imagem, fallback geométrico, limites independentes, cancelamento e publicação atômica

Version 2.676.0

Added

  • Adicionado planejamento delimitado e mínimo de byte-ranges para cada página de um PDF linearizado via PlanProgressiveLinearizedPageRanges, com decodificação de hints primários ou de overflow em bruto e Flate, layouts de hints combinados byte-aligned interoperáveis e de split contínuo do Annex F, dependências exatas de bootstrap, página, shared-group e referências cruzadas tradicionais (com prefixo LF ou CRLF) ou de stream, acumulação legal de short-reads, teto default de 256 MiB de memória do planner com desambiguação de encoding fail-closed, merging consciente de sobreposições, cross-checks estruturais estritos, limites tipados e diagnósticos de disponibilidade, e um caminho unificado de primeira página [0, /E)

Version 2.675.0

Added

  • Adicionadas políticas independentes de crypt filters conformes aos padrões para strings, streams normais e arquivos embutidos via ConfigureCryptFilterDefaults e SetStreamCryptFilter, incluindo filters reservados de password e public-key, /Identity, pipelines /EFF de segurança por senha escritos corretamente e /Crypt iniciais, fronteiras fail-closed específicas de streams de public-key, carregamento e inspeção de named filters externos case-sensitive, /CFM /None, relatório de key-length V2, fallback Direct File de políticas mistas, políticas separadas para o contêiner de object stream e as strings-membro, e atualizações incrementais criptografadas que preservam políticas

Version 2.674.0

Added

  • Adicionadas atualizações incrementais criptografadas Standard e de public-key que preservam credenciais, via um overload de BeginIncrementalUpdate consciente de senha e key material de destinatários atribuído, com file keys ou FEKs retidos com segurança, políticas separadas de crypt filter para string, stream, metadados e Identity, derivação de object keys legada consciente de geração, referências /Encrypt herdadas exatas, revisões de origem idênticas byte a byte, acesso original de usuário (user), de owner ou de destinatário, e rejeição fail-closed de mudanças de criptografia ou de filters heterogêneos não suportados

Version 2.673.0

Security

  • Adicionada validação delimitada do grafo de segmentos JBIG2 antes da decodificação full-page, de região, nativa ou externa e antes do compartilhamento de dicionário global, com checagens indexadas de duplicatas e de referências faltantes, detecção iterativa de ciclos e profundidade de dependências, imposição de associação de página para streams embutidos, rejeição de segmentos proibidos, limites de referências longas e de arestas agregadas, guardas de alocação de dicionários de símbolos e telemetria precisa de falhas

Version 2.672.0

Added

  • Adicionada geração e validação estrita de signature-policy-identifier PAdES E-EPES com OIDs de política explícitos, hashes conhecidos ou desconhecidos da ETSI, qualificadores SPuri, SPUserNotice e SPDocSpecification, parsing delimitado de Unicode e coleções, hashing do documento de política, pinning de OID e hash do signatário primário antes do trabalho criptográfico, statuses dedicados de mismatch e relatório JSON completo

Version 2.671.0

Added

  • Adicionados contêineres RFC 5652 determinísticos com até 256 registros SignerInfo primários independentes via HPDFCMSBuildMultiSignedData e HPDFCMSMergeSignedData, incluindo prevalidação do lote inteiro antes de efeitos colaterais de signatários, atributos, algoritmos, certificados e providers por signatário, validação estrita de contêineres definite-length, conjuntos ordenados por DER e deduplicados, resultados de verificação independentes, compatibilidade byte com single-signer e dimensionamento de placeholders agregados sem efeitos colaterais

Version 2.670.0

Added

  • Adicionadas identidades de signatário SubjectKeyIdentifier RFC 5652 opcionais via THPDFCMSSignOptions.SignerIdentifier, incluindo encoding SID IMPLICIT compacto, seleção automática de versão de SignerInfo e SignedData, extração estrita de extensões X.509, suporte a provider e a dimensionamento de placeholders, e casamento fail-closed de SID, certificado e versão durante a verificação

Version 2.669.0

Security

  • Adicionados diagnósticos fail-fast de consistência de algoritmos de digest de CMS entre SignedData.digestAlgorithms, SignerInfo, parâmetros do mecanismo de assinatura e CMSAlgorithmProtection do RFC 6211, com status de verificação dedicado, código de falha de validação, propagação de timestamp, motivos detalhados de issue e saída JSON

Version 2.668.0

Added

  • Adicionada geração e verificação de SHA3-256, SHA3-384 e SHA3-512 em CMS detached, contratos de provider RSA PKCS#1 v1.5, RSA-PSS e ECDSA, timestamps de conteúdo e de assinatura RFC 3161, renovação PAdES-LTA, dicionários Seed Value e declarações de extensão de desenvolvedor PDF 2.0 ISO 32001, com hashing de byte-range em uma passada delimitado compartilhado com as políticas PDF MAC correspondentes

Version 2.667.0

Added

  • Adicionado THotPDF.ValidatePDFMACChain com validação de revisões incrementais da mais antiga para a mais nova, indexação cumulativa clássica ou de xref stream, localização exata de falhas por revisão e xref, detecção de substituição histórica de MAC, imposição estável de KDFSalt, rejeição de downgrade de força de digest, checagens autenticadas de /P e /Perms, relatório de preflight e parsing delimitado de revisões sem cópias temporárias do PDF

Version 2.666.0

Added

  • Adicionados THotPDF.SignPDFWithPFXAndAttachedPDFMAC e validação anexada à assinatura com AuthCode direto no trailer ativo, SigObjRef indireto, cobertura completa da revisão assinada, binding do digest do valor bruto da assinatura, políticas PDF MAC SHA-2 ou SHA-3, hashing em uma passada do range de assinatura e MAC, relatório de preflight e substituição atômica da saída

Version 2.665.0

Fixed

  • Corrigiu THotPDF.RegisterNChannelColorSpace para emitir a forma DeviceN de cinco elementos do ISO 32000-2 com /Subtype /NChannel e metadados de componentes process, elevou a versão mínima de PDF para 1.6 e fez soft masks de luminosidade resolverem pintura NChannel pelo espaço alternativo, mantendo compatibilidade de leitura com os tokens legados da família /NChannel

Version 2.664.0

Added

  • Completou a renderização de blend modes do PDF com implementações de hot-path inteiras para Hue, Saturation, Color e Luminosity, e corrigiu o fast path de opacidade total para que todo blend mode separável ou não separável ativo componha contra o seu fundo

Version 2.663.0

Security

  • Autenticou contêineres PKCS#12 antes de expor os safe contents criptografados, verificando o MacData externo opcional com iterações delimitadas de KDF PKCS#12, HMAC SHA-1 ou SHA-256, comparação de digest em tempo constante e tratamento fail-closed de senha errada e adulteração

Version 2.662.0

Added

  • Adicionados três comandos do HotPDFCLI: render rasteriza cada página selecionada para <prefix>-page<N>.png pelo pipeline de bitmap de páginas carregadas (intervalo --pages, --dpi 10..2400, default 150), tables extrai tabelas tipadas para CSV ou JSON via ExportLoadedTypedTables (--json, -o arquivo ou console) e compare imprime o relatório de comparação JSON de dois documentos via HPDFDocCompareDocuments (--mode 0..5 cobrindo contagem de páginas, texto de páginas, contagem de objetos, imagens renderizadas, full e structural)

Fixed

  • Corrigido o pipeline de transforms ICC do Win64 que produzia saída toda zerada nas transforms em lote de 8 bits (TransformBytes): o fast path otimizado de 1D-LUT dentro dos objetos lcms2 do Win64 retorna zeros, enquanto o pipeline genérico de reamostragem está correto, então a transform de 8 bits agora compila com cmsFLAGS_NOOPTIMIZE apenas no Win64; o caminho single-color de 16 bits e todas as transforms Win32 mantêm o fast path otimizado (as primárias sRGB em lote agora fecham o round trip nas duas plataformas)

Version 2.661.0

Added

  • Adicionada compressão Flate de alta taxa com Zopfli genuína e limitada após a baseline zlib existente de quatro estratégias, com seleção estrita de no-growth, limites de entrada, iterações, blocos, saída e tempo decorrido, telemetria detalhada de stream e de imagens em paralelo, e gates determinísticos de economia em corpus fixo

Version 2.660.0

Added

  • Adicionados relatórios de preflight XML determinísticos legíveis por máquina e plugins confiáveis versionados por ABI para extração de features e regras de validação customizadas, com ordenação estável, integração com policy bundles, propagação de cancelamento, checagens fail-closed de capacidades e limites finitos de plugins, achados, features, strings, saída e tempo decorrido

Version 2.659.0

Added

  • Estendeu o FormCalc XFA delimitado com lógica condicional, agregações numéricas repetidas e callbacks de instância dinâmica validados, e adicionou scripts de formulário QuickJS em sandbox desligados por default, com control flow completo, typed arrays nativos, acesso isolado a dados, limites finitos de instruções, tempo, memória, stack, valores e operações de instância, e telemetria de execução

Version 2.658.0

Added

  • Adicionados DOMs de pacotes XFA editáveis e delimitados para streams XDP completos e arrays de pacotes ordenados, com queries de caminho por local-name, mutação de pacotes e nós, preservação exata dos bytes não tocados, reescrita seletiva por pacote, saída determinística de namespaces e atributos, divisão segura de CDATA, escape de entidades e limites finitos de entrada, saída, pacotes, nós, profundidade, atributos, texto e queries

Version 2.657.0

Added

  • Adicionada assinatura remota CSC API v2 pelo pipeline de providers CMS existente, com transport de propriedade da aplicação, refresh de tokens OAuth, descoberta delimitada de cadeias de credenciais, tratamento explícito de authorization e SAD, assinatura de digests síncrona ou assíncrona, parâmetros RSA-PSS, polling, timestamps RFC 3161, cancelamento, chaves de idempotência estáveis e um cache finito de operações concluídas

Version 2.656.0

Added

  • Adicionados handlers de documentos XPS, EPUB e CBZ opcionais com pontuação de conteúdo, com registro thread-safe substituível, uma única varredura validada do arquivo, ordenação de fixed-pages, spine e imagens naturais, cache imutável de conversão PDF, limites compartilhados de arquivo, recursos, reflow, páginas, pixels, DPI, saída e cancelamento, e publicação PDF segura contra rollback

Version 2.655.0

Added

  • Adicionada extração delimitada de tabelas tipadas e exportação atômica para CSV ou JSON com colunas canônicas, merge de fragments da mesma página e de páginas consecutivas, spans de células mescladas, cabeçalhos repetidos, geometria de página, confiança, proveniência e inferência de integer, número, boolean, data, data-hora, moeda e porcentagem controlada por locale

Version 2.654.0

Added

  • Adicionada exportação estruturada atômica de páginas carregadas para HTML, XHTML, XML e JSON por um único modelo de ordem de leitura, com blocos, spans estilizados, tabelas detectadas, coordenadas, ordem de origem, imagens PNG opcionais delimitadas, escape seguro para Unicode, cancelamento e limites finitos de recursos

Version 2.653.0

Added

  • Adicionada reescrita de cor atômica de páginas carregadas para DeviceGray, DeviceRGB ou DeviceCMYK, com preservação de vetor pesquisável, conversão raster lossless com gerenciamento de cor para imagens e recursos complexos, saída segura contra rotação, limites explícitos de fidelidade de renderização e de recursos, e políticas de preserve, process-convert ou reject para placas spot

Version 2.652.0

Added

  • Adicionada detecção de redação de páginas carregadas com revisão obrigatória: padrões de PII sensíveis a checksum, detectores de entidades e rostos plugáveis, achados em espaço de página com pontuação de confiança, telemetria de trabalho delimitada, identidade obrigatória do revisor, preparação atômica das anotações aprovadas e um limite explícito separado para o burn-in

Version 2.651.0

Added

  • Adicionada decodificação delimitada de códigos de barras para páginas carregadas e regiões, com engines plugáveis, renderização progressiva em baixa resolução, varreduras fallback de quarto de volta, payloads de texto e brutos validados, limites e orientação em espaço PDF, filtragem por confiança, deduplicação de sobreposições, cancelamento e telemetria de recursos

Version 2.650.0

Added

  • Adicionadas camadas de texto OCR pesquisáveis, delimitadas e canceláveis, com engines de reconhecimento plugáveis, validação de confiança e geometria, texto Unicode invisível alinhado à rotação, agrupamento por optional content, telemetria de recursos e publicação atômica multipágina

Version 2.649.0

Added

  • Adicionados round trips completos de grafo de objetos via JSON versionado, com exportações de snapshot em streaming e incrementais, payloads embutidos e sidecar atômicos brutos ou decodificados, importação delimitada compatível com schema, validação estrutural e de comprimento de stream e publicação transacional

Version 2.648.0

Added

  • Adicionado reparo delimitado para documentos QDF de diagnóstico editados à mão, que preserva bytes de objetos e streams, corrige comprimentos de stream diretos, indiretos, ausentes ou desatualizados, reconstrói offsets e trailers de cross-reference clássicos, rejeita estrutura insegura e verifica a saída pelo loader normal

Version 2.647.0

Added

  • Adicionado um registro thread-safe de filtros de stream customizados, com contratos de push e pull delimitados, orçamentos de decode compartilhados, cancelamento cooperativo, requisitos explícitos de seek, falhas customizadas isoladas e telemetria de execução

Version 2.646.0

Added

  • Adicionadas APIs de visitor e eventos para content operators delimitadas, com views de operandos somente leitura, callbacks de estado determinísticos, ações inspect, measure, replace, delete, stop e reject, cancelamento cooperativo, saída validada e atualizações atômicas de páginas carregadas

Version 2.645.0

Added

  • Adicionado um contrato plugável de render backend para páginas carregadas, com acesso a display lists compiladas, implementação GDI nativa, despacho paralelo thread-safe, política de fallback determinística, invalidação de cache e telemetria de execução

Version 2.644.0

Added

  • Adicionada detecção de sobreposição de layout delimitada, caminhos de elementos, mapeamento de fonte opt-in, overlays nativos de overflow e sobreposição em vetor, callbacks de diagnóstico em tempo real e estatísticas de trabalho

Version 2.643.0

Added

  • Adicionados gráficos vetoriais nativos e delimitados, com séries de linha, barra, área, pizza e dispersão, eixos automáticos ou manuais, temas, legendas, rótulos, alternativas Figure para PDF/UA e estatísticas de renderização

Version 2.642.0

Added

  • Adicionada paginação de RichEdit e RTF delimitada na thread de GUI, com saída EMF vetorial, imagens, apresentações OLE suportadas sob opt-in, cancelamento, preservação da posição de stream e orçamentos explícitos de entrada, caracteres, páginas e saída

Version 2.641.0

Added

  • Adicionada importação de SVG 2 delimitada como PDF Form XObjects reutilizáveis, com geometria e arcos nativos, cascata CSS, gradientes vetoriais, suporte a clip e máscara, texto Base 14, recursos de opacidade, anotações de link conscientes do posicionamento e estatísticas de importação

Version 2.640.0

Added

  • Adicionado um perfil de importação versionado de HTML5 paged media, com parsing de DOM tolerante, cascata CSS de impressão, layout de blocos e tabelas paginado, controles AcroForm opcionais, recursos delimitados orientados a callbacks e estatísticas por operação

Version 2.639.0

Changed

  • Mapeamentos de arquivos locais grandes agora adaptam o teto configurado de bytes mapeados entre janelas sequenciais maiores e até 16 janelas menores de acesso aleatório em MRU, mantêm uma opção explícita de geometria fixa e reportam geometria ativa, transições, contagens de padrão de acesso e pico de bytes mapeados

Version 2.638.0

Added

  • Adicionado treinamento de símbolos JBIG2 entre páginas delimitado, com backends externos e nativos, um dicionário global compartilhado, reuso exato de páginas duplicadas, inserção direta de lotes de imagens no PDF, telemetria de backend e tamanho, e economia de compressão medida de 78,8% no corpus de regressão de 100 páginas

Version 2.637.0

Changed

  • A renderização paralela de páginas carregadas agora reduz os workers solicitados a partir do orçamento de memória do processo, reserva cada página reivindicada, mantém as reservas de saída ordenada durante a entrega via callback, acorda quem espera por orçamento em caso de cancelamento ou falha e reporta telemetria de concorrência, reservas, admissão, atraso e espera

Version 2.636.0

Changed

  • O prefetch de páginas carregadas agora compila e renderiza fora do lock do cache, cancela cooperativamente através de tokenização e playback, cede vez para a renderização de páginas em primeiro plano e expõe telemetria de progresso, falha, preempção e latência de cancelamento

Version 2.635.0

Added

  • Adicionada renderização paralela de páginas em streaming ordenada, com callbacks na thread chamadora, uma fila delimitada de bitmaps concluídos, backpressure do produtor, cancelamento cooperativo, tempos de vida de bitmaps emprestados e telemetria de fila, bytes, espera, conclusão e entrega

Version 2.634.0

Added

  • Adicionado um pipeline paralelo de páginas carregadas em dois estágios, que compila display lists fora do lock do cache de renderização, inicia o playback antes que o conjunto completo de páginas seja compilado, balanceia dinamicamente workers delimitados, preserva a ordem de entrada, reduz a alocação de tokens de conteúdo e expõe telemetria de estágio, cache, conclusão e latência

Version 2.633.0

Added

  • Adicionados handles imutáveis com contagem de referência para bitmaps decodificados, com cache hits sem cópia, desenho direto thread-safe pelo renderer, cópias mutáveis isoladas sob demanda, tempos de vida independentes de eviction e telemetria acumulada de handles e cópias

Version 2.632.0

Changed

  • A execução de QuickJS agora funciona tanto por objetos estáticos quanto por uma DLL ponte neutra de ABI em Win32 e Win64, com valores Unicode-safe, relatório de status determinístico, limites configuráveis de memória, stack, script, tempo e interrupção, descoberta segura de DLL, recuperação após scripts rejeitados e builds de runtime reproduzíveis entre plataformas

Version 2.631.0

Changed

  • A validação de regras de negócio Factur-X e ZUGFeRD agora executa toda a superfície XPath 2 Schematron revisada, com bancos de dados de códigos externos, bindings sequenciais, quantificadores, somas FLWOR, identificadores de regras fallback estáveis, parsing XML seguro e delimitado, achados explícitos de erros de avaliação, zero saltos silenciosos e validação combinada fail-closed

Version 2.630.0

Added

  • Adicionada instanciação embutida de fontes variáveis TrueType, com eixos mapeados, tuplas gvar compartilhadas e privadas, interpolação IUP, atualizações de outlines simples e compostas, métricas de phantom points, baking de HVAR, VVAR e MVAR, reconstrução compacta de glyphs estáticos, saída com checksum correto e registro de fontes Unicode sem callbacks

Version 2.629.0

Added

  • Adicionada estimativa de placeholders CMS sem efeitos colaterais a partir de tamanhos de assinatura explícitos, do provider ou de certificados RSA, modelagem estática exata do contêiner, reservas conservadoras de payload dinâmico, rebuilds pré-assinatura, retries de provider condicionados a capacidades, garantias rígidas de invocação única para signer externo, dimensionamento delimitado e diagnósticos detalhados de tentativas

Version 2.628.0

Added

  • Adicionado subsetting de fontes baseado em alcançabilidade para fontes embutidas em PDFs carregados, incluindo conteúdo de páginas, Form XObjects aninhados, estados de aparência de anotações, font programs compartilhados, formatos TrueType e CFF, seleção por tamanho codificado, mapeamentos CID e ToUnicode estáveis, resultados detalhados e recusa por padrão quando há assinaturas presentes

Version 2.627.0

Added

  • Adicionada geração automática de estrutura PDF/UA para árvores de layout declarativas, incluindo headings, listas, tabelas, figuras, metadados de idioma e texto alternativo, artefatos de paginação, referências marked-content seguras para continuação, preservação da ordem de leitura, validação semântica e estatísticas de estrutura

Version 2.626.0

Added

  • Adicionado um DOM de documentos declarativo com estilos herdáveis, factories de componentes reutilizáveis, texto, spacers, stacks, contêineres, seções, headers e footers repetidos, tabelas ponderadas com linhas de header repetidas, profundidade de continuação delimitada, estatísticas de paginação, fragmentos de texto e tabela sem cópia, travessia linear de topo, flushing imediato de páginas e superfícies equivalentes em Delphi e C++Builder

Version 2.625.0

Added

  • Adicionado um gate de performance estatístico repetível em Win32 e Win64, que isola load, save, render e extração de texto, registra warmups e 30 amostras brutas com p50, p95, variância amostral, RSS, I/O do processo, ambiente e identidade determinística de fixture, avalia thresholds JSON estáveis e retorna exit code de falha em caso de regressão

Version 2.624.0

Changed

  • O parsing de dictionaries e arrays simples foi reescrito em torno de spans de fonte imutáveis, conversão numérica direta, contêineres aninhados em passada única e inserção indexada em dictionaries, com telemetria pública de materialização; um fixture Win32 de 30.000 pares reduziu os bytes alocados em cinco passadas em 64,7% e o tempo decorrido de 3.656 ms para 46 ms

Version 2.623.0

Added

  • Adicionados limites configuráveis de parser para bytes individuais de token, tokens agregados, entradas de arrays ou dictionaries e tokens malformados, além de um preset estrito para input não confiável, exceções tipadas de limite e telemetria por load; os gates de regressão rejeitam um token de 2 MiB e um contêiner de um milhão de tokens em menos de 250 ms e abaixo de um pico de processo de 37 MiB

Version 2.622.0

Added

  • Adicionadas APIs explícitas de liberação e telemetria do grafo de objetos de páginas carregadas, que descartam raízes limpas pertencentes à página e caches de renderização, preservando recursos compartilhados indiretos e metadados de reload; o processamento sequencial de 100.000 páginas mantém um pico estável de 69,3 MiB e páginas comuns ou comprimidas liberadas se materializam novamente com sua identidade original de objeto

Version 2.621.0

Changed

  • Contêineres object-stream decodificados agora usam um cache LRU configurável com teto em bytes, eviction imediata por contêiner, reload apoiado na fonte após a eviction, um modo de retenção zero e telemetria de pico de bytes, eviction e reload

Version 2.620.0

Changed

  • Árvores de páginas comuns grandes agora abrem como placeholders compactos, resolvem páginas aleatórias através de travessia guiada por /Count e um índice hash de objetos indiretos, fazem cache das páginas resolvidas, expõem telemetria e controles de materialização e se expandem automaticamente antes de mutações estruturais ou operações de save

Version 2.619.0

Changed

  • Campos AcroForm carregados, nomes qualificados, widgets, anotações e páginas agora compartilham um cache preguiçoso bidirecional de relacionamentos, com lookup reverso de anotações, lookup de página por widget, telemetria de atividade, invalidação explícita para edições brutas do grafo de objetos e manutenção automática segura contra mutações

Version 2.618.0

Changed

  • O lookup de objetos de página agora usa um índice reverso reconstruído sob demanda e consciente de mutações para números de objeto e ponteiros de página resolvidos, substituindo varreduras repetidas da tabela de páginas em cópia de páginas, outlines, destinos nomeados, actions, formulários, acessibilidade e reconciliação da árvore de páginas, além de expor telemetria de validade e atividade

Version 2.617.0

Changed

  • A comparação de documentos renderizados agora suporta DPI escolhido pelo chamador, tolerância de cor RGB ou luminância, gates de similaridade por proporção de pixels alterados e estilo SSIM, regiões alteradas conectadas determinísticas, overlays de diferença PNG opcionais e orçamentos fail-closed de pixels por página e agregados com diagnósticos explícitos de renderização

Version 2.616.0

Changed

  • A comparação de documentos agora percorre grafos de objetos indiretos por caminhos determinísticos baseados no catálogo, calcula hash de valores e streams dentro de limites explícitos de recursos, alinha páginas antes de classificar inserções, exclusões, movimentações e alterações, distingue objetos movidos de adições e remoções e reporta comparações incompletas em vez de tratar resultados limitados por orçamento como idênticos

Version 2.615.0

Changed

  • A decodificação de imagens carregadas agora usa 16 shards de metadados de cache e coordenação singleflight exata por chave, executa decodes caros independentes concorrentemente preservando um decode proprietário para requisições duplicadas, aplica os orçamentos configurados de bytes e entradas em todos os shards e expõe entry points de decode em cache além de telemetria de concorrência; quatro requisições independentes de JPEG de 12.000 pixels escalam 3,72 vezes em quatro workers Win64, enquanto oito requisições da mesma chave decodificam apenas uma vez

Version 2.614.0

Changed

  • A renderização de JPEG em escala de cinza e RGB de baixa resolução agora seleciona uma escala de inverse-DCT delimitada de 1/2, 1/4 ou 1/8, transmite scanlines escaladas por um resampler de ponto fixo direto para o bitmap alvo exato, preserva orçamentos de decode, cancelamento e isolamento de workers de codec, e expõe telemetria de fonte, escalado, alvo, scanline e memória através de GetLastJPEGReducedDecodeInfo; o fixture de regressão de 12.000 por 12.000 para 300 por 300 roda 24,05 vezes mais rápido que o decode completo sem alocar o raster de origem de 432 MB

Version 2.613.0

Changed

  • Arrays /Contents de páginas carregadas agora expõem um stream concatenado seekable preguiçoso, retêm segmentos não filtrados em armazenamento apoiado na fonte, decodificam no máximo um segmento filtrado por vez, usam acumulação de tokens e bytes linear amortizada, preservam os streams originais na edição anexando um novo segmento e mantêm uma sequência de 10.000 segmentos de 1 GiB abaixo de 64 MiB de memória de trabalho adicional

Version 2.612.0

Changed

  • Atualizações incrementais agora mantêm o arquivo fonte com lock de escrita e apoio em arquivo em vez de reter todos os bytes de origem, visitam e emitem apenas objetos alterados, novos e excluídos em subseções xref esparsas, transmitem o prefixo original para um novo alvo e anexam diretamente com rollback para saves no mesmo alvo; uma revisão de 4 GiB de um único objeto fica dentro de 128 MiB de memória de trabalho adicional

Version 2.611.0

Added

  • Adicionado um cache de decodificadores de fontes carregadas delimitado por documento, com limite LRU de 32 MiB e 128 entradas, reuso singleflight de parsing entre páginas, extração de texto carregada, exportação SVG e substituição de texto, resultados independentes de deep copy de GetLoadedFontDecoder, APIs configuráveis de orçamento de memória e telemetria, e invalidação automática de grafo, página, reload, JSON Patch e configuração de CMap; o uso repetido de uma fonte indireta compartilhada agora faz o parsing de encoding, widths, ToUnicode, CIDToGIDMap e mapeamentos descendentes apenas uma vez enquanto retida

Version 2.610.0

Changed

  • Aceleradas a importação de páginas e o grafting de objetos substituindo o array linear de lookup de objetos estrangeiros, redimensionado com precisão, por um mapa open-addressed de potência de dois com escopo de operação, chaveado por documento de origem, número de objeto e geração; objetos indiretos compartilhados e grafos cíclicos mantêm sua semântica de identidade existente entre importações em lote, enquanto grafos de objetos grandes agora usam registro em tempo constante amortizado e lookup em tempo constante esperado

Version 2.609.0

Changed

  • Melhorada a fidelidade da exportação de páginas para SVG: os operadores de estado gráfico diretos w, J, j, M e d agora preservam largura de linha, estilos nomeados de cap e join, limites de miter, dash arrays e fase de dash; q/Q restaura esses atributos através de conteúdo aninhado e Form XObjects; os operadores de pintura even-odd f*, B* e b* emitem fill-rule="evenodd"; hairlines PDF de largura zero continuam visíveis através de strokes SVG sem escala

Version 2.608.0

Added

  • Adicionada infraestrutura de linkedição estática de QuickJS: Lib/HPDFQuickJSStatic.pas linka os cinco objetos OMF do QuickJS (compilados com bcc32c a partir de fontes patchadas) através de diretivas {'$L'} — sem dependência de DLL — e declara toda a superfície de runtime C (47 símbolos: matemática C99 da msvcrt, aritmética 64-bit da Borland, stubs atômicos size-neutral, stubs de pthread); thirdparty/QuickJS/build-static.bat automatiza o pipeline de patch e compilação. Limitação conhecida: JS_NewRuntime funciona, mas JS_NewContext sofre um access violation porque a remoção do _Atomic altera a ordem de inicialização das structs; o build de DLL da v2.607.0 segue sendo o caminho funcional de avaliação

Version 2.607.0

Added

  • Adicionada geração de códigos de barras 2D DataMatrix (Lib/HPDFDataMatrix.pas): encoding em modo ASCII com compressão de pares de dígitos, ECC Reed-Solomon sobre GF(256) com o polinômio primitivo $12D do DataMatrix, tamanhos quadrados de 10x10 a 144x144, posicionamento de codewords em direção alternada e o finder pattern em forma de L; THPDFPage.DrawDataMatrix renderiza a matriz codificada como uma grade de módulos quadrados preenchidos
  • Adicionada geração de códigos de barras 2D empilhados PDF417 (Lib/HPDFPDF417.pas): encoding em modo texto com pareamento de caracteres base-30, ECC Reed-Solomon sobre GF(929) com primitivo 3, encoding do descritor de símbolo e layout linha/coluna com padrões start/stop; THPDFPage.DrawPDF417 renderiza a matriz de codewords
  • Adicionado o binding do engine JavaScript QuickJS (Lib/HPDFQuickJS.pas mais quickjs.dll pré-compilada Win32/Win64 em thirdparty/QuickJS/bin/): carregamento dinâmico de DLL, ciclo de vida runtime+context e a superfície de API de avaliação (Eval/EvalInt/EvalFloat); o caminho de código do Eval tem um crash conhecido no startup Win32 quando linkado em uma aplicação, documentado para investigação posterior
  • Adicionado o alvo de extração arquitetural THPDFWriter (Lib/HPDFWriter.pas): registro de entradas xref (free/used/compressed), serializador da tabela xref clássica e construtor do dicionário trailer para os quais o caminho de save do THotPDF delega incrementalmente

Version 2.606.0

Added

  • Adicionados dois comandos ao HotPDFCLI: decrypt carrega um PDF criptografado com a senha informada, o descriptografa via DecryptLoadedDocument e salva uma cópia sem criptografia (-o caminho de saída, padrão <input>-decrypted.pdf) e optimize recomprime todos os streams com FlateDecode via CompressLoadedDocument (-o caminho de saída, padrão <input>-optimized.pdf, recusa input criptografado)

Version 2.605.0

Added

  • Adicionada geração de códigos de barras 2D QR Code: o novo Lib/HPDFQRCode.pas implementa um encoder QR completo (modos de encoding numérico, alfanumérico e byte; correção de erros Reed-Solomon sobre GF(256); versões 1-40 com os quatro níveis de EC L/M/Q/H; todos os oito mask patterns com avaliação de penalidade; posicionamento correto de módulos incluindo padrões finder, timing, alignment, format info e version info). O método THPDFPage.DrawQRCode renderiza a matriz codificada como uma grade de módulos quadrados preenchidos em qualquer página de escrita (ModuleSize em pontos, nível de EC e cor configuráveis)

Version 2.604.0

Added

  • Adicionada a tabela de decode completa do MacExpertEncoding: os 128 bytes da metade alta agora mapeiam glyphs expert (capitulares pequenas, numerais old-style, dígitos superior/inferior, frações, símbolos tipográficos) para o codepoint Unicode mais próximo ou surrogate da Private Use Area, substituindo o fallback anterior de identidade de byte bruto que produzia saída embaralhada para documentos com fontes Type 1 com encoding expert

Version 2.603.0

Fixed

  • Corrigida uma falha intermitente antiga em ConcurrentObjStmDecryptionMatchesSerial: a global FRevision ficava desatualizada quando aes256 era rebaixado para aes128 sob a versão padrão PDF 1.6, desviando CreateKeys para o branch V5 que nunca preenche os hashes de senha legados /O e /U — o dicionário de criptografia serializado então carregava strings de senha vazias ou desatualizadas e o arquivo não abria. A correção rederiva FRevision a partir do FCryptKeyType rebaixado tanto no setter quanto nos dois pontos de negociação de versão, e o branch do dicionário legado agora levanta um diagnóstico claro quando as strings de senha não têm exatamente 32 bytes

Added

  • Adicionado o comando html do HotPDFCLI: renderiza um arquivo HTML restrito (h1-h6, p, ul, ol, hr, markup inline) para um PDF via HPDFRenderHTMLDocument

Version 2.602.0

Added

  • Adicionada importação de HTML em nível de bloco: THPDFHTMLImporter (e o wrapper de conveniência HPDFRenderHTMLDocument) renderiza um subconjunto restrito de HTML em um documento de escrita — headings h1-h6 com tamanhos por nível, parágrafos p (texto de corpo solto vira parágrafos implícitos), listas ul/ol com itens li indentados (marcador ou numeração 1.), réguas hr, quebras de página automáticas na margem inferior e recuperação estilo browser para blocos p/li não fechados; regiões head/script/style são ignoradas e tags de contêiner passam de forma transparente. Markup inline (b/i/u/font/a/sub/sup, entidades, word wrap) é delegado ao renderer TextOutHTML existente, então blocos mantêm keep-together dentro da página; tabelas, imagens, CSS e listas aninhadas ficam fora do escopo

Version 2.601.0

Added

  • Adicionados três comandos ao HotPDFCLI: merge anexa todas as páginas dos inputs adicionais ao primeiro documento e salva o arquivo combinado (-o caminho de saída, ao menos dois inputs, proteção contra colisão saída/input), split grava cada página selecionada de um documento em seu próprio arquivo de página única (<prefix>-page<N>.pdf, faixa --pages com base 1, prefixo padrão derivado do caminho de input) e export-svg grava a exportação SVG de cada página selecionada (<prefix>-page<N>.svg, página 1 por padrão)

Version 2.600.0

Added

  • Adicionada exportação de páginas para SVG: BuildLoadedPageSVG retorna um documento SVG 1.1 autônomo para qualquer página carregada e SaveLoadedPageAsSVG o grava em disco; são exportados paths (operadores de pintura fill/stroke/fill-and-stroke com as cores DeviceRGB), text runs (elementos <text> posicionados por caractere usando a mesma cadeia de fallback de decode de fontes da extração de texto, respeitando Tf/Tc/Tw/Tz/Ts e a matriz de texto incluindo rotação e escala), image XObjects (decodificados e embutidos como data URIs PNG base64 mapeados pelo quadrado unitário da CTM) e Form XObjects (interpretação recursiva com a matriz do form e o próprio /Resources), e páginas /Rotate 90/180/270 são exportadas na geometria do canvas rotacionado
  • Limites conhecidos herdados do dispatcher de dispositivos de content streams compartilhado: sem clipping W/W*, sem shadings sh, sem fontes Type 3, imagens inline reportam apenas metadados e os parâmetros de stroke suportados pelo ExtGState (LW/LC/LJ/ca/CA) são respeitados enquanto os operadores simples w/J/j/d não são despachados

Version 2.599.0

Added

  • Adicionada a ferramenta de linha de comando HotPDFCLI (tools/HotPDFCLI): um front end de console com três comandos — info (versão do PDF, contagem de páginas e tamanho da primeira página, método de criptografia, estrutura de linearização e xref, contadores de anotações/fontes/imagens/forms/assinaturas, metadados Info), extract-text (faixas --pages com base 1, saída em arquivo --out, modo de grade monoespaçada --layout que acompanha a ordem de leitura visual) e verify (status por campo de assinatura, signer, motivo, hash, hora de assinatura, cobertura do documento inteiro e estado do certificado, exit code não zero quando qualquer assinatura falha); Build-HotPDFCLI.bat produz binários Win32 e Win64

Version 2.598.0

Added

  • Adicionado SetRenditionMediaPlayParameters: anexa ou atualiza o dicionário de parâmetros de reprodução de mídia /P de uma media rendition com alvos obrigatórios /MH ou best-effort /BE carregando porcentagem de volume, visibilidade do controlador, flag de autoplay, modo de ajuste (meet/slice/fill/scroll/hidden), contagem de repetição e duração intrínseca, infinita ou de timespan explícito
  • Adicionado SetRenditionMediaScreenParameters: anexa ou atualiza o dicionário de parâmetros de tela de mídia /SP de uma media rendition (tipo de janela floating/full-screen/hidden/retângulo da screen-annotation, cor de fundo DeviceRGB, opacidade de fundo, índice do monitor)
  • Adicionado SetSoundAnnotationParameters: reescreve o formato de amostra do stream /Sound de uma anotação Sound (rate, canais, bits por amostra, encoding Raw/Signed/muLaw/ALaw) além dos padrões fixos 22050 Hz estéreo 16-bit Signed e define o ícone /Name, como Speaker ou Mic

Version 2.597.0

Added

  • Adicionado SetMovieAnnotationParameters: sobrescreve o dicionário /Movie de uma anotação de filme (par de aspecto, rotação 0/90/180/270, duração em segundos, visibilidade do poster) criado pelo AddMovieAnnotation com seus defaults fixos
  • Adicionado SetRichMediaPresentation: popula os dicionários de ativação, desativação e apresentação /RichMediaSettings de uma anotação RichMedia (nomes de condição como PO page-open, flags de toolbar / navigation UI / context click / transparency); um nome de condição vazio omite o dicionário correspondente
  • Adicionado ResolveIndirectObject em THotPDF: resolve as referências indiretas que o lado de autoria armazena dentro de dictionaries gravados, permitindo que chamadores naveguem em árvores de objetos recém-construídas; AddRichMediaAnnotation agora também registra sua anotação em LastAnnotation

Version 2.596.0

Added

  • Adicionada descoberta em tempo real de evidências de revogação: o parser de certificados agora lê as extensões de URI do responder OCSP de AIA e de CRLDistributionPoints, HPDFExtractCertificateRevocationURLs as expõe por certificado, e HPDFCollectCMSRevocationRequests as converte em requisições de evidência (GET pkix-crl por distribution point, POST ocsp-request com um corpo mínimo de CertID SHA-256 RFC 6960 construído a partir do certificado e seu emissor, certificados self-signed resolvendo como próprio emissor)
  • Adicionado HPDFValidateCMSCertificatePathOnline: coleta essas requisições, as executa pelo transporte fornecido pelo chamador sobre a maquinaria existente de retry/worker (a biblioteca nunca abre sockets) e alimenta cada resposta OCSP e CRL obtida no validador offline; fetches que falham degradam para a semântica de evidência offline

Version 2.595.0

Added

  • Adicionada decodificação de regiões halftone JBIG2 (segment types 22/23): pattern dictionaries (type 16) com bitmaps coletivos MMR ou arithmetic, stacks de bit-planes em escala de cinza tanto na forma MMR (planes encadeados alinhados a byte) quanto arithmetic (um decoder MQ compartilhado), posicionamento em grade com vetores fixed-point 8.8 e o mapa em branco HSKIP opcional
  • Adicionadas regiões generic-refinement standalone JBIG2 (types 42/43, GRTEMPLATE 0/1 com TPGRON) refinando o bitmap arquivado de um segmento de região referenciado ou o buffer da página
  • Adicionados AddPubSecKeyMaterial / ClearPubSecKeyMaterials: chaves privadas de recipient adicionais testadas contra cada envelope /Recipients quando o PubSecKeyMaterial principal não corresponde
  • Adicionados os builders de test-stream HPDFJBIG2Codec_EncodeHalftoneRegionTestStream e HPDFJBIG2Codec_EncodeStandaloneRefinementTestStream, cobrindo os novos segment types de ponta a ponta

Fixed

  • Corrigido o carregamento de documentos com AES-128 de chave pública: a passada de objetos legada deixava FileKey, StringKeyType e StreamKeyType não inicializados após o split do pubsec, então cada objeto era descriptografado com uma chave lixo (um load Win64 falhava de vez; um load Win32 produzia plaintext errado em silêncio)
  • Corrigido o round-trip de strings criptografadas: o ciphertext agora é sempre serializado como hex string, porque literal strings normalizam CR, LF e CRLF para um único LF e o processamento de escapes podia inverter bytes arbitrários do cipher

Version 2.594.0

Added

  • Adicionada aproximação de identidade embutida para os CMaps UCS2/UTF16 CJK predefinidos (UniJIS-UCS2-H, UniGB-UTF16-V e mais 15): HPDFLoadStandardCMapFile responde a partir de uma tabela embutida quando não há recursos CMap no disco, então a extração de texto Type0 não decodifica mais códigos de 2 bytes um byte por vez
  • Adicionadas tabelas Huffman JBIG2 fornecidas pelo usuário (segment type 53, forma descritora do Anexo B.2): o decoder nativo faz o parsing dos segmentos de tabela e os seletores SDHUFFDH/SDHUFFDW/SDHUFFBMSIZE/SDHUFFAGGINST do symbol-dictionary e SBHUFFFS/DS/DT/RDW/RDH/RDX/RDY/RDSIZE da região de texto com valor 3 os resolvem a partir dos segmentos referenciados
  • Adicionado SetStructureClassMapEntry registrando o dicionário de atributos compartilhado de um nome de classe no /ClassMap do StructTreeRoot, completando a API SetStructureElementClass /C

Fixed

  • Corrigida a recuperação de chave multi-recipient de chave pública: os envelopes /Recipients eram armazenados numa lista sem contagem que fazia alias de um único buffer entre entradas, então documentos com dois ou mais recipients derivavam uma file key errada para cada cifra; os envelopes agora são cópias proprietárias e o caminho legado SHA-1 faz hash dos bytes puros do envelope como o caminho AES-256

Version 2.593.0

Added

  • Adicionada renderização de Shading Type 1 (baseada em função): a porção visível do retângulo de domínio é subdividida por uma quadtree dirigida por erro de cor e cada célula folha é pintada como dois triângulos de gradiente com cores de vértice amostradas da função de 2 entradas, substituindo o diagnóstico de fallback anterior "not sampled"
  • Adicionada avaliação tolerante de funções de 2 entradas: uma função que declara apenas uma entrada degrada para f(x) (constante na segunda coordenada do domínio) em vez de falhar, então funções sampled e exponenciais atrás de um shading Type 1 ainda pintam

Version 2.592.0

Added

  • Adicionada quarentena de object streams: um contêiner /Type /ObjStm corrompido é registrado com um motivo (THPDFObjStmQuarantineReason: não é um stream, dictionary inválido, header inválido, tamanho de stream inválido, falha de decrypt, falha de decompress, /First fora do intervalo, header não parseável ou exceção de contêiner), uma linha de diagnóstico e os números dos objetos membros que ficaram não resolvidos, enquanto contêineres independentes continuam carregando
  • Adicionada quarentena em nível de membro (osqrMemberUnparsable): um corpo de membro que falha ao ser parseado de um contêiner decodificado com sucesso é registrado uma vez sem afetar seus irmãos, e GetLoadedQuarantinedObjStmCount / GetLoadedQuarantinedObjStmInfo expõem cada registro; registros de quarentena sobrevivem às retries de recuperação de um load, deduplicam por contêiner e são limpos na próxima entrada de load