HotPDF Release Notes

Version history for HotPDF user-visible features, fixes, compatibility updates, and documentation changes

Note: Only the latest 500 change records are kept

Last release

  • Latest version: 2.458.0; Release date: 2026-08-03

Version 2.458.0

Added

  • ImmediateFlushLayout move fluxos de páginas concluídos para armazenamento com suporte de arquivo para geração de relatórios delimitada; o layout de parágrafo agora oferece suporte a restrições keep-with-next, órfãs e viúvas, direção bidi first-strong com substituições explícitas, diagnósticos de coordenadas delimitados, dimensões de página herdadas, auxiliares semânticos /P e artefatos de paginação tipados para cabeçalhos, rodapés, marcas d'água e números de página

Version 2.457.0

Added

  • SetFontFallbackChain e TextOutWithFallback adicionam seleção de fonte ordenada com reconhecimento de script com verificações de cobertura de escalar Unicode e diagnósticos persistentes de glifos não resolvidos; o texto vertical agora emite execuções completas de Identity-V com métricas /DW2 e /W2 derivadas das tabelas OpenType vhea, vmtx e VORG quando disponíveis

Version 2.456.0

Added

  • HPDFEncodePredictor adiciona codificação de predictor TIFF estrito e PNG fixo ou adaptativo para linhas de raster empacotadas, de 8 bits e de 16 bits; ExtractLoadedImageToStream evita matrizes de bytes de tamanho total para payloads de imagem nativos ou decodificados genericamente; OptimizeLoadedStreams recomprime seletivamente famílias de filtros suportadas por meio de buffers de derramamento de memória para disco e substitui apenas fluxos que atingem um limite positivo de economia

Version 2.455.0

Added

  • DecodeLoadedStreamToStream agora compõe filtros PDF carregados em um pipeline delimitado cujo estágio final grava diretamente em um fluxo do chamador; DocumentDecodeBudgetBytes adiciona um teto padrão de 1 GiB em cadeias independentes, enquanto proteções de contagem de filtros, profundidade de aninhamento, referência cíclica e fluxo recursivo expõem diagnósticos estruturados de pipeline

Version 2.454.0

Added

  • Fluxos carregados grandes agora permanecem em intervalos do arquivo de origem até a mutação e derramam alterações excessivas para arquivos temporários próprios por meio de LoadedStreamMemoryThreshold; membros de fluxo de objetos comprimidos são indexados e materializados por número de objeto no primeiro uso; LoadFromRandomAccessSource adiciona integração de intervalo HTTP e armazenamento personalizado, com diagnósticos de fluxo e de cache de objetos

Version 2.453.0

Changed

  • Saves incrementais agora preservam a ID permanente do trailer em todas as revisões, giram apenas a ID de modificação, não emitem nenhuma revisão acrescentada quando o grafo de objetos carregado está inalterado e expõem decisões de mesclagem de referência híbrida por meio de GetLoadedXRefMergeInfo com contadores explícitos de precedência de fluxo xref, sobreposição de tabela e revisão mais recente

Version 2.452.0

Added

  • Adicionada saída nativa de PDF 2.0 mais criação de PDF/A-4, PDF/A-4e, PDF/A-4f e PDF/UA-2, com identificação XMP com reconhecimento de revisão, papéis de estrutura do PDF 2.0, registro de namespace por meio de RegisterStructureNamespace e AddStructureElementNS, validação estrita de estrutura PDF/UA-2 e arquivos associados neutros em perfil por meio de AddPDFAssociatedFile

Version 2.451.0

Added

  • DetectFacturXInvoice agora expõe o tipo MIME decodificado do anexo primário e o URI do namespace XMP vinculado, enquanto ValidateFacturXInvoice verifica o FileSpec exato compartilhado pelo /AF do Catalog e a árvore de nomes EmbeddedFiles, nomes /F e /UF, tipo MIME XML, DocumentType XMP e o namespace Factur-X ou ZUGFeRD específico do perfil por meio de quatro sinalizadores de problema dedicados

Version 2.450.0

Added

  • JSON de preflight, HTML e resultados ao estilo veraPDF agora contêm valores estáveis ruleId com namespace, além de localizações legíveis por máquina com escopo lógico, caminho, chave PDF e número de objeto exato, índice de página ou deslocamento de byte quando disponíveis; relatórios JSON também emitem os mapeamentos spec ISO documentados e permanecem válidos quando as matrizes contêm várias resultados

Version 2.449.0

Added

  • SanitiseLoadedDocument agora aplica políticas apenas de JavaScript, de conteúdo ativo ou de documento não confiável estrito a um PDF carregado, relata ações e payloads removidos, falha de modo fechado para tipos de ação desconhecidos, remove objetos inalcançáveis por meio de um percurso quase linear seguro contra ciclos delimitado, compacta números de objetos ativos e substitui a origem de forma atômica ao salvar no lugar

Version 2.448.0

Added

  • O renderizador de páginas carregadas agora executa padrões de ladrilho coloridos e não coloridos mais padrões de sombreamento axial e radial para preenchimentos e traçados, incluindo matrizes de padrão, herança de tingimento, recorte de caminho, tokenização de conteúdo em cache, restauração aninhada de estado gráfico e contagens delimitadas de recursão e de ladrilhos para recursos hostis

Version 2.447.0

Added

  • Adicionado um teto configurável de 256 MiB por cadeia DecodeBudgetBytes que agrega a saída de estágios aninhados de Flate, LZW, ASCIIHex, ASCII85, RunLength e de predictor de imagem antes que atinjam a memória, com diagnósticos GetLastDecodeBudgetInfo e zero como um modo ilimitado explícito

Version 2.446.0

Added

  • Adicionado LinearizeOutput opcional para visualização rápida na web, emitindo o dicionário de parâmetros de linearização nos primeiros 1024 bytes, tabelas de dica de primeira página e de objeto compartilhado, seções de página ordenadas por dependência e duas tabelas de referência cruzada de compatibilidade, preservando a saída direta de arquivo e fluxo e a detecção confiável de recarregamento

Version 2.445.0

Added

  • PDFs carregados agora usam recuperação delimitada de referência cruzada após declarações startxref danificadas ou dados xref inutilizáveis, primeiro realocando uma tabela ou fluxo válido e, em seguida, reconstruindo deslocamentos validados de objetos diretos com precedência da definição mais recente, filtragem de falsos positivos de objetos aninhados, orçamentos configuráveis de verificação e de objetos, tentativas delimitadas de âncora xref, diagnósticos estruturados e salvamento por reescrita completa

Version 2.444.0

Added

  • AnalyzeLoadedSignatureRevisions agora classifica cada revisão incremental após uma assinatura selecionada como validação de longo prazo, preenchimento e assinatura de formulário, anotações ou outras alterações, relata objetos alterados e liberados e nomes de campos e avalia a conformidade com DocMDP e FieldMDP de forma independente em históricos xref tradicionais, de fluxo, híbridos e de objeto comprimido

Version 2.443.0

Added

  • VerifyLoadedSignatureWithTrust e HPDFValidateCMSCertificatePath agora constroem caminhos de certificado de assinante até âncoras de confiança fornecidas pelo chamador e verificam assinaturas de certificado, períodos de validade, Basic Constraints, restrições de comprimento de caminho e Key Usage
  • A validação offline de revogação agora verifica assinaturas OCSP e CRL, autoridade do respondente, identidade do certificado, atualização do status e tempos de revogação, preferindo evidência VRI por assinatura antes do DSS em nível de documento, evidência do chamador e CRLs do CMS
  • THPDFSignatureInfo.CertificateValidation relata confiança, comprimento do caminho, âncora de confiança, tempo de avaliação, status e fonte de revogação, tempo de revogação e problemas de validação independentemente do svValid criptográfico

Version 2.442.0

Added

  • A verificação de assinatura carregada agora valida criptograficamente carimbos de data/hora RFC 3161 do documento em relação ao /ByteRange do PDF e tokens de carimbo de data/hora da assinatura em relação ao valor da assinatura CMS pai, enquanto THPDFSignatureInfo.Timestamp expõe o tipo de carimbo de data/hora, status, política, impressão da mensagem, número de série, tempo de geração, precisão, ordenação, nonce, identidade da TSA e detalhes do certificado do assinante do token

Version 2.441.0

Added

  • A verificação de assinatura carregada agora oferece suporte a assinaturas CMS RSA-PSS com SHA-1, SHA-256, SHA-384 ou SHA-512 e valida parâmetros explícitos de hash, hash MGF1, comprimento de salt e campo de trailer
  • THPDFSignatureInfo agora relata SignedRevisionLength e UnsignedTrailingBytes, e svInvalidByteRange identifica intervalos de assinatura do PDF estruturalmente inseguros

Changed

  • A verificação de assinatura agora restaura a posição do fluxo do chamador, compara sequências de bytes sensíveis à segurança sem saídas antecipadas e relata os parâmetros completos do algoritmo RSA-PSS

Fixed

  • A verificação CMS agora rejeita intervalos de bytes sobrepostos, fora dos limites, truncados ou ambíguos e valida o identificador de algoritmo completo do RSA PKCS#1 DigestInfo em vez de aceitar qualquer string de octetos do tamanho do digest

Version 2.440.0

Fixed

  • O registro de fontes Unicode agora aloca o buffer completo de avanço de glifos antes de ler as métricas da fonte, evitando violações de acesso nos fluxos de shaping OpenType e de subsetting de fontes
  • GetWideTextWidth agora interpreta os avanços Unicode em cache em unidades em e faz fallback para a medição da plataforma quando uma métrica de glifo não está disponível, restaurando larguras escaladas corretamente para quebra de linha e layout
  • BeginIncrementalUpdate agora marca os objetos carregados como limpos antes de rastrear as alterações do chamador, de modo que objetos inalterados não sejam reescritos e os dicionários de criptografia órfãos sejam corretamente liberados na seção de referência cruzada acrescentada

Version 2.439.0

Added

  • HPDFDecodePredictor e HPDFTryDecodePredictor fornecem decodificação limitada para predição TIFF de 1, 2, 4, 8 e 16 bits e para todos os cinco filtros de linha PNG, com validação estrita de linhas e diagnósticos acionáveis
  • TPDFLZWDecompressor adiciona saída direta de fluxo, métodos de decodificação reutilizáveis que não geram exceções, limites de saída configuráveis e requisitos de terminador de fluxo, além de estatísticas de largura de código, de dicionário, de redefinição, de expansão e de saída por decodificação

Changed

  • A decodificação LZW agora usa uma arena de frases contígua, suporta ambos os modos EarlyChange do PDF e ambas as ordens de preenchimento de bits, trata redefinições de limpeza e expansão KwKwK estritamente e faz a saída de strings crescer geometricamente
  • A extração de imagens Flate e LZW carregadas agora respeita a geometria do preditor DecodeParms e o EarlyChange, usa dimensionamento de varredura seguro contra estouro e compartilha a mesma implementação de preditor da decodificação de fluxos xref

Fixed

  • A decodificação Flate com parâmetros de preditor agora lê do fluxo de descompressão em vez de copiar os bytes de entrada comprimidos para o estágio de preditor
  • Códigos LZW malformados, linhas truncadas, marcas de linha PNG inválidas, geometria de preditor impossível e expansão excessiva agora falham de forma determinística em vez de retornar dados de imagem parciais ou ainda comprimidos

Version 2.438.0

Fixed

  • THPDFViewer agora compila no Delphi XE2 até XE8, onde WM_DPICHANGED está ausente de Winapi.Messages; a constante de mensagem de DPI por monitor agora é definida localmente para toolchains anteriores ao Delphi 10 Seattle, restaurando as builds DCU da biblioteca TRIAL para RAD Studio XE2..XE8 que eram abortadas com E2003 Undeclared identifier

Version 2.437.0

Changed

  • GetWideTextWidth agora mede texto Unicode a partir de um cache de largura de avanço por ponto de código preenchido uma vez a partir da tabela hmtx da fonte, em vez de um ciclo CreateCompatibleDC + GetTextExtentPoint32W a cada chamada -- uma aceleração de 10 a 100 vezes para medição de quebra de palavra, alinhamento e células de tabela em documentos Unicode longos, com um fallback transparente para o caminho GDI legado quando nenhuma fonte Unicode está registrada

Version 2.436.0

Fixed

  • O /FontDescriptor /CapHeight das fontes incorporadas agora usa a métrica real otmsCapEmHeight da face em vez de uma constante fixa no código, com fallback para ~70% da altura ascendente para faces que relatam zero

Version 2.435.0

Fixed

  • As fontes Unicode incorporadas agora mantêm os glifos que o shaping OpenType produz (formas de apresentação arábicas, ligaduras, alternativas contextuais) ao fazer o subsetting -- o conjunto FUnicodeExtraUsedGlyphs registrado por MarkUnicodeGlyphUsed / EnableShapingFeatureForSubset era gravado, mas nunca consultado pelo subsetter, então esses glifos caíam para .notdef na saída

Version 2.434.0

Added

  • THPDFWeightedCache adiciona inspeção sem promoção, pesquisa booleana, remoção explícita e transferência de propriedade, corte imediato de orçamento, estatísticas de taxa de acerto e de ciclo de vida, além de chaves de conteúdo SHA-256 por fluxo

Changed

  • CMaps ToUnicode e CID ordenados grandes agora usam pesquisa logarítmica de caracteres e de intervalos, preservam exatamente espaços de código de um a quatro bytes, isolam mapas analisados compartilhados por raiz de recurso e fazem o armazenamento do analisador crescer geometricamente
  • O cache persistente de páginas renderizadas agora grava dados PNG e de índice atomicamente, rastreia a recenticidade em nível de página, aplica limites reduzidos imediatamente e recupera índices obsoletos, arquivos temporários abandonados, pastas ausentes e pastas de documento não indexadas

Fixed

  • A análise de CMap agora trata nibbles hexadecimais ímpares corretamente e rejeita dados hexadecimais malformados, intervalos inválidos ou excedentes, destinos CID negativos e mapeamentos explícitos sem limite, substituindo sequências de substituto UTF-16 inválidas de forma determinística
  • A substituição do cache ponderado não libera mais um objeto quando a mesma instância é reinserida sob sua chave existente, e entradas PNG corrompidas do cache em disco são removidas após uma decodificação com falha em vez de falhar em toda pesquisa posterior

Version 2.433.0

Added

  • A verificação de assinaturas carregadas agora suporta assinaturas CMS ECDSA P-256, P-384 e P-521 com SHA-1, SHA-256, SHA-384 ou SHA-512, incluindo seleção de signatário por emissor e número de série e por SubjectKeyIdentifier, validação estrita de assinatura DER e diagnósticos estendidos de algoritmo e de curva
  • O gerenciamento de cores ICC agora valida perfis ICC v2/v4, infere e verifica contagens de componentes, elimina duplicatas de perfis registrados, converte cores vetoriais ICCBased e amostras de imagem brutas em sRGB com suporte a intenção de renderização e retém o espaço de cor alternativo do PDF como um fallback controlado

Version 2.432.0

Added

  • THPDFTableCell agora suporta células de imagem (ImageIndex + ImageAspect dimensionam uma imagem registrada para a largura da coluna com alinhamento H/V) e células HTML (IsHTML renderiza o texto da célula por meio de TextOutHTML para marcação embutida de negrito/cor/link/sub-sobrescrito), correspondendo à variedade de conteúdo de célula que uma exportação de grade deve transportar

Version 2.431.0

Added

  • O novo mecanismo de layout e renderização de THPDFTable (unidade HPDFTable) dispõe tabelas a partir de larguras de coluna e linhas declaradas, com texto, alinhamento, cor e substituições de fonte por célula, mesclagem de ColSpan / RowSpan, quebra de palavra automática com alturas de linha medidas, planos de fundo de cabeçalho e de listras de zebra e continuação automática de quebra de página que repete a faixa de cabeçalho em cada página -- tudo acionando as primitivas de desenho de THPDFPage existentes, de modo que os produtores não precisam mais desenhar células manualmente com Rectangle e TextOut

Version 2.430.0

Changed

  • O processamento de fluxo de conteúdo e a edição de páginas carregadas agora escalam de forma mais eficiente em grandes cargas de texto e de caminhos, preservam o Unicode do plano suplementar e a semântica de caminho do PDF, invalidam caches de página após mutações e concluem gravações em fluxos que aceitam buffers parciais

Version 2.428.0

Added

  • THPDFPage.TextOutHTML ganha uma sobrecarga de quebra de linha que recebe um MaxWidth e quebra linhas longas nos limites de palavras, além de tags de hiperlink embutidas (<a href>) e de subscrito/sobrescrito (<sub>/<sup>); os hiperlinks são pintados de azul e sublinhados e registram uma anotação de URI clicável

Version 2.427.0

Changed

  • Sequências de texto consecutivas que compartilham a mesma fonte e tamanho não reemitem mais o operador Tf a cada chamada, encolhendo os fluxos de conteúdo em documentos ricos em fontes (tabelas, parágrafos) enquanto ainda os reemitem após uma restauração de estado gráfico (Q) onde o PDF exige
  • A aproximação de elipse de THPDFPage agora usa a constante kappa de Bézier cúbica padrão 0.5522847498, correspondendo a todas as outras implementações de elipse e círculo na unidade e removendo o pequeno desvio dependente do raio que a aproximação 11/20 anterior produzia

Version 2.426.0

Added

  • O visualizador agora aquece previamente o cache de páginas renderizadas para as páginas adjacentes àquela recém-exibida, usando uma thread em segundo plano no mesmo DPI para que a próxima virada de página atinja o cache em vez de renderizar novamente de forma síncrona; a nova propriedade PrefetchRadius controla quantas páginas de cada lado são pré-aquecidas (0 a desativa)

Version 2.425.0

Added

  • O renderizador de páginas carregadas agora decodifica e desenha imagens embutidas (BI/ID/EI) em vez de ignorá-las, expandindo os pares chave/valor abreviados de imagem embutida e os bytes brutos no momento da tokenização e colocando o resultado através do mesmo mapeamento CTM de quadrado unitário usado para XObjects de imagem

Version 2.424.2

Changed

  • O cache em disco de páginas renderizadas agora coleta todos os arquivos de página em uma única varredura de diretório e desocupa a cauda que transborda em uma única passagem, substituindo o loop anterior de re-varredura por desocupação que rodava em tempo quadrático sobre a contagem de páginas por documento
  • A deduplicação de imagens agora memoiza o SHA-256 de cada fluxo de imagem armazenado e compara os hashes antes de percorrer os bytes, de modo que adicionar a mesma imagem grande a muitas páginas não relê mais todos os fluxos armazenados anteriormente a cada inserção

Version 2.424.1

Changed

  • O cache ponderado de imagens decodificadas e fontes de subconjunto agora resolve as buscas através de um índice hash e mantém a ordem dos mais recentemente usados através de uma lista duplamente encadeada baseada em índice, transformando cada Get, Put e promoção de recência de um deslocamento de array em O(n) em trabalho O(1), de modo que renderizar documentos grandes com várias imagens não se degrada mais à medida que o cache se enche

Version 2.424.0

Changed

  • CompressLoadedDocument agora respeita CompressionLevel, processa fluxos de origem em blocos limitados, mantém a carga útil original quando a compressão não a reduz, libera com segurança os fluxos substituídos e marca os objetos de fluxo transformados como sujos para que SaveLoadedDocument persista o resultado em vez de seguir o caminho de cópia de arquivo inalterado.DecompressLoadedDocument usa o mesmo caminho de fluxo seguro quanto à propriedade, remove /DecodeParms de identidade e deixa fluxos de preditor TIFF ou PNG comprimidos até que o estágio de preditor possa ser decodificado com segurança

Version 2.423.0

Added

  • THPDFPage.AddCertificationSignatureField e ConfigureCertificationSignature agora criam a única assinatura de certificação DocMDP com todos os três níveis de permissão e a vinculação Catalog /Perms /DocMDP correspondente, enquanto AttachSignatureFieldLock emite políticas SigFieldLock indiretas e referências FieldMDP correspondentes para os escopos de campo All, Include ou Exclude.THotPDF.GetLoadedSignaturePermissions realiza uma inspeção estrutural limitada do mesmo grafo de permissões, incluindo a diretividade exigida, a vinculação raiz, a concordância de políticas e o diagnóstico, sem confundir a estrutura de políticas com a validade criptográfica ou a conformidade com revisões posteriores

Version 2.422.0

Added

  • Os tokens de marcador de marca d’água / cabeçalho / rodapé agora resolvem os metadados do documento: <%Author%> / <%Title%> / <%Subject%> / <%Keywords%> / <%Producer%> são substituídos junto com os <%PageNo%> / <%TotPage%> / <%FileName%> / tokens de data-hora existentes quando a nova sobrecarga HPDFReplaceWatermarkPlaceholders recebe um record THPDFPlaceholderDocInfo. A assinatura legada de 4 parâmetros permanece para chamadores que precisam apenas do subconjunto página / arquivo / data-hora

Version 2.421.0

Added

  • THPDFActionBuilder.GoToEmbeddedNamedDestination e GoToEmbeddedPage criam ações GoToE do PDF 1.6 com pai válido segundo o padrão, árvore de nomes EmbeddedFiles, anotação de anexo e caminhos de destino /T aninhados, preservando destinos nomeados ou explícitos, especificações de arquivo raiz opcionais, NewWindow, encadeamento de ações e restrições PDF/A/PDF/X
  • A inspeção de ações carregadas agora reconhece todos os 18 subtipos de ação da ISO 32000-1 e retorna instantâneos ordenados e não executáveis de THPDFLoadedActionInfo das fontes /OpenAction e /AA do catálogo, /AA de página, /A e /AA de anotação, /AA de campo AcroForm e /A de contorno. As formas dicionário e matriz de /Next preservam a ordem de execução, enquanto entradas malformadas, nós compartilhados, ciclos, profundidade excessiva e contagens excessivas de nós param de forma segura com diagnóstico
  • As enumerações de ação de anotação e de gatilho JavaScript agora incluem os eventos de abertura de página /PO, fechamento de página /PC, página visível /PV e página invisível /PI com a necessária negociação de versão PDF 1.5

Version 2.420.0

Added

  • O estágio 3 do dispositivo de content-stream fecha o ciclo de abstração: IHPDFContentDevice ganha DrawXObject / DrawShading / ApplyExtGState para os operadores Do / sh / gs, e o interpretador compartilhado agora os despacha. Do é gated em cdcNeedImages de modo que dispositivos de texto/enum pulam a decodificação pesada de imagens; sh e gs despacham incondicionalmente. O caminho ExecuteViaDevice do renderizador agora pode pintar o conjunto completo de operadores (caminhos + cores + texto + imagens + shading + ExtGState), observavelmente equivalente ao caminho legado HandleOperator. O procedimento aninhado ApplyExtGState foi promovido a método de classe (DoApplyExtGState) para que o caminho do dispositivo o compartilhe sem duplicação; cláusulas de resolução de métodos roteiam as três novas entradas de interface para os helpers Dev* sem colidir com os helpers privados pré-existentes
  • Padrão observer de conteúdo do documento: o evento THotPDF.OnLoadedDocumentModified dispara de InvalidateRenderedPageCache (PageIndex = -1, documento inteiro) e InvalidateRenderedPageCachePage (uma página específica) para que visualizadores anexados se refresquem automaticamente. THPDFViewer assina em SetDocument e desvincula em detach / opRemove, chamando RefreshDocument quando a página atual (ou o documento inteiro) é afetada. A sincronização multi-view (vários visualizadores sobre o mesmo THotPDF) agora funciona sem que cada chamador invoque RefreshDocument manualmente

Version 2.419.0

Added

  • Estágio 1 da abstração do dispositivo de content-stream: IHPDFContentDevice ganha a superfície de callback de texto (BeginText / EndText / UpdateFont / UpdateCharSpace / UpdateWordSpace / UpdateHorizScale / UpdateLeading / UpdateRenderMode / UpdateRise / TextMove / TextSetMatrix / TextNewLine / ShowText / ShowTextArray) que espelha a máquina de estados de texto do PDF; o despachador compartilhado HPDFInterpretContentStreamDevice agora encaminha BT/ET/Tf/Tc/Tw/Tz/TL/Tr/Ts/Td/TD/Tm/T*/Tj/TJ/'/" ao dispositivo quando ele declara cdcNeedText
  • THPDFTextExtractDevice é um dispositivo concreto que mantém as matrizes de texto e emite um THPDFGlyphRecord por código de caractere (decodificado via um IHPDFFontResolver injetado) — observavelmente equivalente à saída de HPDFInterpretTokens mas produzida através da interface do dispositivo de modo que o mesmo loop interpretador dirija extração de texto, enumeração de caminhos e renderização
  • A função de conveniência HPDFExtractGlyphsViaDevice envolve o dispositivo de extração de texto + interpretador compartilhado em uma única chamada; as HPDFInterpretContentStream / HPDFInterpretTokens existentes permanecem intactas para os chamadores atuais
  • Estágio 2 da abstração do dispositivo de content-stream: THPDFPageRenderer agora implementa IHPDFContentDevice de modo que o despachador compartilhado possa dirigi-lo através da mesma interface abstrata. ExecuteViaDevice é a entrada de renderização opt-in dirigida por dispositivo; o caminho de produção Execute mantém seu despacho embutido ExecuteStream / HandleOperator, então o comportamento existente é inalterado. O renderizador carrega cada pedaço de estado que os callbacks precisam (pilha de estado gráfico, cache de fontes, handles GDI, quatro pontes de pintura) e cada método do dispositivo é uma delegação leve, então a rota dirigida por dispositivo é observavelmente equivalente à rota legada

Version 2.418.0

Added

  • DecompressLoadedDocument é o inverso de CompressLoadedDocument: ele percorre todo stream indireto que carrega um /Filter /FlateDecode (forma de nome ou matriz de elemento único), inflate do payload de volta a bytes crus, remove a entrada /Filter e ajusta /Length; streams com outros filtros (CCITT / DCT / JBIG2 / JPX / Crypt / RunLength) e cadeias multi-filtro são deixados intactos, e payloads Flate corrompidos são pulados em vez de descartados
  • EnumLoadedPageElements agora retorna a geometria completa do caminho por elemento ekPath, não apenas a bounding box: dois novos campos PathPoints: array of THPDFPathPoint e PathIsCurve: array of Boolean são paralelos por índice e carregam os pontos de controle de cada segmento’s no espaço de usuário com um flag distinguindo segmentos bézier cúbicos dos lineares (arestas m / l / re). Chamadores que leem apenas o bbox não são afetados; extração de desenhos CAD, detecção de linhas de tabela e consumidores de reprodução vetorial agora podem reconstruir as curvas exatas que a página desenhou
  • A nova unit HPDFContentDevice introduz a abstração do dispositivo de content-stream (estágio 0): uma interface IHPDFContentDevice com uma implementação base TInterfacedObject (que espelha o padrão consagrado de IHPDFFontResolver), um despachador compartilhado HPDFInterpretContentStreamDevice que hoje cobre o subconjunto de operadores de caminho / cor / estado, e um THPDFPathEnumDevice concreto que coleta um record por caminho pintado com geometria completa de pontos. Isso quebra a duplicação tripla entre HPDFContentStream, HPDFPageRenderer.HandleOperator e HPDFCollectPathElements; o estágio 1 adicionará callbacks de texto/imagem e o estágio 2 migrará o renderizador para o dispositivo

Changed

  • Comentário de cabeçalho do HPDFPageRenderer atualizado: a nota “TrueType/CFF glyph-outline rendering out of scope” estava desatualizada — os contornos de glifo incorporados estão ativos desde a v2.342.0 (DrawTextRun chama THPDFEmbeddedTTF.DrawGlyph / THPDFEmbeddedCFF.DrawGlyph com caminhos bézier quadráticos/cúbicos reais; TextOutW do GDI é apenas o fallback para caracteres não mapeados). Fontes CID via Identity-H + CIDToGIDMap também são cobertas

Version 2.417.0

Added

  • Five named loaded-document annotation helpers close the discovery gap where the existing ASubtype-parameterised helpers (AddLoadedHighlightAnnotation, AddLoadedSquareAnnotation, AddLoadedPolygonAnnotation) already produced these subtypes but callers had to know the secret: AddLoadedCircleAnnotation, AddLoadedUnderlineAnnotation, AddLoadedStrikeOutAnnotation, AddLoadedSquigglyAnnotation and AddLoadedPolylineAnnotation -- once landed, the XFDF interchange layer (which already recognises these subtype strings) picks them up for free
  • AddLoadedFileAttachmentAnnotation embeds an arbitrary file payload (PDF, image, office doc) as a FileAttachment annotation with the full three-object graph the spec requires: annotation dict / Filespec dict / EmbeddedFile stream with /Subtype MIME, /Params /Size and creation/modification dates; the new THPDFFileAttachmentIcon enum (faiPushPin / faiGraph / faiPaperclip / faiTag) selects the standard pin icon viewers render
  • THPDFFieldValidationOptions record + HPDFDefaultValidationOptions expose the full Adobe AF* parameter surface (Decimals / SeparatorStyle / NegativeStyle / CurrencySymbol / CurrencyBefore / RangeMin / RangeMax) that the Acrobat JS helpers accept; the existing ApplyLoadedFieldValidation(FieldIndex, Kind, DateFormat, Mask) signature is retained as a backward-compatible overload that forwards into the new record overload
  • ApplyFieldValidation and ApplyFieldCalculation bring the same Format+Keystroke+Validate / Calculate template to producer-mode fields (looked up by name) so newly-created forms get the same AF* scripts as loaded ones, without writing JavaScript by hand
  • CopyLoadedAnnotationsFromDocument deep-copies annotations from another loaded document directly PDF→PDF (no XFDF intermediary): reuses CopyObject to rebuild indirect references, streams and /AP appearances, rewrites /P to the destination page, optionally remaps /IRT reply chains via /NM, optionally clears /T author, and accepts a THPDFAnnotCopyFilterEvent callback for selective copy -- covers Widget/PrinterMark/TrapNet/Watermark/3D/Screen that the XFDF layer does not reach

Fixed

  • ApplyLoadedFieldValidation wrote the Format JavaScript under trigger key /X (annotation-exit), which Acrobat never fires for form fields -- the script was effectively dead. Corrected to /F so the format actually runs on field commit
  • ApplyLoadedFieldValidation emitted AFSpecial_FormatEx for the ArbitraryMask kind, a function that does not exist in the Adobe AF* set; only AFSpecial_KeystrokeEx(mask) is real, so the Format pass is dropped and enforcement happens at keystroke time as the spec intends
  • ApplyLoadedFieldValidation unconditionally appended AFRange_Validate(true,true,0,9999999) for numeric kinds, imposing a hidden 0..9999999 range the caller never asked for; range validation now only fires when the caller explicitly sets RangeMin or RangeMax in the options record
  • ApplyLoadedFieldValidation wrapped the ArbitraryMask in a JavaScript regex literal and emitted a hand-rolled validate script, but the mask is a literal format pattern ("AAA-9999"), not a regex; the validate pass is now removed and the keystroke mask carries the enforcement alone
  • ApplyLoadedFieldCalculation now prepends a Format+Keystroke number-formatting pair before the AFSimple_Calculate script so the aggregated result renders as a plain number, matching common PDF viewer behaviour (without it the Calculate value displays raw)

Version 2.416.0

Added

  • THPDFViewer now scrolls on hover-wheel without needing a click first: a thread-local WH_MOUSE hook (new HPDFMouseWheelHook unit, auto-installed from its initialization section) routes WM_MOUSEWHEEL to whichever THPDFViewer instance sits under the cursor, matching the behaviour of every native Windows PDF reader
  • THPDFViewer is now Per-Monitor DPI v2 aware: new HPDFPerMonitorDPI unit resolves user32!SetProcessDpiAwarenessContext (Win10 1703+, DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2) at runtime and falls back through shcore!SetProcessDpiAwareness (Win8.1+) and user32!SetProcessDPIAware (Vista+); the legacy HPDFEnablePerMonitorDPI is retained as an alias that forwards to the new layered helper
  • THPDFViewer.RenderAtPhysicalDPI published property (default True) makes the rendering DPI baseline track the monitor’s physical DPI via HPDFGetWindowDPI, so 100% zoom on a 144 DPI panel renders at native resolution; a new WMDpiChanged handler re-renders on cross-monitor moves; set False to preserve the historical 96-DPI logical baseline
  • Optional persistent disk tier for the rendered-page cache: setting THotPDF.RenderCacheFolder to a writable folder path persists every page rendered by RenderLoadedPageToBitmapCached as a PNG under <folder>\<SHA256-prefix-16>\<page>@<dpi>.png, so re-opening the same document later is instant; RenderCacheMaxDocuments (default 20) and RenderCacheMaxBytes (default 500 MB) bound the footprint with a true LRU eviction; the lookup order becomes in-memory → disk → rasterise, with disk hits back-filling the in-memory tier
  • THotPDF constructor now activates the highest available per-monitor DPI tier at first instantiation in runtime mode (skipped in csDesigning), so hosts that never call HPDFEnablePerMonitorDPI explicitly still get crisp rendering on high-DPI displays

Version 2.415.0

Adicionado

  • HPDFParsePDFDate Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados+HH’mm, -HH’mm, or ZEsta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados TDateTime; HPDFFormatPDFDate Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados D:YYYYMMDDHHmmSS+00’00
  • GetLoadedExtGStateInfo reads LW / LC / LJ / ca / CA Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados GetLoadedShadingCount / GetLoadedShadingName and GetLoadedPatternCount / GetLoadedPatternName enumerate the /Shading and /Pattern resource sub-dictionaries
  • ReplaceLoadedPage Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados SwitchLoadedPages exchanges two pages, ReverseLoadedPages Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados ExtractLoadedPagesToPDF Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados GetLoadedPageInheritedBox Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados
  • GetLoadedFileSpecInfo Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados GetLoadedEmbeddedFileMIME returns the /Subtype, GetLoadedEmbeddedFileChecksum returns the /Checksum digest, and THPDFNameTreeType + GetLoadedNameTreeRootCount Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados
  • HPDFEnablePerMonitorDPI dynamically enables per-monitor DPI awareness; THPDFBackgroundRenderer Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados GetLoadedPageContentStreamCount reports whether /Contents Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados GetLoadedXMPValue Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados GetLoadedDocumentReport Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados

Version 2.414.0

Adicionado

  • THPDFActionBuilder.URIWithIsMap Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados /IsMap true Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados URI Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados /URI string
  • AddLoadedCaretAnnotationEx Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados/Sy PEsta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados
  • GetLoadedAnnotationDA Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados /DA Esta versão adiciona o comportamento e o suporte de API descritos por meio dos símbolos listados

Version 2.413.2

Corrigido

  • Esta versão sincroniza o comportamento e o suporte de API descritos para os símbolos listados

Version 2.413.1

Fixed

  • Type1 and CFF font handling now preserves parser ownership across repeated stream checks and multi-font FontSets, returns stable glyph names and bounding boxes, keeps fractional font sizes and DPI scaling, and avoids composite-glyph and private-dictionary memory errors
  • The C++Builder AddDelPages, HugeFileBenchmark, and Security demos now compile for Win64, while page-operation and preflight examples release partially constructed objects safely

Version 2.413.0

Changed

  • The Delphi E-Invoice demo now validates required invoice fields, amount and VAT ranges, currency syntax, and embedded XML profile compatibility before writing output
  • The attach workflow now rejects identical source and output paths, reports the detected XML guideline, and combines container, PDF/A, XML profile, signature, visual consistency, Schematron, and external-report checks into one verdict

Fixed

  • E-Invoice generation and manual validation no longer report a successful result when an enabled validation layer finds issues
  • Loaded electronic-invoice summaries now read the invoice number, seller, and buyer from their correct XML aggregates, preventing false visible-text consistency findings

Version 2.412.0

Changed

  • All Delphi demos now resolve no-argument relative assets and outputs from their executable directory while preserving the caller working directory for command-line paths
  • Delphi command-line demos now provide stricter argument validation, failure exit codes, deterministic comparison inputs, and generated-document verification across page copying, text extraction, preflight, optimisation, inspection, and in-memory workflows

Fixed

  • Delphi demos no longer risk page-list overflow above 100 selected pages, create an extra blank page in the add-page workflow, close unrelated PDF viewer windows, or report failed preflight checks as successful
  • The E-Invoice attach workflow now rebuilds its current page correctly when a single-page source is converted, signed, and stripped of the temporary initial blank page

Version 2.411.0

Added

  • E-Invoice demo: new "Attach to existing PDF" mode converts an existing PDF to PDF/A-3, embeds a Factur-X/ZUGFeRD invoice XML as a document-level attachment, and optionally signs the result with a PFX certificate

Version 2.410.0

Added

  • Loaded AcroForm fields can now update flags, maximum length, text justification, per-widget rectangles, rotation, border colour, and visible or printable state, with widget enumeration for radio groups and other multi-widget fields

Fixed

  • Loaded field tooltip, border-width, and background-colour edits now mark the correct field or widget dictionaries dirty, apply visual properties to every widget, and invalidate only the affected page render cache

Version 2.409.0

Added

  • ActivateLoadedLinks turns bare HTTP, HTTPS, FTP, www., mailto:, and email text into positioned borderless URI annotations across a selected page range

Changed

  • Loaded link creation now persists reliably in incremental updates, while automatic activation snapshots existing links once per page, skips matching URI and rectangle pairs, and invalidates each changed page cache only once

Version 2.408.0

Added

  • Anotações carregadas agora podem atualizar seu título, nome exclusivo, data de modificação, retângulo normalizado e estilo de borda padrão sólida, tracejada, chanfrada, rebaixada ou sublinhada

Fixed

  • Edições de anotações carregadas agora marcam o objeto de anotação como sujo para salvamentos incrementais, enquanto edições visuais invalidam apenas as renderizações em cache da página afetada e mantêm outras páginas quentes

Version 2.407.0

Added

  • THPDFViewerModel armazena, corta, enumera, remove e limpa destaques persistentes de regiões de página sem modificar o PDF
  • THPDFViewer adiciona um modo de interação de destaque com arrastamento de seleção capturado, recuperação de coordenadas PDF cientes de rotação, cor configurável e um callback OnMarqueeSelect

Fixed

  • Transformações de coordenadas do visualizador agora mantêm o DPI de renderização real abaixo de 12 e acima de 2400, mantendo as seleções alinhadas nos limites de zoom de 5% e 6400%

Version 2.406.0

Added

  • THPDFViewerModel cria miniaturas de página cientes de rotação diretamente em um DPI selecionado para limites de pixels fornecidos pelo chamador, evitando bitmaps de página intermediários de tamanho completo
  • A pré-busca de páginas do modelo do visualizador aquece uma vizinhança centralizada de forma assíncrona, limitando as páginas agendadas à capacidade do cache de páginas renderizadas

Version 2.405.0

Added

  • THPDFPageLayout agora suporta layouts de espelhamento de capa PDF 1.5 plTwoPageLeft e plTwoPageRight com negociação automática de versão e fallback de versão estrita

Fixed

  • BeginDoc agora preserva o layout de página selecionado pelo chamador em vez de sempre substituí-lo por plOneColumn

Version 2.404.0

Added

  • THPDFViewerModel cria instantâneos cientes de rotação de regiões delimitadas de páginas PDF sem alocar um bitmap de página inteira

Version 2.403.0

Added

  • THPDFViewerModel converte pontos bidirecionalmente entre o espaço da página PDF e as coordenadas do visualizador cientes de rotação em um DPI selecionado pelo chamador

Version 2.402.0

Changed

  • Comandos de zoom do visualizador agora usam níveis padrão estáveis de 5% a 6400%, incluindo navegação reversível em torno de valores personalizados arbitrários

Version 2.401.0

Added

  • THPDFViewer adiciona zoom com Ctrl+roda, rolagem vertical com roda e rolagem horizontal com Shift+roda sem renderizar novamente para entradas apenas de rolagem

Version 2.400.0

Added

  • THPDFViewer adiciona navegação de página por teclado, rolagem, atalhos de zoom e seleção de modo Tamanho Real, Ajustar à Largura ou Ajustar à Página

Version 2.399.0

Added

  • THPDFViewer desenha ou imprime a visualização atual ciente de rotação com ajuste determinístico que preserva a proporção e posicionamento centralizado

Version 2.398.0

Added

  • THPDFViewerModel cria instantâneos EMF vetoriais de propriedade do chamador de qualquer página carregada ou da visualização atual, incluindo rotação de visualização não destrutiva de 90 graus

Version 2.397.0

Added

  • THPDFViewerModel salva instantâneos de páginas cientes de rotação como BMP, JPEG ou PNG em arquivos e streams de propriedade do chamador com qualidade JPEG configurável

Version 2.396.0

Added

  • THPDFViewer.ResetView restaura o Tamanho Real, limpa a rotação de visualização e destaques de pesquisa enquanto preserva a página atual, com ações correspondentes de redefinição e rotação e atualizações de renderização única em lote

Version 2.395.0

Added

  • THPDFViewer e THPDFViewerModel adicionam rotação de visualização no sentido horário, anti-horário e redefinível que também se aplica a instantâneos de página de propriedade do chamador sem alterar a página do PDF

Version 2.394.0

Added

  • THPDFViewerModel pode criar instantâneos de página de propriedade do chamador e salvar a página atual como BMP sem construir um controle Viewer

Version 2.393.0

Added

  • THPDFLoadedFormField agora expõe flags de campo, MaxLen, índice de página, limites de widget e estados comuns Required, NoExport, Multiline e Password
  • GetLoadedFormFieldMaxLength fornece acesso indexado direto aos limites de comprimento de campos de texto carregados

Version 2.392.0

Added

  • SetDocumentAttachmentMetadata renomeia anexos incorporados no nível do documento e atualiza suas descrições antes da serialização

Version 2.391.0

Added

  • ExtractLoadedPagesTextToStream transmite o texto selecionado das páginas carregadas como UTF-8 com separadores personalizados e saída BOM opcional
  • THPDFViewerModel adiciona teste de hit de campo de formulário e navegação determinística por teclado entre widgets de página
  • THPDFSignatureInfo.CertificateTimeValidity relata classificações de validade vinculadas ao certificado e de tempo assinado

Fixed

  • Campos de formulário carregados sem referências inversas /P de widget agora podem ser mapeados por meio de arrays de anotações de página

Version 2.390.0

Added

  • THPDFWatermarkTemplate.MakeCurve e THPDFPage.AddCurveWatermark adicionam curvas Bezier cúbicas a compostos carregados e criação de novos documentos

Fixed

  • Setters de metadados de documentos carregados agora marcam o dicionário Info como sujo para que salvamentos incrementais persistam alterações de título e autor

Version 2.389.0

Added

  • InsertLoadedBlankPage insere uma página em branco com dimensões definidas pelo chamador em uma posição exata do documento carregado
  • ExtractLoadedPagesText agrega texto de um intervalo de páginas baseado em um com um separador definido pelo chamador
  • GetLoadedFormFieldNameValuePairs e SetLoadedFormFieldNameValuePairs fornecem troca em lote de formulários nome=valor por meio de TStrings
  • CMapResourcePath suporta caminhos de implantação CMap padrão explícitos para serviços, plug-ins e layouts de aplicativos personalizados

Changed

  • O visualizador VCL agora desenha retângulos de acerto de pesquisa e atualiza quando o acerto ativo muda na página atual, enquanto controles de outline vinculados seguem as alterações do documento do visualizador
  • A renderização de página agora resolve caixas de mídia, rotação e recursos herdados e mapeia corretamente origens de página diferentes de zero em cada rotação em ângulo reto

Fixed

  • Conflitos de nomes de formulários são rejeitados antes do início da inserção ou anexação de páginas quando a renomeação por mesclagem está desativada, deixando a contagem de páginas de destino inalterada
  • A exclusão de páginas carregadas agora desvincula seus campos de widget AcroForm e remove ramificações vazias da árvore de campos em vez de deixar referências para páginas excluídas
  • Auxiliares de pesquisa em estilo de cursor e falhas de modelo de visualizador não limpam mais registros gerenciados de correspondência de texto com operações de memória bruta
  • A descoberta automática de CMap agora passa a raiz real da coleção para o decodificador de texto

Version 2.388.0

Added

  • O novo DeletePages remove intervalos de páginas baseados em um de PDFs carregados, remove duplicatas de seleções sobrepostas, relata o progresso e reconstrói uma árvore de páginas válida para salvamento
  • A inserção de páginas e a mesclagem por anexação agora aceitam THPDFMergeOptions para copiar outlines recursivos, registrar campos AcroForm importados e renomear de forma determinística nomes de campos conflitantes
  • O novo AddLoadedRadioButton cria um campo de rádio pai verdadeiro com widgets filhos, valores de exportação compartilhados e estados completos de aparência ligado/desligado
  • O novo SearchLoadedNext fornece pesquisa de próxima correspondência local de página sem estado, enquanto GetLoadedOutlineEntries retorna instantâneos de contorno recursivos completos com dados de pai e nível
  • Novas sobrecargas de assinatura do repositório de certificados do Windows selecionam um certificado de usuário atual ou de máquina local por hash SHA-1 e assinam por meio de chaves privadas CNG ou CSP legadas
  • A nova THPDFLoadedDocumentFacade expõe coleções tipadas de outlines, formulários, anotações, fontes e imagens com auxiliares de mutação e extração
  • Novas classes de visualização THPDFViewer, THPDFSearchPanel, THPDFOutlineViewer, modelo do visualizador e ações do visualizador adicionam controles reutilizáveis de exibição de página, navegação, zoom, pesquisa e favoritos VCL
  • Novas demos de impressão avançada, validação de assinatura, miniatura de página, exportação de imagem carregada e inspeção tipada de documentos carregados cobrem os fluxos de trabalho de ponta a ponta

Changed

  • A impressão de documentos carregados agora cria sequências de páginas físicas agrupadas ou não agrupadas determinísticas, suporta largura e comprimento de papel personalizados e relata códigos, nomes e tamanhos de papel da impressora
  • A enumeração de certificados do sistema agora inclui hashes SHA-1, disponibilidade de chave privada, datas de validade e metadados de uso de chave

Fixed

  • O crescimento dos resultados de pesquisa de texto carregado não copia mais registros de strings gerenciadas com movimentações de memória bruta, evitando falhas de ponteiro inválido no Win64
  • A exclusão de páginas carregadas não libera mais recursos de página compartilhados nem deixa contagens de árvore de páginas obsoletas que reaparecem após salvar e recarregar

Version 2.387.0

Added

  • O novo PrefetchLoadedPages renderiza um intervalo de páginas no cache de páginas renderizadas em uma thread de trabalho em segundo plano, para que um visualizador que folheia páginas obtenha acertos instantâneos de cache quente em vez de esperar por cada renderização
  • CancelLoadedPagePrefetch para o trabalhador e IsLoadedPagePrefetchActive relata seu estado; carregar outro documento ou destruir o componente cancela uma pré-busca ativa automaticamente
  • A renderização em cache e a thread de trabalho de pré-busca são serializadas internamente, de modo que RenderLoadedPageToBitmapCached permanece seguro para chamar enquanto uma pré-busca está em execução

Version 2.386.0

Added

  • O novo FlattenLoadedAnnotations desenha a aparência normal de cada anotação permanentemente no conteúdo da página em seu retângulo e remove a anotação, para que os elementos visuais de marcação e formulário sobrevivam em visualizadores que ocultam ou não podem editar anotações
  • A passagem segue dicionários de estado de aparência por meio de /AS, respeita a caixa delimitadora de aparência e a matriz ao ajustar o retângulo, e pode ser limitada a um subtipo de anotação ou a um intervalo de páginas

Version 2.385.0

Added

  • O novo RenderLoadedPageRegionToBitmap rasteriza apenas uma janela de espaço de usuário escolhida de uma página no DPI solicitado, de modo que páginas muito grandes possam ser renderizadas bloco por bloco em memória limitada em altas resoluções em vez de como um bitmap superdimensionado
  • Os blocos se alinham exatamente: o bitmap covers precisamente a região solicitada, de modo que os blocos adjacentes se remontam na página inteira sem emendas

Version 2.384.0

Added

  • O novo GenerateLoadedPageThumbnails renderiza as páginas selecionadas de um documento carregado e as incorpora como miniaturas de página JPEG, as pré-visualizações mostradas nos painéis de página do visualizador; o tamanho da borda mais longa e a qualidade JPEG são configuráveis, e as miniaturas existentes são substituídas no local
  • GetLoadedPageThumbnailSize lê de volta as dimensões de pixels de uma miniatura incorporada, e ClearLoadedPageThumbnails remove as miniaturas das páginas selecionadas

Version 2.383.0

Added

  • EnumLoadedPageElements agora relata elementos de caminho vetorial junto com trechos de texto e imagens: cada caminho desenhado gera um elemento com sua caixa delimitadora de espaço de usuário, o operador de pintura (traço, preenchimento ou ambos), as cores de preenchimento e traço em vigor e a contagem de segmentos
  • O rastreador de caminho segue o aninhamento de q/Q e as transformações cm, de modo que as formas desenhadas dentro de blocos dimensionados ou traduzidos relatam suas coordenadas de página reais

Version 2.382.0

Added

  • THPDFPrintOptions ganha os campos Duplex (simplex, borda longa, borda curta), PaperBin e PrintQuality que são enviados para o modo de dispositivo da impressora antes do início do trabalho; um valor explícito de Orientation agora também é aplicado
  • O novo HPDFGetInstalledPrinters lista as impressoras do sistema, e HPDFGetPrinterCapabilities relata o suporte a frente e verso e cores de uma impressora, contagem máxima de cópias, bandejas de papel (com os códigos aceitos por PaperBin) e resoluções suportadas

Version 2.381.0

Added

  • O novo CopyLoadedOutlinesFromDocument mescla a árvore de favoritos completa de outro documento carregado no atual, preservando títulos, aninhamento, ordem de irmãos e parâmetros de visualização de destino, enquanto remapeia cada página de destino por um deslocamento fornecido pelo chamador — o complemento das mesclagens de anexação de páginas para que os documentos combinados mantenham ambos os conjuntos de favoritos

Fixed

  • GetLoadedBookmarkPageIndex agora encontra favoritos além da primeira entrada de nível superior e dentro de níveis aninhados; a busca anterior só correspondia a favoritos posteriores por coincidência

Version 2.380.0

Added

  • O novo ImposeLoadedPagesNUp distribui qualquer intervalo de páginas em folhas de grade (qualquer disposição de colunas por linhas, tamanho de folha e calha configuráveis) na ordem de leitura, dimensionando cada página em sua célula com preservação opcional da proporção
  • O novo ImposeLoadedPagesBooklet produz folhas de livreto com grampeamento em sela: as páginas são preenchidas para um múltiplo de quatro e emparelhadas na ordem do livreto de modo que a impressão em frente e verso e a dobra resultem em um livreto ordenado corretamente
  • Ambas as chamadas de imposição envolvem as páginas de origem como Form XObjects e anexam as folhas finalizadas após as páginas existentes, retornando a contagem de folhas

Fixed

  • A renderização de página carregada agora segue uma referência indireta no sub-dicionário /XObject de recursos; páginas cujos recursos chegaram como objetos separados ignoravam suas imagens e formulários silenciosamente

Version 2.379.0

Added

  • SaveLoadedPagesAsImages ganha dois formatos TIFF: ifTIFF grava um arquivo TIFF de página única por página, e ifTIFFMulti agrega todo o intervalo de páginas em um único TIFF de várias páginas, unificando a saída TIFF com as opções existentes de BMP, JPEG, PNG, EMF e WMF
  • Ambos os caminhos TIFF respeitam o DPI de renderização solicitado nas tags de resolução da imagem e usam compressão Deflate sem perdas

Version 2.378.0

Added

  • A renderização de página carregada agora desenha modos de renderização de texto 1 (traço) e 2 (preenchimento seguido de traço) com contornos de glifos reais para fontes incorporadas e fallbacks de fontes do sistema, usando a cor do traço e a largura de linha atuais; as variantes de recorte 4 a 7 pintam como seus modos base

Fixed

  • Doze operadores de conteúdo de operando único (Tc, Tw, Tz, TL, Ts, Tr, w, J, j, M, ri, i) leram seu operando da posição incorreta do token e sempre aplicaram zero; o espaçamento de caracteres e palavras, escala horizontal, entrelinhamento, subida de texto, modo de renderização, largura de linha, limites de linha, junções e limite de meia-esquadria agora entram em vigor ao renderizar páginas carregadas

Version 2.377.0

Added

  • A renderização de página carregada agora respeita a visibilidade do conteúdo opcional (camada): o conteúdo dentro de seções marcadas com BDC /OC e XObjects que contêm uma entrada /OC é ocultado quando sua camada está desativada, seguindo a configuração padrão do documento (/BaseState, /ON, /OFF)
  • Dicionários de associação de conteúdo opcional avaliam sua política /P (AnyOn, AllOn, AnyOff, AllOff) sobre os grupos de membros
  • Novas APIs de camada em documentos carregados: GetLoadedOptionalContentGroupCount, GetLoadedOptionalContentGroupName, GetLoadedOptionalContentGroupVisible e SetLoadedOptionalContentGroupVisible para inspecionar e substituir estados de camada para renderização; as substituições invalidam o cache de página renderizada automaticamente

Version 2.376.1

Fixed

  • A renderização de bitmap de página carregada agora pinta XObjects de imagem: as buscas de recursos Do, gs e sh anteriormente ignoravam seus nomes de operandos prefixados com barra e pulavam o objeto silenciosamente
  • O operador cm e os valores /Matrix de Form XObject agora são concatenados na ordem correta, de modo que sequências de posicionamento de translação e escala (o padrão de posicionamento de imagem) posicionem o conteúdo na posição pretendida da página

Version 2.376.0

Added

  • Novas APIs RegisterExponentialFunction, RegisterStitchingFunction e RegisterPostScriptFunction criam objetos de função independentes do Tipo 2, Tipo 3 e Tipo 4 para uso onde quer que uma referência de função seja aceita (sombreamentos, funções de ponto e transferência de meio-tom, transformações de tonalidade)
  • RegisterPostScriptFunction valida o programa da calculadora no momento do registro por meio de avaliação de teste, de modo que programas malformados sejam rejeitados imediatamente em vez de degradarem silenciosamente nos visualizadores
  • A nova RegisterSeparationFunc cria um espaço de cores Separation com um objeto de função de transformação de tonalidade fornecido pelo chamador

Fixed

  • A renderização de transformações de tonalidade do Tipo 2 (exponencial) com saídas de um ou três componentes não pinta mais em preto; anteriormente, apenas saídas de quatro componentes (CMYK) eram decodificadas corretamente
  • A renderização de transformações de tonalidade do Tipo 3 (costura/stitching) agora suporta qualquer número de subfunções, aplica o remapeamento de /Encode e aceita arrays /Bounds de entrada única

Version 2.375.0

Added

  • A renderização de página agora avalia funções de transformação de tonalidade do Tipo 4 (calculadora PostScript), para que cores Separation e DeviceN e sombreamentos de gradiente orientados por programas de calculadora renderizem suas cores reais em vez de um espaço reservado cinza
  • O avaliador da calculadora cobre o conjunto completo de operadores ISO 32000-1 7.10.5: aritmética, comparação, booleanos e bit a bit, manipulação de pilha e condicionais if/ifelse

Fixed

  • A seleção de espaço de cores nomeado (operadores cs/CS) na renderização de página carregada agora resolve os nomes de recursos corretamente; anteriormente, a busca falhava e o conteúdo voltava ao espaço de cores padrão
  • A renderização de página carregada agora segue referências indiretas a espaços de cores com valores de array, como definições /Separation e /DeviceN armazenadas como objetos independentes

Version 2.374.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva os dados de aparência padrão da anotação de cursor (caret) por meio do filho <defaultappearance> e da entrada DA da anotação PDF

Version 2.373.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva a geometria de borda (fringe) da anotação de cursor (caret) por meio do atributo fringe e da entrada RD da anotação PDF

Version 2.372.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva a rotação da anotação de carimbo (rubber stamp) por meio do atributo rotation e da entrada Rotate da anotação PDF

Version 2.371.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva as relações de resposta da anotação de texto por meio de inreplyto, replyType e das entradas IRT e RT da anotação PDF

Version 2.370.0

Added

  • Campos numéricos, de data e hora e de senha XFA com rolagem horizontal desativada agora são nivelados para widgets de texto AcroForm com a flag do PDF para não rolar

Version 2.369.0

Added

  • Campos de texto XFA com políticas de rolagem desativadas agora são nivelados para widgets de texto AcroForm com a flag do PDF para não rolar

Version 2.368.0

Added

  • Campos de texto XFA com multiLine="1" agora são nivelados para widgets de texto AcroForm com a flag do PDF para multilinhas

Version 2.367.0

Added

  • Restrições de acesso de subformulários XFA agora são herdadas nos widgets filhos para que os campos AcroForm gerados permaneçam somente leitura quando um ancestral for readOnly, protected, ou nonInteractive

Version 2.366.0

Added

  • O nivelamento da lista de escolha XFA agora mapeia commitOn="select" para a flag AcroForm de commit na alteração de seleção para campos de escolha gerados

Version 2.365.0

Added

  • O nivelamento da lista de escolha XFA agora mapeia listas de open="always" para caixas de listagem AcroForm de seleção única em vez de caixas de combinação suspensas

Version 2.364.0

Added

  • O nivelamento da lista de escolha XFA agora mapeia listas combinadas de textEntry="1" para caixas de combinação AcroForm editáveis enquanto preserva valores digitados fora da lista de opções

Version 2.363.0

Added

  • O nivelamento da lista de escolha XFA agora prefere valores de <items save="1"> quando um campo possui listas de opções separadas para exibição e valor salvo

Version 2.362.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva os atributos FreeText de justification e tail por meio das entradas Q e IT da anotação PDF
  • Os padrões de documento JBIG2 agora correspondem às configurações amigáveis de digitalização documentadas para nível de perda, limpeza isolada de pixels pretos e tamanho do ponto preto

Version 2.361.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva atributos padrão de linha de chamada e legenda, incluindo leaderLength, leaderExtended, caption, leader-offset, caption-style, valores de deslocamento de legenda e a grafia leaderExtend usada no lado da importação por arquivos XFDF compatíveis

Version 2.360.0

Added

  • O nivelamento XFA agora suprime a saída de campos e desenhos estáticos ocultados por presence="hidden", presence="invisible" ou presence="inactive", incluindo descendentes de contêineres ocultados

Version 2.359.0

Added

  • O nivelamento XFA agora mapeia restrições de nível de campo de access="readOnly", access="protected" e access="nonInteractive" para a flag de somente leitura do AcroForm gerado

Version 2.358.0

Added

  • O nivelamento XFA agora preserva a semântica de <choiceList open="multiSelect"> definindo a flag PDF de seleção múltipla na caixa de listagem AcroForm gerada

Version 2.357.0

Added

  • O nivelamento XFA agora mapeia campos <ui><passwordEdit> para campos de texto AcroForm com a flag PDF de senha, preservando valores vinculados enquanto permite que os leitores tratem o campo como entrada de estilo de senha

Version 2.356.0

Added

  • O nivelamento XFA agora respeita vinculações explícitas de campos <bind match="none">, de modo que os campos marcados como não vinculados permaneçam em branco em vez de receberem valores de mesmo nome do formulário XFA ou pacotes de conjuntos de dados

Version 2.355.0

Added

  • O nivelamento XFA agora respeita vinculações explícitas simples de campos <bind match="dataRef" ref="...">, como $record.customer.legalName, de modo que ApplyXFAAsAcroForm e FlattenLoadedXFA preservem os valores armazenados sob um nome de nó de dados diferente antes da correspondência automática de mesmo nome

Version 2.354.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva filhos de anotação de link BorderStyleAlt por meio do array Border da anotação PDF, incluindo raios de canto, largura e valores de padrão de traço

Version 2.353.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva atributos interior-color padrão para anotações de linha, quadrado, círculo, polígono, polilinha e redação por meio do array de cores IC da anotação PDF

Version 2.352.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva o estilo de borda de anotação padrão e atributos de efeito de borda nublada, incluindo width, dashes, style e intensity

Version 2.351.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva o rich text da anotação por meio de <contents-richtext> e importa a geometria do filho popup e o estado aberto nos dicionários Popup de anotação

Version 2.350.0

Fixed

  • A importação/exportação de anotações XFDF agora preserva atributos de anotação padrão adicionais: valores de estado aberto e de revisão de texto, estilos de extremidade de linha, coords de link e redação, estilo padrão FreeText, aparência padrão e rotação, e geometria de borda (fringe) quadrada ou circular

Version 2.349.0

Fixed

  • A importação/exportação de anotações XFDF agora segue as estruturas ISO 19444-1 para linhas, polígonos, polilinhas e anotações de tinta: as exportações de linhas incluem pares completos de coordenadas start / end, os dados de polígonos e polilinhas usam elementos filhos <vertices>, os dados de tinta usam <inklist><gesture>, pares de coordenadas separados por ponto e vírgula são importados corretamente e subtipos de anotações não suportados não inflam mais a contagem exportada

Version 2.348.0

Added

  • A propriedade LoadedPageCount, DuplicateLoadedPage, AddLoadedBlankPage, SetLoadedPageRotationValue e GetLoadedPageBoxRect completam a API de operações de página de documentos carregados — duplique páginas, insira separadores em branco, defina a rotação e leia qualquer uma das cinco caixas de página em uma única chamada
  • GetLoadedEncryptionMethod retorna o nome da cifra (RC4-40 / RC4-128 / AES-128 / AES-256), GetLoadedFileStructureInfo agrega informações de linearização / streams de objetos / tipo de xref em uma única chamada, LoadedSourceFileSize é uma propriedade e SetLoadedPDFVersion updates a versão
  • StampLoadedPageImage e StampLoadedPageImageFromFile incorporam um XObject de imagem JPEG (logotipo / imagem de assinatura / código QR) em uma página carregada em um retângulo especificado, InsertLoadedText desenha um trecho de texto de linha única e GetLoadedPageContentLength retorna a contagem de bytes decodificados
  • THPDFPrintOptions ganha IgnoreHardMargin (desloca as margens físicas da impressora para que o conteúdo não seja cortado) e AutoRotate (páginas em paisagem imprimem em paisagem automaticamente)
  • SaveLoadedPagesAsImages ganha BMPPixelFormat / BMPMonochrome (exportação mono / 8 bits) e JPEGScale (decodificação JPEG subamostrada de 1 / 2 / 4 / 8 para miniaturas rápidas)
  • CompressLoadedDocument compacta com zlib cada stream não compactado no grafo de objetos carregados e grava /Filter /FlateDecode, reduzindo o tamanho de saída

Fixed

  • StampLoadedPageText e StampLoadedPageImage agora descompactam de forma transparente streams de conteúdo FlateDecode antes de anexar operadores — anteriormente, carimbar em um /Contents compactado corrompia silenciosamente a carga útil do zlib e o texto/imagem anexado desaparecia

Version 2.347.0

Added

  • AddLoadedOutline cria um novo favorito em um PDF carregado em qualquer nível de aninhamento (ParentIndex = -1 para nível superior), com um destino /Dest [page /XYZ x y zoom] — o recurso de documento carregado mais solicitado, preenchendo a lacuna de que o HotPDF podia ler/modificar/excluir favoritos, mas nunca criá-los
  • SetLoadedOutlineDestination e SetLoadedOutlineURI reescrevem a página de destino de um favorito existente ou a alternam para uma ação de URI
  • ResolveLoadedNamedDestination transforma uma string de destino nomeado em um índice de página baseado em zero, e AddLoadedNamedDestination registra uma nova âncora na árvore /Names /Dests do documento carregado
  • GetLoadedBookmarkPageIndex é uma busca de conveniência: passe o título de um favorito e receba de volta a página para a qual ele aponta

Version 2.346.0

Fixed

  • A qualidade da escala de imagem agora respeita /Interpolate: o modo de esticamento HALFTONE é usado por padrão (redução de escala suave) e COLORONCOLOR quando a imagem define explicitamente /Interpolate false, de modo que pequenas imagens rasterizadas mantenham suas bordas nítidas conforme planejado pelo autor, em vez de sempre ficarem borradas

Version 2.345.0

Fixed

  • Ajustes de kerning do array TJ não são mais descartados: os elementos numéricos entre trechos de strings avançam a matriz de texto por -valor × FontSize / 1000, de modo que títulos e letras de logotipos com espaçamento estreito vindos do Word / Illustrator posicionem os glifos nos deslocamentos pretendidos
  • Tw (espaçamento de palavras) agora também é acionado no espaço ideográfico CID (U+3000, código $3000), de modo que o texto justificado em japonês / chinês receba seu espaçamento de palavras em vez de apenas o código ASCII 32
  • A detecção de peso de fonte / itálico agora consulta /FontDescriptor /Flags (bit 18 ForceBold) e /ItalicAngle além do nome /BaseFont, de modo que fontes prefixadas por subconjunto cujo nome não carrega o sufixo -Bold ainda sejam renderizadas com o peso correto

Version 2.344.0

Added

  • GetLoadedTrapped lê a chave /Trapped do dicionário Info (True/False/Unknown), onde anteriormente era somente gravação — os fluxos de trabalho de preflight PDF/X agora podem fazer o ciclo completo do estado do trap
  • GetLoadedDocumentMetadataXML retorna os bytes brutos do stream de metadados XMP para que documentos PDF/A cujo dicionário Info está ausente ainda possam expor dc:title / dc:creator / xmp:CreateDate
  • GetLoadedCollectionInfo lê o nome do /Collection de um PDF Portfolio (a árvore de nomes EmbeddedFiles ainda carrega a lista de arquivos)
  • GetLoadedOutlineChild desce um nível na árvore de favoritos, retornando o /First filho de uma entrada de favoritos de nível superior, de modo que favoritos de capítulos / subcapítulos aninhados não fiquem mais invisíveis
  • RotateLoadedPages rotaciona cada página em um intervalo por um ângulo fornecido (acumulando no /Rotate existente), a contraparte em lote da rotação por página
  • SetLoadedPageBoxForRange define uma caixa de página (Media/Crop/Bleed/Trim/Art) para cada página em um intervalo em uma única chamada
  • GetLoadedViewerPreferences agora também lê HideWindowUI e CenterWindow, correspondendo às seis chaves que o gravador emite (anteriormente apenas quatro retornavam)

Version 2.343.0

Fixed

  • O idioma de corte W n / W* n agora aplica o corte: o operador n constrói o caminho pendente e chama SelectClipPath em vez de descartar tanto o caminho quanto o corte pendente, de modo que os cortes de retângulo / contêiner gravados como re ... W n não vazem mais seus conteúdos além do limite
  • SetMiterLimit agora é enviado ao GDI antes de construir a caneta de traço, para que junções nítidas respeitem o limite de meia-esquadria do PDF (padrão 4) em vez do padrão 10 do GDI — eliminando os picos longos em junções de ângulos agudos
  • Glifos do Tipo 3 declarados com d0 (que permite cores) agora limpam explicitamente a flag de supressão de cor, para que um glifo d1 anterior não sangre mais sua supressão de cor em um glifo d0

Added

  • Os operadores ri (intenção de renderização) e i (nivelamento) agora são consumidos e armazenados no estado gráfico (campos RenderingIntent / Flatness), onde anteriormente eram ignorados silenciosamente

Version 2.342.0

Added

  • O operador do modo de renderização de texto Tr agora é consumido; o modo 3 (invisível) ignora a pintura do trecho de texto inteiramente, para que a camada de texto oculta de OCR / fundo do formulário não seja mais pintada como glifos de lixo sobrepostos — o caso mais comum de Tr em PDFs do mundo real; os modos 1 / 2 (traço) atualmente voltam a preencher enquanto aguardam o suporte a contornos por glifo
  • Os operadores de conteúdo marcado BMC / BDC / EMC e as variantes de propriedade DP / MP agora mantêm um contador de profundidade no renderizador, o pré-requisito para uma avaliação de visibilidade OCG / OCMD em uma etapa posterior; os operadores de compatibilidade BX / EX mantêm seu próprio contador para que o renderizador saiba que está dentro de um bloco de compatibilidade

Version 2.341.0

Fixed

  • Os operadores Bezier abreviados v e y agora são tratados pelo renderizador de páginas, onde anteriormente eram silenciosamente ignorados — retângulos arredondados, círculos e as curvas produzidas pelo Illustrator / PowerPoint / InDesign são renderizados corretamente em vez de serem truncados ou descartados
  • DrawTextRun agora respeita Tz (escala horizontal de texto), Tw (espaçamento de palavras, aplicado ao glifo de espaço) e Ts (subida de texto), de modo que as exportações justificadas do Word posicionem os glifos na largura correta, cabeçalhos que são esticados/espremidos horizontalmente mantenham seu comprimento e o texto em sobrescrito/subscrito se eleve da linha de base — anteriormente esses três valores de estado de texto eram armazenados, mas nunca consumidos

Version 2.340.0

Added

  • SearchLoadedPageTextWholeWord filtra as correspondências de substrings produzidas por SearchLoadedPageText limitando-as àquelas que se situam nos limites das palavras (o glifo antes do início da correspondência e após o fim da correspondência não deve ser um caractere de palavra), fornecendo correspondência de palavras inteiras sem preencher a string de pesquisa com um espaço final
  • GetLoadedSearchHitRect colapsa o intervalo de glifos de uma correspondência em um único retângulo delimitador (Left/Top/Right/Bottom do espaço do usuário, preenchido por uma fração do tamanho da fonte), para que um visualizador possa desenhar uma caixa de destaque por acerto em vez de percorrer a array de glifos

Version 2.339.0

Added

  • ExtractLoadedPageTextColumns reconstrói texto de várias colunas: os glifos são agrupados em linhas de base por uma tolerância Y, cada linha é classificada por X e uma linha é dividida em colunas separadas (separadas por tabulação) onde quer que o espaço entre glifos consecutivos exceda um múltiplo configurável do avanço médio do glifo — a contraparte ciente de coluna para ExtractLoadedPageTextLayout que anteriormente declarava a detecção de coluna fora do escopo
  • THPDFPageElement agora carrega uma BaselineRole (brNormal / brSuperscript / brSubscript) preenchida por EnumLoadedPageElements: uma execução cujo tamanho de fonte é marcadamente menor que a média da página e cuja origem Y fica acima ou abaixo da linha de base dominante é sinalizada

Version 2.338.0

Fixed

  • Os XObjects de imagem agora são posicionados transformando o quadrado unitário por meio da CTM atual, em vez de serem esticados por todo o bitmap da página — o StretchDraw(Rect(0,0,W,H)) anterior posicionava incorretamente cada imagem na página; as imagens agora aparecem no retângulo que o stream de conteúdo realmente especifica

Added

  • As imagens de estêncil /ImageMask são detectadas no lado da renderização e pintadas com a cor de preenchimento atual (PDF 8.9.6.1), onde o renderizador anteriormente as desenhava como um bitmap simples em tons de cinza

Version 2.337.0

Added

  • Estilo de traço no lado da renderização: o renderizador de página agora respeita os operadores J (LineCap: butt/round/square), j (LineJoin: miter/round/bevel), M (MiterLimit) e d (array LineDash + fase) construindo uma caneta geométrica via ExtCreatePen em vez do antigo CreatePen(PS_SOLID, ...) fixo, para que junções arredondadas, bordas tracejadas e extremidades quadradas sejam renderizadas corretamente
  • Operador gs (ExtGState) no lado da renderização: o dicionário ExtGState nomeado em /Resources/ExtGState agora é consumido para LW / LC / LJ / ML / ca / CA e aplicado ao estado gráfico, onde o renderizador anteriormente descartava o operador inteiramente
  • Estado gráfico estendido com os campos LineCap / LineJoin / MiterLimit / LineDash / DashPhase / FillOpacity / StrokeOpacity, todos com valores iniciais padrão do PDF

Fixed

  • O corte (W / W*) agora define o modo de preenchimento de polígono do GDI (ALTERNATE vs WINDING) antes de SelectClipPath, de modo que as interseções de corte even-odd e nonzero-winding não sejam mais idênticas

Version 2.336.0

Security

  • O analisador de espaço de cores /Indexed no lado da renderização agora limita HiVal ao intervalo [0..255] exigido pela especificação, fechando um vetor de leitura além do buffer onde um HiVal malformado permitia que nComps × indexHigh estourasse uma contagem de bytes de 32 bits e lesse além da tabela de busca

Added

  • AttachLoadedAnnotationMeasure grava um dicionário /Measure (PDF 1.7 §12.5.6.13) em uma anotação de Linha ou Polígono, contendo o array /NumberFormat (rótulo de unidade, estilo decimal/fração/arredondamento, precisão), a proporção /Scale e o fator de isotropia /CYX — para que um visualizador possa computar a distância ou área do mundo real que a forma abrange

Version 2.335.0

Added

  • Operador sh (shading/sombreamento) no lado da renderização: sombreamentos axiais (Tipo 2) e radiais (Tipo 3) agora são pintados em vez de serem silenciosamente descartados, de modo que os PDFs cujos fundos dependem de gradientes no estilo Word/Excel renderizem sua mistura de cores; o sombreamento is discretizado em faixas ao longo de seu eixo e cada faixa é preenchida com a cor que a função do sombreamento avalia naquele ponto

Version 2.334.0

Added

  • O avaliador de objeto de função no lado da renderização HPDFEvalTintTransform agora resolve o Tipo 2 Exponencial (C0 + xN·(C1-C0) com limitação de Domain/Range), Tipo 0 Amostrado (8/16/32 bits, mapeamento Encode, amostra mais próxima) e Tipo 3 Costura/Stitching (recursão de subfunção selecionada por limites/Bounds) — para que as transformações de tonalidade Separation / DeviceN e funções de sombreamento avaliem para cores de espaço alternativo reais em vez do fallback cinza do v2.333.0; calculadoras PostScript do Tipo 4 degradam graciosamente
  • O renderizador de páginas agora vincula o resolvedor de referência indireta da unidade de espaço de cores e o leitor de stream decodificado ao seu acesso ao documento no momento da construção, para que os objetos de stream de transformação de tonalidade possam ser decodificados pelo mesmo caminho que os XObjects de imagem

Version 2.333.0

Added

  • Espaços de cores baseados em CIE no lado da renderização: CalGray, CalRGB (gama + matriz 3×3) e Lab (Lab→XYZ→sRGB com o cubo de ponto de quebra 6/29) agora resolvem para cores reais em vez de degradar para preto; a matriz sRGB adaptada por Bradford é armazenada em cache por ponto branco para que o trabalho por pixel permaneça uma única multiplicação de 3×3
  • O espaço de cores ICCBased no lado da renderização é resolvido por meio de seu /Alternate (ou uma suposição de DeviceRGB/Gray/CMYK baseada em N quando Alternate está ausente), para que páginas que carregam um perfil ICC sejam exibidas corretamente sem uma dependência do lcms
  • Espaços de cores especiais (spot-colour) Separation e DeviceN no lado da renderização: o espaço alternativo, a referência da função de transformação de tonalidade e a contagem de componentes são analisados; a transformação de tonalidade é vinculada por meio de um avaliador plugável para que as páginas de cores especiais sejam distinguíveis de "cor não definida" (a avaliação completa da tonalidade ocorre com o mecanismo de função)
  • Operadores de cores genéricos cs / CS / sc / SC / scn / SCN agora são tratados pelo renderizador de páginas, o pré-requisito para que cada espaço de cores não Device tenha efeito em uma página carregada
  • Resolução de cores unificada via HPDFResolveColor com os registros estendidos THPDFColorSpaceFamily e THPDFCIEParams, substituindo a lógica ad-hoc por espaço

Version 2.332.0

Added

  • RenderSignatureFieldAppearance pinta um modelo de aparência de campo de assinatura predefinido — borda, preenchimento leve e até quatro linhas de texto rotuladas ("Assinado digitalmente por <Nome>", "Motivo: ", "Local: ", "Data: ") — selecionado via um conjunto de THPDFSignatureDisplayOptions como um wrapper de conveniência em torno de AttachSignatureFieldAppearance
  • EnumerateSystemCertificates percorre um repositório de certificados do Windows (comum MY / ROOT / CA) via carregamento dinâmico da Crypt32.dll e retorna os nomes de exibição do assunto / emissor mais o DER bruto para cada certificado, o bloco de construção para uma UI de assinatura do tipo "escolha um certificado / chave USB"

Security

  • O algoritmo de hash de assinatura é SHA-256 por padrão com o Valor de Semente PAdES (PAdES Seed Value) DigestMethods já aceitando SHA-256 / SHA-384 / SHA-512, de modo que nenhum caminho de assinatura SHA-1 existe

Version 2.331.0

Added

  • RenderLoadedPageToDC desenha uma página diretamente em um contexto de dispositivo fornecido pelo chamador (canvas da impressora, superfície fora da tela, TCanvas personalizado), removendo a necessidade de bitmap intermediário para fluxos de trabalho de impressão e alto DPI
  • RenderLoadedPageToClipboard coloca uma página na área de transferência como um bitmap de 24 bits ou como um metafile aprimorado (texto vetorial), para que colar no Word / colar no editor de imagens simplesmente funcione
  • PrintLoadedDocument com um registro THPDFPrintOptions conduz o TPrinter da VCL por um intervalo de páginas, DPI, cópias, agrupamento, dimensionamento FitPage e renderização por página — a biblioteca de documentos agora vem com seu próprio caminho de impressão em vez de exigir que cada chamador configure um

Version 2.330.0

Added

  • GetLoadedPageLabel lê de volta o intervalo /PageLabels /Nums que cobre um determinado índice de página, retornando o código de estilo, prefixo e número inicial — a contraparte de leitura de SetLoadedPageLabel, para que rótulos que o chamador não criou possam agora ser inspecionados e salvos/reutilizados
  • StitchLoadedPageSideBySideEx realiza a mesclagem lado a lado de 2 páginas por folha (2-up) com uma calha horizontal configurável e fator de escala da página de origem, onde a função antiga StitchLoadedPageSideBySide era fixa para meia largura sem espaçamento

Version 2.329.0

Added

  • AddLoadedRubberStampAnnotation com um enum THPDFRubberStampIcon cobrindo todos os 14 nomes de carimbos padrão (Approved, AsIs, Confidential, Departmental, Draft, Experimental, Expired, Final, ForComment, ForPublicRelease, NotApproved, NotForPublicRelease, Sold, TopSecret) para que os visualizadores renderizem os bitmaps familiares sem um stream de aparência personalizado
  • SetLoadedAnnotationCloudyBorder transforma uma anotação de Quadrado / Círculo / Polígono em uma borda nublada escrevendo /BE /S /C /I mais o array de cores internas /IC
  • SetLoadedLineAnnotationCaps define os estilos de extremidade de linha /LE (ponta de seta) para anotações de Linha / Polilinha a partir do novo enum THPDFLineEndStyle (None / OpenArrow / ClosedArrow / Butt / ROpenArrow / RClosedArrow / Slash / Diamond)

Version 2.328.0

Added

  • EnsureLoadedFieldAppearanceStream gera um Form XObject /AP /N para um campo AcroForm existente a partir de seu /DA + /V + /Rect, para que visualizadores que ignoram /NeedAppearances ainda renderizem o valor do campo sem precisar passar pelo Acrobat
  • ApplyLoadedFieldValidation anexa um trio de scripts Format / Keystroke / Validate a um campo usando os auxiliares do Acrobat AF*, cobrindo tipos de entrada de Número, Porcentagem, Data, Hora, Moeda, ZipCode, SSN, Telefone e ArbitraryMask — o chamador não precisa mais escrever código JavaScript manual para AFNumber_Format / AFDate_FormatEx / AFRange_Validate
  • ApplyLoadedFieldCalculation anexa um script AFSimple_Calculate para que um campo agregue os valores de um conjunto de campos de origem nomeados por meio de Soma, Média, Produto, Mínimo ou Máximo

Version 2.327.0

Added

  • Busca e substituição visual SearchAndRedactReplaceLoaded: para cada ocorrência pesquisada, mascara o retângulo correspondente com uma cor escolhida (ou ignora a máscara com HPDF_NO_MASK) e carimba o texto de substituição por cima, complementando o ReplaceLoadedPageText a nível de byte quando a fonte original carece de uma tabela reversa de códigos de caracteres ou a substituição precisa de uma fonte diferente
  • A extração de texto de região GetLoadedPageTextInRegion concatena cada glifo cuja origem cai dentro de um retângulo no espaço do usuário, com quebras de linha entre as linhas de base — o bloco de construção para fluxos de UI de "copiar texto desta caixa"
  • SearchLoadedFirst no estilo cursor retorna a primeira correspondência como um único THPDFTextMatch, para que os chamadores possam percorrer as ocorrências sem gerenciar uma array inteira de correspondências

Version 2.326.0

Added

  • Propriedade MeasurementUnit em nível de documento (muPoints / muPixels / muInches / muMM / muCentimeters / muTwips) para que cada coordenada de autoria de alto nível seja convertida em pontos PDF por meio de ToPDFUnit / FromPDFUnit
  • Substituição de marcadores de posição no texto de marca d'água: <%PageNo%>, <%TotPage%>, <%FileName%>, <%ShortDate%>, <%LongDate%>, <%ShortTime%>, <%LongTime%> são resolvidos por página ao carimbar, de modo que marcas d'água "Página X de Y" e com data sejam feitas em uma única chamada
  • Método de página AddTextWatermarkEx que combina substituição de marcadores de posição, coordenadas cientes da unidade e um registro unificado THPDFWatermarkBase (ângulo, opacidade, presets de posição)
  • Auxiliares de página de marca d'água de forma AddRectangleWatermark, AddEllipseWatermark, AddLineWatermark e AddPolygonWatermark, cada um envolvendo as primitivas de caminho em um par de estados gráficos q/Q com alfa de preenchimento/traço registrado
  • Registro THPDFWatermarkTemplate unificado com fábricas MakeText / MakeRectangle / MakeEllipse / MakeLine / MakePolygon mais um tipo composto THPDFWatermarkTemplateArray
  • Aplicação de marca d'água em documentos carregados: StampLoadedPageText e StampLoadedPagesText anexam um trecho de texto transparente e rotacionado às páginas existentes, respeitando a MeasurementUnit e o mesmo conjunto de marcadores de posição; StampLoadedPagesComposite aplica um array de templates completo (texto + formas) a um intervalo de páginas
  • Controle de Z-order em carimbos de documentos carregados: Underlay = True insere o stream de marca d'água antes do /Contents existente por meio da forma de array, de modo que a marca d'água seja renderizada atrás do conteúdo da página
  • EnumLoadedPageElements retorna trechos de texto (glifos agregados por linha de base + fonte) e posicionamentos de XObject de imagem como registros THPDFPageElement com caixas delimitadoras
  • Exportação multiformato de SaveLoadedPagesAsImages: BMP / JPEG / PNG rasterizado mais EMF / WMF vetorial, um arquivo por página, com DPI configurável, prefixo de nome de arquivo e qualidade JPEG
  • Renderização vetorial de GetLoadedPageMetafile de uma página para um TMetafile por meio do novo caminho THPDFPageRenderer.ExecuteToDC, mantendo caminhos de texto e vetoriais escaláveis para impressão, área de transferência e fluxos de trabalho de mesclagem

Version 2.325.3

Fixed

  • A agregação de relatórios de preflight em lote não estoura mais a contagem total de bytes quando um único arquivo de entrada tem mais de 2 GB

Version 2.325.2

Fixed

  • Salvar um documento com mais de 2 GB com streams de objetos ativados (UseObjectStreams) não grava mais um stream de referência cruzada corrompido; os deslocamentos de objetos e a posição do stream de referência cruzada, anteriormente limitados a um inteiro de 32 bits, agora são tratados como valores de 64 bits durante toda a gravação

Version 2.325.1

Fixed

  • Quatro varreduras apenas para recuperação usadas quando um PDF corrompido não pode ser analisado normalmente — descompactação de stream de objetos, descoberta de stream de objetos e duas passagens de reparo de referência — não leem mais um arquivo com mais de 2 GB em um buffer truncado; cada uma agora ignora esse fallback em tal arquivo em vez de varrer dados corrompidos

Version 2.325.0

Added

  • A importação de EMF/WMF agora renderiza gradientes de retângulo EMR_GRADIENTFILL (GRADIENT_FILL_RECT_H / GRADIENT_FILL_RECT_V) como padrões de sombreamento axial PDF Tipo 2, mapeando cada par de cores TRIVERTEX para uma chamada RegisterAxialGradient e preenchendo o retângulo com o padrão resultante; anteriormente este registro era um no-op documentado, agora os retângulos de gradiente do Word/Excel/PowerPoint em EMFs são renderizados com the mistura correta de cores da esquerda para a direita ou de cima para baixo

Version 2.324.0

Added

  • A importação de EMF/WMF agora analisa comentários EMR_GDICOMMENT, distinguindo marcadores de passthrough do Adobe PDF (0x416F4650 = "AoFP", MS-EMF §2.3.3) de outros tipos de comentários; quando o marcador Adobe está presente, a carga útil do comentário é verificada em busca da palavra-chave pdfmark e exibida por meio de log de depuração para que os usuários identifiquem quais produtores de EMF emitem fragmentos pdfmark do PostScript; outros tipos de comentários permanecem como no-ops (tanto o HotPDF quanto o llPDFLib anteriormente possuíam apenas um stub vazio para este registro)

Version 2.323.0

Added

  • A importação de EMF/WMF agora reconhece explicitamente EMR_GRADIENTFILL como um no-op documentado (padrões de sombreamento PDF Tipo 2/3 poderiam expressar preenchimentos de gradiente, mas a renderização do visualizador é inconsistente e a interpolação Gouraud por pixel do GDI não mapeia de forma limpa); anteriormente este registro era descartado silenciosamente sem uma entrada na tabela de casos

Version 2.322.0

Changed

  • A assinatura baseada em PFX agora direciona entradas de 64 MB ou maiores por meio de um assinante fragmentado em fluxo (HPDFCMSSignPDFStreamChunked) que procura os marcadores de posição /ByteRange + /Contents em leituras rotativas de 256 KB, processa as duas janelas de intervalo de bytes via HPDFCMSSHA256StreamRanges e depois copia o stream de entrada para o stream de saída enquanto corrige os bytes do marcador em tempo de execução, para que o pico de memória permaneça limitado pelo buffer de 256 KB em vez de todo o tamanho del arquivo; entradas menores mantêm o caminho rápido em memória de Pos() + Move() inalterado

Version 2.321.0

Added

  • Dicionários de uso de grupo de conteúdo opcional: SetOptionalContentGroupUsage anexa uma entrada /Usage a um OCG registrado (PDF 1.7 §8.11.4.4 Tabela 100) para que os visualizadores mostrem/ocultem automaticamente camadas por contexto; as categorias View / Print / Export gravam <Category>State = ON/OFF; Zoom grava um par real Min; Language / Creator gravam valores de string
  • Cópia de subárvore de contornos (outlines): THPDFDocOutlineObject.CopySubtree clona profundamente toda a subárvore filha de um nó sob um novo pai, propagando Title / Color / Bold / Italic / Opened enquanto cria novos números de objetos e novos destinos
  • Auxiliares de topologia de outlines: IsDescendant (predicado seguro contra loops usado por MoveTo) e MoveTo (muda o pai de um nó, desvinculando-o de sua antiga cadeia de irmãos e vinculando-o como o último filho do novo pai, com manutenção completa de /Prev / /Next / /First / /Last / /Count em cada ancestral afetado)

Version 2.320.0

Adicionado

  • Nested optional-content /Order tree: BeginOptionalContentOrderGroup / AddLayerToOptionalContentOrder / EndOptionalContentOrderGroup Detalhes localizados da alteração no comportamento da API e nos símbolos listados /OrderDetalhes localizados da alteração no comportamento da API e nos símbolos listados /OCGs Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.319.1

Fixed

  • O carregamento de um PDF cuja imagem JBIG2 incorporada usa a opção de codificação Huffman padrão (em vez da codificação aritmética MQ mais comum) não falha mais completamente: o carregador agora tenta novamente com o mecanismo de decodificação alternativo antes de desistir, de modo que tais imagens sejam carregadas com sucesso independentemente de qual mecanismo de decodificação seja preferido

Version 2.319.0

Changed

  • A importação de EMF/WMF agora aplica um gate InPath centralizado na entrada de ExecuteRecord: enquanto um colchete de caminho estiver aberto (BeginPath visto, EndPath/AbortPath ainda não alcançado), apenas registros de construção de caminho (linha/curva/polígono/movimento/fechamento/fim/abortar mais os registros de estado do sistema de coordenadas e DC) alcançam seus manipuladores; registros de texto e bitmap que anteriormente vazavam para o caminho aberto agora são descartados centralmente, espelhando a proteção de ponto de entrada do llPDFLib e eliminando uma classe de bugs de PDF malformados devido a registros perdidos dentro de um colchete de caminho

Version 2.318.0

Added

  • Grupos de botões de rádio de conteúdo opcional: o novo RegisterOptionalContentRadioGroup declara conjuntos de camadas mutuamente exclusivas cujos membros desativam uns aos outros (PDF 1.7 §8.11.4.3 /RBGroups); o uso típico é em painéis de camadas de escolha única como "Draft / Review / Final"

Version 2.317.0

Added

  • THPDFDocOutlineObject.InsertBefore / InsertAfter inserem um novo irmão na lista duplamente vinculada de contornos existentes em uma posição arbitrária, complementando os auxiliares AddChild (anexar) e AddChildFirst (preceder) existentes, de modo que as árvores de contornos possam ser construídas em qualquer ordem sem desvincular e vincular nós novamente
  • A importação de EMF/WMF agora reconhece explicitamente a família ICM/paleta (EMR_SETBRUSHORGEX, EMR_SELECTPALETTE, EMR_SETCOLORADJUSTMENT, EMR_SETICMMODE, EMR_CREATECOLORSPACE, EMR_SETCOLORSPACE, EMR_DELETECOLORSPACE, EMR_GDICOMMENT) e a família sem mapeamento PDF (EMR_FRAMERGN, EMR_INVERTRGN, EMR_PAINTRGN, EMR_FLATTENPATH, EMR_WIDENPATH, EMR_SETMETARGN, EMR_OFFSETCLIPRGN, EMR_PLGBLT, EMR_POLYTEXTOUTA, EMR_POLYTEXTOUTW), encaminhando para o DC de referência GDI aplicável sem emitir para o stream de conteúdo PDF; anteriormente esses registros eram descartados silenciosamente, agora eles são documentados e mantidos consistentes com o lado do GDI

Version 2.316.0

Added

  • A nova demo JBIG2Benchmark gera quatro PDFs a partir da mesma digitalização sintética de três páginas, um por configuração de THPDFJBIG2Options (sem perdas por imagem, LossyLevel=5 por imagem, globais acumulados entre páginas, extração de símbolo de retângulo), exibindo cada tamanho de saída para que as compensações entre os padrões amigáveis de digitalização do v2.310.0, o acumulador de páginas cruzadas do v2.314.0 e os modos de extração possam ser comparados diretamente

Version 2.315.0

Changed

  • O dicionário JBIG2 acumulado entre páginas agora é agrupado em lote automaticamente: uma vez que o total da largura do glifo em execução cruza 131071 pixels, o dicionário atual é congelado, emitido como um stream /JBIG2Globals e o acumulador é redefinido, para que o próximo lote inicie um novo stream de globais (espelha o transbordo baseado em TotalWidth do llPDFLib e mantém streams de globais individuais em um tamanho que os leitores manipulam com eficiência em execuções de digitalização muito grandes)

Version 2.314.0

Added

  • Dicionário de símbolos JBIG2 acumulado entre páginas: ative com THPDFJBIG2Options.AccumulateGlobalsAcrossPages := True (junto com os seletores UseSymbolDictionary + UseGlobalSegments + native fallback existentes) e imagens 1-bit consecutivas de icJBIG2 compartilham um único dicionário de símbolos em memória em crescimento e um stream indireto /JBIG2Globals, em vez de cada imagem emitir seu próprio dicionário; o novo THPDFJBIG2SymbolDictionary mantém o conjunto de glifos persistente com a mesma correspondência de perda/sem perda que o codificador por imagem usa; o novo teste smoke_jbig2_accum_decode verifica se duas páginas de diferentes layouts de glifos compartilham uma única referência de objeto global e decodificam de volta para os pixels de origem bit a bit

Version 2.313.0

Added

  • Os streams de segmentos globais JBIG2 produzidos pelo codificador nativo de dicionário de símbolos agora são indexados por conteúdo em nível de documento via THPDFJBIG2GlobalsPool, de modo que imagens que geram globais idênticos em bytes compartilhem um único stream indireto /JBIG2Globals em vez de cada uma emitir o seu próprio; o novo teste smoke_jbig2_globals_multi cobre três páginas de glifos idênticos colapsando em um único stream de globais compartilhado

Version 2.312.0

Added

  • A importação de EMF/WMF agora cobre EMR_SCALEVIEWPORTEXTEX, EMR_SCALEWINDOWEXTEX, EMR_EXCLUDECLIPRECT, EMR_CREATEDIBPATTERNBRUSHPT, EMR_SETMITERLIMIT, EMR_SETTEXTJUSTIFICATION e EMR_SETROP2, fechando a lacuna de sete registros com o llPDFLib para que streams EMF emitidos por toolchains GDI mais antigos não descartem silenciosamente esses registros; SETMITERLIMIT e SETROP2 entram em vigor imediatamente, enquanto os outros armazenam o estado para uma conexão posterior do lado da renderização sem perturbar a coordenada atual ou a saída do corte

Version 2.311.0

Added

  • HPDFCMSSHA256StreamRanges agora gera o hash das duas janelas /ByteRange do PDF diretamente de um TStream em blocos de 256 KB, para que PDFs assinados de vários GB possam ter seu hash gerado sem copiar primeiro o arquivo inteiro para uma AnsiString; fecha a lacuna com o CalcHash baseado em stream do llPDFLib, que a função em memória existente HPDFCMSSHA256ByteRanges não conseguia equiparar para entradas muito grandes

Version 2.310.0

Changed

  • THPDFJBIG2Options agora tem como padrão configurações amigáveis de digitalização (LossyLevel = 5, RemoveIsolatedBlackPixels = True, BlackDotSize = 3) para que imagens digitalizadas de 1 bit sejam compactadas em tamanhos muito menores por padrão; defina LossyLevel = 0 ou Lossless = True para restaurar a correspondência estrita sem perdas

Performance

  • O crescimento da tabela xref agora é geométrico (documentos pequenos +N, documentos maiores +25%) em vez de realocar o array dinâmico em cada objeto indireto, removendo o custo O(n²) que dominava o carregamento e construção de PDFs grandes com muitos objetos

Version 2.309.4

Added

  • Adicionado THPDFDocOutlineObject.AddChildFirst para que nós de contorno gerados possam preceder um item filho antes dos irmãos existentes, preservando a ordem dos contornos salvos

Version 2.309.3

Added

  • Adicionado pmUseOC a THPDFPageMode para que documentos gerados possam solicitar o painel de camadas de conteúdo opcional com o catálogo /PageMode /UseOC

Version 2.309.2

Added

  • Adicionadas sobrecargas de string de título para THPDFPage.AddTextAnnotation para que anotações de texto geradas possam gravar o título /T do PDF ou a entrada do autor enquanto preservam os argumentos existentes de ícone, cor e estado aberto

Version 2.309.1

Fixed

  • Limpar THotPDF.OutputStream atribuindo nil agora restaura a saída normal de FileName em vez de deixar o documento no modo de saída em stream

Version 2.309.0

Fixed

  • A importação de EMF/WMF agora respeita os modos de região de EMR_EXTSELECTCLIPRGN para cópia, interseção e exclusão de corte enquanto mantém EMR_SETWORLDTRANSFORM, EMR_MODIFYWORLDTRANSFORM e EMR_SETPIXELV cobertos por testes de regressão não GUI

Version 2.308.0

Added

  • A rotina de registro em tempo de design do add-on FastReport agora é fornecida como frxHotPDFDesign, colocando o TfrxHotPDFExport na paleta do FastReport VCL enquanto mantém a unidade de execução existente e o ponto de entrada Register disponíveis para compatibilidade

Version 2.307.0

Added

  • SignPDFWithPFX agora analisa arquivos PFX criptografados PKCS#12 PBE-SHA1-3DES legados, além de perfis PBES2 AES-256-CBC

Version 2.306.0

Changed

  • Chamadas repetidas que adicionam a mesma imagem codificada agora reutilizam o XObject de imagem PDF existente enquanto mantêm uma saída distinta para diferentes configurações de qualidade JPEG e relações de máscara

Version 2.305.0

Added

  • TfrxHotPDFExport.PageRange agora permite que as exportações do FastReport ativem a filtragem de páginas baseada em um, como 1,3-5, enquanto reutiliza o analisador de intervalo de páginas compartilhado do HotPDF

Version 2.304.0

Fixed

  • O nivelamento de tabela XFA para AcroForm agora permite que colunas automáticas únicas totalmente redimensionáveis herdem a largura do conteúdo da tabela, de modo que os campos sem sua própria largura w ainda recebam uma largura mensurável e preservem o espaçamento entre as linhas

Version 2.303.0

Fixed

  • O nivelamento de tabela XFA para AcroForm agora permite que células de texto expansíveis herdem valores columnWidths fixos quando omitem sua própria largura w, de modo que as alturas das linhas sejam medidas e as linhas subsequentes permaneçam separadas

Version 2.302.0

Fixed

  • O nivelamento XFA para AcroForm agora mede campos de texto expansíveis dentro de fluxos aninhados layout="tb" e envolvidos layout="lr-tb", e as linhas da tabela agora mantêm a altura da célula de texto expansível ao posicionar os campos seguintes

Version 2.301.0

Fixed

  • O nivelamento XFA para AcroForm agora mantém os campos de texto nos contêineres de fluxo layout="tb" e layout="lr-tb" quando eles omitem uma altura h explícita, medindo a altura do conteúdo quebrado em vez de ignorá-los como layout expansível não suportado

Version 2.300.0

Fixed

  • THotPDF.ExtractObjectFromStream agora retorna o dicionário analisado para membros do stream de objetos materializados e não fabrica mais chaves de diagnóstico de dados brutos quando os chamadores inspecionam os streams de objetos PDF 1.5+ carregados

Version 2.299.0

Added

  • THotPDF.DecompressAllObjectStreams agora é público e força PDFs carregados que usavam streams de objetos a salvar com objetos compactados materializados como objetos indiretos normais, em vez de copiar o layout de stream de objetos de origem

Version 2.298.0

Fixed

  • A criação de campos AcroForm agora rejeita nomes de campos raiz duplicados tanto para novos documentos quanto para edição de documentos carregados, enquanto preserva o fluxo de trabalho pai compartilhado válido para grupos de botões de rádio

Version 2.297.0

Added

  • TDBGridHotPDFExportOptions e o componente TDBGridHotPDFExport agora expõem PDFACompliance e PDFXCompliance para que as exportações de tabelas DBGrid possam aderir aos mesmos critérios de conformidade de padrões do HotPDF usados pela geração direta de documentos

Version 2.296.0

Added

  • TQRHotPDFExportFilter e TdxHotPDFExportOptions agora expõem PDFACompliance e PDFXCompliance para que as exportações do QuickReport e DevExpress possam aderir aos mesmos critérios de conformidade de padrões do HotPDF usados pela geração direta de documentos

Version 2.295.0

Added

  • TfrxHotPDFExport e TppHotPDFDevice agora expõem PDFACompliance e PDFXCompliance para que as exportações de relatórios possam aderir aos mesmos critérios de conformidade de padrões do HotPDF usados pela geração direta de documentos

Version 2.294.0

Added

  • Construtores de Canvas para Form XObject e padrões de repetição (tiling pattern) agora permitem que os chamadores componham recursos reutilizáveis por meio de auxiliares de desenho tipados antes de registrá-los para reutilização na página
  • THPDFExtGStateOptions agora permite que um ExtGState combine configurações de transparência, modo de mesclagem, largura de linha, extremidade de linha (line cap), junção de linha (line join) e limite de meia-esquadria

Version 2.293.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados TransparentBlt and MaskBlt Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • The Delphi PDFOptimize Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.292.32

Added

  • Pincéis de hachura (hatch brushes) de EMF/WMF agora são mapeados para padrões de repetição do PDF para que desenhos de CAD e relatórios importados possam preservar a textura da hachura em vez de nivelar esses preenchimentos em cores sólidas

Fixed

  • Edições de dicionário de documentos carregados agora marcam os objetos como sujos para que SaveLoadedDocument grave novamente PDFs alterados em vez de copiar a origem original após edições de contorno e árvore de objetos
  • A remoção de contorno carregado agora vincula novamente favoritos irmãos, e decorações de texto sublinhado e tachado não rotacionado agora emitem operadores de retângulo preenchido

Version 2.292.31

Added

  • THPDFEmfOptions.ShowNullBrush agora permite que a renderização de EMF/WMF exponha preenchimentos de pincel nulo para fluxos de trabalho de diagnóstico e importação no estilo CAD, enquanto preserva pincéis nulos não preenchidos por padrão

Version 2.292.30

Added

  • THPDFEmfOptions.CanvasOver agora permite que a reprodução de Canvas da página posicione o conteúdo PDF existente acima do metafile Canvas analisado, enquanto o padrão mantém a ordem atual do Canvas por cima

Version 2.292.29

Added

  • THPDFEmfOptions.Redraw agora permite que os chamadores de EMF/WMF mantenham o caminho de redesenho temporário padrão ou optem por não usá-lo e analisem o metafile original diretamente

Version 2.292.28

Added

  • THPDFEmfOptions.UseFrame agora permite que a renderização de EMF/WMF corte a saída importada para o quadro de cabeçalho do EMF para metafiles que dependem dos limites do quadro declarados

Version 2.292.27

Added

  • THPDFEmfOptions.ShowNullPen agora permite que a renderização de EMF/WMF exponha contornos de caneta nula para fluxos de trabalho de diagnóstico e importação no estilo CAD, enquanto preserva canetas nulas invisíveis por padrão

Version 2.292.26

Added

  • THotPDF.SetFormFieldTooltip agora permite que os aplicativos atribuam dicas de campo AcroForm /TU por nome de campo para widgets criados por meio dos métodos de campo Add... existentes

Version 2.292.25

Fixed

  • O modo de objeto nativo do TfrxHotPDFExport agora preserva o recorte de TfrxPictureView e a renderização de molduras quando as exibições de imagem são gravadas diretamente como XObjects de imagem do HotPDF

Version 2.292.24

Added

  • O modo de objeto nativo do TfrxHotPDFExport agora mapeia exibições de código de barras horizontais unidimensionais suportadas do FastReport diretamente para operadores de código de barras do HotPDF, enquanto mantém texto legível por humanos, geração de checksum, texto suplementar, rotação, barras coloridas e simbologias não suportadas no caminho de fallback existente

Version 2.292.23

Added

  • O modo de comando de desenho nativo do TppHotPDFDevice agora mapeia comandos de desenho de código de barras unidimensionais suportados do ReportBuilder diretamente para operadores de código de barras do HotPDF, enquanto preserva o fallback de metafile aprimorado para comandos que precisam de texto legível por humanos, códigos adicionais, cálculo de dígito de verificação, barras coloridas, rotação ou simbologias postais não suportadas

Version 2.292.22

Fixed

  • O lançamento automático do visualizador de PDF agora pode ser suprimido em execuções não interativas com HOTPDF_SUPPRESS_AUTO_LAUNCH=1, e os executores de teste e smoke bundled ativam essa proteção por padrão para que execuções de regressão sem GUI não abram janelas do visualizador

Version 2.292.21

Added

  • THPDFPage.ShowMetafileEx agora possui uma sobrecarga THPDFEmfOptions por chamada, permitindo que os chamadores substituam as configurações de renderização de EMF/WMF para um desenho de metafile enquanto preservam os padrões no nível do documento

Version 2.292.20

Added

  • TfrxHotPDFExport agora expõe controles de saída do HotPDF para exportações do FastReport, incluindo AutoCreateURL, FontEmbedding, NotEmbeddedFonts, ActivateProtection, UserPassword, OwnerPassword, CryptKeyLength, ProtectOptions e EncryptMetadata

Version 2.292.19

Added

  • Adicionada uma unidade dedicada de add-on dbGridHotPDFDesign para que os pacotes em tempo de design possam registrar o TDBGridHotPDFExport na paleta HotPDF do IDE, mantendo o adaptador de exportação em tempo de execução do DBGrid utilizável sem referências a pacotes em tempo de design

Version 2.292.18

Changed

  • HPDFParsePFX agora suporta perfis PBES2/PBKDF2 que usam a PRF padrão HMAC-SHA-1 bem como HMAC-SHA-256 explícito, melhorando a compatibilidade com exportações antigas do AES-256-CBC PKCS#12, enquanto mantém perfis PBE-SHA1-3DES não suportados rejeitados com um diagnóstico

Version 2.292.17

Added

  • Adicionado THPDFTextOutBoxResult mais THPDFPage.TextOutBoxEx e THPDFPage.WideTextOutBoxEx para que a saída da caixa de texto quebrada possa relatar o número de caracteres gravados, linhas gravadas e se o texto de origem estourou a caixa, enquanto os métodos herdados continuam retornando a contagem de caracteres gravados

Version 2.292.16

Added

  • Adicionado THPDFPage.TextFromBaseLine(Boolean) para alternar a saída de texto da página entre a semântica da coordenada Y da borda superior e da linha de base, além de THPDFPage.AppendScopedRawContent para envolver operadores de conteúdo bruto especializados em um par automático de salvamento e restauração de estado gráfico

Version 2.292.15

Changed

  • O modo de objeto nativo do TfrxHotPDFExport agora preserva o texto de memo recortado e o espaçamento de caracteres do FastReport ao mapear exibições de memo preparadas diretamente para operações de texto de página do HotPDF

Version 2.292.14

Added

  • TppHotPDFDevice agora expõe um RenderMode opcional para exportação de comando de desenho nativo do ReportBuilder, mapeando comandos comuns de texto, forma, linha, imagem e hiperlink URI diretamente para operações de página do HotPDF, enquanto reverte automaticamente para a ponte de metafile aprimorada existente para páginas que contêm comandos não suportados

Version 2.292.13

Added

  • Adicionado THotPDF.EncryptMetadata para criptografia padrão de senha AES para que os chamadores possam escrever /EncryptMetadata false, manter streams XMP /Metadata em texto claro e emitir a derivação de chave AES-128 correspondente ou flag de metadados AES-256 /Perms, em vez de depender do comportamento anterior de criptografia de metadados sempre ativo

Version 2.292.12

Added

  • Adicionados wrappers de campo AcroForm no momento da criação por meio de THPDFAcroFormField e THPDFPage.CreateTextField, CreateCheckBox, CreateRadioButton, CreateComboBox e CreateListBox, permitindo a configuração encadeada de dica, flag comum, aparência padrão e ação adicional de campo ou widget imediatamente após a criação del campo

Version 2.292.11

Added

  • Adicionados auxiliares de alto nível para máscara de imagem, transparência, qualidade JPEG por imagem e compactação monocromática automática: AddImageAsMask, AddImageWithMask, AddImageWithTransparency, AddImageWithTransparency32, AddImageWithJpegQuality, AddMonochromeImageAuto e o seletor opcional de compactação icAutoMono

Version 2.292.10

Added

  • Adicionados auxiliares de conveniência de ação adicional de campo AcroForm para cadeias THPDFActionBuilder, incluindo wrappers nomeados para /AA /K, /AA /F, /AA /V, /AA /C, gatilhos de mouse e foco de widget, e auxiliares correspondentes de limpeza para entradas de gatilho de campo e anotação

Version 2.292.9

Added

  • Adicionados auxiliares de ação adicional de ciclo de vida do documento para cadeias THPDFActionBuilder: SetDocumentCloseAction, SetDocumentWillSaveAction, SetDocumentDidSaveAction, SetDocumentWillPrintAction, SetDocumentDidPrintAction e métodos de limpeza correspondentes que gravam entradas do catálogo /AA /WC, /AA /WS, /AA /DS, /AA /WP e /AA /DP

Version 2.292.8

Added

  • Adicionado suporte a ação adicional de página gerada com THPDFPageActionTrigger, auxiliares da página atual para SetPageAdditionalAction, SetPageOpenAction, SetPageCloseAction e métodos de limpeza correspondentes, além de auxiliares indexados por página THotPDF que gravam ações de página /AA /O e /AA /C a partir de cadeias reutilizáveis de THPDFActionBuilder sem alterar a página de desenho ativa

Version 2.292.7

Added

  • Adicionada gravação de rótulo de página de documento gerado e contas de thread de artigo por meio de THPDFPageLabelStyle, THotPDF.SetPageLabel, os cinco auxiliares de rótulo de página específicos do estilo, THotPDF.ClearPageLabels, THotPDF.RegisterArticleThread e THPDFPage.AddArticleBead

Version 2.292.6

Added

  • THPDFActionBuilder agora constrói dicionários de ação avançados para Thread, Sound, Movie, Rendition, visibilidade de camada SetOCGState, transições de página Trans e GoTo3DView, com auxiliares ShowLayer, HideLayer e ToggleLayer, além de restrições PDF/A/PDF/X

Version 2.292.5

Added

  • THPDFPage.SetAnnotationAdditionalAction e THotPDF.SetFormFieldAdditionalAction agora anexam cadeias reutilizáveis THPDFActionBuilder aos dicionários de gatilho de anotação e AcroForm /AA, substituindo apenas o gatilho selecionado e preservando as restrições de ação do PDF/A/PDF/X

Version 2.292.4

Added

  • THPDFNamesFacade agora adiciona wrappers de função JavaScript e instantâneos de array para JavaScript carregado e destinos nomeados, THPDFActionBuilder agora constrói ações de envio/redefinição com escopo de campo e alvos de página remota, e o modo de objeto nativo do adaptador do FastReport preserva fundos de memo, alinhamento de texto e estilos de moldura

Version 2.292.3

Added

  • THPDFActionBuilder agora suporta destinos nomeados remotos e ações do tipo Launch, e o modo de objeto nativo do adaptador do FastReport mapeia URLs de visualização para anotações de link URI del HotPDF

Version 2.292.2

Added

  • THPDFActionBuilder agora suporta ações GoToPage direcionadas a páginas diretamente, auxiliares de nome de arquivo EMF/WMF aceitam THPDFEmfOptions por chamada e o modo de objeto nativo do adaptador do FastReport mapeia exibições de imagem diretamente para XObjects de imagem do HotPDF

Version 2.292.1

Added

  • EMF/WMF rendering now suporta substituições de THPDFEmfOptions por chamada por meio das sobrecargas ShowEnhancedMetafile, EnhancedShowMetafile e a aprimorada ShowMetafile, de modo que um único metafile possa escolher compactação, escala, DC de referência, modo de esticamento e comportamento de caneta estendida sem mutar as THotPDF.EmfOptions globais do documento

Version 2.274.1

Fixed

  • Procedimentos de glifos Type3 declarados com d1 agora ignoram operadores de seleção de cores dentro do procedimento e sempre pintam com a cor de preenchimento atual do texto, conforme exigido pela especificação do PDF; glifos declarados com d0 mantêm suas próprias cores
  • A supressão se aplica apenas na reprodução do glifo (incluindo objetos de formulário aninhados) e nunca afeta as cores selecionadas pelo conteúdo da página circundante

Version 2.274.0

Added

  • Procedimentos de glifos Type3 que declaram uma caixa delimitadora d1 agora são recortados para ela durante a renderização da página, para que procedimentos de glifos malformados ou superdimensionados não possam mais pintar fora de seus limites declarados
  • Glifos que usam a forma d0 mantêm seu comportamento irrestrito, e caixas degeneradas (vazias ou invertidas) são ignoradas em vez de deixar o glifo em branco

Version 2.273.0

Added

  • A renderização de página agora resolve dicionários /Encoding de fontes simples: arrays /Differences remapeiam códigos de caracteres para glifos nomeados, tendo prioridade sobre o mapa de caracteres do próprio programa da fonte, conforme exigido pela especificação do PDF — documentos produzidos por toolchains derivados de TeX e PostScript, que dependem fortemente de /Differences, agora renderizam os glifos pretendidos
  • Nomes de glifos são resolvidos por meio da Adobe Glyph List (incluindo formas uniXXXX e nomes de subconjuntos gNN/glyphNN subset names), do charset de um programa de fonte compacta ou do mapa de caracteres de um programa TrueType, qualquer que seja o suportado pela fonte incorporada
  • As codificações básicas predefinidas StandardEncoding, WinAnsiEncoding e MacRomanEncoding são respeitadas para códigos sem uma substituição de /Differences, corrigindo a faixa 0x80–0x9F que uma suposição Latin-1 simples trata incorretamente
  • Compact (Type1C) programas que dependem exclusivamente de uma codificação predefinida — anteriormente revertendo para uma fonte do sistema para toda a execução — agora renderizam seus contornos incorporados por meio da busca de nome padrão

Version 2.272.0

Added

  • A renderização de página com glifos incorporados agora cobre fontes Type1 simples (não CID) com um programa compactado FontFile3 Type1C: códigos de caracteres de um byte são resolvidos por meio da codificação incorporada do programa da fonte para contornos de charstring do Tipo 2 reais, completando a cobertura de contorno incorporado entre tipos de fontes CID e simples
  • Fontes TrueType simples aceitam adicionalmente um programa OpenType FontFile3 (com sabor CFF) quando nenhum FontFile2 está presente
  • Códigos de caracteres que a codificação integrada não consegue mapear mantêm o fallback da fonte do sistema por glifo, e fontes que dependem exclusivamente das codificações predefinidas Standard/Expert continuam a usar o fallback de execução inteira anterior

Version 2.271.0

Added

  • A renderização de página agora suporta fontes Type3: o procedimento de stream de conteúdo de cada glifo é reproduzido por meio do renderizador com a matriz de fonte, tamanho da fonte, matriz de texto e transformação atual compostas, para que carimbos, fontes de código de barras e outros glifos desenhados por procedimento apareçam na saída renderizada em vez de serem ignorados
  • O mapa /Encoding /Differences vincula códigos de caracteres a procedimentos de glifos, e os /Widths do espaço do glifo são interpretados por meio da /FontMatrix, mantendo os avanços corretos para sistemas de coordenadas de glifos não padrão
  • Procedimentos de glifos podem fazer referência ao dicionário /Resources da própria fonte (recorrendo aos recursos da página) e são protegidos pela mesma salvaguarda de recursão que os Form XObjects

Version 2.270.0

Added

  • Embedded-glyph page rendering now covers simple (non-CID) TrueType fonts: one-byte character codes map to glyphs through the embedded font program's own cmap table, so pages using ordinary embedded TrueType fonts render with their exact glyph shapes instead of a similarly named system font
  • The cmap lookup follows a robust subtable chain — Unicode (format 4 and format 12) first, then symbol-encoded subtables with the F000 private-use mirror, then legacy Macintosh subtables (formats 0 and 6) — matching the fallback behaviour of the authoring pipeline
  • Character codes the embedded cmap cannot map fall back to the previous system-font drawing per glyph, so mixed or partially subset fonts degrade gracefully instead of dropping text

Version 2.269.0

Added

  • A renderização de página com glifos incorporados agora cobre programas de fonte CFF: texto em fontes Type0/CIDFontType0 com um programa FontFile3 (CIDFontType0C, Type1C ou um wrapper OpenType) renderiza a partir dos contornos de charstring do Tipo 2 reais em vez de substituir por uma fonte do sistema com nome semelhante
  • O interpretador de charstring suporta o conjunto completo de operadores de desenho — linhas, curvas, a família flex, máscaras de dica e chamadas de sub-rotina locais/globais com viés de sub-rotina — para que fontes CFF produzidas profissionalmente reproduzam suas formas de glifos exatas
  • Programas CFF chaveados por CID mapeiam códigos de caracteres por meio do charset da fonte, mantendo a seleção de glifos correta para fontes de subconjunto cuja ordem de glifos difere da ordem CID; a seleção de dicionário de fonte por glifo (FDArray/FDSelect) é respeitada
  • Programas incorporados TrueType (FontFile2) e CFF (FontFile3) agora compartilham um pipeline de renderização; fontes sem um programa incorporado utilizável mantêm o fallback anterior da fonte do sistema

Version 2.268.0

Added

  • Renderização de página com glifos incorporados: texto em fontes Type0/CIDFontType2 com um programa TrueType incorporado (FontFile2) agora renderiza a partir dos contornos de glifos reais da fonte — contornos quadráticos, pontos implícitos na curva e glifos compostos são reproduzidos como caminhos vetoriais preenchidos — em vez de substituir por uma fonte do sistema com nome semelhante
  • Ambos os layouts Identity e stream explícito CIDToGIDMap são suportados, cobrindo fontes incorporadas em subconjuntos; documentos produzidos pelo próprio pipeline Unicode do HotPDF agora fazem o ciclo completo através de RenderLoadedPageToBitmap com as formas de glifos incorporados exatas
  • Os avanços do CID agora respeitam as entradas de largura /W e /DW e os códigos de dois bytes Identity-H avançam corretamente, corrigindo o posicionamento do texto para fontes chaveadas por CID na saída renderizada
  • Fontes sem um programa incorporado utilizável (sabor CFF FontFile3, falhas de mapeamento) mantêm o fallback anterior da fonte do sistema

Version 2.267.0

Added

  • Cache de imagens decodificadas para renderização de página: XObjects de imagem repetidos nas páginas (logotipos, cabeçalhos, imagens de marca d'água) agora decodificam uma vez por carga de documento em vez de uma vez por desenho, reduzindo aproximadamente pela metade o tempo de renderização para páginas com imagens compartilhadas e acelerando a exportação TIFF de várias páginas correspondentemente
  • O cache é limitado por ImageCacheMaxBytes (padrão 32 MB) com expulsão do menos usado recentemente, é limpo automaticamente quando um documento é carregado e esvaziado junto com InvalidateRenderedPageCache após edições in-loco
  • Novo THPDFWeightedCache reutilizável (unidade HPDFCache): um cache do mais recentemente usado com orçamento de bytes, estatísticas de acerto/erro e um auxiliar de chave de hash de conteúdo SHA-256, disponível para aplicativos host para armazenar em cache seus próprios intermediários caros

Version 2.266.0

Added

  • Suporte a fontes antigas e de símbolos em RegisterUnicodeTTF: fontes que carregam apenas um mapa de caracteres de símbolos (Wingdings, Webdings e fontes (3,0)-cmap semelhantes) agora registram com um mapa de codepoints funcional em vez de resolver cada caractere para .notdef
  • Codepoints de símbolo são acessíveis tanto por sua faixa nativa U+F0xx quanto por ASCII simples ('A' alcança o mesmo glifo que U+F041), correspondendo a como os visualizadores tratam texto codificado por símbolo
  • Fontes legadas cujo mapa de caracteres oferece apenas uma subtabela de formato 6 (tabela aparada) ou formato 0 (tabela de bytes) agora recorrem a elas, para que fontes antigas de herança Mac sejam incorporadas corretamente; os caminhos Unicode principais de formato 4 / formato 12 permanecem inalterados

Version 2.265.0

Added

  • Cache de páginas renderizadas: RenderLoadedPageToBitmapCached mantém páginas recentemente renderizadas chaveadas por página e DPI, de modo que a renderização da mesma página (visualizações de página, miniaturas, exportações repetidas) retorne em microssegundos em vez de reinterpretar o stream de conteúdo — os acertos do cache são tipicamente milhares de vezes mais rápidos
  • O cache armazena até RenderCacheCapacity páginas (padrão 8) na ordem do mais recentemente usado e retorna um bitmap independente de propriedade do chamador a cada chamada; carregar um novo documento limpa-o automaticamente e InvalidateRenderedPageCache limpa-o após edições de página in-loco

Version 2.264.0

Added

  • Saída de rich text: THPDFPage.TextOutHTML renderiza uma string marcada com um subconjunto HTML — <b>, <i>, <u>, <s>, <br> e <font size color face> com aninhamento — para que parágrafos estilizados não exijam mais uma chamada separada de SetFont/TextOut por alteração de estilo
  • Tamanhos de fonte mistos em uma linha compartilham uma linha de base comum (a maior fonte da linha a define) e o entrelinhamento (leading) de cada linha segue sua maior fonte, fornecendo uma saída tipograficamente correta para títulos misturados com texto do corpo
  • As cores aceitam #RRGGBB e os 16 nomes de cores HTML padrão; as entidades &amp; &lt; &gt; &quot; &nbsp; e numéricas &#N; (incluindo codepoints do plano suplementar) são decodificadas
  • A chamada retorna a coordenada Y na qual uma linha seguinte continuaria, para que blocos TextOutHTML consecutivos se empilhem naturalmente

Version 2.263.0

Added

  • Extração de texto preservando o layout: ExtractLoadedPageTextLayout reconstrói a disposição visual de uma página como texto simples — os glifos são agrupados em linhas de base e o espaço em branco horizontal / vertical é reproduzido em uma grade de caracteres, de modo que colunas, recuos e alinhamento de tabelas sobrevivam na saída
  • Grandes lacunas entre trechos de texto na mesma linha de base tornam-se sequências de espaços, e grandes lacunas de linha de base tornam-se linhas em branco, tornando o resultado adequado para diff, grep e alimentação de pipelines de análise de texto que dependem de alinhamento posicional
  • A extração de fluxo de leitura existente de ExtractLoadedPageText permanece inalterada; escolha-a quando apenas o conteúdo do texto importar e a nova chamada quando o layout importar

Version 2.262.0

Added

  • Busca de favoritos em toda a árvore: FindLoadedOutlineByTitle percorre toda a hierarquia de contornos de um documento carregado (todos os níveis de aninhamento, não apenas capítulos de nível superior) e resolve a página de destino do favorito correspondente, com correspondência parcial e distinção de maiúsculas e minúsculas opcional
  • Tanto destinos diretos /Dest quanto alvos de ação GoTo são resolvidos para um índice de página, de modo que um favorito encontrado possa ser acessado imediatamente
  • GetLoadedOutlineTitlesDeep enumera cada título de favorito na árvore na ordem de profundidade primeiro (leitura), complementando a enumeração existente apenas de nível superior

Version 2.261.0

Added

  • Extração de anexos em lote: SaveAllLoadedEmbeddedFiles grava cada arquivo incorporado de um documento carregado em um diretório de destino em uma única chamada, criando o diretório quando ausente e retornando o número de arquivos gravados
  • Os nomes dos anexos são higienizados antes do uso — separadores de caminho e caracteres rejeitados pelo sistema de arquivos tornam-se sublinhados, para que um documento não possa gravar fora do diretório escolhido — e nomes duplicados recebem automaticamente um sufixo _CopyN antes da extensão

Version 2.260.0

Added

  • Exportação TIFF de várias páginas para documentos carregados: SaveLoadedPagesToTiff renderiza as páginas selecionadas e as grava em um único arquivo TIFF 6.0 com uma imagem por página — o formato de intercâmbio esperado por pipelines de arquivamento de documentos, digitalização e fax
  • As páginas são selecionadas com a sintaxe familiar de intervalo baseado em um ("1,3-5,7-"; vazio seleciona todas as páginas), renderizadas em um DPI escolhido pelo chamador e armazenadas como RGB de 24 bits com compactação Deflate opcional (ativada por padrão; passe False para saída sem compactação)
  • SaveLoadedPagesToTiffStream grava o mesmo TIFF de várias páginas em qualquer TStream; ambas as chamadas retornam o número de páginas realmente gravadas

Version 2.259.0

Added

  • Verificação de assinatura digital para documentos carregados: VerifyLoadedSignature recalculou o resumo de /ByteRange e verifica criptograficamente a assinatura RSA contra o certificado incorporado na assinatura, relatando um veredito preciso (válido, documento modificado após assinatura, assinatura inválida, algoritmo não suportado ou contêiner malformado)
  • GetLoadedSignatureInfo retorna o nome do signatário, nomes distintos do assunto e do emissor, número de série do certificado e período de validade, hora da assinatura, algoritmo de hash, subfiltro e /Reason//Location//ContactInfo para cada campo de assinatura sem tocar nos bytes do documento
  • VerifyLoadedSignatureEx combina ambos: uma chamada verifica e retorna o registro de informações preenchido, incluindo se a assinatura cobre todo o documento; VerifyAllLoadedSignatures verifica todos os campos de assinatura de uma só vez
  • Algoritmos suportados: RSA (PKCS#1 v1.5) com resumos SHA-1, SHA-256, SHA-384 ou SHA-512, cobrindo assinaturas adbe.pkcs7.detached e ETSI.CAdES.detached com ou sem atributos assinados
  • Uma sobrecarga de TStream verifica documentos carregados de streams; a validação da cadeia de certificados e de confiança continua sendo de responsabilidade do chamador

Version 2.258.0

Added

  • O decodificador JBIG2 externo de alto desempenho está agora disponível em compilações de 32 bits (Win32); anteriormente era apenas para 64 bits; carregar arquivos PDF com imagens /JBIG2Decode e ExtractLoadedImage usa-o por padrão em ambas as plataformas, decodificando tipicamente de 3–9× mais rápido do que o decodificador Pascal nativo
  • A chave UseExternalJBIG2Decoder se comporta da mesma forma em 32 bits e 64 bits: defina-a como False para selecionar o decodificador Pascal nativo

Version 2.257.1

Fixed

  • Restaurado o backend do codificador JBIG2 de alto desempenho em compilações de 64 bits (Win64): uma regressão de verificação de plataforma introduzida ao conectar o backend de 32 bits compilou o codificador externo fora das compilações Win64, de modo que AddImage com compactação icJBIG2 silenciosamente recorreu ao codificador Pascal MMR nativo; o Win64 agora codifica através do backend aritmético novamente, tipicamente de 4–8× mais rápido com compactação igual ou melhor; THPDFJBIG2Options.UseExternalEncoder := False continua sendo a forma explícita de selecionar o fallback MMR

Version 2.257.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados AddImage with icJBIG2 Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • The THPDFJBIG2Options.UseExternalEncoder Detalhes localizados da alteração no comportamento da API e nos símbolos listados False Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.256.0

Added

  • Estendido o suporte a anotações XFDF para os quatro subtipos restantes da Tabela 1 do ISO 19444-1, completando a cobertura total de todos os 18 elementos de anotação XFDF: <fileattachment> (decodifica os <data> em base64 em um stream de arquivo incorporado + Filespec na importação, recodifica na exportação), <sound> (stream /Sound incorporado com parâmetros de áudio /R /B /C /E), <redact> (uma anotação /Redact padrão com /OverlayText, /DA, /Q e /IC — distinto da máscara RedactLoadedRect de stream de conteúdo existente) e <link> (<OnActivation><Action> mapeado para um dicionário de ação URI ou Nomeada, com destinos nomeados <Dest>)
  • Adicionado um codec base64 independente (HPDFXFDFEncodeBase64 / HPDFXFDFDecodeBase64) para que a camada XFDF não dependa de HPDFXFA; a biblioteca anteriormente fornecia apenas um decodificador
  • Estendido THPDFXFDFAccess com callbacks de stream incorporado (ResolveStream / NewIndirectStream / ReadStreamBytes) conectados a THotPDF.ResolveLoadedStream / NewIndirectStream / HPDFReadStreamBytes
  • Adicionados 3 casos DUnitX aos testes HotPDF.XFDFTests (ciclo completo base64, Redact com OverlayText, Link com ação URI) — a suite completa agora está com 310/310 no Win32 e Win64

Version 2.255.0

Added

  • Adicionada importação/exportação XFDF (ISO 19444-1): THotPDF.ExportLoadedFormToXFDF / ImportLoadedFormFromXFDF fazem o ciclo completo de valores de campos AcroForm através do XML Forms Data Format (a contraparte XML do FDF), cobrindo campos simples e em camadas (nome separado por pontos), listas de seleção múltipla (múltiplos irmãos <value>), valores de exportação de checkbox / rádio e campos de assinatura (apenas nome, sem <value> por §6.3.3.1); a saída é um documento UTF-8 <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"> com o namespace Adobe conforme exigido pelo §5.5.2
  • Adicionado THotPDF.ExportLoadedAnnotationsToXFDF / ImportLoadedAnnotationsFromXFDF para os 14 subtipos de anotação da Tabela 1 do ISO 19444-1 que o HotPDF já cria (text / freetext / line / square / circle / polygon / polyline / highlight / underline / strikeout / squiggly / stamp / ink / caret), carregando os atributos comuns (page, rect, color, flags, name, date, title, contents, subject, creationdate, opacity, intent), geometria específica do tipo (QuadPoints para marcação, Vertices para polígono/polilinha, L para linha, InkList para tinta), o ícone para text/stamp e popups filhos; os subtipos FileAttachment / Sound / Redact / Ação de link são diferidos para uma rodada posterior
  • Adicionado Lib/HPDFXFDFXml.pas: um mecanismo XML leve e independente (sem dependência de MSXML / OmniXML, compila de Delphi 5 a RAD Studio) fornecendo um DOM mínimo (THPDFXFDFNode), um analisador tolerante (BOM, comentários, CDATA, instruções de processamento, ordem de atributos, autofechamento, UTF-8 multibyte) e um gravador UTF-8 aplicando a convenção de escape do ISO 19444-1 §5.8.2 (entidades para & < > ", referências de caracteres para LF/CR/TAB, literais octais para outros bytes de controle)
  • Adicionado Lib/HPDFXFDF.pas: a camada de negócios XFDF, desacoplada do HPDFDoc via um registro de ponteiros de função (THPDFXFDFAccess) vinculado pela seção de implementação do HPDFDoc (mesmo padrão que HPDFTextExtraction); fornece auxiliares para cor #RRGGBB ↔ DeviceRGB e nome do flag ↔ bit-set inteiro
  • Adicionado HotPDF.XFDFTests (8 casos DUnitX) cobrindo o mecanismo XML (ciclo completo de escape, tolerância de análise, campos aninhados, UTF-8), exportação/importação de campo sobre um registro de acesso mock e exportação/importação de anotação sobre um mock construído a partir de instâncias THPDFDictionaryObject reais — todos passam no Win32 e Win64

Version 2.254.0

Added

  • Adicionada extração estruturada de faturas do lado da leitura: HPDFFacturXXMLElementText executa uma varredura de substring consciente de limite de palavra para qualquer elemento CII/UBL (sem XML DOM, funciona em todos os Delphi suportados), HPDFFacturXInvoiceSummaryFromXML e THotPDF.GetLoadedInvoiceSummary retornam um registro THPDFFacturXInvoiceSummary com os campos comuns BT-1/2/5/27/44/106/110/112/115 (número da fatura, data de emissão, moeda, nomes do vendedor/comprador, totais de linha/imposto/geral), com o nome do comprador refinado localizando o agregado BuyerTradeParty em vez de apenas o primeiro ram:Name
  • Adicionado escaneamento de regressão estrutural do PDF/A-3 como THotPDF.GetLoadedPDFAIssues, deliberadamente separado de ValidateFacturXInvoice para que o veredito do contêiner Factur-X permaneça estável (uma fatura híbrida com um OutputIntent ausente ainda é um contêiner válido, apenas não um arquivo PDF/A-3 compatível); espelha as asserções ISO 19005-3 que o veraPDF levanta para fontes não incorporadas (fxviFontsNotEmbedded), OutputIntent ausente (fxviMissingOutputIntent) e criptografia proibida (fxviEncryptedDocument), todos novos membros do enum THPDFFacturXValidationIssue
  • Adicionada classificação de anexos incorporados via THotPDF.GetLoadedFacturXAttachments: enumera cada arquivo incorporado e o classifica sob a taxonomia da especificação Factur-X 1.09 6.4 (fatura primária CII, representação suplementar UBL ou EDIFACT, documento de suporte) usando o novo enum THPDFFacturXAttachmentRole, para que os receptores possam rotear anexos sem rederivar a função a partir de nomes de arquivos
  • Adicionado suporte a anexo suplementar EDIFACT simétrico ao UBL: THotPDF.AddEDIFACTSupplementaryFile incorpora uma mensagem EDIFACT como factur-xedifact.edi (MIME text/plain, relacionamento Alternative), HPDFIsFacturXEDIFACTFileName reconhece o nome del arquivo e DetectFacturXInvoice o registra em um novo campo THPDFFacturXInvoiceInfo.EDIFACTFileName
  • Adicionado suporte a PDF/A-4 / PDF/A-4f (ISO 19005-4, nota de rodapé 2 da especificação Factur-X 1.09): PDFAPart agora reconhece '4'/'4F' (emitindo pdfaid:part=4) e PDFAConformanceLevel retorna vazio para a parte 4, pois o PDF/A-4 descarta os níveis A/B/U; IsPDFA2OrLater cobre automaticamente a parte 4 para que as verificações de restrição existentes se apliquem
  • Adicionado teste de consistência visual/XML do Princípio 4 como THotPDF.ValidateVisualXmlConsistency: despeja o texto visível de cada página e verifica se o número da fatura, vendedor, comprador e totais gerais presentes no XML incorporado também aparecem na representação legível por humanos (especificação Factur-X 1.09 5.1); uma incompatibilidade é relatada como uma lista de nomes de campos ausentes, enquadrada como um aviso heurístico em vez de uma falha de validação rígida, pois o PDF pode formatar ou quebrar valores

Changed

  • O exemplo de E-Invoice ShowValidationReport agora renderiza o resumo da fatura do lado da leitura, o conjunto independente de problemas do PDF/A-3, a lista de anexos classificados e o veredito de consistência visual/XML do Princípio 4 ao lado das verificações de regras de negócios Schematron e contêiner existentes, demonstrando as novas APIs do lado da leitura em cada PDF gerado

Version 2.253.1

Fixed

  • Alinhado o código-fonte da demo E-Invoice com suas asserções de teste de regressão: TInvoiceForm = class(TForm) agora usa a declaração espaçada padrão, e IsDefaultOutputFile introduz uma variável local Profile por iteração (definida a partir de GetProfile(I)) para que a fonte carregue o literal string(Profile.OutputBaseName)+ '.pdf' exato que os testes verificam, evitando a chamada duplicada de GetProfile por iteração do loop; resolve as duas falhas de longa data EInvoiceDemoDefaultOutputUsesProfileSuffix / EInvoiceDemoUsesProjectFileAndOutputNames

Version 2.253.0

Added

  • Adicionada renderização de página de documento carregado: THotPDF.RenderLoadedPageToBitmap(PageIndex, DPI) desenha uma página em um GDI TBitmap RGB de 24 bits (chamador libera) interpretando o stream /Contents contra um estado gráfico completo (CTM, cores, atributos de linha, estado do texto) e um caminho atual, fornecendo cada operador ao GDI por meio de pontes de caminho / texto / imagem; o conjunto de operadores suportados cobre o subconjunto comum de PDF do documento: texto (BT ET Tf Tc Tw Tz TL Tr Ts Td TD Tm T* Tj TJ ' "), construção e pintura de caminho (m l c v y re h S s f F f* B b B* b* n W W*), cor (rg RG g G k K), estado gráfico (q Q cm w) e Do para imagem e um nível de recursão de Form XObject; os espaços de cores tratados são DeviceRGB / Gray / CMYK e Indexed; CalRGB / Lab / ICCBased degradam para uma aproximação de melhor esforço; seis novas unidades (HPDFRenderMatrix, HPDFRenderGraphicsState, HPDFRenderColorSpace, HPDFRenderPath, HPDFRenderFontMetrics, HPDFPageRenderer) mantêm o renderizador desacoplado do HPDFDoc por meio de um registro de acessadores de ponteiro de função
  • Adicionado HotPDF.RenderTests (3 casos DUnitX) cobrindo renderização de página de texto (bitmap não em branco), tamanho da página correspondente a DPI e retornos nulos para índice de página fora do intervalo — todos passam no Win32 e Win64

Version 2.252.0

Added

  • Adicionada substituição de texto em documento carregado: THotPDF.ReplaceLoadedPageText e ReplaceLoadedDocumentText regravam cada ocorrência de um termo codificando inversamente a substituição por meio da tabela de código de caracteres da fonte (HPDFEncodeUnicode) e emendando o resultado apenas nas faixas de bytes de código correspondentes de cada operando de string — bytes não correspondentes, espaço em branco entre tokens e operadores são preservados literalmente; cada stream /Contents é processado isoladamente para que páginas de vários streams permaneçam bem-formadas; streams compactados são descompactados para edição e salvos descompactados (a entrada /Filter é descartada, aceitando um arquivo maior); ReplaceCount relata o número de regravações de operandos executadas
  • Adicionado HPDFEncodeUnicode em HPDFTextExtraction: o inverso de HPDFDecodeCharCode, mapeando um codepoint Unicode de volta para bytes de código de caracteres de uma fonte ao percorrer a mesma cadeia de estratégia ao contrário (ToUnicode bfchar/bfrange, stream de codificação cidchar/cidrange + CIDToUnicode, Type0 CIDToGID/CIDIdentity, tabelas predefinidas WinAnsi/MacRoman), para que um ciclo completo de codificação→decodificação seja estável para qualquer código que o decodificador possa resolver
  • Adicionado HPDFSerializeStringLiteral / HPDFSerializeHexString em HPDFContentStream: reserializa bytes de código de caracteres brutos de volta em um literal de string de stream de conteúdo PDF ((...) com ( ) \ e escapes octais) ou string hexadecimal (<...>), espelhando o ReadLiteralString/ReadHexString do tokenizer para que o ciclo completo de análise → reserialização seja limpo
  • Adicionado HPDFMatchGlyphs em HPDFContentStream: um comparador de sequência de glifos de função pura extraído de SearchLoadedPageText para que os caminhos de busca e substituição compartilhem um núcleo de correspondência comum
  • Adicionado THPDFPageFontResolver.LookupDecoder para que o caminho de substituição possa obter uma cópia do decodificador de fonte para codificação reversa fora do loop do interpretador
  • Adicionado HotPDF.ReplaceTests (8 casos DUnitX) cobrindo ciclos completos de serializador (escape de literal/hex/byte alto) e cenários de mesmo comprimento de ponta a ponta, comprimentos diferentes, correspondência múltipla, degradação de stream compactado e agelha ausente — todos passam no Win32 e Win64

Version 2.251.0

Added

  • Adicionada busca de texto em documento carregado: THotPDF.SearchLoadedPageText e SearchLoadedDocumentText localizam cada ocorrência de um termo correspondendo à sequência de glifos Unicode produzida por ExtractLoadedPageGlyphs, retornando um THPDFTextMatchArray cujas entradas carregam o intervalo de glifos, a origem e a largura do espaço do usuário e o índice de token/item de origem para que um chamador possa reescrever os bytes do operando posteriormente; a correspondência insensível a maiúsculas e minúsculas usa dobramento apenas ASCII para manter o comportamento idêntico em todas as toolchains Delphi 5–XE
  • Estendido o tokenizer e interpretador de stream de conteúdo com rastreamento de deslocamento de bytes: THPDFContentToken e THPDFArrayItem agora registram StartOfs/EndOfs abrangendo cada operando exatamente como escrito (incluindo delimitadores ( ) ou < >), e cada THPDFGlyphRecord carrega TokenIndex/ItemIndex/ByteOffset apontando de volta para o operando e unidade de código que o produziu — a base para a substituição de texto in-loco
  • Adicionado HotPDF.SearchTests (10 casos DUnitX) cobrindo reconstrução de intervalo de deslocamento para operandos literal/hex/TJ-array, a referência cruzada glifo→token e busca de ponta a ponta única/insensível a maiúsculas e minúsculas/múltipla correspondência/em todo o documento, além dos casos extremos de agulha vazia e agulha ausente — todos passam no Win32 e Win64

Version 2.250.0

Fixed

  • Hardened ImportLoadedFormFromFDF: substituído o scanner de nível de byte /T+espaço + /V+espaço (que analisava incorretamente /Type /Catalog e outros tokens /T* como nomes de campo, engolia bytes através de objetos para o próximo ( e perdia valores de string hexadecimal) com uma análise estrutural — cada dicionário de campo << /T ... /V ... >> dentro do array /Fields é fatiado pelo rastreamento de profundidade de colchetes (respeitando literais de string e hexadecimais) e entregue ao HPDFParserParseSimpleDictionary, para que valores de string, string hexadecimal, nome e numéricos /V agora façam todos o ciclo completo corretamente
  • Valores /V carregados como strings hexadecimais UTF-16BE (<FEFF...>) agora mantêm sua forma hexadecimal por meio da importação: HPDFSetDictFormValue detecta o prefixo BOM FEFF e define IsHexadecimal para que o gravador re-emita <FEFF...> em vez de um literal corrompido (FEFF...); valores de nome de checkbox / rádio (/Yes, /Off) são preservados como nomes porque o caminho de correção de tipo existente já mantém o slot THPDFNameObject

Added

  • Adicionado HotPDF.FDFTests (5 casos DUnitX) cobrindo o ciclo completo de exportação→importação para campos de texto, a preservação do tipo nome-valor de checkbox, descarte silencioso de nomes de campos desconhecidos, o ciclo completo de valor hexadecimal UTF-16BE e a regressão de ruído da palavra-chave /Type — todos passam no Win32 e Win64

Version 2.249.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados HPDFIsFacturXVersion accepts the 2p5 Detalhes localizados da alteração no comportamento da API e nos símbolos listados HPDFFacturXNormalizeVersion Detalhes localizados da alteração no comportamento da API e nos símbolos listados 2p0 Detalhes localizados da alteração no comportamento da API e nos símbolos listados HPDFFacturXFileNameOK, HPDFFacturXXMLGuidelineOK Detalhes localizados da alteração no comportamento da API e nos símbolos listados 2p5 identically to 2p0Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados THotPDF.AddUBLSupplementaryFile Detalhes localizados da alteração no comportamento da API e nos símbolos listados factur-xubl.xml Detalhes localizados da alteração no comportamento da API e nos símbolos listados Alternative Detalhes localizados da alteração no comportamento da API e nos símbolos listados application/xml Detalhes localizados da alteração no comportamento da API e nos símbolos listados AddPDFA3AssociatedFile pipeline), HPDFIsFacturXUBLFileName Detalhes localizados da alteração no comportamento da API e nos símbolos listados DetectFacturXInvoice Detalhes localizados da alteração no comportamento da API e nos símbolos listados THPDFFacturXInvoiceInfo.UBLFileName Detalhes localizados da alteração no comportamento da API e nos símbolos listados BuildUBLSupplementaryXML Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados HPDFEInvoiceValidator Detalhes localizados da alteração no comportamento da API e nos símbolos listados Lib/resources/Schematron/ and exposes HPDFValidateEInvoice Detalhes localizados da alteração no comportamento da API e nos símbolos listados ValidateFacturXInvoice Detalhes localizados da alteração no comportamento da API e nos símbolos listados skippedDetalhes localizados da alteração no comportamento da API e nos símbolos listados EInvoiceValidation Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Alterado

  • AddFacturXAssociatedFile Detalhes localizados da alteração no comportamento da API e nos símbolos listados Version argument through HPDFFacturXNormalizeVersion before writing XMP, so 2p5 Detalhes localizados da alteração no comportamento da API e nos símbolos listados 2p0 Detalhes localizados da alteração no comportamento da API e nos símbolos listados 1.0/2p0 behaviour
  • E-Invoice sample GenerateInvoicePDF Detalhes localizados da alteração no comportamento da API e nos símbolos listados AttachUBL Detalhes localizados da alteração no comportamento da API e nos símbolos listados FalseDetalhes localizados da alteração no comportamento da API e nos símbolos listados -withUBL Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.248.0

新增

  • 加固 E-Invoice 例程的 profile 索引模型:把 GetProfile 从 1 基 case 加 else 兜底改为显式 0 基双射(0 BASIC .. 5 EN 16931),下拉框顺序同步重排,默认仍为 EN 16931;补全 E-Invoice 例程 README 对 ZUGFeRD 1.0 COMFORT 和 ZUGFeRD 2.0 BASIC 两个 profile 的输出文件、校验状态和运行输出描述

Version 2.247.0

新增

  • 新增已加载文档的 22 项创建/写入 API(第九轮,实现中等工程量特性,全部在已加载对象图上构造字典并注册到 AcroForm/Page):表单字段创建——文本字段(AddLoadedTextField)、复选框(AddLoadedCheckBox)、组合框(AddLoadedComboBox)、列表框(AddLoadedListBox)、按钮(AddLoadedPushButton)、签名字段(AddLoadedSignatureField),自动建立/补全 AcroForm 与 /NeedAppearances;注释子类型——橡皮图章(AddLoadedStampAnnotation)、高亮/下划线/波浪线/删除线(AddLoadedHighlightAnnotation)、矩形/圆形(AddLoadedSquareAnnotation)、直线(AddLoadedLineAnnotation)、墨迹(AddLoadedInkAnnotation)、多边形/折线(AddLoadedPolygonAnnotation)、插入符(AddLoadedCaretAnnotation);FDF 表单数据互换(ExportLoadedFormToFDF/ImportLoadedFormFromFDF);N-up 拼版(StitchLoadedPage/StitchLoadedPageSideBySide);脱敏遮罩(RedactLoadedRect

Version 2.246.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listadosGetLoadedFormFieldOption/GetLoadedFormFieldOptions)/write (SetLoadedFormFieldOptions), field default-value read/write (GetLoadedFormFieldDefaultValue/SetLoadedFormFieldDefaultValue), field reset (ResetLoadedFormField), text-note annotation (AddLoadedTextAnnotation), free-text annotation (AddLoadedFreeTextAnnotation), annotation color (SetLoadedAnnotationColor), cross-page annotation move (MoveLoadedAnnotation), bookmark color (SetLoadedOutlineColor)/style (SetLoadedOutlineStyle)/delete (RemoveLoadedOutline), document Trapped flag (SetLoadedTrapped), optional-content group visibility (SetLoadedOCGVisibility), page-label write (SetLoadedPageLabel)

Version 2.245.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listadosSetLoadedAnnotationFlagsDetalhes localizados da alteração no comportamento da API e nos símbolos listadosAddLoadedLinkAnnotation), bookmark expand/collapse state (SetLoadedOutlineOpen), document open-action (SetLoadedOpenActionPage), form-field export-value read/write (SetLoadedFormFieldExportValue/GetLoadedFormFieldExportValue), form-field tooltip (SetLoadedFormFieldTooltip/GetLoadedFormFieldTooltip), form-field border width/background color (SetLoadedFormFieldBorderWidth/BackgroundColor), clear all JavaScript (RemoveLoadedJavaScriptAll), page content copy (CopyLoadedPage)

Version 2.244.0

新增

  • 新增已加载文档的 15 项写入/编辑 API(第二轮写入,覆盖 RemoveAnnotation/SetRotationAngle 等模式):页面旋转写入(SetLoadedPageRotation)、注释删除/内容修改/清空(RemoveLoadedAnnotation/SetLoadedAnnotationContents/ClearLoadedAnnotations)、查看器偏好写入(SetLoadedViewerPreferences)、日期写入(SetLoadedCreationDate/ModDate)、Catalog 版本写入(SetLoadedCatalogVersion)、页面持续时间/过渡效果写入(SetLoadedPageDuration/Transition)、书签标题修改(SetLoadedOutlineTitle)、嵌入文件删除(RemoveLoadedEmbeddedFile)、表单字段值写入(SetLoadedFormFieldValueByIndex/ByName

Version 2.243.0

新增

  • 新增已加载文档的 14 项写入/编辑 API(首次突破只读检视,覆盖 SetXMLMetadata/InsertAnnotation/Stitch 等模式):页面模式/布局写入(SetLoadedPageMode/PageLayout)、文档语言写入(SetLoadedLanguage)、文档信息写入(SetLoadedCreator/Producer/Title/Author/Subject/Keywords)、Info 键删除(RemoveLoadedInfoKey)、XMP 元数据写入(SetLoadedXMPMetadata)、文档级 JavaScript 增删(AddLoadedDocumentJavaScript/RemoveLoadedJavaScript)、页面框写入(SetLoadedPageBox)。这些方法修改已加载的对象图,调用 SaveLoadedDocument 持久化

Version 2.242.0

新增

  • 新增已加载文档的 15 项检视 API(第四轮标准 PDF 功能差距扫除):页面模式/布局读取(GetLoadedPageMode/PageLayout)、Catalog 版本(GetLoadedCatalogVersion)、页面对象号(GetLoadedPageObjectNumber)、表单字段标志位组合(GetLoadedFormFieldFlags)/NoExport 检测(IsFormFieldNoExport)、注释标志解码(IsLoadedAnnotationHidden/Printable/Locked)、度量单位转换(PointsToMM/MMToPoints/PointsToInches/InchesToPoints/PointsToCm/CmToPoints

Version 2.241.0

新增

  • 新增已加载文档的 20 项深度检视 API(第三轮标准 PDF 功能差距扫除):Info 字典键枚举(GetLoadedInfoKeyCount/KeyName/KeyValue)、表单字段矩形/页索引(GetLoadedFormFieldRect/PageIndex)、注释 URI/弹出框/名称/修改日期(GetLoadedAnnotationURI/PopupRect/Name/ModDate)、书签颜色/样式(GetLoadedOutlineColor/Style)、元数据流检测(HasLoadedMetadata)、Trailer ID(GetLoadedTrailerID)、XRef 类型(GetLoadedXRefType)、最大对象号(GetLoadedMaxObjectNumber)、源文件大小(GetLoadedSourceFileSize)、嵌入字体计数(GetLoadedEmbeddedFontCount)、文档语言(GetLoadedLanguage)、页面持续时间/过渡效果(GetLoadedPageDuration/Transition)、表单字段必填标志(IsFormFieldRequired

Version 2.240.0

新增

  • 新增已加载文档的 20 项深度检视 API(第二轮标准 PDF 功能差距扫除):嵌入文件保存到磁盘(SaveLoadedEmbeddedFileToDisk)、设置文档信息字段(SetLoadedDocumentInfo)、读取 JavaScript 源码(GetLoadedJavaScriptSource)、命名目标枚举(GetLoadedNamedDestinationCount/Name)、OCG 可见性(GetLoadedOCGVisibility)、页面标签详情(GetLoadedPageLabelInfo)、全文档注释/字体计数(GetLoadedTotalAnnotationCount/TotalFontCount)、PDF/A 与 PDF/X 合规检测(IsLoadedPDFA/IsLoadedPDFX/GetLoadedPDFAVersion/GetLoadedPDFXVersion)、批量便捷方法(GetLoadedOutlineTitles/AllLinkURIs/ImageCountPerPage/AllPageBoxes/FormFieldNames/FormFieldValues)、一键文档摘要(GetLoadedSummary 返回页数/注释/字体/图像/表单/签名计数 + 加密/AcroForm/结构树标志)

Version 2.239.0

新增

  • 新增已加载文档的 20 项检视 API(标准 PDF 功能差距批量扫除):PDF 版本字符串(GetLoadedPDFVersionString)、线性化检测(IsLoadedLinearized)、XMP 元数据读取(GetLoadedXMPMetadata)、文档级 JavaScript 枚举(GetLoadedJavaScriptCount/Name)、页面标签计数(GetLoadedPageLabelCount)、查看器偏好(GetLoadedViewerPreferences)、结构树检测(HasLoadedStructureTree)、签名字段计数(GetLoadedSignatureFieldCount)、可选内容组(OCG)枚举(GetLoadedOCGCount/Name)、OutputIntent 检测(HasLoadedOutputIntent/GetLoadedOutputIntentInfo)、AcroForm 检测(HasLoadedAcroForm)、创建/修改日期(GetLoadedCreationDate/ModDate)、批量数组便捷方法(GetLoadedEmbeddedFileNames/LinkURIs/AnnotationSubtypes/FontNames 返回 THPDFAnsiStringArray

Version 2.238.0

新增

  • 新增已加载文档的深度检视 API(8 个只读方法):GetLoadedPageWidth/GetLoadedPageHeight 读取页面尺寸(pt);GetLoadedLinkCount/GetLoadedLinkInfo 枚举超链接注释(URI + 矩形);GetLoadedEncryptionInfo 查询加密版本、密钥长度、权限标志;GetLoadedEmbeddedFileCount/GetLoadedEmbeddedFileName 枚举文档嵌入文件(附件)。这些 API 遍历已加载的对象图但不修改它,仿现有 GetLoadedImageInfo/GetLoadedAnnotationInfo 模式。LoadedDocInspector 例程同步更新,演示页面尺寸/旋转/链接计数、加密状态、嵌入文件清单

Version 2.237.0

新增

  • 新增已加载文档的元数据查询 API:GetLoadedDocumentInfo 从 Info 字典读取标题、作者、主题、关键词、创建者、生成器;GetLoadedPageRotation 读取页面旋转角度;GetLoadedOutlineCount/GetLoadedOutlineItem 枚举书签树的顶层条目(标题 + 目标页索引)。这些都是只读查询,仿现有 GetLoadedImageInfo 模式,不修改文档对象图

Version 2.236.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados THotPDF methods: HPDFCMapReader parses both ToUnicode beginbfchar/beginbfrange Detalhes localizados da alteração no comportamento da API e nos símbolos listados begincidchar/begincidrange Detalhes localizados da alteração no comportamento da API e nos símbolos listados HPDFContentStream Detalhes localizados da alteração no comportamento da API e nos símbolos listadosBT/ET, Tf, Tj/TJ/'/", Td/TD/Tm/T*, q/Q, inline-image BI/ID/EI Detalhes localizados da alteração no comportamento da API e nos símbolos listados HPDFTextExtraction Detalhes localizados da alteração no comportamento da API e nos símbolos listados/ToUnicode/Encoding Detalhes localizados da alteração no comportamento da API e nos símbolos listados /DescendantFonts /CIDToGIDMapcid2code.txtDetalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Added THotPDF.GetLoadedFontDecoder, THotPDF.ExtractLoadedPageGlyphs and THotPDF.ExtractLoadedPageText Detalhes localizados da alteração no comportamento da API e nos símbolos listados ExtractLoadedPageText Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Added ExtractText Detalhes localizados da alteração no comportamento da API e nos símbolos listados LoadedDocInspector read-only console layout

Alterado

  • HPDFDoc now uses HPDFCMapReader, HPDFContentStream and HPDFTextExtraction Detalhes localizados da alteração no comportamento da API e nos símbolos listados THotPDF Detalhes localizados da alteração no comportamento da API e nos símbolos listados HPDFParser standalone-unit pattern (no dpk contains Detalhes localizados da alteração no comportamento da API e nos símbolos listados HPDFDocDetalhes localizados da alteração no comportamento da API e nos símbolos listados THPDFFontDocAccess Detalhes localizados da alteração no comportamento da API e nos símbolos listados ResolveLoadedDictionary / ResolveLoadedStream / HPDFReadStreamBytes helpers

Version 2.235.1

新增

  • 新增 PDFOptimize 控制台例程(Delphi):演示生成端 PDF 体积优化,通过同内容、不同压缩设置的多份 PDF 横向对比量化每种策略的收益 —— 文本/矢量文档的 cmNone vs cmFlateDecodeUseObjectStreams 对象流打包、彩色照片的 icJpeg JpegQuality 扫描对比 icFlate、双层扫描图的 icCCITT42(G4)对比 icJBIG2 lossless/lossy,控制台打印体积对比表,所有测试图像均在内存合成生成不依赖外部文件,并明确标注 HotPDF 压缩为生成端能力(无法对已加载 PDF 重新压缩)

Version 2.235.0

Added

  • Adicionada a demo consolidada Stamp (Delphi e C++Builder): une as demos anteriores Modify, MultiPageStamp e Watermark em um único programa VCL que sobrepõe três camadas de carimbo ativáveis independentemente sobre um intervalo de páginas analisado —— marca d'água de texto no fluxo de conteúdo (AddTextWatermark), anotação de carimbo interativa (AddStampAnnotation) e bitmap de canto (AddImage + ShowImage), mantendo a análise de intervalo de páginas (HPDFParsePageRange) e o posicionamento nos quatro cantos
  • Adicionada a demo de console consolidada PageSizes: une as demos anteriores SmallSize, NormalSize e LargeSize em um único programa que enumera todos os valores do enumerado THPDFPageSize das categorias pequeno/normal/grande mais as dimensões personalizadas Width/Height em uma única passagem

Changed

  • Fundidos os 5 programas independententes do grupo de demos Security (Encryption, SecurityAES256, DecryptPDF, PFXSignature, SignatureField) em um único programa de console que cobre criptografia RC4-128, criptografia AES-256 R5/R6, descriptografia por senha, espaços reservados de campo de assinatura e assinatura PFX (ignorada automaticamente quando o fixture PFX está ausente)
  • Fundidas as interfaces gráficas AddPages e DelPages em uma única AddDelPages, atualizando simultaneamente PageMultiSize e AddDelPages do C++Builder para igualar a riqueza do Delphi (Size/Orientation/largura-altura personalizadas/contagem/rótulo/progresso)
  • Movida a ferramenta de regressão de glifos FontTest de Demo para Tests\Delphi\FontTest e Tests\C++Builder\FontTest, esclarecendo seu papel como ferramenta de teste em vez de demo funcional

Removed

  • Removida a demo puramente redundante TiffToPDF (Delphi e C++Builder); sua capacidade é totalmente coberta pelo caminho de conversão TIFF em ConvertTo
  • Removida a demo CopyPages do C++Builder; sua capacidade é totalmente coberta pelo mais completo PDFmerge
  • Removida a demo Logger; o uso da fachada de logging em tempo de execução HPDFLogger / HPDFLog que ela demonstrava foi migrado para a página de tópico da documentação da API Docs/zh-cn/topics/HPDFLoggerFacade.html (a biblioteca retém a unidade HPDFLogger; apenas o projeto demo foi excluído)

Fixed

  • Corrigido o algoritmo de exclusão de páginas pares no antigo DelPages (agora fundido em AddDelPages): o loop original contava um número estático de páginas contra o documento em redução, excluindo na verdade os índices 1..ponto médio em vez das verdadeiras páginas pares; agora percorre de cima para baixo a partir da página par mais alta excluindo índices base 0, e corrige o vazamento da variável global THotPDF a cada clique

Version 2.234.1

Correções

  • Corrigido erro de compilação na unidade HPDFJBIG2Enc (E2003 Undeclared identifier: 'Invariant'): A RTL do Delphi mais antigo não possui TFormatSettings.Invariant, atof agora usa um TFormatSettings construído manualmente consistente com HPDFXFA.XFAInvariantFormatSettings, restaurando a compilação no RAD Studio 12.0 Win64

Version 2.234.0

Novidades

  • Novo backend de decodificação de alto desempenho para imagens JBIG2: A extração de imagem no lado do carregamento (ExtractLoadedImage etc.) agora habilita por padrão este backend para decodificar imagens JBIG2 incorporadas em PDFs
  • Adicionada propriedade THotPDF.UseExternalJBIG2Decoder (padrão True): Defina como False para voltar ao decodificador nativo em Pascal como alternativa

Version 2.233.0

Novidades

  • Novo backend de codificação de alto desempenho para codificação de imagens JBIG2: AddImage agora habilita por padrão este backend ao comprimir bitmaps monocromáticos com icJBIG2, produzindo fluxos JBIG2 com codificação aritmética mais rápidos e em conformidade com o padrão
  • Adicionada opção THPDFJBIG2Options.UseExternalEncoder (padrão True): Defina como False para voltar ao codificador nativo Pascal MMR como alternativa

Version 2.232.1

Correções

  • Corrigido um defeito de propagação de carry no codificador aritmético generic-region JBIG2 (HPDFJBIG2Codec) em imagens de alta entropia: A saída de bytes (byte-out e preenchimento 0xFF) do codificador aritmético MQ omitia a limpeza de bits de spillover de carry, resultando em erro de codificação para bitmaps monocromáticos de alta entropia, como documentos ruidosos e esparsos (padrões regulares de baixa entropia não acionam isso acidentalmente e não são afetados); O terminador de fluxo de codificação também foi normalizado para o formato padrão para garantir que decodificadores de terceiros possam analisar completamente

Version 2.232.0

Novidades

  • O backend de decodificação JBIG2 (HPDFJBIG2Codec) agora suporta codificação aritmética (MQ): A extração de imagem no lado do carregamento (ExtractLoadedImage) agora pode decodificar imagens JBIG2 codificadas aritmeticamente — generic region aritmético (GBTEMPLATE 0-3 + TPGDON), dicionário de símbolos e regiões de texto; Anteriormente, apenas MMR generic region era suportado

Version 2.231.3

Novidades

  • Suporte ativado para saída PNG para o decodificador de referência jbig2dec: Adicionado build-libpng-vc64.bat (compila 16 objetos principais do libpng 1.8 para Win64\libpng-*.obj com MSVC, gera cabeçalho zlib-ng automaticamente e reutiliza pnglibconf.h.prebuilt), adaptado build-jbig2dec-vc64.bat para habilitar automaticamente jbig2_image_png.c e HAVE_LIBPNG ao detectar objetos libpng e vincular objetos libpng + zlib-ng. jbig2dec.exe agora suporta saída -t png, gerando um PNG grayscale 1-bit de 64x56 para annex-h.jbig2, idêntico à saída SHA-1 e PBM

Version 2.231.2

Novidades

  • Adicionada infraestrutura de compilação para Windows ao decodificador de referência jbig2dec empacotado (Lib/thirdparty/jbig2dec): Adicionado build-jbig2dec-bcc64x.bat (gera 15 objetos COFF64 vinculáveis no Delphi usando Embarcadero bcc64x para consumo futuro por HPDFJBIG2.pas via {$L}) e build-jbig2dec-vc64.bat (gera decodificador de linha de comando standalone jbig2dec.exe usando MSVC), além do template config_types.h.in e .gitignore, corrigindo regras de objetos ausentes em msvc.mak

Correções

  • Problemas de compilação e portabilidade do código upstream do jbig2dec com toolchains modernos do Windows: O GNU getopt da década de 1990, que não compilava, foi substituído por uma implementação moderna e limpa (getopt.c/getopt.h, o MSVC falhava por falta de strings.h, o bcc64x/C23 rejeitava a ausência de protótipos); Corrigido truncamento de size_t de 64 bits em jbig2dec.c::hash_image, underflow uint32→int em jbig2_segment.c::jbig2_find_segment, contagem de bits de 64 bits em sha1.c::SHA1_Update, além do uso indevido do retorno de fread em jbig2dec.c, avisos obsoletos do POSIX e uso do especificador %lu. O algoritmo central de decodificação JBIG2 permanece inalterado em relação ao upstream

Version 2.231.1

Novidades

  • Extração de imagem no lado do carregamento (ExtractLoadedImage) agora suporta múltiplas cadeias de filtros: Filtros de dados prefixados na imagem, como ASCIIHexDecode / ASCII85Decode / FlateDecode / LZWDecode / RunLengthDecode, são descompactados sequencialmente antes da decodificação pelo filtro de imagem final (DCTDecode / JPXDecode ou raster), por exemplo, [/ASCII85Decode /FlateDecode]

Version 2.231.0

Novidades

  • Adicionado novo backend de decodificação de fax CCITT (unidade HPDFCCITTDecode): Implementa decodificação de fax 1D / 2D ITU-T T.4 (G3) e T.6 (G4), permitindo que a extração de imagem (ExtractLoadedImage) decodifique imagens bicromáticas CCITTFaxDecode, em conformidade com os parâmetros K / Columns / Rows / BlackIs1 / EncodedByteAlign de /DecodeParms

Version 2.230.2

Novidades

  • Extração de imagem no lado do carregamento (ExtractLoadedImage) agora suporta rasters DeviceGray e Indexed de 1 / 2 / 4 bits por componente: Desempacotamento bit a bit e escalonamento proporcional dos tons de cinza para 8 bits

Version 2.230.1

Novidades

  • Extração de imagem no lado do carregamento (ExtractLoadedImage) agora suporta imagens DeviceCMYK: O raster CMYK de 4 canais é convertido em bitmap RGB usando a fórmula padrão

Version 2.230.0

Novidades

  • Adicionado backend de decodificação JBIG2 (unidade HPDFJBIG2Codec): Implementa decodificação 2D ITU-T T.6 (G4 / MMR), ativando o antes inativo THPDFJBIG2Decoder, permitindo que a extração de imagem no carregamento (ExtractLoadedImage) decodifique imagens bicromáticas JBIG2Decode. Suporta generic region codificado em MMR (incluindo segmento global compartilhado /JBIG2Globals); Codificação aritmética, dicionário de símbolos, texto / regiões halftone ainda não suportados

Version 2.229.3

Novidades

  • Extração de imagem no lado do carregamento (ExtractLoadedImage) agora suporta imagens com cor indexada (Indexed): Os rasters FlateDecode / LZWDecode armazenados no espaço de cor Indexed serão mapeados pela paleta para bitmaps true color. Suporta cores base DeviceRGB / DeviceGray / DeviceCMYK e tabelas de pesquisa em formato hexadecimal ou literal

Version 2.229.2

Novidades

  • Extração de imagem no lado do carregamento (ExtractLoadedImage) agora suporta imagens JPXDecode (JPEG 2000): Imagens XObject codificadas como JPXDecode serão decodificadas em bitmaps usando o backend OpenJPEG, e o GetLoadedImageInfo relata Decodable=True para essas imagens. Imagens JPEG 2000 incorporadas em PDF podem agora ser extraídas diretamente para bitmaps VCL, preservando pixels sem perdas

Version 2.229.1

Novidades

  • Extração de imagem no lado do carregamento (ExtractLoadedImage) agora suporta imagens DCTDecode (JPEG): Imagens XObject codificadas como DCTDecode serão decodificadas em bitmaps por meio de TJPEGImage, e o GetLoadedImageInfo relata Decodable=True para essas imagens

Version 2.229.0

新增

  • 新增加载侧图像提取 API:GetLoadedImageCount / GetLoadedImageInfo / ExtractLoadedImage,可枚举已加载 PDF 中的图像 XObject 并将其解码回 VCL 位图(TBitmap)。GetLoadedImageInfo 通过 THPDFLoadedImageInfo 返回每张图像的尺寸、位深、颜色空间、过滤器与可解码标志,便于在提取前预检。本版可解码以 FlateDecode / LZWDecode / ASCIIHex / ASCII85 / RunLength 编码的 DeviceRGB 与 DeviceGray 8 位栅格;索引色、CMYK、DCTDecode(JPEG)与 JPXDecode(JPEG 2000)图像将在后续版本接入

Version 2.228.0

新增

  • 新增 TJpeg2000BitmapTBitmap 派生类):可直接读写 JPEG 2000 图像,LoadFromStream 将 JP2 / J2K 解码为位图、SaveToStream 将位图编码为 JPEG 2000 码流;支持无损(LosslessCompression)与有损质量(CompressionQuality)两种模式、灰度 / RGB / CMYK 通道,并附带低层解码器 THPDFJpeg2000Decoder 供自定义图像管线直接取用解码后的像素数据

修复

  • 恢复 JPEG 2000(JPXDecode,PDF 1.7 ISO 32000-1 7.4.9)图像支持:此前解码后端因库源损坏退化为占位桩,无法解码任何 JP2 / J2K 码流;现重新接入 OpenJPEG 2.5.4 引擎,可将灰度、RGB 与 YCbCr 图像解码为 8 位样本(高位深分量重采样为 8 位、YCbCr 自动转 RGB、子采样分量按最近邻上采样),兼容带 JP2 box 头的文件与裸 J2K 码流
  • AddImage 现可直接传入 .jp2 / .j2k / .jpt / .jpc 文件并按所选压缩方式嵌入 PDF(自动识别格式),无需先行手工转码

Version 2.227.0

变更

  • 将 GSUB/GPOS 上下文应用与 Mark 定位函数(37 个纯函数)从 HPDFDoc.pas 追加提取到 HPDFShaping.pas。这批函数覆盖 GSUB 上下文/链式上下文/反向链式替换、GPOS 上下文/链式上下文/嵌套定位、Mark-to-Base/Mark-to-Mark/Cursive/Mark-to-Ligature 定位、GDEF 类查找、Collect-GID 子集闭包等,全部接收 TBytes 表切片 + glyph ID 值参数,不触碰实例状态。HPDFDoc.pas 本轮减约 11000 行(含被提取函数之间的 forward 声明和注释块),累计六轮拆分减约 21700 行(原文件的 26%)

Version 2.226.0

变更

  • 将简单对象解析器(ParseSimpleDictionaryParseSimpleArray)从 HPDFDoc.pas 提取到新单元 HPDFParser.pas。这两个 byte 级递归下降解析器从 AnsiString 内容构建 THPDFDictionaryObject / THPDFArrayObject 树,不触碰 THotPDF 实例状态;原方法保留为转发 stub,公开 API 不变。这是巨石拆分第五轮,本轮减约 2060 行,五轮累计减约 10700 行(原文件的 13%)

Version 2.225.0

变更

  • 将 OpenType 整形原语(71 个纯函数)从 HPDFDoc.pas 提取到新单元 HPDFShaping.pas。这批函数覆盖 GSUB 覆盖表/查找/替换、GDEF 类查找、TTF 表读取器、脚本重排与整形(Arabic、Syriac、Indic 语系、Thai/Lao、Hebrew、Javanese 等),全部接收值参数(TBytes 表切片、UnicodeString run、glyph ID)从不触碰 THotPDFTHPDFPage 实例。HPDFDoc.pas 通过 implementation 段 uses HPDFShaping 访问,TGPOSValue/TGPOSValueArray 类型一并迁移。这是巨石拆分第四轮,本轮减约 3000 行

Version 2.224.0

变更

  • 将 Factur-X / ZUGFeRD / XMP 电子发票辅助函数(22 个 standalone 函数)从 HPDFDoc.pas 提取到新单元 HPDFFacturX.pas。这批函数覆盖 FX/Basic/Minimum/EN16931 合规验证、XMP 元数据生成、嵌入式 XML 解析,全部自包含(仅操作值参数与 TBytes,不触碰 THotPDF 实例状态)。HPDFDoc.pas 通过 implementation 段 uses HPDFFacturX 访问,公开 API 不变。这是 HPDFDoc.pas 巨石拆分的第三轮,累计三轮减约 5600 行

Version 2.223.0

变更

  • 将 Direct File API 的底层 I/O helper(44 个共享函数)从 HPDFDoc.pas 提取到新单元 HPDFDirectFileIO.pas。这些 byte / xref / object-body / AES-crypt 读取函数被加载器和 Direct File 子系统共用,提取后两个子系统都通过 uses HPDFDirectFileIO 访问。HPDFDoc.pas 因此再减少约 1640 行(累计两轮拆分减约 5200 行)。DA 专用类型(THPDFDirectReadBufferTHPDFDirectWriteBufferTHPDFDirectIntArray)和全局缓冲(GHPDFCopyBuffer)一并迁移到新单元

Version 2.222.0

变更

  • 将预检(preflight)、合规检查、PDF/VT 验证相关代码从 HPDFDoc.pas 提取到新单元 HPDFPreflight.pas。原有 25 个公开方法(CreatePreflightReportValidatePDFVTEmbedPreflightReportAsXMP 等)签名完全不变,实现改为转发到新单元的自包含 standalone 函数;HPDFDoc.pas 因此减少约 3500 行。新增 3 个只读访问器(LoadedObjectCountGetLoadedObjectByIndexLoadedRootObjectIndex)让独立单元可枚举已加载文档的对象图

Version 2.221.0

新增

  • 全面支持多语言化:将 Readme.html 提取至 Docs/en-us 目录,并新增其他 37 种语言的翻译版本;更新了安装程序脚本(HotPDF-FULL.issHotPDF-TRIAL.iss),现在会根据安装时所选的语言,自动提取并放置对应语言版本的 Readme.html 至安装根目录

Version 2.220.0

新增

  • 新增统一运行期日志门面 THPDFLogger 与全局实例 HPDFLog:把原本散落的编译期调试开关统一为运行期可控的日志门面。提供 Error / Warning / Info / Debug 四级严重度过滤,可同时输出到文件、OutputDebugString(IDE Event Log 可见)和控制台;文件目标带 10 MB 单备份滚动;线程安全(TCriticalSection 保护);关闭态热路径仅一次布尔判断即返回,发布版零开销。LoadFromFileCreatePreflightReport 和 xref-stream 解析 fallback 三处诊断点已接入,加载成功 / 失败、preflight 摘要、对象流回退等事件会在启用日志时写入结构化记录。取代改 HotPDF.inc 重编包的传统做法,用户可在运行期随时开关诊断输出

Version 2.219.0

新增

  • 新增 THotPDF.GetGPOSSingleAdjustment(GID, FeatureTag, out XPlacement, YPlacement, XAdvance, YAdvance): Boolean:OpenType GPOS LookupType 1 Single Adjustment 的独立公开查询。按任意 4 字节 feature tag(典型 'size' 光学尺寸 / 'vhal' 半高度)收集 GPOS lookup,解包 Extension(Type 9)后对 LookupType 1 子表应用已有的 _GPOSApplySingle,返回单字形的 XPlacement / YPlacement / XAdvance / YAdvance 调整(1000-em,含正负号)。至此 GPOS 9 个 LookupType 全部 spec-complete——binary applier 早被 contextual kern 嵌套消费,本版补齐 standalone 查询入口填掉 spec matrix 里最后一条 GPOS gap

Version 2.218.1

新增

  • 新增 THPDFPage.GetWideCharAdvances(Text, out TotalWidth, out Advances):一次性返回 Unicode 文本的总宽和每字形自然 advance(含 kerning)。底层用 GDI GetTextExtentExPointW 一次调用同时拿总宽 + 累积宽度数组,差分后得到每字形 advance。调用方需预先 SetLength(Advances, Length(Text))。可用于自定义排版、表格列宽计算、签名块布局等需要全部字形宽度的一次性场景

变更

  • 优化 jtJustify 两端对齐性能:v2.218.0 的 _HPDFEmitJustifiedWideLine 对每行做 N+1 次 GetWideTextWidth(总宽 1 次 + 前缀差值 N 次,每次都是完整 GDI 往返)。改为一次 GetWideCharAdvances 调用,每行 GDI 往返从 N+1 次降到 1 次。典型 A4 整页 justify(45 行 × 80 字符)从约 3645 次 GDI 往返降到 45 次,约 80 倍提升。justify 视觉输出不变(同一度量引擎,含相同 kerning)

Version 2.218.0

新增

  • 新增 jtJustify 两端对齐模式(THPDFJustificationType 枚举第四值):传入 WideTextOutBox 后,每行(除末行)的自然宽度与框宽之间的差额会分摊到行内的可拉伸间隙,使文本左右两边都对齐到框边。Latin 文本在词间空格分摊;CJK 文本(Han / 假名 / 韩文等无词间空格的脚本)在任意相邻字形间均等分摊(日式排版均等割付)。末行及已达到 / 超过框宽的行保持自然左对齐宽度。底层用 v2.215.0 的 ExtTextOut TJ 数组 emit,测量用 v2.216.0 的 GetWideTextWidth

Version 2.217.0

新增

  • 新增 THPDFPage.WideTextOutBox:Unicode 多行自动换行。镜像 TextOutBox 的契约(返回放入框内的 WideChar 数),但用 GetWideTextWidth 测量、按 WideChar 索引切分。换行规则支持两种脚本:CJK(Han / 假名 / 韩文 / CJK 标点 / 全角)在任意两个字形间断行(CJK 无词间空格的标准行为);Latin 及其他脚本在最后一个空格 / Tab 处断词,无空格时硬断。硬换行(CR / LF / CRLF)照原样执行。修复 TextOutBox(AnsiString) 对中文 / 日文 / 韩文 / 代理对文本逐字节切分导致乱码换行的问题

Version 2.216.0

新增

  • 新增 THPDFPage.GetWideTextWidth(Text: WideString): Single:Unicode 文本宽度测量。现有 TextWidth(AnsiString) 先把 WideString 收窄成 AnsiString 再查 0–255 ABC 宽度表,对 CJK / 代理对 / 多字节文本测出无意义的值;新方法用 GDI GetTextExtentPoint32WlfHeight = -1000)按当前字体整串测量,返回用户空间点宽(与 TextWidth 同坐标系,可直接做布局预算)。同 _XFAMeasureTextImpl 的测量策略
  • 新增 THPDFPage.GetWideTextRowCount(BoxWidth: Integer; Text: WideString): Integer:Unicode 行数预测,镜像 GetTextRowCount 的 AnsiString 契约,基于 GetWideTextWidth 让 CJK / 代理对文本正确换行计数

Version 2.215.0

新增

  • 新增 THPDFPage.ExtTextOut(三个重载:PWORD / WideString / AnsiString):GDI ExtTextOut 风格的扩展文本输出,接受每字形水平位移数组 Dx,emit 单个 [<hex> <num> ...] TJ 数组,让调用方精确控制每个字形原点——用于表格数字对齐、手动字距、两端对齐、表单值填充和签名块排版。复用现有 _GPOSEmitPositionedRun TJ emit 器与 _GPOSGlyphAdvance1000 hmtx 读取,Dx 为 PDF 用户空间点(与 TextOut 的 X/Y 同坐标系);当 Dx 值等于字形自然 advance 时 TJ 调整数归零,可在一次调用内混排自然与覆盖字形。仅支持简单 LTR 文本,RTL bidi 重排与 producer-side shaping 被旁路

Version 2.214.0

新增

  • 新增 THPDFPage.AttachSignatureFieldAppearance:给已通过 AddSignatureField / AddSignedSignatureField / AddPAdESSignatureField 创建的签名字段挂上可见外观 /AP /N Form XObject,并返回 Form 让调用方在 widget 本地坐标系内绘制签名图片、签名者姓名、日期或原因文字;内置薄边框加浅灰底色作为默认的“在此签名”占位外观
  • 新增 HPDFNormalizeRect 工具函数(三个重载:TRect / THPDFRectangle / 四个 Extended 变参):把矩形角点重排为 Left<=RightTop<=Bottom,让鼠标拖框等无序输入可安全传给绘图 API
  • THPDFPage.RotateCoordinate 从 protected 提到 public:外部调用方现在可直接复用与 RectangleRotate 相同的旋转约定,计算旋转矩形角点、多边形顶点或文字包围盒

Version 2.213.0

新增

  • 新增 THPDFPage 几何便利方法套件:Arc 角度定义弧、Pie 角度定义扇形、Chord 弓形、ArcTo 中心加半径加扫角弧、Polyline 折线、Polygon 多边形、PolyBezier 三次贝塞尔样条。所有方法都复用已有的 MoveTo / LineTo / CurveToC / CurveArc 底层路径原语,对齐 GDI TCanvas 角度与点数组语义,让画弧、扇形、折线和样条曲线不必再手写操作符循环

Version 2.212.0

Adicionado

  • Adicionado THPDFPage.SetAnnotationJavaScriptAction: as anotações normais agora podem definir actions de JavaScript de entrada de mouse, saída de mouse, pressionar, soltar, ganhar foco e perder foco por meio de /AA, facilitando a adição de scripts interativos em anotações, links e fluxos auxiliares de aparência de formulário

Version 2.211.0

Adicionado

  • Adicionado THPDFDocOutlineObject.SetURIAction: os nós de estrutura de tópicos retornados por OutlineRoot.AddChild agora podem ser alternados de /Dest na página padrão para a action /S /URI, facilitando o fornecimento direto de ajuda externa, portais de suporte ou links de recursos relacionados no painel de marcadores

Version 2.210.0

Adicionado

  • Adicionado THotPDF.AutoCreateURL: quando ativado, a única linha horizontal THPDFPage.TextOut pode gravar automaticamente o texto de URL http://, https://, mailto: e www. como anotações de link /S /URI, facilitando a geração direta de links clicáveis em relatórios, diretórios e páginas de informações de contato

Version 2.209.0

Adicionado

  • Adicionado THotPDF.SetOpenNamedDestinationAction e THotPDF.ClearOpenNamedDestinationAction: o Catalog /OpenAction do documento agora pode ser definido para pular para um destino nomeado registrado por THotPDF.RegisterNamedDestination, facilitando o posicionamento em entradas de capítulos estáveis ao abrir capas, diretórios ou documentos em que a ordem de geração mudará

Version 2.208.0

Adicionado

  • Adicionado THPDFPage.AddPushButtonWithNextAction: a ação principal do botão agora pode ser encadeada com uma segunda action de PDF por meio de /Next, facilitando a execução sequencial de /ResetForm seguido da exibição de campos, ocultar campos e depois executar ações nomeadas, ou outros fluxos de formulários interativos em um único clique

Version 2.207.0

Adicionado

  • Aprimoramento THotPDF.RegisterOptionalContentGroup: adicionado o parâmetro UserToggleAllowed, que pode gravar grupos de conteúdo opcionais especificados em /OCProperties /D /Locked enquanto mantém o estado de visibilidade padrão, usado para mapas, desenhos de engenharia e camadas multilíngues que não devem ser alternadas pelo usuário do visualizador

Version 2.206.0

Adicionado

  • Adicionado THPDFPage.AddNamedDestinationLink: os links de página agora podem referenciar diretamente destinos nomeados registrados por THotPDF.RegisterNamedDestination, gerando a action /S /GoTo local e o nome do destino /D em string, facilitando a navegação estável para páginas de sumário, referências cruzadas e documentos onde os números das páginas mudam

Version 2.205.0

Adicionado

  • Adicionado THotPDF.JBIG2Options e THPDFJBIG2Options: AddImage(..., icJBIG2) agora passará as intenções de codificação Lossless, LossyLevel e UseSymbolDictionary no nível do documento para o encoder backend JBIG2 registrado; os valores padrão mantêm o caminho de saída MMR sem perdas existente e continuam a rejeitar configurações com perdas quando nenhum backend está registrado

Version 2.204.0

Adicionado

  • Adicionado THotPDF.EmfOptions e THPDFEmfOptions: a importação aprimorada de EMF/WMF agora pode configurar a proporção de fit do documento, multiplicador de renderização de bitmap EMF, multiplicador de renderização de bitmap WMF, método de compressão de bitmap colorido e método de compressão de bitmap de 1-bit; os valores padrão mantêm o comportamento de saída existente, e o chamador pode alternar os bitmaps EMF coloridos para icFlate ou manter o icJpeg padrão

Version 2.203.0

Adicionado

  • TfrxHotPDFExport adiciona a propriedade ExportMode e a enumeração TfrxHotPDFExportMode: o padrão hemPageMetafile mantém o comportamento original de exportação de visualização de página inteira, hemObjectCanvas permite que o FastReport desenhe objetos TfrxView um por um durante a iteração ExportObject, e em seguida o HotPDF importa o metarquivo da página atual, facilitando cenários de integração do FastReport que exigem controle de ordem de exportação em nível de objeto

Version 2.202.0

Adicionado

  • Adicionada saída de imagem monocromática nativa JBIG2: THPDFImageCompressionType agora inclui icJBIG2, AddImage e AddImage(FileName) podem gravar um bitmap de 1-bit como um fluxo de imagem /JBIG2Decode do PDF 1.4+; quando nenhum backend de encoder externo estiver registrado, o caminho integrado genérico MMR sem perdas será usado e o mecanismo de extensão priorizado pelo backend registrado é mantido

Version 2.201.0

Adicionado

  • Adicionado ponte de backend JBIG2 e adaptador de exportação de PDF nativo TDBGrid: agora expõe RegisterJBIG2DecoderBackend, RegisterJBIG2EncoderBackend, detecção de recursos e classes delegadas de encoder / decoder, e ainda retorna False explicitamente quando nenhum backend de nível de produção está registrado; DBGridHotPDFExport pode gerar colunas visíveis do VCL TDBGrid ou campos visíveis de dataset como tabelas paginadas para file ou stream, e restaurar o dataset bookmark original após a exportação

Version 2.200.4

Fixed

  • A demo E-Invoice agora adiciona ChargeTotalAmount e AllowanceTotalAmount ao resumo do cabeçalho para o perfil ZUGFeRD 1.0 COMFORT: o esquema ZUGFeRD 1.0 COMFORT exige que cada elemento de valor apareça exatamente uma vez, e a ausência deles fazia os dados da fatura falharem na validação das regras de negócio ZUGFeRD/Factur-X

Version 2.200.3

Added

  • A demo E-Invoice agora inclui os perfis ZUGFeRD 1.0 COMFORT e ZUGFeRD 2.0 BASIC: o primeiro gera XML de fatura para o esquema legado CrossIndustryDocument 1p0, enquanto o segundo usa o esquema CrossIndustryInvoice 100 e zugferd-invoice.xml; ambos passam pela validação integrada Factur-X/ZUGFeRD
  • A demo E-Invoice agora inclui um seletor de nível de conformidade PDF/A, permitindo substituir o nível padrão do perfil por PDF/A-3b ou PDF/A-3u durante a geração

Version 2.200.2

Fixed

  • Os relatórios de preflight agora marcam entradas que não são PDF e que não têm cabeçalho PDF como reprovadas para páginas carregáveis, em vez de aceitar uma contagem de páginas substituta do carregador

Version 2.200.1

Fixed

  • A validação de ZUGFeRD e Factur-X agora decodifica XML de fatura incorporada e metadados XMP compactados com Flate de PDFs carregados, reconhece identificadores PDF/A em estilo de atributo e aceita arquivos XML de fatura XRECHNUNG que usam /AFRelationship /Source

Version 2.200.0

Added

  • Faturas híbridas Factur-X e ZUGFeRD carregadas agora podem ser verificadas com um relatório de validação estruturado que identifica metadatos PDF/A-3, registro /AF do catálogo, registro de árvore de nomes EmbeddedFiles, consistência de nome de arquivo XMP, regras de nome de arquivo de perfil, regras /AFRelationship e alinhamento de diretrizes XML

Version 2.199.0

Added

  • Arquivos de fatura híbrida PDF/A-3 carregados agora podem ser inspecionados com APIs de leitura Factur-X e ZUGFeRD que expõem o catálogo carregado, entradas EmbeddedFiles, bytes XML incorporados, metadatos XMP do documento, detalhes do perfil de fatura detectado e extração de XML da fatura

Version 2.198.1

Added

  • Os fluxos de trabalho do Factur-X PDF/A-3 agora expõem FacturXWarnings para que os chamadores possam detectar anexos de suporte adicionais cujos tipos MIME estejam fora dos formatos recomendados de PDF, texto, imagem, CSV, XML, JSON, planilha e documentos de suporte ODS sem rejeitar o anexo

Version 2.198.0

Added

  • A incorporação de faturas Factur-X PDF/A-3 agora aceita os níveis de conformidade franceses EXTENDED-CTC-FR e EXTENDED-B2B-FR, validando-os em relação ao identificador de diretriz Factur-X 1.09 EXTENDED antes de gravar os metadatos da fatura híbrida

Version 2.197.18

Fixed

  • A validação do Factur-X PDF/A-3 agora trata COMFORT como um nome de perfil exclusivo do ZUGFeRD 1.0, rejeitando os contêineres factur-x.xml atuais antes que eles possam gravar metadatos de fatura híbrida incompatíveis

Version 2.197.17

Fixed

  • Os metadatos do PDF/A-3 ZUGFeRD 2.0 agora gravam o namespace herdado de extensão PDF/A urn:zugferd:pdfa:CrossIndustryDocument:invoice:1p0# enquanto preservam zf:Version como 2p0, correspondendo às regras de validação de fatura híbrida antes da finalização do contêiner

Version 2.197.16

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados MINIMUM and BASIC WL Detalhes localizados da alteração no comportamento da API e nos símbolos listados AFRelationship Data, enforces Alternative Detalhes localizados da alteração no comportamento da API e nos símbolos listados XRECHNUNGDetalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.15

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados Version values 1.2, 2.0, 2.1, 2.2, 2.3, and 3.0Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.14

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados EN16931 Detalhes localizados da alteração no comportamento da API e nos símbolos listados EN 16931, matching current sample metadata while preserving existing EN 16931 calls

Version 2.197.13

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados urn:factur-x.eu:1p0:basic and urn:factur-x.eu:1p0:extended Detalhes localizados da alteração no comportamento da API e nos símbolos listados BASIC and EXTENDED Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.12

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados ZUGFeRD-invoice.xml filename, COMFORT profile, urn:ferd:pdfa:CrossIndustryDocument:invoice:1p0# Detalhes localizados da alteração no comportamento da API e nos símbolos listados urn:ferd:CrossIndustryDocument:invoice:1p0 Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.11

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados zugferd-invoice.xml filename with Version 2p0Detalhes localizados da alteração no comportamento da API e nos símbolos listados urn:zugferd.de:2p0 Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.10

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados fx:Version as 3.0 while keeping ordinary Factur-X metadata at 1.0Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.9

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados ConformanceLevel Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.8

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados signature-time-stamp Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.7

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados signature-policy-identifier Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.6

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados Reason Detalhes localizados da alteração no comportamento da API e nos símbolos listados /Reason Detalhes localizados da alteração no comportamento da API e nos símbolos listados signature-policy-identifier Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.5

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados CountryCode policy so current German ZUGFeRD invoices reject MINIMUM and BASIC WL, enforce Alternative Detalhes localizados da alteração no comportamento da API e nos símbolos listados XRECHNUNG Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.4

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados CountryCode policy so German ZUGFeRD invoices can enforce Alternative Detalhes localizados da alteração no comportamento da API e nos símbolos listados XRECHNUNG Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.3

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados xrechnung.xml Detalhes localizados da alteração no comportamento da API e nos símbolos listados XRECHNUNG, factur-x.xml Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.2

Adicionado

  • PDF/A-3: THotPDF.AddFacturXAssociatedFile Detalhes localizados da alteração no comportamento da API e nos símbolos listados factur-x.xml or xrechnung.xml in Catalog /AF and /Names /EmbeddedFilesDetalhes localizados da alteração no comportamento da API e nos símbolos listados

Alterado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados /ModDate and raw MD5 /CheckSum Detalhes localizados da alteração no comportamento da API e nos símbolos listados /Params Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.1

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados UseXRefStream / UseObjectStreams Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.197.0

Alterado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados /CIDToGIDMap Detalhes localizados da alteração no comportamento da API e nos símbolos listados /CIDSet Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.196.8

Fixed

  • PDF/A-1 Info dictionary and XMP metadata equivalence agora funciona corretamente e evita a saída anterior inválida ou não conforme

Version 2.196.7

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.196.6

Fixed

  • PDF/A markup-annotation print flags and appearance streams agora funciona corretamente e evita a saída anterior inválida ou não conforme
  • PDF/A rejection for non-standard named actions on form push buttons agora funciona corretamente e evita a saída anterior inválida ou não conforme

Version 2.196.5

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.196.4

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.196.3

Added

  • graceful XFA calculate evaluation for unsupported FormCalc constructs agora está disponível, enquanto a saída existente permanece inalterada a menos que o aplicativo use essa capacidade

Version 2.196.2

Added

  • XFA calculate evaluation for .rawValue, Sum(arr[*].field), and JavaScript this.rawValue agora está disponível, enquanto a saída existente permanece inalterada a menos que o aplicativo use essa capacidade

Version 2.196.1

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados+ - * /Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.196.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados <calculate> Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.195.0

Adicionado

  • XFA <exData> Detalhes localizados da alteração no comportamento da API e nos símbolos listados <a href> Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • XFA flatten: exData rich text degraded-markup handling — unsupported inline tags (<b>, <em>Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados <exData contentType="text/html"> Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.193.0

Adicionado

  • XFA <exData> Detalhes localizados da alteração no comportamento da API e nos símbolos listados <p> Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados text-align property on <p>: center and right Detalhes localizados da alteração no comportamento da API e nos símbolos listados justify Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados margin-top, margin-bottom, space-before, and space-after in the <p> style attribute, giving control over vertical gaps between paragraphs

Version 2.192.0

Added

  • Ao achatar um desenho rich-text <exData> de XFA, agora vários trechos <span> de um único parágrafo são colocados lado a lado, e cada trecho mantém seu próprio CSS inline, com negrito, itálico, cor e tamanho da fonte, enquanto a etapa anterior renderizava apenas o primeiro span
  • Cada trecho é posicionado pela largura medida, então os spans com estilos diferentes fluem da esquerda para a direita pela linha sem se sobrepor
  • O empilhamento de parágrafos com alinhamento de texto e os links clicáveis virão em atualizações posteriores

Version 2.191.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados <exData> Detalhes localizados da alteração no comportamento da API e nos símbolos listados text/html Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.190.43

Fixed

  • A recuperação de reserva de object stream agora localiza um membro pela sua posição dentro do stream em vez de tratar essa posição como um número de objeto PDF, de modo que a recuperação realmente retorna dados em vez de ficar sempre vazia
  • Essa recuperação de reserva não marca mais cada objeto recuperado como página — apenas um objeto cujo dado bruto declara uma página é tipado como tal, para que membros de object stream não relacionados não inflem mais a contagem de páginas — e um objeto que permanece na lista de objetos indiretos após um erro de análise agora é removido antes de ser liberado

Version 2.190.42

Security

  • Importar um arquivo de chave PKCS#12 (.pfx/.p12) agora rejeita um número de iterações PBKDF2 fora do intervalo em vez de truncá-lo em um campo de 32 bits; um arquivo manipulado não pode mais solicitar bilhões de rodadas de derivação de chave (negação de serviço) ou dobrar o valor para um resultado não previsto

Version 2.190.41

Fixed

  • Recuperar um stream comprimido danificado não aceita mais como sucesso um resultado parcialmente descomprimido quando os dados se corrompem no meio do processo; a saída truncada é descartada e a próxima configuração de descompressão é testada, para que as chamadas recebam dados completos ou uma falha limpa

Version 2.190.40

Fixed

  • Copiar uma página que usa vários recursos de estado gráfico (ExtGState) não mapeia mais todos para um único nome e descarta todos, mas apenas um; cada estado copiado recebe agora um nome distinto

Version 2.190.39

Fixed

  • Adicionar um hiperlink a uma página carregada cuja entrada /Annots existente seja uma referência pendente ou não seja um array não provoca mais falha; nesse caso, um novo array de anotações é instalado em vez de converter o valor inutilizável

Version 2.190.38

Fixed

  • Dividir ou extrair páginas não atribui mais dimensões fixas de amostragem a uma imagem que falta /Width ou /Height, o que marcava imagens de documentos não relacionados com tamanho fixo; uma dimensão ausente agora é deixada intacta
  • Na seleção de content-stream durante extração de página não é mais dado bônus fixo ao objeto de número 192, que alterava a pontuação do stream em qualquer documento que usasse aquele número de objeto

Version 2.190.37

Fixed

  • Reparar uma página que referencia uma imagem faltante (XObject) ou recurso de estado gráfico (ExtGState) durante cópia ou divisão agora resolve o objeto de origem por seu número de objeto em vez de tratar o número como posição de lista, então copia o objeto correto — ou nenhum — em vez de um não relacionado, e uma cópia com falha não mais dessreferencia um resultado nil

Version 2.190.36

Fixed

  • Editar e regravar uma página cujo conteúdo está distribuído entre vários content streams não renderiza mais os streams anteriores duas vezes — o resultado combinado é mantido em um único stream e os demais são esvaziados, e os streams são unidos com espaço em branco para que tokens adjacentes não se fundam em um token inválido (ISO 32000-1 §7.8.2)
  • Uma página que tem recurso /XObject mas sem recurso /Font não deixa mais nomes de fonte da página anterior; a lista de nomes de fonte agora é reiniciada em vez da lista de nomes de imagem

Version 2.190.35

Fixed

  • Subconjunto de fonte TrueType embutida com tabela de localização de glifos (loca) corrompida não lê mais fora dos limites — agora um par de deslocamento invertido ou fora de faixa é ignorado em vez de estourar para um comprimento de cópia enorme, e a tabela de métricas horizontais (hmtx) recebe validação por limites antes de ser copiada

Version 2.190.34

Fixed

  • Copiar metadados de documento (etiquetas de página e destinos nomeados) para um documento que já possui essas entradas não vaza mais valores anteriores; as entradas são agora substituídas pelo próprio caminho de substituição do dicionário

Version 2.190.33

Fixed

  • Carregar certos PDFs 1.6 cujas páginas são reconstruídas a partir de object streams não compartilha mais valores de dicionário entre dois objetos de página, o que podia liberar o mesmo objeto duas vezes quando o documento era liberado; agora os valores são copiados em profundidade

Version 2.190.32

Fixed

  • O escaneamento de conteúdo da página para detectar texto simples não gera mais erro de intervalo em uma linha de conteúdo vazia após recorte ou sem parêntese de fechamento; agora a verificação trata o caso vazio e limita o escaneamento ao comprimento da cadeia

Version 2.190.31

Fixed

  • Renderizar texto que contém o code point U+FFFF não grava mais um elemento fora do fim da tabela interna de glifos de uma fonte; a tabela cresce conforme necessário antes do armazenamento da entrada do glifo

Version 2.190.30

Fixed

  • BeginParagraph agora rejeita índice de parágrafo 0 em vez de ler antes do início do array de parágrafos, e libera qualquer parágrafo já em andamento para que chamadas repetidas não gerem vazamentos
  • EndParagraph agora limpa sua referência após liberar o parágrafo atual, de modo que chamá-la duas vezes não libera o mesmo objeto pela segunda vez

Version 2.190.29

Security

  • Vectores de inicialização AES y chaves agora não são mais gerados a partir de uma fonte previsível sem criptografia quando a fonte aleatória do sistema está indisponível por pouco tempo; a biblioteca passa a rejeitar a criptografia em vez de produzir IV ou chave fraca e previsível

Fixed

  • Calcular um hash MD5 de cadeia vazia não dessreferencia mais ponteiro inválido

Version 2.190.28

Fixed

  • Renderizar metarquivos EMF que contêm registros PolyDraw agora aplica o sinalizador de tipo de cada ponto em vez de ler o do ponto seguinte; na variante de 16 bits, também não reaproveita o sinalizador do primeiro ponto para todos os pontos, então segmentos de linha, curva e fechamento são desenhados corretamente e o parser não lê após o fim do array de pontos

Version 2.190.27

Fixed

  • Decodificar um stream LZWDecode que declara o Predictor TIFF 2 com valor Columns ou Colors zero não lança mais erro de divisão por zero; a etapa do predictor é ignorada quando esses valores não podem ser usados
  • O decodificador LZW de argumento único agora inicializa totalmente seus parâmetros de decodificação, removendo qualquer dependência de valores de pilha não inicializados

Version 2.190.26

Fixed

  • Calcular o dígito de verificação Code 93 não reinicia mais o contador de peso incorreto, para que dados com mais de 14 caracteres gerem os símbolos de verificação corretos
  • O conjunto B de código 128 agora codifica corretamente a letra minúscula i em vez de substituí-la por espaço, o que corrompia o símbolo e seu checksum
  • O cálculo do dígito de controle dos códigos MSI agora usa o valor numérico de cada dígito em vez de seu código de caractere, seguindo leitores MSI padrão
  • Desenhar código de barras com largura de módulo grande não extrapola mais um contador interno, o que podia produzir larguras de barras negativas ou distorcidas
  • Desenhar código de barras com dados que falham na validação não mais vaza mais a fonte, caneta e pincel salvos
  • Rotina isolada DrawText agora restaura a fonte de canvas realmente salva, em vez de redefinir a fonte da chamada para uma padrão vazio

Version 2.190.25

Fixed

  • Decodificar um stream ASCIIHexDecode, ASCII85Decode ou RunLengthDecode truncado ou malformado sem marcador de fim de dados não entra mais em loop infinito consumindo memória — os decodificadores agora param quando a entrada é esgotada em vez de reprocessar um byte antigo
  • O filtro ASCIIHexDecode novamente rejeita caracteres hexadecimais ilegais; um erro de precedência de operador deixava passar alguns bytes fora de faixa pela validação

Version 2.190.24

Fixed

  • Copiar ou mesclar objetos cujo dicionário aninhado seja reconstruído durante recuperação de documento não corrompe mais dicionário nem vaza memória — o rotina armazena instâncias em posições de itens internos, e entradas descartadas sem liberar; substituições e remoções agora operam corretamente nos registros de item

Version 2.190.23

Fixed

  • Incorporar uma fonte Type 0 (CID) mantém agora seu mapa /ToUnicode mesmo quando comprimir o mapa de caracteres não gera saída — o caminho de fallback antes não registrava o mapa, então texto dessa fonte não podia ser copiado nem extraído, e um stream podia ser liberado duas vezes; o mapa é agora sempre armazenado, sem compressão se necessário, e cada stream é liberado exatamente uma vez

Version 2.190.22

Fixed

  • Carregar uma cross-reference table que referencia objetos com número de geração 10 ou superior — comum em PDFs revisados por muitas atualizações incrementais — não grava mais fora da tabela interna de detecção duplicada; tais entradas agora são aceitas sem desduplicação em vez de corromper o heap, e uma entrada corrompida com número de objeto igual a zero é ignorada em vez de indexar antes do início da tabela

Version 2.190.21

Fixed

  • Passar o nome de fonte com 32 caracteres ou mais para SetFont não excede mais mais campo de nome de face de tamanho fixo da estrutura interna de fonte — o nome agora é copiado com a rotina de campo com limite de comprimento já usada para consultar fontes instaladas, então um nome longo é truncado com segurança em vez de corromper a pilha

Version 2.190.20

Fixed

  • Adicionar uma imagem não monocromática com compressão CCITT Group 3/4, ou como máscara de imagem de 1 bit, não corrompe mais o heap — o construtor de imagem antes liberava seu stream e engolia o erro de conversão no caminho de falha, deixando o destruidor liberar o mesmo stream novamente; agora o erro propaga para que o objeto de imagem falhe a montagem de forma limpa
  • Criar tabela de busca de paleta para imagem indexada de 8 bits não solicita mais uma entrada a mais do que o buffer de busca consegue conter, removendo uma gravação fora dos limites que poderia ocorrer quando o bitmap de origem traz uma paleta completa de 256 entradas

Version 2.190.19

Security

  • Decodificar stream ASCII85Decode que usa a abreviação de zeros z já não grava fora do buffer de decodificação — o buffer de saída agora tem tamanho para expansão máxima possível, corrigindo um estouro de heap que um PDF manipulado poderia provocar

Version 2.190.18

Security

  • Importar material de assinatura (PKCS#12 .pfx/.p12) mal formado durante assinatura digital não lê mais além do fim do buffer — um campo ASN.1 de tamanho enorme que antes passava pela checagem de limites é rejeitado, para que material não confiável não provoque leitura fora dos limites

Version 2.190.17

Added

  • O carregador padrão de documento agora lê PDFs de referência híbrida — arquivos cuja tabela de referências cruzadas possui uma seção lateral /XRefStm, gerada por exportadores comuns de Office — para que LoadFromFile carregue os objetos que esses arquivos mantêm em object streams comprimidos em vez de ver apenas parte do documento
  • Cross-reference streams e object streams armazenados sem filtro de compressão agora carregam corretamente; ISO 32000-1 permite que a chave /Filter esteja ausente

Fixed

  • Regravar um documento híbrido de referência carregado com proteção AES-256 — ActivateProtection mais SaveLoadedDocument, ou EncryptFile — não falha mais com erro de índice de lista, e a saída cifrada mantém todos os objetos do arquivo de origem

Version 2.190.16

Changed

  • A localização do cabeçalho de objeto e da palavra-chave stream durante regravações da API de Arquivo Direto não reinicia mais a varredura inicial da prévia de cada objeto nem a duplica na repetição, deixando a criptografia AES-256 de um documento de referência de 2 GB com 1,67 milhões de objetos cerca de 2.3 vezes mais rápida (de 49 para 14 segundos), a descriptografia cerca de 2.7 vezes mais rápida (de 43 para 16 segundos) e uma reescrita direta completa de cerca de 10 para 6 segundos

Version 2.190.15

Fixed

  • LoadFromFile e LoadFromStream não encerram mais antes do início da análise quando há bytes antes do cabeçalho %PDF — arquivos salvos dentro de invólucros HTTP ou Signed HTTP Exchange (SXG), capturas de e-mail e contêineres semelhantes agora alcançam as rotinas de recuperação do documento em vez de falhar com erro de conversão de número de versão
  • A recuperação de documentos com dados de cross-reference inutilizáveis agora usa a contagem de páginas da árvore de páginas ativa em vez de contar cada objeto do tipo página no arquivo, para que uma página apagada por atualização incremental não seja revivida e a contagem informada coincida com outros leitores
  • Quando um documento danificado é recuperado por varredura, revisões de objeto gravadas mais tarde no arquivo passam a ter precedência sobre revisões anteriores do mesmo número de objeto, seguindo a semântica de atualização incremental

Version 2.190.14

Added

  • A API de Arquivo Direto agora lê PDFs de referência híbrida — arquivos cuja tabela de cross-reference possui uma seção lateral /XRefStm, gerada por exportadores comuns de Office — para que abertura direta, cópia, reescrita e criptografia AES-256 vejam os objetos compactados que esses arquivos mantêm em object streams em vez de ignorá-los

Fixed

  • Objetos liberados por uma revisão mais recente de um PDF incrementamente atualizado não podem mais ser revividos a partir de uma revisão anterior durante reescrita direta
  • Entradas free de cross-reference não geram mais limites de objeto inexistentes, que podiam truncar objetos armazenados perto do início de um arquivo durante reescritas diretas de documentos com números de objeto reciclados

Version 2.190.13

Changed

  • Ao abrir PDFs cujo catálogo do documento fica dentro de um object stream compactado com DAOpenFileReadOnly ou DACopyFile não é mais necessário fazer carregamento completo para descobrir a contagem de páginas: em um arquivo de referência de 1.25 GB a abertura direta caiu de cerca de 0.9 segundos para alguns milissegundos e a cópia leve caiu pela metade

Fixed

  • A API de Arquivo Direto agora segue a cadeia /Prev do cross-reference stream, portanto PDFs incrementamente atualizados expõem todos os objetos para abertura direta, cópia, reescrita e criptografia AES-256 em vez de apenas a revisão mais recente
  • Objetos liberados por revisão mais recente em PDF incrementamente atualizado não podem mais ser revividos a partir de seção de cross-reference anterior em reescrita direta

Version 2.190.12

Changed

  • As rotas de reescrita da API de Arquivo Direto — EncryptFile, DecryptFile e DASaveAsFile após alterações no documento — agora leem a origem por janela deslizante e agregam escritas de saída, de modo que o processamento de PDFs muito grandes com milhões de objetos fica várias vezes mais rápido: em benchmark de 2 GB, a criptografia AES-256 caiu de cerca de 153 para 49 segundos, a descriptografia de cerca de 121 para 43 segundos e a reescrita direta completa de cerca de 48 para 10 segundos
  • Corpos de objeto já mantidos em memória não são mais buscados em disco novamente enquanto uma reescrita direta os copia para o arquivo de saída
  • A resolução de referências indiretas /Length durante uma reescrita AES-256 direta não reabre mais o arquivo de origem a cada consulta

Version 2.190.11

Added

  • Planar formulário ficou mais simples de acionar via código de aplicação: FlattenFormFields retorna a quantidade de campos de AcroForm que foram nivelados, e os novos helpers HasFormFields e FormFieldExists permitem que a aplicação verifique PDFs carregados ou formulários em andamento antes de remover campos interativos
  • As demos de CLI do Preflight agora cobrem saída CSV, validação de perfil e preset, caminhos de saída únicos por arquivo, relatórios de validação PDF/VT, resumos agregados e links de painel, enquanto as demos de GUI do Preflight Report validam perfis antes da geração e mantêm a saída CSV filtrada por perfil em formato CSV

Version 2.190.10

Fixed

  • Após MovePage, o documento passa novamente a ter uma página atual ativa, igual ao DeletePage: desenhar logo após mover agora funciona sem selecionar página primeiro, a operação cai na mesma página que era atual antes do movimento e fechar o documento imediatamente após o movimento grava todas as fontes com o caminho normal

Version 2.190.9

Fixed

  • Documentos finalizados logo após MovePage não perdem mais fontes: os dados de fonte compartilhada pendentes de páginas já escritas agora sempre são emitidos ao fechar o documento, mesmo quando nenhuma página está ativa nesse momento, garantindo recursos de fonte corretos e renderização correta do texto
  • Voltar a uma página anterior e escolher uma fonte adicional não sobrescreve mais uma fonte já usada nessa página: nomes de recurso pendentes no registro de fontes compartilhadas ficam reservados, assim cada fonte mantém seu nome e ambas renderizam corretamente
  • Se a compressão de uma fonte embutida falhar, o programa da fonte agora é armazenado sem compressão e o objeto da fonte é concluído normalmente, em vez de gerar entrada de fonte incompleta que alguns visores não renderizavam
  • Com SimpleLatinFonts habilitado, texto desenhado com Symbol ou ZapfDingbats mantém significado simbólico: fontes simbólicas ficam excluídas do atalho de texto sem embutir, que alteraria quais glifos aparecem (ISO 32000-1 §9.6.6.2)
  • A geração de PDF não dispara mais erros de estouro inteiro em projetos compilados com verificação de estouro ativa quando o subset de fonte está habilitado, e reutilizar a mesma instância do componente entre vários documentos não vaza mais memória em fluxos de trabalho raros que reiniciam ou reestruturam o documento no meio do caminho

Version 2.190.8

Fixed

  • O kerning contextual não é mais aplicado duas vezes quando uma fonte fornece várias regras contextuais em uma única consulta OpenType: as subtabelas de consulta são testadas em ordem e a primeira correspondência vence, conforme especificação OpenType
  • Coincidências contextuais sobrepostas não acumulam mais seus ajustes: após uma regra posicional contextual disparar, a busca segue além do trecho de glifos correspondente, para que padrões repetidos recebam cada ajuste de kerning exatamente uma vez
  • Reforço do parsing de OpenType contra fontes truncadas ou malformadas: o despacho de consulta aninhado de posicionamento e substituição agora valida a extensão total de cada registro de tabela antes de lê-lo

Version 2.190.7

Fixed

  • Copiar/colar e extrair texto agora recupera caracteres originais quando recursos OpenType substituem um caractere em cadeia, como versaltes por alternantes estilísticos ou figuras oldstyle por figuras tabulares: o mapa ToUnicode finaliza o glifo de volta para o texto fonte em vez de um codepoint privado (ISO 32000-1 §9.10.3)
  • A funcionalidade de frações (frac) não emite mais mistura parcialmente convertida de glifo de fração e glifo simples quando o orçamento de codepoint interno termina no meio da sequência: a execução de texto afetada volta para os glifos originais como um bloco

Changed

  • As consultas de um recurso OpenType agora seguem a ordem de índice LookupList da especificação OpenType, independentemente da ordem em que a fonte lista no seu recurso de feature

Version 2.190.6

Fixed

  • Vários acentos em uma única ligadura agora se posicionam corretamente em texto RTL: as segunda e seguintes marcas aderem ao componente da ligadura (GPOS mark-to-ligature) em vez de cair no início da linha
  • Marcas empilhadas que compartilham o mesmo componente de ligadura, como shadda seguida de um sinal vocálico, agora se empilham umas sobre as outras em vez de se sobrepor ao mesmo ancoramento
  • Contagem de componentes de ligadura agora segue dados de ligação GPOS, então caracteres pré-compostos com mapeamentos longos de extração de texto não deslocam acentos finais para fora do alcance
  • Um caractere suplementar único não é mais interpretado como ligadura durante posicionamento de marcas
  • Um acento que a fonte casa como componente real de ligadura não é mais desenhado novamente ao lado da ligadura
  • Metadados de componente de ligadura não vazam mais entre chamadas de saída de texto não relacionadas

Version 2.190.5

Added

  • Texto Hanifi Rohingya ganha moldagem cursiva RTL com a nova propriedade AutoShapeHanifiRohingya: quando habilitada, o motor seleciona formas inicial, medial, final e isolada da fonte para que o texto siga o comportamento correto de ligação
  • Texto Tai Viet ganha reordenação visual com a nova flag de modelagem sfTaiVietReorder: vogais que aparecem antes da consoante na ordem visual agora são exibidas no lugar certo em vez de seguirem a ordem de digitação
  • Texto Meetei Mayek ganha reordenação silábica com a nova flag de modelagem sfMeeteiMayekShaping: sinais de vogal à esquerda movem-se à frente da consoante para exibição visual correta
  • Os três sistemas seguem o modelo opt-in atual: documentos que não habilitam a nova propriedade ou flags produzem saída idêntica byte a byte

Version 2.190.4

Fixed

  • Texto LTR não é mais invertido quando índice de glifo de um caractere cai por acaso na janela numérica reservada pelo detector RTL para pontos de código hebreus e árabes; o detector agora ignora totalmente dados de índice de glifo
  • Documentos que misturam letras latinas, gregas ou cirílicas incomuns em fontes grandes renderizam na ordem original em todos os casos

Version 2.190.3

Fixed

  • Um único high surrogate seguido de certos caracteres BMP não gera mais codepoint suplementar durante detecção RTL: entrada UTF-16 malformada mantém ordem lógica em vez de ser agrupada e invertida como texto Adlam ou Hanifi Rohingya
  • Pares substitutos bem formados para Adlam e Hanifi Rohingya permanecem íntegros e continuam renderizando em RTL

Version 2.190.2

Fixed

  • Bandeiras de modelagem agora são isoladas por script: habilitar sfMeeteiMayekShaping sozinho não reordena mais Devanagari, Bengali, Tamil, Khmer, Myanmar ou outros textos de escrita índica, e habilitar sfIndicShaping ou sfIndicGSUB sozinho não afeta texto Meetei Mayek
  • Saída permanece byte-a-byte idêntica para toda escrita cuja flag fique desativada, restaurando comportamento opt-in documentado para documentos multiescritura

Added

  • ApplyIndicReorder ganha sobrecarga com conjunto explícito de recursos para consultas de reordenação por flags; a forma sem parâmetros existente mantém cobertura de script completo

Version 2.190.1

Fixed

  • A classificação de letras Meetei Mayek contra Unicode Character Database foi concluída: as letras PHAM, ATIYA e GOK até BHAM (U+ABD0–U+ABDA) agora iniciam sílabas, para que vogais de lado esquerdo e marcas empilhadas subsequentes reordenen corretamente quando sfMeeteiMayekShaping está habilitado
  • Palavras baseadas na letra portadora de vogal ATIYA, muito comum, mantinham seus sinais de vogal em ordem lógica; agora produzem o mesmo ordenamento visual que o restante do bloco Meetei Mayek

Version 2.190.0

Fixed

  • Marcas combinatórias (acentos, harakat árabe, niqqud hebraico, vogais tailandesas e laosianas) agora aparecem na posição correta acima ou abaixo da letra em todos os leitores PDF; antes elas podiam deslocar-se para perto do início da linha
  • Marcas combinatórias empilhadas agora acumulam sobre a marca abaixo delas em vez de colapsarem para o caractere base quando a fonte também define ancoragem de base para a marca superior
  • Offsets de conexão cursiva e adjunção mark-to-ligature seguem a especificação de objeto de texto PDF (ISO 32000-1), eliminando deriva de posicionamento após texto decorado
  • Texto depois de uma marca posicionada ou sequência cursiva continua na posição de caneta correta

Changed

  • Kerning, posicionamento de marca e adjunção cursiva agora combinam dentro da mesma execução de texto em vez de se excluírem mutuamente

Version 2.189.1

Fixed

  • Texto RTL aplica agora a componente de avanço do kerning GPOS na largura da execução, para que texto após uma execução RTL com kerning continue na posição correta
  • Execuções RTL com kerning e rise vertical aplicam o mesmo ajuste de avanço no último glifo

Version 2.189.0

Added

  • Expansão do modelado OpenType com posicionamento GPOS contextual, posicionamento de distância, integração de reordenação Khmer e Myanmar, alternativas verticais para fontes verticais e switches tipográficos adicionais para formas de maiúsculas, larguras de algarismos, inferiores científicos, numeradores, denominadores e zero barrado

Changed

  • Criptografia e descriptografia de arquivo AES-256 agora usam caminho de reescrita direta para PDFs grandes, evitando carregamento completo em memória para entradas compatíveis, incluindo arquivos de vários gigabytes
  • Win32 AES-256-CBC agora usa o mesmo backend AES-NI com verificação CPUID de Win64, com fallback puro em C em processadores sem suporte a AES-NI

Version 2.188.2

Added

  • sfStylisticAlternates agora aplica automaticamente substituições OpenType salt durante saída de texto Unicode quando a fonte registrada expõe alternantes estilísticos correspondentes

Fixed

  • Consultas de pares GPOS e posicionamento de marca rejeitam agora offsets de classe e de ancoragem malformados com contagens grandes de fonte que poderiam estourar aritmética de 32 bits, evitando leituras inseguras de fonte danificada ou maliciosa
  • Consultas de posicionamento de marca GPOS agora respeitam filtro de marca do LookupFlag, para que fontes que pedem ignorar marcas, tipos de anexo de marca ou conjuntos de filtragem não apliquem por engano esses ancoramentos
  • A modelagem posicional Adlam agora usa a mesma proteção de disponibilidade de mapa Unicode dos caminhos de modelagem Syriac, N'Ko e Mongolian

Version 2.188.1

Fixed

  • Texto árabe e hebraico RTL mantém kerning GPOS de pares quando posicionamento de marca também está habilitado, para que harakat e niqqud ancorem corretamente sem perder ajustes de espaçamento do glifo base

Version 2.188.0

Added

  • Nova opção de modelagem sfFractions aplica automaticamente substituições OpenType frac durante saída Unicode de texto, incluindo dígitos do numerador, barra de fração e dígitos do denominador com contexto encadeado para ToUnicode retornar texto original

Version 2.187.0

Added

  • Novas opções de modelagem passam a aplicar automaticamente features tipográficas OpenType de substituição única durante saída Unicode: sfSmallCaps para smcp, sfCapsToSmallCaps para c2sc, sfOldstyleFigures para onum, sfLiningFigures para lnum, sfSuperscripts para sups, sfSubscripts para subs e sfOrdinals para ordn

Version 2.186.0

Added

  • As novas opções de modelagem sfDiscretionaryLigatures e sfHistoricalLigatures aplicam automaticamente consultas OpenType dlig e hlig durante saída Unicode de texto, emitindo IDs de glifo nativas da fonte com mapeamentos ToUnicode e permanecendo desativadas por padrão

Version 2.185.1

Fixed

  • Letras de Arabic Extended-B U+0870-U+089F agora participam da ligação de produtor para árabe quando modelagem árabe automática está habilitada, permitindo que fontes com OpenType árabe compatível emitam formas conectadas com mapeamentos ToUnicode

Version 2.185.0

Added

  • Modelagem nativa GSUB árabe para saída de texto opt-in: quando sfArabicGSUB está habilitado, HotPDF aplica as consultas da fonte registrada init, medi, fina, isol, rlig, calt e rclt em corridas árabes lógicas e emite os IDs de glifo contextuais resultantes com ToUnicode
  • A nova opção de modelagem sfCursiveAttachment aplica GPOS de entrada/saída cursiva durante saída Unicode, permitindo que a conexão cursiva de glifos árabes usando rota GSUB nativa alinhe pelos próprios dados curs da fonte

Version 2.184.2

Fixed

  • Texto de fallback Adlam RTL agora preserva a ordem válida de pares substitutos UTF-16 quando a fonte não consegue aplicar substituições posicionais Adlam, e N'Ko U+07FA agora age apenas como caractere de união para que letras N'Ko adjacentes se conectem sem substituir U+07FA por forma posicional

Version 2.184.1

Fixed

  • A colocação mark-to-ligature agora também cobre ligaduras árabes RTL: um harakat em uma ligadura como Allah é posicionado no componente correto da ligadura, enquanto o posicionamento por componente anterior se aplicava apenas a texto LTR e o harakat RTL permanecia na largura de avanço da ligadura: ligaduras árabes já formadas (como Allah e lam-alef) agora são reconhecidas para rastrear componentes, e a opção mark-to-ligature continua desativada por padrão

Version 2.184.0

Added

  • Rastreamento de cluster e componente do lado do produtor no pipeline de modelagem de texto: conforme as ligaduras são formadas, o motor registra quais caracteres originais cada glifo de saída cobre e quantos componentes de ligadura contém, criando base para posicionamento de marca e extração de texto precisos em execuções com ligadura
  • Marcas combinatórias agora são anexadas ao componente correto de uma ligadura (GPOS mark-to-ligature) quando a nova opção mark-to-ligature está habilitada, para texto ligaturado LTR; a saída não muda com a opção desativada
  • Ligaduras com múltiplos componentes geradas por esse caminho carregam mapeamentos de extração de texto precisos, para que copiar e colar recupere a sequência de caracteres original

Version 2.183.0

Added

  • Pré-processamento da escrita Javanese para posicionamento correto de vogais: quando a opção de reordenação Javanese está ativada, sinais vocálicos pré-base como taling e dirga mure são movidos para antes do grupo consonantal, incluindo pilhas unidas por pangkon, antes da renderização, para que o texto fique na ordem visual correta; a saída não muda quando a opção está desativada

Version 2.182.0

Added

  • Pré-processamento de texto Hebrew para posicionamento correto de pontos vocálicos: quando a opção de reordenação Hebrew está ativada, pontos vocálicos, dagesh, pontos shin e sin e marcas de cantilação são colocados em ordem canônica antes da renderização, permitindo que o posicionamento de marcas funcione mesmo quando a origem usa outra ordem; a saída não muda quando a opção está desativada

Version 2.181.0

Added

  • Pré-processamento de texto Thai e Lao para posicionamento correto de marcas: quando a opção de reordenação Thai/Lao está ativada, SARA AM é separado em suas partes superior e final, e marcas vocálicas ou tonais são colocadas em ordem canônica antes da renderização, permitindo alinhar tons e vogais corretamente; a saída não muda quando a opção está desativada

Version 2.180.0

Added

  • Formação automática do lado do produtor para texto Adlam, a escrita Fula da África Ocidental em U+1E900-U+1E95F: quando AutoShapeAdlam está ativado, as letras são renderizadas nas formas cursivas corretas por substituições posicionais OpenType, pares substitutos são tratados corretamente e copiar/colar recupera as letras originais; a saída não muda quando a opção está desativada

Version 2.179.0

Added

  • Formação automática do lado do produtor para texto N'Ko em U+07C0-U+07FF: quando AutoShapeNko está ativado, as letras são renderizadas nas formas cursivas corretas por substituições posicionais OpenType, e copiar/colar recupera as letras originais; a saída não muda quando a opção está desativada

Version 2.178.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.177.0

Added

  • Suporte à leitura de kerning vertical OpenType GPOS por vkrn e alternativos proporcionais verticais por vpal, expondo o ajuste de avanço vertical que a fonte define entre glifos empilhados para uso em saída de texto vertical

Version 2.176.0

Fixed

  • O kerning agora aplica os deslocamentos de posicionamento de glifo GPOS, incluindo XPlacement horizontal e YPlacement vertical, que antes eram lidos mas descartados; fontes que refinam posições pela função kern agora renderizam esses deslocamentos junto com o ajuste de avanço em texto LTR e RTL

Version 2.175.0

Fixed

  • Marcas combinantes em camadas em texto RTL agora são posicionadas corretamente, como uma letra Arabic com shadda e vogal ou pontos Hebrew empilhados; cada marca adicional se empilha sobre a marca abaixo em vez de cair na letra base

Version 2.174.0

Added

  • Suporte a anexo Mark-to-Ligature OpenType GPOS LookupType 5, que informa a posição de uma marca combinante em um componente específico da ligadura para que cada marca seja ancorada à sua própria parte de uma ligadura com várias letras

Version 2.173.0

Added

  • Suporte à leitura de anexo cursivo OpenType GPOS LookupType 3, expondo as âncoras de entrada e saída usadas por escritas cursivas como Arabic Nastaliq para alinhar letras conectadas em uma linha de base fluida

Version 2.172.0

Added

  • O kerning agora é aplicado a texto RTL, como Arabic e Hebrew, quando o kerning está ativado; antes o caminho de exibição RTL posicionava apenas marcas combinantes e deixava o kerning sem aplicação
  • O kerning contextual OpenType GPOS com LookupType 7 Context e LookupType 8 Chained Context agora é emitido para texto LTR e RTL, de modo que o kerning dependente de contexto ajusta a saída em vez de apenas ser lido

Version 2.171.0

Added

  • Suporte a kerning contextual OpenType GPOS com posicionamento LookupType 7 Context e LookupType 8 Chained Context, permitindo ler da fonte o kerning dependente de contexto e usá-lo no posicionamento do texto

Version 2.170.0

Added

  • Aplicação automática opcional do recurso OpenType locl Localized Forms, selecionando formas de letras específicas do idioma, como formas cirílicas sérvias e búlgaras ou Turkish dotless i, quando um idioma de formação está definido

Version 2.169.0

Added

  • Aplicação automática opcional do recurso OpenType calt Contextual Alternates ao texto no script ativo, com glifos contextuais não codificados incorporados por mapeamento ToUnicode para que copiar e colar recuperem o texto original

Version 2.168.0

Added

  • Aplicação automática opcional do recurso OpenType rclt Required Contextual Alternates ao texto Arabic formado pela opção contextual-alternates, para que a seleção contextual de letras não precise mais de um shaper posterior

Version 2.167.0

Added

  • OpenType GSUB shaping for Devanagari and Indic scripts agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada
  • the new Indic GSUB mode remains opt-in and separate from reorder-only shaping agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada
  • ToUnicode recovery for producer-side complex shaping codepoints agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.166.0

Added

  • producer-side Mongolian shaping with OpenType GSUB agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada
  • ToUnicode extraction for shaped Mongolian letters agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.165.1

Fixed

  • right-to-left ordering for shaped Syriac and Arabic Supplement / Extended-A words agora funciona corretamente e evita a saída ou o diagnóstico incorreto anterior

Version 2.165.0

Added

  • SimpleLatinFonts compact WinAnsi output for printable ASCII standard-font text agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.164.0

Changed

  • document-wide shared font embedding across multiple pages agora se comporta de forma consistente nas páginas geradas, preservando renderização e extração de texto

Version 2.163.3

Alterado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados JEPSCD+ArialMTDetalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.163.2

Alterado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados Compression Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.163.1

Fixed

  • valid TrueType fonts without optional hinting tables agora funciona corretamente e evita a saída ou o diagnóstico incorreto anterior

Version 2.163.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados
  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.162.0

Added

  • OpenType liga / clig Latin ligature folding through sfStandardLigatures agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada
  • copy, paste, and search recovery for folded Latin ligatures agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.161.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.160.0

Added

  • OpenType GSUB groundwork for future Tibetan rendering agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.159.0

Added

  • GPOS mark positioning for Hebrew niqqud and Arabic harakat in right-to-left runs agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.158.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.157.0

Added

  • producer-side shaping for Arabic Supplement and Arabic Extended-A letters agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada
  • ToUnicode recovery for newly shaped Arabic Supplement and Extended-A letters agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.156.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.155.0

Added

  • GPOS Mark-to-Base placement for combining marks in Thai, Lao, Hebrew, and Latin text agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.154.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.153.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.152.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.151.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.150.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Corrigido

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.149.0

Adicionado

  • Detalhes localizados da alteração no comportamento da API e nos símbolos listados

Version 2.148.1

Changed

  • more verifiable Memory Stream and PDF Info demo output agora se comporta de forma consistente nas páginas geradas, preservando renderização e extração de texto

Version 2.148.0

Added

  • XFA fields below the first page flowing onto following pages agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.147.4

Added

  • diagnostics for oversized content-sized XFA text fields and labels agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.147.3

Added

  • one-line minimum height for empty growable XFA text agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.147.2

Added

  • layout for XFA text without an explicit width agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.147.1

Added

  • automatic height for XFA text with width but no height agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.147.0

Added

  • internal text measurement groundwork for content-sized XFA text agora está disponível; a saída existente não muda a menos que a opção relacionada seja ativada

Version 2.146.4

Fixed

  • positive page-height normalization for loaded PDFs with descending box coordinates agora funciona corretamente e evita a saída ou o diagnóstico incorreto anterior
  • unchanged drawing positions, field rectangles, text, and images on affected loaded pages agora funciona corretamente e evita a saída ou o diagnóstico incorreto anterior

Version 2.146.3

Fixed

  • pagination for repeating fixed-position XFA data sections agora funciona corretamente e evita a saída ou o diagnóstico incorreto anterior
  • more accurate off-page diagnostics for XFA forms loaded from existing PDFs agora funciona corretamente e evita a saída ou o diagnóstico incorreto anterior

Version 2.146.2

Added

  • A paginação de XFA agora abrange várias áreas de conteúdo: quando uma página define várias regiões de conteúdo, o conteúdo fluido as preenche em ordem—continua na próxima região da mesma página antes de passar para uma nova página—de modo que os layouts de formulário com várias colunas e regiões sejam paginados corretamente
  • Seções repetitivas longas agora são paginadas ao longo de várias páginas: uma lista orientada por dados que se repete uma vez por registro e ultrapassa sua área de conteúdo continua nas páginas seguintes sem perder nenhuma linha
  • As quebras de seção agora são respeitadas: uma seção de formulário marcada para começar em uma nova página começa em uma página nova mesmo quando a página atual ainda tem espaço, enquanto uma quebra de região move a seção para a próxima área de conteúdo

Version 2.146.1

Added

  • Os formulários XFA agora são paginados automaticamente: quando o conteúdo fluido—como uma lista longa baseada em dados ou um conjunto de campos—fica mais alto que a área de conteúdo da página, o transbordamento continua em uma nova página em vez de ultrapassar a borda inferior; formulários de página única não são afetados e produzem uma saída idêntica

Version 2.146.0

Changed

  • O achatamento de XFA para AcroForm agora encaminha cada campo e gráfico achatado por meio de uma atribuição de página por item—a base interna para a paginação de várias páginas nas próximas versões; formulários de página única não são afetados e produzem uma saída idêntica

Version 2.145.4

Changed

  • O layout de tabela e da esquerda para a direita (lr-tb) do XFA foi validado em formulários XFA reais—faturas, pedidos de compra, solicitações de pagamento e grades de dados—confirmando que tabelas orientadas por dados geram uma linha por registro e que cada célula fica na linha e na coluna corretas, sem perda de campos em comparação com o tratamento posicional anterior
  • Quando uma coluna de tabela com largura automática (uma entrada -1 em columnWidths) contém apenas células expansíveis sem largura mensurável, a coluna descartada agora é relatada por meio de XFAFlattenWarnings em vez de ser omitida silenciosamente

Version 2.145.3

Added

  • As colunas de tabela definidas com largura automática (uma entrada -1 em columnWidths ou colunas não especificadas) agora se ajustam à sua célula mais larga, de modo que cada célula de uma coluna de largura automática fica alinhada na mesma posição em todas as linhas; tabelas que combinam larguras de coluna fixas e automáticas agora são dispostas de forma consistente

Version 2.145.2

Added

  • As tabelas XFA orientadas por dados agora se expandem corretamente: uma linha de tabela marcada para repetição (com <occur>) gera uma linha por registro de dados, de modo que faturas e listas de itens são achatadas em uma linha por entrada em vez de uma única linha de modelo; a marcação de linha sem conteúdo não desloca mais as colunas

Version 2.145.1

Added

  • Os formulários XFA agora podem usar o layout de tabela: um subformulário com layout="table" organiza seus filhos layout="row" em colunas alinhadas, com as larguras das colunas obtidas do columnWidths da tabela e a altura de cada linha definida por sua célula mais alta. Tabelas achatadas—notas fiscais, listas de itens, grades de dados—agora posicionam suas células nas linhas e colunas corretas em vez de se sobreporem na borda esquerda

Version 2.145.0

Added

  • Os formulários XFA agora podem usar um layout em mosaico da esquerda para a direita: um subform com layout="lr-tb" organiza seus elementos filhos de campo e desenho lado a lado, quebrando para uma nova linha quando o próximo não couber na largura do contêiner. Formulários achatados que distribuem seus controles em uma grade com quebra de linha—em vez de em uma única coluna vertical—agora os posicionam corretamente

Version 2.144.5

Fixed

  • Os campos de formulário XFA que omitem sua posição x e/ou y—um atalho comum e válido no layout posicionado, em que a coordenada omitida assume a origem do contêiner—não são mais descartados. Formulários reais cujos blocos de endereço, seções e tabelas dependiam desse padrão agora são achatados com seu conjunto completo de campos, em vez de perdê-los silenciosamente
  • As subseções aninhadas dentro de um formulário com fluxo de cima para baixo agora avançam o cursor vertical pela sua própria altura de conteúdo, de modo que seções vizinhas se empilham uma abaixo da outra em vez de se sobreporem na mesma posição. Formulários com fluxo de várias seções agora são dispostos na ordem vertical correta

Version 2.144.4

Added

  • Formulários XFA com seções repetidas controladas por dados agora são suportados: um subformulário com <occur max="-1"/> (ou qualquer máximo não padrão) é expandido em uma instância por grupo de dados correspondente no pacote datasets, com cada instância vinculando seus campos aos valores da linha correspondente. Formulários que usam vinculação implícita de datasets para gerar listas ou tabelas de tamanho variável agora são achatados com o número correto de campos e os valores corretos por linha

Version 2.144.3

Added

  • Os formulários XFA agora podem usar um layout de fluxo de cima para baixo: um subformulário com layout="tb" empilha verticalmente seus elementos filhos de campo e desenho—cada um abaixo do anterior—mesmo quando esses filhos não especificam uma posição explícita. Formulários achatados que dependem do fluxo vertical automático em vez de coordenadas fixas agora dispõem seus campos corretamente

Version 2.144.2

Fixed

  • Formulários XFA cujo primeiro pacote começa com uma declaração DOCTYPE—como a produzida por algumas ferramentas de design XFA—agora são achatados corretamente por meio de FlattenLoadedXFA em vez de falhar com um erro de modelo ausente. O carregador reconhece o elemento raiz xdp:xdp mesmo quando um prólogo DOCTYPE o precede
  • Entidades XML internas declaradas no DOCTYPE de um formulário (por exemplo <!ENTITY name "value">) agora são expandidas onde quer que a referência &name; correspondente apareça no formulário, de modo que os campos achatados contenham o texto resolvido

Security

  • Entidades XML externas (SYSTEM ou PUBLIC) referenciadas por um formulário XFA nunca são resolvidas durante o achatamento: o HotPDF não busca a URL ou o arquivo referenciado, protegendo contra ataques XXE (XML External Entity). Tal referência é expandida para texto vazio e relatada por meio de XFAFlattenWarnings

Version 2.144.0

Changed

  • O achatamento de XFA para AcroForm agora é executado por um mecanismo de layout dedicado de duas passagens: primeiro as posições dos elementos são calculadas e, em seguida, os campos e os gráficos são emitidos. Formulários posicionais estáticos produzem uma saída idêntica; essa mudança interna é a base para o suporte a layout fluido e seções repetidas que chegará nas próximas versões

Version 2.143.5

Fixed

  • Formulários XFA reais que armazenam sua entrada /XFA como uma matriz de pacotes agora são achatados corretamente por FlattenLoadedXFA em vez de falhar com um erro de modelo ausente. Isso abrange formulários cujos fluxos de pacote são compactados individualmente sem um filtro diretamente legível, e formulários que listam o pacote de configuração antes do modelo—ambos comuns em PDFs exportados por ferramentas profissionais de design XFA

Added

  • O achatamento XFA <draw> agora renderiza rótulos de texto estáticos—títulos de formulário e legendas de campo—como texto de página nativo, preservando a família, o tamanho e a cor da fonte do rótulo, para que permaneçam visíveis em um formulário achatado em leitores sem mecanismo XFA
  • Os widgets de botão XFA agora são convertidos em botões de ação AcroForm nativos preservando o texto da legenda, de modo que os botões de ação apareçam no formulário achatado

Version 2.143.4

Added

  • O novo método FlattenLoadedXFA achata o formulário XFA incorporado em um PDF já carregado em campos AcroForm nativos e gráficos de página estáticos, completando a conversão de XFA para AcroForm em documentos abertos a partir do disco (as versões anteriores achatavam os bytes XFA fornecidos pelo chamador por meio de ApplyXFAAsAcroForm). Ele lê a entrada /XFA do formulário, seja um único fluxo ou uma matriz de pacotes, depois remove /XFA e limpa o sinalizador de renderização dinâmica, de modo que o resultado seja um AcroForm simples exibido por qualquer leitor de PDF. Ele retorna o número de campos criados, ou zero quando o PDF carregado não contém XFA
  • Os dois pontos de entrada de achatamento de XFA agora aceitam uma opção Editable: deixe-a ativada (o padrão) para campos preenchíveis ou desative-a para marcar como somente leitura cada campo gerado
  • Nomes de campo XFA duplicados, permitidos em XFA, mas não em AcroForm, agora são tornados únicos automaticamente com um sufixo numérico, e a renomeação é relatada por meio de XFAFlattenWarnings
  • Modelos XFA criados para diferentes versões do esquema de modelos são aceitos; um namespace de modelo não reconhecido é anotado como aviso em vez de rejeitado, de modo que o formulário ainda é achatado

Version 2.143.3

Added

  • O achatamento de XFA para AcroForm agora reproduz os gráficos estáticos <draw> de um modelo XFA como conteúdo nativo da página, de modo que retângulos, linhas, arcos e imagens incorporadas mantêm sua posição em um formulário achatado nos leitores de PDF que não implementam um mecanismo XFA. Retângulos e linhas são traçados com a espessura e a cor da borda do XFA, um arco é renderizado como uma curva suave seguindo seus ângulos inicial e de varredura, e uma imagem PNG ou JPEG incorporada é decodificada e desenhada em seu quadro original

Version 2.143.2

Added

  • O achatamento de XFA para AcroForm agora transfere o estilo dos campos para os campos AcroForm gerados. A família e o tamanho da fonte XFA, a cor do texto, a cor e a largura da borda do campo e o alinhamento horizontal do texto são convertidos na aparência padrão, na borda e no alinhamento do campo, de modo que um formulário XFA achatado mantém a aparência pretendida em leitores de PDF padrão que não implementam um mecanismo XFA. Nesta versão, a seleção de fontes é mapeada para as fontes PDF padrão; a incorporação completa de fontes virá a seguir

Version 2.143.1

Added

  • O achatamento de XFA para AcroForm realizado por ApplyXFAAsAcroForm agora converte campos numéricos, de data, caixas de seleção, botões de opção, listas de escolha e assinaturas digitais, além dos campos de texto. Cada widget XFA <ui> é mapeado para o campo AcroForm nativo mais próximo: entradas numéricas e de data tornam-se campos de texto, um check button torna-se uma caixa de seleção (ou um grupo de botões de opção quando está dentro de um exclusion group), e uma lista de escolha torna-se uma caixa de combinação ou, quando em seleção múltipla, uma caixa de listagem. Os valores dos campos continuam sendo obtidos primeiro do pacote form e depois do pacote datasets

Version 2.143.0

Added

  • O novo método ApplyXFAAsAcroForm converte um formulário XFA (XML Forms Architecture) fornecido pelo chamador em campos de texto AcroForm nativos, de modo que formulários XFA estáticos se tornem visíveis e preenchíveis em leitores de PDF modernos que não implementam um mecanismo XFA. Esta primeira versão abrange campos de texto com valores obtidos do pacote form ou datasets; outros tipos de campo, estilos e gráficos virão a seguir. XFAFlattenWarnings relata qualquer elemento que não pôde ser convertido

Version 2.142.1

Changed

  • O auxiliar de anexação de Seed Value do PAdES agora rejeita valores que forçariam um signatário posterior a violar o perfil PAdES (ETSI EN 319 142-2 V1.2.1 §4.2.6): a restrição /SubFilter deve ser adbe.pkcs7.detached ou ETSI.CAdES.detached, e a restrição /DigestMethod não pode ser MD5, SHA1 ou SHA-1. O produtor lança uma diagnose clara em vez de emitir silenciosamente um dicionário /SV que viole o perfil

Version 2.142.0

Added

  • O novo método AddXFASignaturePacket incorpora uma assinatura XAdES / XML-DSig gerada pelo chamador como o pacote signature do XFA dentro do array /XFA do AcroForm (ISO 32000-1 §12.7.8), para formulários XFA assinados. O HotPDF não gera nem analisa a assinatura: o chamador a produz com uma biblioteca criptográfica XML sobre os datasets do XFA, e o HotPDF a incorpora como pacote FlateDecode. Aplicam-se as mesmas rejeições PDF/A e PDF/X, a exclusividade de fluxo único e as proteções contra pacotes duplicados de AddXFAPacket

Version 2.141.2

Added

  • Nova API pública RegisterDefaultColorSpace(Which, ColorSpaceCS) registra um espaço de cor ICCBased (criado com RegisterICCProfile) como o mapeamento /DefaultGray, /DefaultRGB ou /DefaultCMYK em todo o documento conforme ISO 32000-1 §8.6.5.6 e Nota Técnica PDF/A Competence Center 0002 §1.3. No EndDoc, o auxiliar percorre cada página e adiciona uma entrada [/ICCBased <profile-stream>] sob a chave /DefaultX correspondente no dicionário Resources/ColorSpace da página. A contagem de componentes é validada em relação à família (DefaultGray → N=1, DefaultRGB → N=3, DefaultCMYK → N=4); uma chamada com CSName vazio limpa o mapeamento; entradas /DefaultX já presentes no nível da página são preservadas (substituições do chamador vencem). Com isso, um documento que mistura conteúdo DeviceRGB e DeviceCMYK pode satisfazer PDF/A-1 §6.2.3.3 com qualquer perfil GTS_PDFA1 OutputIntent único, porque a verificação de consistência §6.2.3.3 introduzida em v2.141.1 trata o uso de DeviceX como absorvido assim que o espaço Default correspondente é registrado

Version 2.141.1

Changed

  • Verificação de consistência entre o espaço de cor do dispositivo e OutputIntent no PDF/A (ISO 19005-1 §6.2.3.3 + Nota Técnica PDF/A Competence Center 0002 §4.1). O EndDoc agora gera uma exceção quando um documento mistura conteúdo DeviceRGB e DeviceCMYK (um único perfil ICC de OutputIntent GTS_PDFA1 não pode corresponder a ambos os modelos de cor ao mesmo tempo) ou quando o conteúdo DeviceCMYK é pareado com um perfil OutputIntent RGB e vice-versa. Conforme TN0002 §4.1, o conteúdo DeviceGray é compatível com perfis de OutputIntent Gray, RGB ou CMYK. Os XObjects de imagem são rastreados pelo espaço de cor que o produtor realmente emite (DeviceRGB para JPEG e Flate de 24 bits, DeviceGray para CCITTFax); conforme TN0002 §4.3, os arrays /C e /IC das anotações de marcação contam como DeviceRGB. Os espaços de cor ICCBased / CalGray / CalRGB / Lab estão isentos da verificação

Added

  • As propriedades somente leitura UsedDeviceGray, UsedDeviceRGB e UsedDeviceCMYK em THotPDF expõem os sinalizadores de uso do espaço de cor do dispositivo em andamento, permitindo que os chamadores inspecionem o estado da verificação de consistência antes do EndDoc

Version 2.141.0

Added

  • Os formulários XFA agora podem ser emitidos como um único fluxo /XFA por meio do novo método SetXFADocument, que coloca um documento XFA/XDP completo em um único fluxo (ISO 32000-1 §12.7.8), como alternativa à forma de matriz por pacotes de AddXFAPacket. As duas formas são mutuamente exclusivas
  • A nova propriedade XFANeedsRendering define o sinalizador /NeedsRendering do Catalog (ISO 32000-1 §7.7.2) para que um visualizador regenere um formulário XFA dinâmico na primeira abertura do documento. Ela vem desativada por padrão, deixando os documentos não XFA idênticos byte a byte

Changed

  • A documentação do XFA agora mostra os pacotes de invólucro de início e fim xdp:xdp exigidos para a forma de matriz de /XFA, de modo que os fluxos dos pacotes se concatenem em um documento XDP bem formado (ISO 32000-1 §12.7.8)

Fixed

  • Os tipos MIME no /Subtype de arquivos incorporados agora são gravados como nomes PDF corretos, com / escapado como #2f (por exemplo, /application#2fxml) conforme ISO 32000-1 §7.3.5, para que leitores rigorosos analisem corretamente o tipo de mídia. Afeta AddPDFA3AssociatedFile e AddXAdESAssociatedFile
  • AddXAdESAssociatedFile agora rejeita uma carga XML vazia, pois um fluxo de assinatura XAdES não pode ser vazio

Version 2.140.5

Changed

  • O dicionário de carimbo do tempo do documento PAdES agora emite o /Type /DocTimeStamp exigido pela especificação em vez de /Type /Sig e omite as entradas /M, /Reason, /Location e /ContactInfo que a norma marca como «não devem estar presentes», melhorando a conformidade com ETSI EN 319 142-1 V1.2.1 §5.4.3
  • O subdicionário Signature VRI do DSS agora referencia os mesmos fluxos indiretos que os arrays de nível superior do DSS (Certs, CRLs, OCSPs) em vez de escrever objetos de fluxo duplicados, atendendo à invariante da ETSI EN 319 142-1 V1.2.1 §5.4.2.3 e à orientação da nota s) do §6.3 sobre evitar duplicação de valores de certificados
  • O valor /Extensions /ESIC /ExtensionLevel declarado no Catalog agora é automaticamente elevado para 2 quando uma assinatura PAdES baseline com /SubFilter /ETSI.CAdES.detached é adicionada, já que o requisito l) do §6.3 da norma é identificado pelo Level 2; documentos que carregam apenas dados de DSS ou de carimbo do tempo do documento continuam usando Level 1

Added

  • Uma assinatura PAdES agora pode transportar certificados de CA intermediários junto ao certificado do signatário dentro do CMS SignedData.certificates via a nova opção AdditionalCertsDER, ajudando um verificador a construir um caminho até a âncora de confiança sem consulta externa (ETSI EN 319 142-1 V1.2.1 §6.3 nota b)

Fixed

  • Conformidade com PDF/A: o sub-conjuntador de TTF Unicode agora emite o fluxo de bits /CIDSet no descritor de fonte do CIDFont descendente quando PDFACompliance está ativo. ISO 19005-1 §6.3.5 / ISO 19005-2 §6.2.11 / ISO 19005-3 §6.2.11 exigem que CIDFonts em subconjunto declarem quais CIDs estão presentes; sem o fluxo, uma verificação estrita do veraPDF falha mesmo que todos os glifos necessários estejam incorporados. O fluxo de bits é MSB-first conforme ISO 32000-1 §9.7.4.2 (CID 0 no byte 0 bit 7) e só é emitido em modo PDF/A, mantendo a saída não PDF/A estável byte a byte

Version 2.140.4

Fixed

  • Ao salvar incrementalmente um PDF carregado, um dicionário de criptografia órfão que ficou na origem (que seu trailer não referencia mais) agora é marcado como livre na seção de referências cruzadas anexada, de modo que leitores que seguem a revisão mais recente não veem mais esse dicionário perdido. Os bytes originais permanecem intactos e documentos sem esse resíduo são gravados exatamente como antes; complementa a limpeza do salvamento completo da 2.140.3

Version 2.140.3

Fixed

  • Ao salvar um PDF carregado com AES-256, um dicionário de criptografia remanescente não é mais copiado do arquivo de origem. Quando um documento de origem mantinha um dicionário de criptografia órfão que seu trailer não referenciava mais, a saída costumava conter esse dicionário perdido ao lado do ativo; agora apenas o dicionário de criptografia realmente em uso é gravado

Version 2.140.2

Added

  • O atributo assinado de informações de revogação Adobe transportado dentro de uma assinatura PAdES agora também aceita evidências de revogação fora de X.509 ao lado das entradas CRL e OCSP habituais, de modo que um token de revogação específico de um setor identificado por seu próprio OID pode viajar dentro da assinatura
  • Uma assinatura PAdES agora pode declarar um atributo content-hints CAdES que descreve o que foi assinado, útil em fluxos de trabalho de várias assinaturas em que um signatário posterior precisa conhecer o tipo de conteúdo original sem precisar derivá-lo novamente

Version 2.140.1

Fixed

  • A criptografia de um documento carregado com AES-256 não trava mais quando suas cadeias de texto estão aninhadas dentro de arrays ou outros contêineres não indiretos; tais cadeias agora são criptografadas corretamente em vez de entrar em um laço infinito
  • Abrir ou descriptografar um documento AES-256 não falha mais com um erro de preenchimento quando o arquivo contém um dicionário de criptografia residual de sua origem; o descriptografador agora ignora todos os dicionários de criptografia, de modo que todo o conteúdo das cadeias é descriptografado corretamente

Version 2.140.0

Changed

  • A criptografia e a descriptografia AES-256 agora usam a aceleração de hardware AES-NI da CPU quando disponível, com um fallback de software portátil caso contrário. Em uma CPU de desktop típica, isso eleva a taxa de transferência AES-256-CBC de cerca de 148 MB/s para 442 MB/s na criptografia (cerca de 3× mais rápido) e de cerca de 147 MB/s para 832 MB/s na descriptografia (cerca de 5,7× mais rápido)
  • Abrir um PDF grande protegido por senha agora usa muito menos memória. O carregador não mantém mais o arquivo de origem inteiro na memória enquanto recupera a chave de criptografia e descriptografa: documentos AES-256 obtêm o que precisam do modelo de objetos analisado, e a recuperação de chave legada agora lê apenas o final do arquivo em vez do arquivo inteiro. Para um documento criptografado de vários gigabytes, isso elimina um pico de memória temporário de aproximadamente o dobro do tamanho do arquivo

Version 2.139.3

Fixed

  • A reescrita e gravação pela Direct File API agora é drasticamente mais rápida em documentos muito grandes. Regravar um arquivo de 60.000 páginas / 883 MB após uma alteração de metadados ou objetos caiu de cerca de 189 segundos para aproximadamente 21 segundos, porque o buffer de cópia por objeto agora é reutilizado em vez de realocado para cada objeto. Abrir ou copiar o mesmo arquivo pela Direct File API permanece em torno de 2-3 segundos

Version 2.139.2

Fixed

  • Ao salvar novamente documentos PDF 1.5+ carregados com fluxos de objetos, e documentos PDF 2.0 com trailer, depois de edições com BeginDoc, a árvore de páginas agora permanece válida. Antes, um dicionário de página recuperado de um fluxo de objetos podia ser anexado sem /Type /Page, fazendo leitores relatarem um objeto que não era página na árvore de páginas após EndDoc

Version 2.139.1

Fixed

  • Documentos criptografados que combinam AES-256 com um stream de referência cruzada (opcionalmente ao lado de streams de objetos comprimidos) agora reabrem e salvam novamente de forma confiável. Anteriormente, quando os dados de um stream criptografado começavam por acaso com um byte de quebra de linha, o carregador podia ler esse stream com um byte de desalinhamento e corromper de forma intermitente o resultado descriptografado, de modo que um arquivo protegido por senha às vezes não abria. O leitor de stream agora segue exatamente o limite dos dados, e esses documentos abrem de forma consistente

Version 2.139.0

Fixed

  • Documentos que usam um stream de referência cruzada juntamente com streams de objetos comprimidos (PDF 1.5 e posterior) agora são lidos por um carregador em conformidade com o padrão. Reabrir e salvar novamente esse documento mantém a árvore de páginas intacta e preserva os números originais dos objetos; o carregador anterior podia descartar a árvore de páginas ou renumerar objetos e perder páginas na cópia salva
  • Um stream cujo /Length está armazenado como referência indireta agora é resolvido corretamente durante o carregamento de um documento com stream de referência cruzada, de modo que seu conteúdo não é mais perdido

Version 2.138.0

Fixed

  • Documentos que declaram uma versão de cabeçalho PDF mais antiga, como %PDF-1.3 ou %PDF-1.4, mas que na verdade usam um stream de referência cruzada agora são carregados corretamente em vez de abrirem como um documento vazio sem páginas. O roteamento é decidido a partir da estrutura real de referência cruzada em vez da versão de cabeçalho declarada, de modo que arquivos muito grandes desse tipo também abrem como esperado

Version 2.137.9

Added

  • Foi adicionada saída CSV para relatórios de preflight por meio de pfCSV em CreatePreflightReport, SavePreflightReport e CreatePreflightReportWithProfile, usando colunas estáveis category,name,status,value,spec para fluxos de planilhas e processamento em lote
  • A GUI PreflightReport e a CLI HotPDFPreflight agora podem selecionar saída CSV; a CLI aceita -f csv para execuções de arquivo único e de diretório

Version 2.137.8

Fixed

  • O caminho de descriptografia do buffer AES-256 nativo foi reforçado para que os chamadores possam atribuir o resultado da descriptografia ao mesmo AnsiString que forneceu o buffer de texto cifrado sem invalidar o ponteiro de entrada

Version 2.137.7

Added

  • Foi adicionado suporte a strings page-range baseadas em um para operações de página de loaded-document, incluindo HPDFParsePageRange, sobrecargas de intervalo para InsertPagesFromDocument e ExtractPagesToFile, e AppendPagesFromDocument
  • Foi adicionado OnPageOperationProgress para que os fluxos de trabalho append, insert e extract possam relatar progresso determinístico em nível de página

Version 2.137.6

Added

  • Foi adicionado THotPDF.DACopyFile para fluxos de trabalho de arquivos grandes que só precisam de uma contagem de páginas e de uma cópia salva byte a byte original sem construir o grafo de objetos normal completo
  • A demo HugeFileBenchmark agora inclui uma linha direct-copy, enquanto o conjunto de operações padrão ainda cobre o caminho completo LoadFromFile + SaveLoadedDocument

Changed

  • Reduziu-se a cópia de memória na descriptografia de stream AES-256 ao descriptografar a partir de buffers existentes quando possível, incluindo a memória de stream carregada para grandes streams de imagens criptografadas

Fixed

  • Foi melhorado o carregamento de PDFs criptografados baseado em arquivo, de modo que as aberturas por senha não armazenem mais em cache todo o PDF de origem apenas para recuperar valores brutos do dicionário de criptografia

Version 2.137.5

Added

  • Foi adicionada edição object-source via Direct File API para fluxos de trabalho de arquivos grandes: aplicativos podem abrir um PDF com DAOpenFileReadOnly, inspecionar contagens de objetos e corpos fonte, substituir ou anexar corpos de objetos, atualizar as informações do documento e salvar uma cópia totalmente reescrita
  • A demo HugeFileBenchmark agora inclui uma operação direct-rewrite e documenta execuções de benchmark HTML/CSV para PDFs enormes somente de imagem e mistos de texto/imagem

Changed

  • Expanded Direct File API indexing to cover traditional xref tables and xref streams, including compressed object entries, so image-heavy PDFs and object-heavy PDFs can use the lightweight path
  • Optimized Direct File API full rewrites by copying unchanged direct objects in source-offset order and merging contiguous ranges, greatly reducing random I/O on PDFs with hundreds of thousands of objects

Version 2.137.4

Added

  • A GUI agora cobre relatórios padrão text, JSON e HTML, senhas opcionais, profile INI files, presets integrados, single-file PDF/VT validation, embedded-report PDF output, report preview, status logging, automatic output naming e acesso rápido aos arquivos gerados

Changed

  • A demo Delphi PreflightReport foi atualizada de console sample para uma ferramenta VCL GUI interativa para single-file preflight workflows

Removed

  • O antigo comportamento de inicialização foi removido: quando nenhum command-line argument é fornecido, nenhum sample PDF nem report é criado automaticamente

Version 2.137.3

Added

  • A validação PDF/VT agora reconhece propriedades XMP escritas como atributos RDF, bem como texto de elemento, cobrindo os estilos de pacote comuns pdfvtid:GTS_PDFVTVersion, pdfvtid:GTS_PDFVTModDate e xmp:ModifyDate

Fixed

  • Foi adicionada cobertura de regressão Delphi que mantém a detecção de metadados PDF/VT em estilo de atributo separada das demais verificações estruturais PDF/VT

Version 2.137.2

Changed

  • A validação de relatório preflight incorporado foi melhorada para que PDFs de origem que terminam legitimamente com uma quebra de linha final após %%EOF continuem correspondendo à sua impressão digital armazenada

Fixed

  • Perfis preflight salvos como UTF-8 com BOM agora carregam corretamente quando a primeira linha é um cabeçalho de seção
  • O decodificação de escape de string literal PDF foi reforçada, melhorando a validação de senhas e a saída de cópia não criptografada para PDFs criptografados com entradas owner ou user com escape

Version 2.137.1

Changed

  • A segurança do parser CFF foi estendida para verificações diretas de byte-array, restaurando a posição do leitor após entrada malformada e limpando o estado de layout obsoleto em verificações com falha

Fixed

  • O carregador de stream CFF compatível com wrapper C++Builder foi reforçado para que a entrada nil stream retorne False e reinicialize o estado do wrapper em vez de dereferenciar o stream

Version 2.137.0

Added

  • Foi adicionado THotPDF.ValidatePDFVT com sobrecargas que reconhecem senha para validação PDF/VT focada. O relatório de texto verifica a declaração PDF/VT no XMP, o namespace de metadados, a correspondência da data de modificação PDF/VT, o marcador base PDF/X, output intent, a estrutura DPartRoot do catálogo, as páginas carregáveis e a cobertura DPart em nível de página
  • A CLI autônoma HotPDFPreflight agora aceita --pdfvt para gravar relatórios de validação .pdfvt.txt para um único PDF ou uma varredura recursiva de diretório

Version 2.136.8

Added

  • Adiciona cobertura extra de smoke para streams CFF e Type 1 malformados, com preservação da posição do stream e limpeza de metadados obsoletos após falhas do parser

Changed

  • Melhora o tratamento de falhas dos parsers Type 1 PFB e CFF para que as verificações de stream malformado preservem a posição de entrada e limpem metadados obsoletos em vez de deixar visível um nome de fonte anterior após uma verificação com falha

Version 2.136.7

Changed

  • Expande o smoke test de Type 1/CFF com dados CFF em memória, dados de fonte Type 1 em ASCII, carregamento de arquivo PFB no nível do wrapper e carregamento de stream CFF no nível do wrapper para proteger as superfícies de integração de Delphi e C++Builder

Fixed

  • Fortalece os pontos de entrada dos parsers Type 1 PFB e CFF para que verificações baseadas em stream preservem a posição do stream do chamador, rejeitem dados malformados com segurança e exponham metadados básicos da fonte Type 1/CFF pelos caminhos de wrapper de Delphi e C++Builder

Version 2.136.6

Added

  • Adiciona demos de recursos em Delphi para saída de texto Unicode CJK, geração de documentos grandes com várias páginas, assinatura PFX e cobertura ampliada de compressão de imagem com saída CCITT Group 3 1D e 2D

Version 2.136.5

Changed

  • Os relatórios de preflight agora continuam quando uma entrada de página carregada não consegue retornar um MediaBox. O relatório marca essa página como indisponível em vez de abortar, então árvores de página grandes ou inconsistentes ainda geram saída diagnóstica
  • Vários scanners de preflight em nível de byte foram otimizados para evitar cópias repetidas de string do sufixo inteiro e buscas lineares por objetos duplicados. A amostra de limite de implementação com 10.000 páginas agora conclui dentro do orçamento de 120 segundos do teste de estresse
  • O executor de estresse do preflight agora usa por padrão um timeout de 120 segundos por arquivo, e a demo PreflightReport recompila sem erros após o caminho de saída sensível ao profile

Version 2.136.4

Added

  • Adiciona um cookbook de preflight, um mapa de API de preflight gerado e um fluxo de trabalho de teste de estresse para diretórios grandes para a ferramenta de linha de comando HotPDFPreflight. O executor de estresse isola cada PDF com timeout por arquivo e registra evidências em JSON, Markdown, CSV, relatório e log

Changed

  • Registra uma linha de base de 1000 arquivos em D:\PDFdoc\PDF-Samples: 997 aprovados, 1 falhou, 2 expiraram, 111.422 segundos decorridos, 8.975 arquivos por segundo

Fixed

  • Corrige um problema de recompilação completa no helper de fingerprint do preflight ao declarar o helper antes de CreatePreflightReport usá-lo, para que ferramentas de console que recompilam HPDFDoc.pas a partir do código-fonte compilem limpas

Version 2.136.3

Added

  • A ferramenta independente de linha de comando HotPDFPreflight ganha a opção --aggregate <file> que grava um resumo em lote produzido por THotPDF.AggregatePreflightReports após o fim dos relatórios por arquivo. O agregado lista cada PDF processado com status, tamanho, contagem de avisos e totais

Changed

  • Funciona com arquivos únicos e varreduras recursivas de diretório, com ou sem --profile / --preset. O agregado é calculado a partir do corpo textual de cada relatório, então o filtro por profile aparece no resumo
  • Exemplo: HotPDFPreflight C:\Archive -r --preset silent-actions -f json -o C:\Archive\reports --aggregate C:\Archive\Aggregate.txt grava relatórios JSON para cada PDF mais um único resumo em lote

Version 2.136.2

Added

  • The standalone HotPDFPreflight CLI tool gains --profile <file> and --preset <name> options to filter each report through a preflight profile before writing it. Works alongside -f text|json|html, -p <password>, and -r recursive directory walks

Changed

  • The two new options are mutually exclusive (passing both, the later one wins). The preset values match what THotPDF.GetBuiltInPreflightProfile recognises so CI pipelines can pull a canonical configuration without staging an INI file
  • Example: HotPDFPreflight C:\Archive -r --preset silent-actions -f json -o C:\Archive\reports writes JSON reports for every PDF in the directory tree with the silent-actions preset applied

Version 2.136.1

Added

  • The Delphi PreflightReport demo now accepts profile=<file> or preset=<name> as an additional CLI argument to filter the report through a profile before writing it. Works alongside the existing json / html / embed output format flag

Changed

  • Examples: PreflightReport.exe Input.pdf Report.txt "" text profile=tuned.ini or preset=compact / preset=silent-actions
  • The preset values mirror the names recognised by THotPDF.GetBuiltInPreflightProfile so the demo doubles as a profile testbed without having to author an INI file

Version 2.136.0

Added

  • Adiciona THotPDF.MergePreflightProfiles para combinar profiles em camadas. O resultado é a união sem duplicatas das duas entradas, com DisableChecks e DisableWarnings mesclados e DisableHints usando OR lógico, útil para combinar um preset como compact com ajustes específicos do projeto
  • Adiciona THotPDF.DiffPreflightProfiles para comparação estrutural. Retorna True quando dois profiles são equivalentes; caso contrário, os parâmetros de saída OnlyInA e OnlyInB listam as entradas exclusivas de cada lado como tokens check:<name> / warn:<name> / option:hints=false separados por nova linha

Changed

  • Os dois helpers completam o ciclo de vida do profile: Load / GetBuiltIn / Save / Apply / Validate / Merge / Diff

Version 2.135.0

Added

  • Adiciona THotPDF.CreatePreflightReportWithProfile, um wrapper de conveniência completo que combina CreatePreflightReport, LoadPreflightProfile, ApplyPreflightProfile e os conversores de formato em uma única chamada
  • A nova sobrecarga aceita um PDF de origem, senha opcional, arquivo de profile opcional e formato de destino (pfText, pfJSON ou pfHTML) e retorna o corpo final do relatório. Passar ProfileFile vazio pula totalmente a etapa de profile, então o chamador pode manter um único ponto de chamada independentemente de ter ou não um profile configurado

Changed

  • As quatro APIs subjacentes continuam disponíveis, então cadeias de chamada existentes seguem funcionando sem mudança; o novo wrapper é apenas aditivo

Version 2.134.0

Added

  • Adiciona THotPDF.SavePreflightProfile para gravar um registro THPDFPreflightProfile de volta em um arquivo INI. O formato de saída corresponde ao que LoadPreflightProfile consome, então as duas funções são inversas exatas para profiles bem formados

Changed

  • Habilita um fluxo de trabalho de carregar preset, ajustar e salvar: obtenha um preset interno com GetBuiltInPreflightProfile (v2.133.0), modifique as listas ou flags e depois grave o resultado com SavePreflightProfile para reutilização posterior ou compartilhamento entre projetos
  • Seções sem conteúdo são omitidas da saída, então um profile vazio produz uma única linha de comentário em vez de três cabeçalhos de seção vazios