Notas de lançamento do PDFiumPas
Esta página está localizada para Português de Portugal e mantém nomes de API, ficheiros e valores literais inalterados
Histórico de versões das funcionalidades visíveis ao utilizador do PDFiumPas, correcções, melhorias de visualização, geração de documentos, saída PDF/A, renderização e actualizações da documentação
Última versão
- Última versão: 2.57.0; Data de lançamento:
Version 2.57.0
Adicionado (Added)
TPdfThumbnailView.Orientationsuporta agora esquemas de miniaturas verticais e horizontais preservando a predefinição vertical existenteFirstVisiblePageIndex,LastVisiblePageIndexeEnsureCurrentPageVisibleexpõem e controlam a janela de visualização de miniaturas com índices de página baseados em um
Alterado (Changed)
- Alterar
CurrentPageIndexdesloca agora a miniatura selecionada para a vista em qualquer uma das orientações - Os testes do Delphi, Lazarus e C++Builder cobrem agora as predefinições de orientação, a comutação, os intervalos visíveis e a visibilidade da página selecionada
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.57.0
Version 2.56.2
Alterado (Changed)
HighlightSearchText,AddSearchTextHighlighteClearHighlightinvalidam agora apenas os retângulos do dispositivo para os intervalos de pesquisa que foram adicionados ou removidos em vez de repintar o visualizador completo- Substituir realces pelas mesmas correspondências ou anexar correspondências duplicadas já não agenda uma repintagem desnecessária
- Os testes do Delphi, Lazarus e C++Builder cobrem agora a invalidação limitada, as atualizações idempotentes, a limpeza e a segurança de vista inativa
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.56.2
Version 2.56.1
Alterado (Changed)
TPdfThumbnailViewreutiliza agora os mapas de bits desenhados para as páginas que permanecem visíveis ao longo de repintagens e posições de deslocação adjacentes- A cache retém apenas o intervalo de páginas visíveis atual e liberta entradas precisamente quando as páginas saem desse intervalo, o documento atribuído é alterado ou as dimensões da miniatura mudam
- Os testes do Delphi, Lazarus e C++Builder cobrem agora a reutilização da cache, a poda da janela de visualização, a invalidação por tamanho, a substituição de documentos e a destruição do componente
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.56.1
Version 2.56.0
Adicionado (Added)
TPdfView.CutSelectedFormTextToClipboardeTPdfView.PasteFormTextFromClipboardfornecem edição da área de transferência Unicode para o widget de formulário editável focado
Alterado (Changed)
- Os editores de formulário focados tratam agora os atalhos de teclado padrão de copiar, cortar, colar e selecionar tudo antes de reencaminhar a entrada de texto para o PDFium
- Cortar e colar rejeitam campos só de leitura e sessões sem permissão de preenchimento ou modificação de formulário, enquanto cortar copia com sucesso antes de remover o texto selecionado
- Os testes do Delphi, Lazarus e C++Builder cobrem agora chamadas sem foco, o percurso de ida e volta dos atalhos e o comportamento de rejeição só de leitura
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.56.0
Version 2.55.0
Adicionado (Added)
TPdfView.AddSearchTextHighlightanexa correspondências únicas de outro termo de pesquisa à sobreposição da página atual, permitindo que várias consultas permaneçam realçadas em conjunto
Alterado (Changed)
HighlightSearchTextcontinua a ser o ponto de entrada de substituição e partilha agora o analisador aditivo, enquanto os intervalos de caracteres duplicados são ignorados eClearHighlightremove o conjunto acumulado completo- Os testes do Delphi, Lazarus e C++Builder cobrem agora a acumulação de consultas distintas e a supressão de intervalos duplicados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.55.0
Version 2.54.0
Adicionado (Added)
TPdfexpõe agora instantâneos completos de objetos de página, atualizações de estilo em lote, transformações afins de objetos, segmentos de caminho, caminhos de recorte e elementos subordinados de Form XObject- A inspeção de caracteres inclui agora cores de preenchimento e traço, nome e bandeiras do tipo de letra, limites soltos de glifos, matrizes efetivas, identificadores de objetos de texto e conversão de índice de carácter para texto
- As anotações fazem agora o percurso de ida e volta da geometria do contorno e dos fluxos de aparência normal, rollover e down
- Novos acessores de miniaturas raw e decoded, transformações de conteúdo de página e de anotações, e
RenderPageWithMatrixfornecem caminhos diretos de desenho e edição avançados
Alterado (Changed)
- As alterações de estilo dos objetos de página podem ser submetidas como um único lote para que o PDFium regenere o conteúdo da página apenas uma vez
- O desenho por matriz utiliza o caminho de mapa de bits sem cópia existente quando o esquema do mapa de bits de destino é compatível
Version 2.53.1
Corrigido (Fixed)
- A legenda do menu Copy chinês incorporada utiliza agora pontos de código Unicode independentes da codificação e é apresentada corretamente nas compilações Lazarus
- As cadeias de ferramentas Delphi mais antigas conseguem compilar
FPdfAsyncquando a sua unidadeWinapi.Windowsomite a declaração deGetTickCount64
Version 2.53.0
Adicionado (Added)
- Nova bancada de testes
Tests.ApiCoverageque cobre as APIs públicas do TPdf que anteriormente não tinham qualquer cobertura de testes de ponta a ponta:GetPageBox/SetPageBox(leitura/escrita de MediaBox/CropBox, erros de caixa em falta e percurso de ida e volta de gravação),FlattenPage/FlattenAllPages(valor de retorno e preservação da contagem de páginas),GenerateFormAppearances(no-op em documentos que não são formulários),SaveAsEncrypted/SaveAsEncryptedToStream(AES-256 com percurso de ida e volta de palavra-passe — verifica que o ficheiro encriptado se recusa a abrir sem a palavra-passe e abre com ela), validação de limites deDeletePage(página 0 e fora do intervalo levantamEPdfError), e os sentinelas de anotaçãoHasContents/HasAuthorintroduzidos em v2.38.0 (verificando queDefault(TPdfAnnotation)os deixa emFalse)
Version 2.52.0
Adicionado (Added)
TPdfView.CopySelectedFormTextToClipboardcopia a seleção de texto dentro do widget AcroForm focado para a área de transferência do Windows comoCF_UNICODETEXT
Alterado (Changed)
- As operações de cópia de texto de página e de formulário focado partilham agora o mesmo escritor defensivo da área de transferência Unicode e deixam a área de transferência inalterada quando a sua seleção está vazia
- Os testes do Delphi, Lazarus e C++Builder cobrem agora chamadas de cópia de formulário inativas ou não focadas e um percurso de ida e volta de seleção de formulário focado através da área de transferência do Windows
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.52.0
Version 2.51.0
Adicionado (Added)
TPdfView.SelectLineAtseleciona a linha de texto visual que contém uma página baseada em um e um índice de carácter baseado em zero sem necessitar de entrada do rato
Alterado (Changed)
- A seleção programática de linha, a seleção com tríplice clique e
Shift+HomeouShift+Endpartilham agora um modelo de limite de linha de caixa de caracteres - Os testes do Delphi, Lazarus e C++Builder cobrem agora a seleção estável de linha e os índices de página ou carácter inválidos
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.51.0
Version 2.50.0
Adicionado (Added)
TPdf.LoadDocumentaceita agora uma janelaIndexbaseada em zero eCountnum bufferTBytes, permitindo que os PDFs incorporados sejam carregados sem alocar uma fatia temporária de matriz de bytes
Alterado (Changed)
- O carregamento por intervalo de bytes rejeita janelas negativas ou fora dos limites antes de alterar o estado do documento e preserva as opções de duração de buffer armazenado e emprestado existentes
- Os testes do Delphi, Lazarus e C++Builder cobrem agora janelas de PDF incorporado e argumentos de intervalo de bytes inválidos
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.50.0
Version 2.49.1
Adicionado (Added)
TPdfView.FitModesuporta agorapfmFitHeightpara ajustar a página atual à altura visível da janela de visualização, permitindo a deslocação horizontal quando necessário
Corrigido (Fixed)
- Os modos de ajuste convergem agora após uma alteração da barra de deslocação modificar a área de cliente, mantendo os resultados fit-page, fit-width e fit-height consistentes entre VCL e LCL
- Os testes do visualizador Delphi, Lazarus e C++Builder cobrem agora a seleção de
pfmFitHeighte as viagens de ida e volta de enumeração TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.49.1
Version 2.49.0
Adicionado (Added)
- A superfície de vinculação pública do PDFium abrange agora todas as 470 funções exportadas nos cabeçalhos revistos, incluindo o acesso às descrições dos anexos através de
FPDFAttachment_SetDescriptioneFPDFAttachment_GetDescription TPdfexpõe agora descrições de anexos, validade das referências cruzadas, desvios do fim do trailer, revisão do security-handler, carregamento em memória de 64 bits, intervalos de bytes de assinatura, intervalos de texto de ligações Web e instantâneos expandidos de dados de imagem, filtro, metadados e perfil ICC- Os assistentes de formulários suportam agora a focagem nativa de campos, consultas e atualizações de opções de escolha focadas, reencaminhamento da roda do rato, traços de tinta graváveis e sobreposições de formulários após o desenho progressivo
Alterado (Changed)
FormFieldCount, os índices de campos de formulário e a ordem de tabulação descrevem agora apenas anotações de widgets em vez de incluir anotações de página não relacionadas- As páginas
TPdfsem interface entram agora e saem do ciclo de vida da página de preenchimento de formulário para que a focagem nativa e as APIs de campos focados funcionem sem umTPdfView - As exportações de descrições de anexos são controladas por capacidade para que as aplicações que utilizam uma compilação mais antiga do PDFium ainda consigam carregar a biblioteca e detetar a funcionalidade indisponível
Corrigido (Fixed)
- O desenho progressivo da página pinta agora os controlos de formulário quando o preenchimento de formulários está ativado
- Os testes Delphi, Lazarus e C++Builder cobrem agora os novos diagnósticos de documento, descrições de anexos, caminhos de tinta, comportamento de formulários, intervalos de bytes de assinatura, intervalos de ligações Web e metadados de imagem
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.49.0
Version 2.48.0
Adicionado (Added)
TPdfMatrixexpõe agora fábricas, clonagem e atribuição, diagnósticos de estado finito e invertibilidade, comparação baseada em tolerância, acesso a translação, relatório de determinante e decomposição afim- Composição prepend, rotação sensível ao pivô, dimensionamento, inclinação e inversões, além do mapeamento de retângulos stretch, contain e cover suportam fluxos de trabalho de espaço local e esquemas ajustados sem aritmética manual de coeficientes
- Acesso inverso não mutante, mapeamento inverso de pontos, transformações de vetores e quadriláteros, lotes dinâmicos de pontos e retângulos, variantes in-place e limites transformados num só passo expandem a superfície geométrica reutilizável
Alterado (Changed)
- Translação, dimensionamento e inversões de eixos atualizam agora apenas os coeficientes afetados em vez de encaminhar através da multiplicação afim geral
- A transformação de retângulos normaliza a sua entrada uma vez, utiliza um caminho exato especializado alinhado pelos eixos sempre que possível e calcula limites rodados gerais sem registos de pontos temporários
- As transformações de lote de pontos e retângulos alocam uma matriz de resultados ou reutilizam o armazenamento do chamador, enquanto os limites de pontos transformados são acumulados num só passo sem uma matriz intermédia
Corrigido (Fixed)
- O mapeamento de retângulos rejeita resultados de tamanho zero, não finitos e com transbordamento de
Singleantes de publicar uma matriz inutilizável - Os testes Delphi, Lazarus e C++Builder verificam agora a ordem de composição, invariantes de pivô, viagens de ida e volta inversas, retângulos ajustados, decomposição e comportamento de geometria em massa
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.48.0
Version 2.47.0
Adicionado (Added)
FPdfAsyncfornece agora razões e mensagens de cancelamento estruturadas, registos de callback removíveis, fontes baseadas em tempo limite, espera de cancelamento e operações try-cancel atómicas através de interfaces estendidas que preservam a API originalTPdfFuture<T>.RunExadiciona expedição de resposta e prioridade de worker configuráveis, enquanto os envelopes de resultado expõem IDs de operação, validade de valores, nomes de classes de exceção, medição de tempo de conclusão e auxiliares de conclusão reutilizáveisTPdfAsyncExecutoradiciona um conjunto fixo reutilizável de workers com quatro faixas de prioridade FIFO, contrapressão de fila limitada opcional, pegas de tarefas canceláveis, espera sensível ao tempo limite, instantâneos de tarefas, estatísticas agregadas e encerramento gracioso
Alterado (Changed)
- Trabalhos assíncronos repetidos podem reutilizar threads de worker e operações de fila O(1) em vez de criar uma thread para cada tarefa, enquanto a conclusão sincronizada permanece disponível para anfitriões de UI
- Falhas de executor e future preservam diagnósticos de classe e mensagem de exceção, o cancelamento mantém a sua razão original e as exceções de callback permanecem isoladas do ciclo de vida do worker e do encerramento
- Os testes Delphi, Lazarus e C++Builder cobrem agora a superfície estendida de cancelamento, metadados de future, controlo de tarefas, contrapressão, ordenação de prioridade, estatísticas, falha e encerramento
Corrigido (Fixed)
- Os proprietários de cancelamento concorrentes recebem agora um resultado determinístico de primeiro escritor em vez de depender de uma sequência separada de observação e cancelamento
- A espera de inatividade da thread principal processa respostas de tarefas sincronizadas, impedindo que um worker concluído deixe o executor permanentemente não inativo durante um encerramento coordenado
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.47.0
Version 2.46.0
Adicionado (Added)
FPdfAsn1expõe agora classes de identificador, codificação e descodificação de número de etiqueta alta de 64 bits, registos TLV analisados, janelas de leitor filho de cópia zero, descodificadores primitivos tipados e fatias de conteúdo ou valores codificados- Os escritores DER suportam agora a totalidade do intervalo INTEGER de 64 bits sem sinal, conteúdo INTEGER arbitrário validado, ENUMERATED, seleção automática de UTCTime ou GeneralizedTime, etiquetas application e private, SEQUENCE de valores múltiplos e saída SET OF canonicamente ordenada
ValidateDerdevolve erros de validação sensíveis ao desvio ao impor limites configuráveis de aninhamento, contagem de nós, comprimento de conteúdo, contagem de erros, raiz e ordenação SET opcional
Alterado (Changed)
- A concatenação DER e a composição de valores múltiplos utilizam uma alocação de saída, as memórias intermédias do escritor expõem operações de reserve, count, capacity e transferência de propriedade, e a ordenação SET OF utiliza agora ordenação por intercalação
O(n log n) - Valores BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime e GeneralizedTime recebem verificações de forma canónica durante a codificação, descodificação tipada ou validação
- O pacote de runtime Lazarus exporta agora
FPdfAsn1e as suítes de testes Delphi, Lazarus e C++Builder exercitam a mesma superfície DER pública
Corrigido (Fixed)
- Números de etiqueta específicos de contexto maiores que 30 já não são truncados para os cinco bits baixos do identificador
- Identificadores de etiqueta alta malformados, comprimentos definidos não mínimos, UTF-8 inválido, preenchimento BIT STRING diferente de zero, campos de tempo inválidos, raízes finais e violações de limites de recursos são rejeitados deterministicamente
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.46.0
Version 2.45.0
Adicionado (Added)
FPdfPreflightReportatribui agora severidade Info, Warning ou Error a cada problema e expõe APIs de severidade, estado, categoria, código de problema, pesquisa, procura, achatamento e filtragem ao nível de padrão e de relatório- Relatórios preflight exportam agora SARIF 2.1.0, JUnit XML, NDJSON e XML nativo através de métodos
To*eSave*ToFilecorrespondentes para pipelines de CI, automatização e streaming - Impressões digitais de relatório SHA-256 estáveis identificam resultados de validação equivalentes independentemente dos caminhos de origem e dos carimbos de data/hora de geração
Alterado (Changed)
- Relatórios JSON, CSV, text, Markdown e HTML incluem agora severidade e resumos de estado expandidos; o HTML adiciona legendas de tabela acessíveis e um resumo de estado
- A construção de coleções de problemas e padrões utiliza crescimento geométrico de capacidade, os resultados de consulta são pré-dimensionados, o escape JSON escreve numa memória intermédia de saída limitada e todos os ficheiros de relatório utilizam um escritor UTF-8 direto
- Resumos de categorias de problemas utilizam ordenação determinística, os carimbos de data/hora incluem milissegundos, o JSON transporta
formatVersion: 2e as células CSV neutralizam fórmulas de folhas de cálculo
Corrigido (Fixed)
- A exportação JSON preserva agora pares Unicode suplementares válidos e substitui unidades de código substituto UTF-16 isoladas em vez de emitir dados escalares malformados
- A exportação HTML escapa agora apóstrofos e as vistas de relatório filtradas possuem matrizes de problemas independentes em vez de partilhar armazenamento de resultados mutável
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados do instalador reportam agora de forma consistente a Version 2.45.0
Version 2.44.0
Adicionado (Added)
- Os marcadores e os destinos expõem o estado de abertura, as contagens de descendentes, os alvos de ação, os modos de visualização de destino e até quatro parâmetros de visualização
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermissioneUserHasPermissionfornecem instantâneos tipados de inspeção de documentos e consultas de permissõesExtractThumbnail(PageNumber)renderiza uma página solicitada sem alterar a página ativa, e os resultados de carimbo de hora RFC 3161 expõem os detalhes de política, hora de geração e nonce
Alterado (Changed)
- Os caminhos de marcadores, JavaScript, metadados, destinos e miniaturas utilizam buffers validados de duas passagens, crescimento geométrico de coleções e travessia segura contra ciclos
- O pós-processamento de gravação resolve o catálogo ativo, a árvore de páginas e a ação de abertura através da revisão atual do xref, coloca em cache os fluxos de objetos descodificados e analisa os dicionários PDF com fronteiras lexicais
- A análise de PDF partilhada agora impõe cabeçalhos de objeto exatos, gerações, chaves de dicionário, comprimentos de fluxo, geometria de preditor, intervalos de inteiros e fronteiras de comentário, cadeia literal e cadeia hexadecimal
- A validação de respostas RFC 3161 agora vincula tanto o nonce como o
messageImprintSHA-256, exige um assinante estruturalmente válido e aplica regras estritas de comprimento DER, OID, INTEGER e GeneralizedTime
Corrigido (Fixed)
- Documentos incrementais já não selecionam catálogos duplicados inativos nem sufixos de referência mal formados ao adicionar uma ação de abertura predefinida
- Tokens de carimbo de hora com comprimentos DER de forma longa retêm o token codificado completo, enquanto a ordenação mal formada de campos opcionais CMS e conjuntos de assinantes vazios são rejeitados
- As compilações limpas do Delphi agora gravam os campos de semente nonce PAdES através de cópias de bytes seguras quanto ao alinhamento e passam os bytes de resposta XFA com o tipo de ponteiro nativo exato
Version 2.43.0
Adicionado (Added)
- Os registos de campos e anotações XFDF agora expõem flags de presença que distinguem um valor XML omitido de um valor explicitamente vazio
Alterado (Changed)
- A importação XFDF aceita elementos e atributos com prefixo de namespace, conteúdo misto de texto e CDATA, referências a entidades e valores significativos quanto a espaços em branco, ao mesmo tempo que rejeita referências inválidas a escalares Unicode
- A importação e exportação XFDF utilizam correspondência de campos indexada e buffers geométricos limitados, melhorando o débito e o comportamento de pico de alocação para formulários profundamente aninhados, grandes coleções de anotações, listas de traços, vértices e quadriláteros de marcação
- As validações PDF/A e PDF/UA utilizam crescimento limitado para grandes coleções de páginas, fluxos, nomes de estrutura e RoleMap; a resolução RoleMap de PDF/UA agora segue matrizes diretas e objetos indiretos de nome ou matriz com geração exata
Corrigido (Fixed)
- Os ciclos de ida e volta XFDF agora preservam caminhos de campos profundamente aninhados, valores de campos explicitamente vazios, conteúdos de anotações explicitamente vazios e a distinção entre conteúdos ausentes e vazios
- Os carregamentos inválidos de buffers de memória e as atribuições de páginas fora do intervalo são rejeitados sem deixar um estado parcial do documento ou da página, e um recarregamento nativo de página com falha preserva a página anteriormente ativa
- Os grandes identificadores de conteúdo marcado e os buffers de metadados de assinatura são limitados e validados antes da alocação ou do acesso nativo
Version 2.42.0
Adicionado (Added)
TPdfMatrixagora forneceInvert,TryInvert,TransformPointeTransformRectpara mapeamento de coordenadas, teste de acertos, limites normalizados e processamento explícito de matrizes singularesTPdf.WrapTextganhou uma sobrecargaBreakLongWordsque separa CJK e outro texto sem espaços, mantendo juntos os pares substitutos UTF-16 válidosTPdfAnnotation.AttachmentPointSetsexpõe todos os quadriláteros nas anotações de marcação de várias linhas, enquanto o campoAttachmentPointsexistente permanece um alias para o primeiro conjunto
Alterado (Changed)
- A extração de texto, a construção de conteúdo legível, a pesquisa de palavras e o mapeamento de desvios de texto falado agora utilizam alocação limitada e caminhos de pesquisa binária, reduzindo alocações repetidas e análises lineares em páginas grandes
- A serialização ASN.1 e a geração de PDF encriptado agora utilizam buffers de saída geométricos; a ordenação de objetos encriptados utiliza ordenação
O(n log n)e as linhas xref são escritas diretamente no buffer final - O
WrapTextpreserva os limites de linha CR, LF e CRLF e reutiliza um objeto nativo de medição para toda a operação - A importação e exportação XFDF preservam todos os quadriláteros de marcação; a importação também aplica cores RGB/interiores e analisa coordenadas decimais independentemente da localização do processo
Corrigido (Fixed)
- Os chamadores legados podem novamente atualizar o conteúdo e o autor da anotação atribuindo strings não vazias sem definir as sentinelas mais recentes
HasContentseHasAuthor - As strings de anotação explicitamente vazias agora utilizam um buffer nativo válido terminado em zero, pelo que limpar
/Contents,/Te outras chaves de texto opcionais já não passa um ponteiro nil ao PDFium
Version 2.41.0
Alterado (Changed)
- Os relatórios preflight
SaveJsonToFile,SaveMarkdownToFileeSaveTextToFileagora gravam em UTF-8 no Delphi (correspondendo aoSaveHtmlToFileexistente), em vez da página de código ANSI do sistema; os caracteres não-ASCII em caminhos de ficheiros, recomendações e notas de escopo ficavam corrompidos no Delphi quando guardados através destes métodos - O método
SaveCsvToFileagora grava em UTF-8 com um prefixo BOM, para que o Excel para Windows detete automaticamente a codificação; sem o BOM, o Excel trata um CSV em UTF-8 como página de código 1252 e corrompe quaisquer caracteres não-ASCII
Corrigido (Fixed)
- A demonstração
ExtractImagesperdia os objetosTBitmapem cache emFExtractedImagesquando o formulário era fechado sem os limpar explicitamente primeiro; o formulário agora substituiDestroypara chamarClearExtractedImages, libertando todos os bitmaps em cache
Version 2.40.0
Alterado (Changed)
- O método
TPdf.RenderPage(HDC, ...)agora mascara exceções FPU/SSE em torno da chamada deFPDF_RenderPage, correspondendo aTPdfView.RenderPage(HDC)(corrigido na v2.25.0) e a todos os pontos de entrada de renderização que devolvem bitmaps; a sobrecarga direta para DC ao nível doTPdfanteriormente deixava as exceções FPU não mascaradas em compiladores anteriores ao D12
Corrigido (Fixed)
- O método
ColorToARGBagora devolve um píxel totalmente transparente (alfa 0) paraclNoneeclDefaultem vez de tratar o valor sentinela como uma cor RGB literal; o comportamento anterior produzia um preenchimento escuro e quase opaco quando o chamador passavaclNoneà espera de “nenhuma cor”
Version 2.39.1
Corrigido (Fixed)
- As gravações explícitas em PDF 1.3 agora removem as entradas
/SMask /None,/AIS falsee/TK trueque apenas repetem o estado gráfico inicial, enquanto continuam a rejeitar estados de transparência não predefinidos
Version 2.39.0
Alterado (Changed)
- Os métodos
CreatePDFeImageToPDFagora utilizam destinos de gravação confirmados e apenas reportam sucesso quando oSaveAsfor concluído com êxito - Os métodos
BatchExport,PDFtoJpgeSplitPDFagora alocam diretórios de saída únicos para que execuções repetidas e entradas com o mesmo nome preservem os resultados anteriores - O componente
SplitViewagora envolve a pesquisa uma vez sem deixar estados de página ocultos após o cancelamento ou a ausência de correspondências, e aborta tarefas de impressão incompletas em vez de enviar saídas parciais
Corrigido (Fixed)
- O método
MergePDFagora rejeita tokens de intervalo de páginas mal formados e caminhos de saída que sobrescrevam a origem, conta as páginas realmente importadas e recusa-se a gravar um resultado vazio - As demonstrações de
Attachmentdo Delphi e C++Builder agora efetuam gravações no mesmo caminho através de substituição de ficheiros segura para rollback, para que uma falha ao renomear não remova o PDF original
Version 2.38.0
Alterado (Changed)
- O método
SetAnnotationDataagora protege as gravações de/Contentse/Authorcom sentinelasHasContents/HasAuthornoTPdfAnnotation, correspondendo ao padrãoHasName/HasSubject/HasIconexistente; anteriormente, estes dois campos eram gravados incondicionalmente, pelo que a atribuição de um registoDefault(TPdfAnnotation)para atualizar apenas a cor ou as flags sobrescrevia silenciosamente o conteúdo e o autor existentes da anotação com strings vazias; o métodoGetPageAnnotationagora define as sentinelas para que o ciclo de leitura-modificação-escrita preserve os valores originais
Corrigido (Fixed)
- O método
GenerateFormAppearancesagora lê o valor da caixa de seleção/botão de rádio viaFPDFAnnot_GetFormFieldValue(que percorre até ao dicionário do campo pai de acordo com a norma ISO 32000-1 §12.7.5) em vez deFPDFAnnot_GetStringValue(Annot, 'V', ...)(que lê o dicionário do widget); o widget geralmente não contém/V, pelo que o/ASnunca era sincronizado com o estado selecionado e uma caixa de seleção/botão de rádio achatado era renderizado como desmarcado
Version 2.37.0
Alterado (Changed)
- O método
ParseTsaUrlagora limita a porta ao intervalo1..65535após a análise; caso contrário, um valor de porta excessivo daria a volta através da truncagem deDWORDe poderia cair numa porta válida - O método
ParseFieldde XFDF agora aceita um parâmetro de profundidade (predefinição 0, limitado a 64) e devolve um campo vazio no limite, para que uma cadeia de<field>maliciosamente aninhada com 100 000 níveis já não provoque o desbordamento da pilha
Corrigido (Fixed)
- A requisição HTTP do TSA agora protege contra um corpo de requisição vazio antes de passar
@ReqDer[0]paraWinHttpSendRequest; uma desreferenciação de array dinâmico de comprimento zero acederia a um ponteiro não grounded; embora o métodoBuildTimeStampReqdevolva sempre uma SEQUENCE não vazia, o local de chamada agora defende o contrato
Notas (Notes)
- O comentário do cabeçalho de
FPdfTsaWinsobre a verificação de revogação HTTPS foi corrigido: o WinHttp valida a cadeia de certificados do servidor por predefinição, mas **não** realiza a verificação de revogação CRL/OCSP a menos que seja explicitamente ativada viaWinHttpSetOption; a redação anterior afirmava que a verificação de revogação “vinha de graça”, o que era enganador
Version 2.36.0
Alterado (Changed)
- As requisições HTTP do TSA agora enviam um cabeçalho
Content-Lengthexplícito, além dos cabeçalhosContent-TypeeAccept; o WinHttp sintetiza-o a partir do comprimento total, mas alguns proxies RFC 3161 requerem um cabeçalho explícito e rejeitam o pedido com411 Length Requiredsem ele - A exportação XFDF agora descarta os caracteres de controlo C0 (exceto TAB/LF/CR, que já são escapados) em vez de emitir uma sequência barra-invertida-hexadecimal inválida; o escape
\-01Fanterior não é XML válido (a barra invertida não tem significado especial no XML), pelo que qualquer leitor conforme teria rejeitado o documento como mal formado - O método
InjectAssociatedFilesagora grava/Subtypeno dicionário de fluxo EmbeddedFile quando o chamador forneceTAssociateFile.MIMEType; o campo estava declarado e documentado, mas anteriormente o injetor continha o valor rígido de/Type /EmbeddedFilee ignorava-o (a norma ISO 32000-2 §7.11.4 permite/Subtypeno fluxo)
Corrigido (Fixed)
- A importação XFDF ignorava o primeiro byte de conteúdo após um BOM UTF-8 e o primeiro byte quando nenhum BOM estava presente:
BytesToAnsi(Bytes, 4, ...)(BOM) eBytesToAnsi(Bytes, 1, ...)(sem BOM) utilizavam offsets iniciais com erro por um, porqueBytesToAnsirecebe um índice de array baseado em 0; as chamadas agora usam3e0 - O método
ExtractSignatureValuetinha dois erros de indentação comifpendente ondeR.Position:= CNera executado incondicionalmente para os ramos opcionais decertificates [0]esignedAttrs [0]; os ramos agora estão envolvidos embegin/endpara que a posição seja avançada apenas quando o TLV opcional tiver sido realmente lido (o mesmo tipo de erro foi corrigido emAddSignatureTimestampToCmsna v2.22.0)
Version 2.35.0
Alterado (Changed)
- Os métodos
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvaileTFPDFAvail_IsFormAvailagora recebemhints: PFX_DOWNLOADHINTSem vez devar hints: FX_DOWNLOADHINTS, permitindo que o modo apenas de consultanullptrdocumentado (verificar a disponibilidade atual sem solicitar mais dados) seja acessível a partir do Delphi; o cabeçalho do PDFium permite explicitamente quehintsseja nulo; a vinculação anterior comvartornava isso impossível - O método
TFPDF_SetSystemFontInfoagora recebepFontInfo: PFPDF_SYSFONTINFOem vez devar pFontInfo: FPDF_SYSFONTINFO, permitindo que os chamadores passemnilpara indicar ao PDFium que pare de utilizar uma interface de fonte do sistema registada anteriormente (o caminho de desativação documentado) - O método
TPdfThumbnailView.Paintagora calculaVisibleRowscom a mesma fórmula deUpdateScrollBarRange(ClientHeight div RowHeight), para que o número de linhas desenhadas corresponda ao tamanho de página da barra de deslocamento; a fórmula anterior apenas de pintura ((ClientHeight - FMarginY) div RowHeight + 1) podia diferir por uma linha em alturas limítrofes, desperdiçando uma renderização numa linha fora da página ou perdendo a última linha visível
Version 2.34.0
Adicionado (Added)
- Métodos
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— API de alto nível que grava o documento e depois o cifra com PDF 2.0 AES-256-CBC (V=5/R=5/R=6); recebe umTPdfEncryptOptionscom palavra-passe de utilizador/proprietário, permissões e revisão; delega paraEncryptDocumentBytes - Cifragem de literal de string StrF: o método
EncryptDocumentBytesagora cifra strings literais(...)em objetos que não são fluxos (dicionário Info, etc.) para strings hexadecimais AES-256-CBC, correspondendo ao formato de cifragem de fluxo (IV de 16 bytes + texto cifrado PKCS7); as strings hexadecimais<...>permanecem inalteradas
Version 2.33.0
Adicionado (Added)
- Injetor de cifragem AES-256-CBC de documento completo na nova unidade
FPdfEncrypt.pas; o métodoEncryptDocumentBytesrecebe um PDF em texto limpo e uma palavra-passe, cifra cada objeto de fluxo indireto (IV de 16 bytes + AES-256-CBC PKCS7 sob a chave do ficheiro), corrige o/Length, anexa o objeto de dicionário/Encrypte reconstrói uma tabela de referência cruzada clássica completa + trailer com/Encrypte/ID; completa a pilha de cifragem do PDF 2.0 (bloco AES + GCM + SHA-512/384 + derivação de chave R6 + dicionário + varrimento de documento) - Auxiliar
EncryptStreamPayload— o formato de fluxo PDF 2.0 AES-256 (IV prefixado ao texto cifrado AES-CBC-PKCS7), reutilizável por chamadores que gerem a sua própria disposição de objetos
Version 2.32.0
Adicionado (Added)
- Hash SHA-512 / SHA-384 (FIPS 180-4) na nova unidade
FPdfSha512.pas; desenvolvido em Pure-Pascal, portado do HotXLS; necessário para a iteração de hash de palavra-passe R6 do PDF 2.0, que se ramifica num valor mod-3 de 128 bits para escolher SHA-256/384/512 em cada ronda; verificado por respostas conhecidas do FIPS-180-4 B.1 - Derivação de chave de cifragem PDF 2.0 e construtor de dicionário Encrypt na nova unidade
FPdfEncrypt.pas; implementa o algoritmo 2.B da norma ISO 32000-2 §7.6.4.3 (processo de hash R6: AES-128-CBC + seleção iterativa de SHA-256/384/512), deriva a chave de cifragem de ficheiro de 32 bytes além das entradas/O,/U,/OE,/UE,/Perms, e constrói o dicionário Encrypt V=5/R=5/R=6 com/CFM /AESV3; portado do PDFlibPas, adaptado ao estilo TBytes
Version 2.31.0
Adicionado (Added)
- Primitivas de cifra de bloco AES (FIPS 197) na nova unidade
FPdfAes.pas; cifras de bloco AES-128 e AES-256 em Pure-Pascal além de auxiliares de modo CBC e um backend CSPRNG, portados do HotXLS; testes de resposta conhecida do FIPS-197 Apêndice C.2 / C.3 verificam a correção; esta é a base criptográfica para a pilha de cifragem do PDF 2.0 - Cifragem autenticada AES-GCM (NIST SP 800-38D) na nova unidade
FPdfAesGcm.pas; implementa GHASH (multiplicação GF(2^128)), GCTR e a construção GCM AEAD sobre as primitivas de bloco AES; os casos de teste NIST GCM 1 e 3 (AES-128) coincidem exatamente com o texto cifrado e a tag autoritativos; o caso de teste 13 (AES-256) realiza o ciclo completo; o GCM é o modo ISO/TS 32003 para PDF 2.0 - Validação de integridade de ParentTree e ClassMap para PDF/A Nível A (ISO 19005-1 §6.8.3); o código
pvaiParentTreeMissingassinala um StructTreeRoot sem a árvore de números /ParentTree; o códigopvaiClassMapUnresolvedassinala uma referência de classe /C sem um /ClassMap
Version 2.30.0
Adicionado (Added)
- Injeção de ficheiros associados (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4); a nova unidadeFPdfAssocFilesanexa matrizes/AFde referências filespec ao catálogo ou a qualquer dicionário de página, abrangendo todos os oito valores/AFRelationshipda Tabela 45 da norma ISO 32000-2; reutiliza o padrão de atualização incremental comprovado porInjectPadesDssMarkers - Suporte para PDF/X-6 (ISO 15930-9:2020); o tipo
TPdfXConformanceadicionapxc6; o injetor e o validador processam isto através da identificaçãopdfxid:GTS_PDFXVersion; o PDF/X-6 é o sucessor baseado em PDF 2.0 do PDF/X-4 para intercâmbio completo - A norma PDF/A proíbe a ação
/Thread(lacuna na lista de permissões da norma ISO 19005-1 §6.6.1); a lista de ações proibidas agora abrange Thread juntamente com Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition e Hide
Corrigido (Fixed)
- O caminho de validação PDF/A-4e agora honra as mesmas verificações de estrutura etiquetada, MarkInfo e quebra de palavras que o Nível A; a simplificação na gravação da v2.29.0 cobria
PdfAIsLevelE, mas três validações deValidatePdfAComplianceverificavam apenasPdfAIsLevelA, pelo que um documento PDF/A-4e sem estrutura etiquetada passava silenciosamente - Desvio no teste de OCG
/BaseState: o passo de pós-processamento da v2.28.0 alargou corretamente a aceitação para/ONou/OFF(norma ISO 32000-1 Tabela 8.70), mas os testes em Delphi e C++ continuavam a esperar que/OFFfosse rejeitado; os testes agora utilizam um valor verdadeiramente inválido (/Undefined) e um novo teste positivo garante a aceitação de/OFF - Sobre-correspondência de
/Subtype /GEOgeoespacial: o métodoContainsDictionarySubtype('GEO')correspondia a qualquer dicionário que contivesse o token, incluindo dicionários não relacionados como um/ViewerPreferences << /Subtype /GEO >>disperso; o novo métodoContainsMeasureDictionarySubtyperequer adicionalmente/Type /Measureou uma chave irmã exclusiva de Measure, pelo que dicionários que não sejam de Measure já não ativam o requisito ADBE ExtensionLevel 3
Version 2.29.0
Adicionado (Added)
- Suporte para PDF/A-4 (ISO 19005-4:2020) no validador, injetor XMP e camada do modelo de objetos Pdfium; o tipo
TPdfAConformanceadicionapac4base,pac4fepac4e; o nível base é PDF 2.0 (ISO 32000-2) e substitui os níveis legados A/B/U levels por base + F (formulário) + E (acessibilidade); o métodoValidatePdfAlê um pacote XMP compdfaid:part=4(a base omite o elemento de conformidade), o métodoSaveAsPdfAemite-o, e o métodoSignPadesWithPdfAaceitapac4basecomo um contentor de arquivo de longo prazo - Vinculação de
FPDFBookmark_GetColor— a última exportação pública não vinculada do PDFium (469/469); a classeTBookmarkganha os camposHasColoreColorpreenchidos a partir da matriz/Cdo marcador (ISO 32000-1 §12.3.3); a vinculação utiliza carregamento tolerante para que DLLs mais antigas anteriores à exportação continuem a funcionar - Verificação de versão do cabeçalho PDF/E-1 (ISO 24517-1 §5)
pveiBadPdfVersion— o PDF/E-1 baseia-se em PDF 1.6 e um cabeçalho diferente de 1.6 é agora assinalado - Validação
pvriEncryptVersionMismatchpara PDF/R-1 (ISO 23504-1) — a cifragem é permitida apenas num cabeçalho%PDF-2.0; um corpo 1.x que contenha/Encrypté agora assinalado (anteriormente era uma instrução no-op) - Validação
pvriBadMediaBoxpara PDF/R-1 — oMediaBoxde cada página deve ser[0 0 w h]; oPdfRHasNonZeroMediaBoxOriginé um digitalizador ASCII independente do locale que ignora os MediaBoxes de referência indireta - Validação
pvaiRoleMapUnresolvedpara PDF/A Nível A (ISO 19005-1 §6.8.3.4) — um RoleMap presente mas incompleto que deixe tipos de estrutura/Spersonalizados sem mapeamento é agora assinalado, fechando a lacuna deixada pela verificação de presença existentepvaiRoleMapMissing
Corrigido (Fixed)
- O método
PdfVersionToName(20)devolvia"1.0"em vez de"2.0", corrompendo a entrada/Versiondo catálogo e as mensagens do validador para cada gravação em PDF 2.0; o formatador agora divide major.minor explicitamente para códigos de versão>= 20 - O codificador de INTEGER negativo em
FPdfAsn1.pasfalhava ao compilar no Delphi 12 (E2015emInteger(-(V<0))), bloqueando todo o projeto de testes; corrigido utilizandoInt64(-Ord(V<0))para a máscara de extensão de sinal - A lista de anotações proibidas em PDF/A agora inclui
/RichMediaem todas as partes (anteriormente omitido; a norma ISO 32000-1 §12.5.6.35 proíbe-o em PDF/A)
Version 2.28.0
Adicionado (Added)
- O tipo
TPdfVersionagora incluipv20para PDF 2.0 (ISO 32000-2); o métodoDecodePdfVersion(20)devolvepv20em vez depvUnknown, eEncodePdfVersion(pv20)emite 20 para que a versão de um documento PDF 2.0 já não seja perdida na leitura e possa ser gravada explicitamente
Alterado (Changed)
- O método
DecodeDateagora analisa strings de data PDF com campos opcionais no final de acordo com a PDF Reference 3.8.3, em vez de exigir a forma completa de 23 caracteresD:YYYYMMDDHHmmSSOHH'mm'; as datas truncadas conformes comoD:20260712,D:20260712153000eD:20260712153000Zsão agora aceites; anteriormente eram rejeitadas por uma validação rígida deLength=23; o desvio de fuso horário agora é validado face ao intervalo real UTC-12..UTC+14 em vez de> 23 - O método
FPdfMeasure.MeasureTextagora codifica o nome da fonte comoAnsiStringno FPC /UTF8Encodeno Delphi, correspondendo aos outros locais de chamada FPDF_BYTESTRING da biblioteca, em vez de um molde simples deAnsiStringque corrompia nomes de famílias não-ASCII através da página de código atual
Corrigido (Fixed)
- O caminho de valores negativos em
TDerWriter.Integerfalhava ou produzia DER mal formado: o ciclowhile V <> -1 do V := V shr 8deixavaInnervazio paraValue = -1(erro de intervalo noInner[Length(Inner)-1]subsequente) e gerava bytes em excesso para outros valores negativos; o codificador agora extrai bytes em complemento para dois com desvios de extensão de sinal e para corretamente quando o resto é pura extensão de sinal; os campos INTEGER de CMS/PAdES são positivos, pelo que isto apenas afeta chamadores que passem valores negativos, mas o caminho agora está correto - Os métodos
TPdf.GetCharacterOrigineTPdfView.GetCharacterOriginignoravam o valor de retorno deFPDFText_GetCharOrigine devolviam um ponto não inicializado em caso de falha; o resultado agora é inicializado a zero e uma leitura falhada devolve a origem (correspondendo ao contrato deGetCharacterRectangle)
Version 2.27.0
Alterado (Changed)
- As demos do visualizador tratam pesquisa,
Enter/F3eEscpara cancelar - A impressão segue a rotação do visualizador
Corrigido (Fixed)
- O cancelamento interrompe o trabalho da impressora
Version 2.26.0
Alterado (Changed)
- Os métodos bitmap usam render lock nas chamadas PDFium
RenderPageThumbnailrespeita/Rotate
Corrigido (Fixed)
GetCharacterRectangledevolveRect(0,0,0,0)em caso de erro
Version 2.25.0
Alterado (Changed)
- Os métodos de edição invalidam a cache de texto e ligações
RenderPage(HDC, ...)usa lock e mascara exceções FPU/SSE
Corrigido (Fixed)
- Os pontos acima de U+FFFF devolvem U+FFFD
TPdf.DestroylimpaPassword
Version 2.24.0
Adicionado (Added)
- Os índices são validados e geram
EPdfErrorfora do intervalo
Corrigido (Fixed)
- Corrigidas fugas de page-object e chamada ausente de
UpdatePage
Version 2.23.0
Corrigido (Fixed)
- As validações aceitam
/OFF,/Designe matrizes permitidas - A detecção Geospatial Measure já não exige
/Type /Measure
Version 2.22.0
Alterado (Changed)
- O fit zoom usa
ClientWidth/ClientHeight AddSignatureTimestampToCmsgera umaExceptionexplícita
Corrigido (Fixed)
- Os handles CNG são libertados com
NCryptFreeObject EcDsaP1363ToDerrejeitar/snulos
Corrigido (Fixed)
- As gravações explícitas em PDF 1.5 a PDF 1.7 rejeitam agora as estruturas
/OCPropertiesdo catálogo mal formadas, incluindo as entradas/OCGsou/Dnecessárias em falta, valores de configuração predefinidos inválidos e entradas de estado que não são matrizes
Version 2.21.12
Corrigido (Fixed)
- As gravações de PDF 1.5 a PDF 1.7 rejeitam agora estruturas
/OCPropertiesinválidas
Version 2.21.11
Corrigido (Fixed)
- As gravações explícitas de versão PDF rejeitam agora as entradas de página
/Annotsdiretas ou indiretas cujos dicionários de anotação omitem a entrada/Subtypeou/Rectnecessária
Version 2.21.10
Corrigido (Fixed)
- As gravações explícitas em PDF 1.7 exigem agora que os dicionários geoespaciais
/Type /Measure /Subtype /GEOe as anotações Projection declarem/Extensions /ADBEcom/BaseVersion /1.7e/ExtensionLevel 3ou mais recente
Version 2.21.9
Corrigido (Fixed)
- As gravações explícitas em PDF 1.7 exigem agora que as anotações RichMedia e as ações
RichMediaExecutedeclarem/Extensions /ADBEcom/BaseVersion /1.7e/ExtensionLevel 3ou mais recente
Version 2.21.8
Corrigido (Fixed)
- As gravações explícitas em PDF 1.7 exigem agora que os fluxos PRC 3D declarem
/Extensions /ADBEcom/BaseVersion /1.7e/ExtensionLevel 1ou mais recente, em vez de tratar o PRC como uma funcionalidade principal do PDF 1.7
Version 2.21.7
Corrigido (Fixed)
- As gravações explícitas em PDF 1.4 e anteriores rejeitam agora as entradas
/SMaskInDatade XObject de imagem, incluindo um valor explícito de0, porque os canais de máscara suave JPEG 2000 incorporados requerem PDF 1.5 ou posterior
Version 2.21.6
Corrigido (Fixed)
- As gravações explícitas em PDF 1.4 e anteriores rejeitam agora os XObjects de imagem de 16 bits que requerem PDF 1.5 ou posterior, enquanto os destinos PDF 1.5 a PDF 1.7 preservam os seus dados de imagem
/BitsPerComponent 16
Version 2.21.5
Corrigido (Fixed)
- As gravações explícitas em PDF 1.4 e anteriores rejeitam agora os valores
/PageLayout /TwoPageLefte/TwoPageRightdo catálogo do documento que requerem PDF 1.5 ou posterior, enquanto os destinos PDF 1.5 a PDF 1.7 preservam o esquema de duas páginas solicitado
Version 2.21.4
Corrigido (Fixed)
- As gravações explícitas em PDF 1.3 rejeitam agora as entradas
/Langdo catálogo do documento que requerem PDF 1.4 ou posterior, enquanto os destinos PDF 1.4 a PDF 1.7 preservam o identificador de idioma
Version 2.21.3
Corrigido (Fixed)
- As gravações explícitas em PDF 1.3 rejeitam agora as árvores de nomes
/EmbeddedFilesdo documento, que requerem PDF 1.4 ou mais recente, sem rejeitar os fluxos de ficheiros incorporados referenciados através de especificações de ficheiro mais antigas
Version 2.21.2
Corrigido (Fixed)
- Última versão: 2.21.4; Data de lançamento:
Version 2.21.1
Corrigido (Fixed)
- A validação de referência híbrida aplica agora as entradas suplementares de
/XRefStmantes dos marcadores de posição xref clássicos da mesma revisão, para que as anotações comprimidas e outros objectos condicionados pela versão deixem de ser ignorados quando a tabela de compatibilidade os marca como livres
Version 2.21.0
Alterado (Changed)
- Todos os exemplos de visualizador Delphi, C++Builder e Lazarus conseguem abrir um PDF passado como primeiro argumento da linha de comandos, e os exemplos
MultiPageViewerde C++Builder e Lazarus disponibilizam atalhos explícitos de seleccionar tudo e copiar
Corrigido (Fixed)
- Última versão: 2.21.12; Data de lançamento:
Version 2.20.0
Alterado (Changed)
- Todos os exemplos de visualizador Delphi, C++Builder e Lazarus disponibilizam agora atalhos consistentes para abrir, pesquisar, guardar, imprimir, fazer zoom e navegar nas páginas, enquanto cada variante de
ViewerInteractionLabsuporta também saltos de página, zoom manual validado de 10–600%, registos de interacção persistentes e verificações de ida e volta de coordenadas de clique
Version 2.19.1
Corrigido (Fixed)
- A validação explícita da versão PDF segue agora a cadeia de revisão clássica, híbrida ou de fluxo xref activa, incluindo entradas de objectos comprimidos, para que objectos substituídos, libertados e não referenciados deixem de causar falsos erros de versão de funcionalidade
Version 2.19.0
Alterado (Changed)
- Os exemplos de anexos, extracção de imagens, extracção de texto, conversão de páginas e divisão de C++Builder e Lazarus utilizam agora pastas de saída dedicadas ou ficheiros finalizados de forma segura, nomes estáveis com zeros à esquerda, actualizações de progresso responsivas, e resumos de conclusão com contagens de erro por item
Corrigido (Fixed)
- O
CJKTextLabde C++Builder mede agora o texto através das funções de edição PDFium exportadas, e oMergePDFevita uma sobrecarga de mensagem VCL ambígua, restaurando compilações limpas no RAD Studio 37
Version 2.18.3
Corrigido (Fixed)
- O carimbo de tempo de documento PAdES B-LTA é agora registado como um campo de assinatura detectável — um Widget invisível acessível através de
/Annotsda primeira página e de/Fieldsdo AcroForm (ETSI EN 319 142-1 §5.4.3) — em vez de um objecto órfão inacessível que os validadores que enumeram campos de assinatura não conseguiavam encontrar; as anotações e campos existentes são preservados
Version 2.18.2
Corrigido (Fixed)
- A assinatura PAdES e a escrita de referência cruzada clássica emitem agora um erro claro quando um deslocamento de byte excede a largura do campo fixo de 10 dígitos (~9,3 GB) em vez de silenciosamente deixar o marcador de posição
/ByteRangepor escrever (produzindo uma assinatura inválida) ou ultrapassar a linha xref de 20 bytes (ISO 32000-1 §7.5.4); a saída de fluxo de referência cruzada utiliza campos binários de 8 bytes e não é afectada
Version 2.18.1
Corrigido (Fixed)
- A assinatura PAdES resolve agora referências indirectas de
/Annots,/AcroForme/Fieldsda primeira página pelo cabeçalho de objecto completo (ISO 32000-1 §7.5.3) e pelo número de geração real da referência; uma pesquisa simples de subcadeia correspondia anteriormente a um número de objecto dentro de um mais longo (resolvendo5 0 Rpara15 0 obj) e uma geração codificada ignorava objectos comgen>0, corrompendo os arrays do campo de assinatura ou rejeitando documentos válidos - Quando o catálogo, a primeira página,
/Annots,/AcroFormou/Fieldsreside dentro de um fluxo de objectos, a assinatura tenta agora novamente numa cópia expandida antes de falhar, em vez de rejeitar o documento imediatamente
Version 2.18.0
Adicionado (Added)
ReadPdfVersionInforeporta a versão do cabeçalho, a versão central efectiva, a substituição do catálogo e o nível de extensão de programador Adobe a partir de um fluxo PDF
Alterado (Changed)
- As gravações explícitas em PDF 1.3-1.7 validam agora as estruturas de catálogo, recurso de página, XFA, redacção e extensão de programador no contexto do objecto que as contém; a saída cifrada em versão explícita e a normalização incremental do PDF 1.3 são rejeitadas para preservar a integridade do documento
- As gravações em ficheiro escrevem agora num ficheiro temporário adjacente e substituem o destino apenas após o êxito de toda a compressão, normalização e verificações de versão
Corrigido (Fixed)
- A saída PDF 1.3 contém agora o recurso
/ProcSetcompleto obrigatório e remove as chaves de transparência do PDF 1.4 quando apenas repetem os valores do estado gráfico inicial do PDF 1.3 - Os ficheiros de referência híbrida, fluxo xref e fluxo de objectos deixam de ser reescritos pelo compressor xref clássico, evitando que as entradas de objectos comprimidos sejam descartadas
- Os nomes que se assemelham a chaves de funcionalidades de transparência ou catálogo dentro de cadeias de caracteres, comentários ou mapas de recursos não relacionados deixam de causar falsos erros de versão alvo
Version 2.17.0
Adicionado (Added)
- As assinaturas PAdES são agora registadas como anotações Widget invisíveis no array
/Annotsda primeira página e no array/Fieldsdo AcroForm, preservando as anotações e campos de formulário existentes
Alterado (Changed)
- As actualizações incrementais de PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT e PAdES preservam agora a representação de referência cruzada de origem: os documentos com fluxo xref recebem uma actualização de fluxo xref conforme exigido pela ISO 32000-1 §7.5.8.1, enquanto os documentos clássicos continuam a receber uma tabela xref
- Os deslocamentos de referência cruzada,
startxref,/Prev, valores ByteRange PAdES e processamento de intervalo SHA-256 utilizam agora posições de 64 bits com hashing fragmentado, permitindo ficheiros maiores que 2 GB em compilações de 64 bits - Os pacotes XMP de escrita gerados reservam agora 2048 bytes de preenchimento antes da instrução de fecho do pacote
Version 2.16.10
Corrigido (Fixed)
- A expansão de fluxo de objectos deixa de ressuscitar cópias obsoletas de objectos que uma actualização incremental migrou para fora do fluxo de objectos para uma definição simples (ISO 32000-1 §7.5.7); as verificações de conformidade e a injecção de marcadores resolviam anteriormente o catálogo ou dicionário de metadados desactualizados nesses ficheiros
Version 2.16.9
Corrigido (Fixed)
- No Free Pascal, as cadeias de texto cuja entrada não é UTF-8 válido são alargadas byte a byte como Latin-1 e escritas como cadeias hexadecimais UTF-16BE; os bytes altos em bruto anteriormente escapavam para uma cadeia literal, o que não é uma codificação de cadeia de texto PDF 1.7 legal
- A descodificação de fluxo reconhece agora dados deflate em bruto sem o invólucro zlib RFC 1950 (um defeito comum de escritores com falhas) e descomprime-os em modo bruto, para que as verificações de conformidade deixem de ficar silenciosamente cegas nesses fluxos
Version 2.16.8
Corrigido (Fixed)
- As actualizações incrementais escritas pelo caminho de pós-processamento de gravação actualizam agora o segundo elemento
/IDdo trailer (o que muda) conforme exigido pela ISO 32000-1 §14.4; ambos os elementos eram anteriormente copiados verbatim, pelo que as ferramentas de caching e sincronização viam um identificador inalterado após cada actualização
Version 2.16.7
Corrigido (Fixed)
- O apagamento do corpo do fluxo utilizado pelas verificações de conformidade requer agora que a palavra-chave
streamseja seguida de um fim de linha (ISO 32000-1 §7.3.8.1); a palavra dentro de uma cadeia literal como(downstream)apagava anteriormente toda a estrutura seguinte até ao próximoendstream, ocultando violações reais das verificações ao nível do byte - As verificações de funcionalidades proibidas de PDF/X e PDF/E apagam adicionalmente cadeias literais e comentários (§7.2.2), para que um valor como
/Title (see /JavaScript docs)ou um token comentado deixe de produzir uma conclusão falsa deJavaScript,AcroFormouLZWDecode
Version 2.16.6
Corrigido (Fixed)
- As entradas DPM do PDF/VT são agora validadas no momento da escrita conforme documentado: os nomes de chave que violam a regra NMTOKEN da ISO 16612-2 §6.6 ou a regra de prefixo de registante do Anexo E, e os nomes duplicados, são rejeitados em vez de serem escritos no dicionário DPart — um nome contendo um espaço dividia-se anteriormente num par chave/valor inválido e corrompía o dicionário
Version 2.16.5
Corrigido (Fixed)
- A remoção de uma entrada de dicionário cujo valor é uma cadeia hexadecimal (como
/Check <...>) remove agora a entrada completa; os injectores deixavam anteriormente um valor hexadecimal órfão, produzindo um dicionário sintaticamente quebrado - A remoção de uma entrada cuja referência indirecta utiliza novas linhas entre os tokens (a ISO 32000-1 §7.3.10 permite qualquer espaço em branco) deixa de deixar o número de geração e a palavra-chave
Rpara trás
Version 2.16.4
Corrigido (Fixed)
- A verificação do número máximo de objectos deixa de exigir que os cabeçalhos de objectos comecem uma linha (a ISO 32000-1 §7.5.3 permite qualquer espaço em branco ou delimitador antes deles), para que os injectores não possam alocar um número de objecto que colida com um cabeçalho
N G objinline e corrompa silenciosamente o ficheiro; os números de objectos estão limitados pelo tecto do Anexo C - Os fluxos cujo
/Lengthé uma referência indirecta resolvem agora o objecto inteiro referenciado e utilizam o seu valor quando este está alinhado com oendstreamde fecho; anteriormente esses fluxos eram delimitados por uma pesquisa de padrão, que truncava corpos que legalmente continham a sequência de bytesendstream— típico de anexos PDF incorporados
Version 2.16.3
Corrigido (Fixed)
- A passagem de compressão de fluxo deixa os documentos de fluxo de referência cruzada (ficheiros PDF 1.5+ sem a palavra-chave clássica
trailer) sem alterações; o caminho de reconstrução analisava anteriormente incorrectamentestartxrefcomo a localização da tabela e sintetizava um trailer adivinhado, o que podia produzir um ficheiro que não abre - O compressor ignora os fluxos de metadados XMP para que um documento PDF/A mantenha o seu fluxo de metadados obrigatoriamente não filtrado (ISO 19005-1 §6.7.2), e deixa os fluxos de ficheiros externos (
/Fcom/FFilter) intocados - A tabela de referência cruzada reconstruída analisa uma cópia do documento com os fluxos removidos, para que o conteúdo binário de fluxo não possa falsificar cabeçalhos de objectos nem inflar a tabela; o
/Sizedo trailer reconstruído reflecte agora a tabela real e os números de objectos estão limitados pelo tecto do Anexo C - A localização da tabela de referência cruzada original aceita terminações de linha CR-only (ISO 32000-1 §7.5.1) e não pode mais corresponder às letras
xrefdentro destartxref; a verificação de palavras-chave de fluxo ganhou o mesmo guarda de caudaendstreamutilizado noutros locais e avança agora além dos corpos de fluxo ignorados
Version 2.16.2
Corrigido (Fixed)
- A análise de inteiros nos leitores PDF ao nível do byte aceita agora o sinal
+explícito permitido pela ISO 32000-1 §7.3.3 e rejeita sequências de dígitos que causariam overflow, para que documentos hostis ou corruptos não possam transformar comprimentos e deslocamentos analisados em valores enganadores
Version 2.16.1
Corrigido (Fixed)
- O injetor PDF/UA escreve o valor
/Langdo catálogo como uma cadeia de texto PDF adequada; anteriormente passava o valor pelo escapador XML, pelo que uma etiqueta de idioma contendo&ou parênteses produzia uma entrada corrompida, e a entrada não-ASCII era escrita como UTF-8 em bruto - A entrada Info
/ISO_PDFEVersiondo PDF/E utiliza o codificador de cadeia de texto partilhado, mantendo os valores não-ASCII legais em PDF 1.7 - O escapamento XML para pacotes XMP elimina os caracteres de controlo que são ilegais em XML 1.0, para que os metadados copiados de um documento de origem danificado não possam tornar todo o fluxo de metadados não bem-formado
- A conversão de data PDF para XMP valida que os campos de data são numéricos e preenche um campo de minutos em falta, evitando datas ISO 8601 malformadas nos XMP gerados; nas plataformas não-Windows, o carimbo de tempo alternativo inclui agora a hora do dia em vez da data simples
Version 2.16.0
Adicionado (Added)
- A descodificação de fluxo reconstrói agora os preditores
/DecodeParms(preditores PNG 10-15 e preditor TIFF 2, ISO 32000-1 §7.4.4.4) após FlateDecode, respeitando/Colors,/BitsPerComponente/Columns; os fluxos de objectos comprimidos com um preditor — uma escolha comum dos escritores PDF 1.5+ — anteriormente apresentavam bytes com diferenças, pelo que os objectos que transportavam eram silenciosamente invisíveis para as verificações de conformidade e a injecção de marcadores
Corrigido (Fixed)
- A detecção de FlateDecode analisa agora o valor
/Filtercomo um nome ou array em vez de uma correspondência de subcadeia, para que cadeias de filtros em cascata e ocorrências da palavra dentro de valores não relacionados deixem de desencadear uma inflate espúria; as cadeias não suportadas revertem para os bytes em bruto como anteriormente
Version 2.15.1
Corrigido (Fixed)
- O analisador de dicionários ignora agora cadeias literais, cadeias hexadecimais e comentários ao equilibrar
<</>>(ISO 32000-1 §7.2.2), para que os dicionários contendo valores como(A >> B)ou uma cadeia hexadecimal adjacente ao delimitador de fecho deixem de ser truncados durante a análise do trailer, catálogo e verificação de conformidade - A extracção de cadeias literais descodifica agora o conjunto completo de escapes da Tabela 3 §7.3.4.2 —
\n \r \t \b \f, octal\ddd, continuações de linha e normalização EOL sem escape — em vez de copiar a letra de escape verbatim, restaurando as comparações correctas de/Producer,/GTS_PDFXVersione/ISO_PDFEVersionpara escritores que utilizam escapes octais - As cadeias literais escritas pelos injectores de marcadores escapam agora CR, LF e outros caracteres de controlo para que os valores sobrevivam à normalização de fim de linha do lado do leitor byte a byte
Version 2.15.0
Corrigido (Fixed)
- As actualizações incrementais escritas pelos injectores de marcadores PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA e PDF/VT e pelos caminhos de assinatura PAdES e DSS preservam agora o identificador de ficheiro permanente do documento de origem: o primeiro elemento
/IDdo trailer é transportado verbatim conforme exigido pela ISO 32000-1 §14.4 e apenas o segundo elemento (o que muda) é actualizado; anteriormente ambos os elementos eram regenerados, pelo que as referências externas e os fluxos de trabalho de validação de longo prazo viam uma identidade de documento diferente após cada gravação - As assinaturas PAdES, a injecção DSS e os carimbos de tempo de documento B-LTA transportam agora a referência
/Infodo trailer de origem para a frente (ISO 32000-1 §7.5.6), para que as propriedades do documento deixem de desaparecer dos painéis do leitor após a assinatura; o trailer do carimbo de tempo de documento ganha também o array/ID - O fallback
/Infodo trailer para documentos de fluxo de referência cruzada localiza agora correctamente o dicionário do fluxo XRef e preserva o número de geração da referência; anteriormente nunca correspondia em ficheiros PDF 1.5+ conformes, eliminando silenciosamente/Info
Version 2.14.4
Corrigido (Fixed)
- A data
/Mdo dicionário de assinatura escrita porTPdf.SignPadeseSignPadesBytescontém agora o prefixo obrigatórioD:e o marcador de offset UTCZexigidos pela ISO 32000-1 §7.9.4; os validadores estritos rejeitavam anteriormente o tempo de assinatura como uma cadeia de data malformada
Version 2.14.3
Corrigido (Fixed)
- As pesquisas de chave de dicionário no leitor PDF partilhado correspondem agora a tokens de nome completos (ISO 32000-1 §7.3.5); anteriormente um fluxo cujo dicionário listava
/Length1antes de/Length(típico de fluxos FontFile) era truncado para o número de bytes errado, cegando silenciosamente as verificações de conformidade PDF/A, PDF/UA e outras que lêem fluxos de tipo de letra, CMap ou metadados - As pesquisas de trailer de
/Encrypt,/Root,/Sizee/Infodeixam de corresponder a chaves mais longas que partilham o mesmo prefixo (como/EncryptMetadata) - A expansão de fluxo de objectos deixa de confiar num valor
/Ncorrompido ou hostil: os valores não inteiros produzem agora 0 em vez de um número não inicializado, e um limite superior derivado de/Firstevita alocações excessivas ao analisar documentos malformados
Version 2.14.2
Corrigido (Fixed)
- Os injectores de marcadores PDF/X, PDF/VT, PDF/UA, PDF/E e PDF/R copiam agora os documentos de origem cifrados sem alterações em vez de acrescentar secções de actualização em texto simples; o comportamento anterior produzia ficheiros cujo trailer mais recente perdia a entrada
/Encrypt(ISO 32000-1 §7.5.6), pelo que os leitores conformes liam incorrectamente o corpo cifrado como texto simples TPdf.SignPades,SignPadesByteseInjectPadesDssMarkersemitem agoraEPadesCryptoquando o documento de origem está cifrado, em vez de emitir silenciosamente um ficheiro corrompido ou não verificável; remova a cifra antes de assinar ou incorporar material DSS
Version 2.14.1
Corrigido (Fixed)
TPdf.SignPadeseSignPadesBytespreenchem agora retroactivamente os quatro campos/ByteRangedo dicionário de assinatura; anteriormente os três últimos campos ficavam nos seus marcadores de posição zero, pelo que as assinaturas produzidas declaravam um intervalo de bytes vazio e falhavam a verificação em validadores conformes- Os dicionários de carimbo de tempo de documento PAdES B-LTA recebem a mesma correcção de preenchimento retroactivo de
/ByteRange ValidatePadesComplianceaceita agora o esquema de assinatura padrão onde o intervalo de bytes tem uma lacuna que contém o valor hexadecimal/Contents, e verifica que o segundo segmento de intervalo termina exactamente no fim do ficheiro; anteriormente apenas os intervalos sem lacuna passavam a verificação de cobertura
Version 2.14.0
Adicionado (Added)
TPdf.ExportXFDFserializa todos os valores de campos de formulário e anotações em todas as páginas para um documento XFDF (ISO 19444-1), emitindo<fields>para valores de formulário hierárquicos e<annots>para todos os subtipos de anotação suportadosTPdf.ImportXFDFlê um documento XFDF de volta para o PDF carregado, recriando anotações nas páginas correspondentes e aplicando valores de campo às suas anotações widget- O registo
TPdfAnnotationganhouName(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), pontos finais de linha, vértices de polígono/polilinha e campos de gesto de lista de tinta para que as viagens de ida e volta XFDF preservem os metadados completos da anotação - Novo exemplo
XfdfLabnos conjuntos de demonstração Delphi, C++Builder e Lazarus que demonstra a viagem de ida e volta de exportação/importação
Version 2.13.6
Corrigido (Fixed)
ValidatePdfAtrata agora os fluxos/Metadatado catálogo sem/Type /Metadataou/Subtype /XMLcomo metadados XMP em falta através depvaiMissingXmpMetadata- Os relatórios de verificação prévia PDF/A classificam agora
pvaiMissingXmpMetadatacomo Metadados e recomendam um fluxo/Metadatade catálogo com/Type /Metadata,/Subtype /XML, XMP não filtrado e marcadorespdfaid
Version 2.13.5
Corrigido (Fixed)
ValidatePdfAreporta agora as anotações Widget sem dicionário de aparência e as anotações PDF/A-2 / PDF/A-3 que requerem mas não têm/APatravés depvaiAnnotationApDictViolation- Os relatórios de verificação prévia PDF/A categorizam agora
pvaiAnnotationApDictViolationcomo conteúdo que a injecção de marcadores não consegue reparar
Version 2.13.4
Corrigido (Fixed)
ValidatePdfAreporta agora imagens inline de PDF/A-2 e PDF/A-3 cujo valor/Iou/Interpolateétrueatravés depvaiImageDictionaryViolation, correspondendo à cobertura existente do dicionário de Image XObject- Os relatórios de verificação prévia PDF/A categorizam agora
pvaiImageDictionaryViolationcomo conteúdo que a injecção de marcadores não consegue reparar
Version 2.13.3
Corrigido (Fixed)
ValidatePdfAreporta agora imagens inline PDF/A-1 que utilizam filtros/LZWDecodeou/LZWabreviados dentro de fluxos de conteúdo através depvaiInlineImageLzwForbidden, correspondendo à cobertura existente de imagens inline PDF/A-2 e PDF/A-3- O analisador de filtros de imagem inline avança agora além dos nomes de recursos iniciais como
/GS1, evitando bloqueios ao analisar fluxos de conteúdo PDF/A-1 mais amplos
Version 2.13.2
Adicionado (Added)
TPdf.SetFocusedFormFieldTextescreve texto no buffer de edição do campo de formulário actualmente em foco viaFORM_ReplaceSelection, simétrico aFocusedFormFieldText. Para campos de texto/combo AcroForm o valor é confirmado em/Vao perder o foco e é persistente; para campos de texto XFA a escrita fica apenas no buffer em memória (o PDFium não expõe nenhuma API pública para reconciliar os valores XFA de volta ao pacote de conjuntos de dados, pelo que não persiste entre gravações)- A plataforma de host JavaScript é agora anexada sempre que o motor V8 está disponível, independentemente de o documento ser XFA — para que o JavaScript AcroForm incorporado (scripts ao nível do documento, cálculos de campo,
app.alert) também possa executar. Anteriormentem_pJsPlatformsó era ligado para documentos XFA, deixando o JS AcroForm silenciosamente desactivado
Alterado (Changed)
- A anexação da plataforma JavaScript é agora independente da decisão XFA em
InitializeFormFill— a tabelam_pJsPlatformé construída sempre queV8FeaturesAvailableé verdadeiro, aplicada após a ligação da versão/callback XFA em vez de estar encaixada dentro dela
Version 2.13.1
Adicionado (Added)
- Novos eventos de host expõem informação que os callbacks de preenchimento de formulário da v2.13.0 anteriormente engoliam:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm. Cada evento tem por omissão o comportamento no-op existente quando não atribuído, pelo que os hosts existentes não são afectados - A propriedade só de leitura
TPdf.XfaFormPacketsdevolve um instantâneo único de todos os pacotes XFA (TXfaPacketList) - Os códigos de erro PDFium específicos de XFA
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUTestão agora vinculados e expostos através deLastPdfError, substituindo o genérico “Unknown error” para falhas de carregamento/disposição XFA
Alterado (Changed)
FFI_DoURIActionWithKeyboardModifierconsulta agoraOnXfaUriActionantes de executar em shell um URI a partir de um campo XFA, dando ao host um veto (segurança: um campo XFA malicioso podia anteriormente lançar URLs arbitrários incondicionalmente)DecodeFormFieldTypeencaminha agora os tipos de campo XFA através deIsXfaFormFieldem vez de um caso explícito com 8 ramos, mantendo o enum alinhado comFPDF_FORMFIELD_XFA_*por deslocamento ordinal
Corrigido (Fixed)
ValidatePdfAreporta agora as declarações PDF/A-1 que utilizam fluxos de referência cruzada PDF 1.5 ou fluxos de objectos com o novopvaiPdfA1Pdf15Structure, continuando a permitir fluxos de objectos para PDF/A-2 e PDF/A-3
Version 2.13.0
Adicionado (Added)
- Suporte completo ao tempo de execução XFA (XML Forms Architecture):
TPdf.InitializeFormFillliga agora todos os 14 callbacksFPDF_FORMFILLINFOda versão 2 e anexa umIPDF_JsPlatformpara que umapdfium.dllcom suporte XFA possa renderizar e criar scripts em formulários XFA dinâmicos - Nova unidade
Lib\FPdfXfa.pasque declara as constantes XFA e os tiposTXfaPacket/TXfaSaveFormat - Leitor de pacote estático XFA em
TPdf:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByNamemaisGetXfaTemplate/GetXfaDatasets/GetXfaConfigextraem os pacotes XFAtemplate,datasetseconfigcomo XML em bruto — útil para auditoria de conformidade e migração de dados - Sondas de capacidade:
XfaFeaturesAvailableglobal e por documentoTPdf.XfaRuntimeAvailableeTPdf.XfaStaticReadable TPdfFormFieldTypealargado com tipos de campo XFA, comDecodeFormFieldTypea mapear os novos valoresFPDF_FORMFIELD_XFA_*- Eventos de host JavaScript em
TPdf:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrleOnXfaRuntimeMissing - Novo exemplo
XfaLabDelphi que demonstra a detecção XFA, a extracção de pacotes, a sondagem de capacidade e o caminho alternativo de tempo de execução em falta
Alterado (Changed)
TPdf.LoadDocumentrealiza agora uma pré-análise da entrada em busca de marcadores XFA e selecciona automaticamentepdfium.v8.dlldefinindoEnableV8Engine := TrueTPdf.GetPageCountreflecte agora a contagem de páginas que o motor XFA reporta viaFFI_PageEventapós a repaginação dinâmica- Quando um documento XFA é aberto mas o tempo de execução não está disponível,
InitializeFormFillfixa agoraversion=1exfa_disabled=1em vez de solicitar a versão 2 com callbacks não atribuídos
Version 2.12.2
Corrigido (Fixed)
ValidatePdfACompliancereporta agora os namespaces XMP personalizados utilizados sempdfaExtension:schemas, continuando a aceitar metadadospdfaidpadrão sem declarações de extensão- A validação de ficheiros incorporados PDF/A-3 requer agora ambas as entradas de nível superior
/Fe/UFnos dicionários de especificação de ficheiro e ignora as chaves de fluxo/EFencaixadas ao verificar esses nomes
Version 2.12.1
Corrigido (Fixed)
ValidatePdfACompliancedescodifica agora os tokens de nome PDF com escape antes de corresponder aos nomes proibidos de JavaScript, LZWDecode, Type1 e relacionados, para que os nomes obfuscados mas semanticamente idênticos sejam reportados correctamente- As verificações de imagem inline PDF/A rejeitam agora os valores
/Filtere/Fque utilizam/LZWDecode,/LZWabreviado ou/Crypt, incluindo formas de array e nome com escape - A validação PDF/A reporta agora os fluxos de metadados com filtros de fluxo proibidos, os perfis ICC de OutputIntent cujo número de componentes
/Nestá em falta ou é inconsistente, e as especificações de ficheiro incorporado PDF/A-3 com/AFRelationshipem falta ou inválido
Version 2.12.0
Adicionado (Added)
- Os pedidos HTTP TSA definem agora tempos limite explícitos de 30 s para cada fase (resolver/ligar/enviar/receber) via
WinHttpSetTimeouts - Derivação de nonce por pedido para pedidos de carimbo de tempo PAdES B-T / B-LTA quando o chamador omite
TPadesSignOptions.Nonce: uma redução SHA-256 de contador monotónico + relógio de parede +GetTickCount64+ id de processo substitui o fallback fixo anterior de$100000000, para que dois pedidos emitidos no mesmo milissegundo deixem de reutilizar o mesmo nonce anti-repetição PdfInflatelimita agora a saída descomprimida a 256 MiB para impedir que um fluxo comprimido com zlib esgote a memória numa entrada hostil ou corrompida (uma “zlib bomb”); o limite é generoso para qualquer fluxo PDF real
Alterado (Changed)
- A mistura de overlay de
TPdfViewdeixa de utilizarGetPixel/SetPixelVpor pixel; o rectângulo é agora misturado através de umTBitmapfora do ecrã de 32 bpp eScanLinenuma única passagem, eliminando milhares de travessias do kernel GDI por repintura e tornando as selecções grandes responsivas FPdfAsn1.TDerReader.ReadIntegerrejeita agora os campos INTEGER com mais de 8 bytes, devolvendo 0 em vez de calcular um valor erradoParseTimeStampRespdeixa de ecoar o nonce do pedido de volta comoTPadesTimestamp.Nonce; o campo fica em 0 para sinalizar “não verificado”
Corrigido (Fixed)
PointsToPixelsdevolvia a sua entrada sem alteração para cada DPI: o divisor eraPointsPerInch(a constante 72) em vez do literal 72. Qualquer chamador externo que efectue o dimensionamento pontos→pixels de dispositivo através deste auxiliar obtém agora o correctoPoints × PixelsPerInch / 72PdfMaxObjNumsubestimava nos documentos que utilizam fluxos de objectos (PDF 1.5+ ObjStm): os objectos comprimidos dentro de um/ObjStmnão têm marcadorN 0 obj. A verificação expande agora primeiro os fluxos de objectosInjectPdfAMarkersdeixa de forjar uma declaração de conformidade PDF/A num documento cifrado: o PDF/A (ISO 19005-1 §7.1) proíbe a cifra. QuandoHasEncryptestá definido, a origem é agora passada sem alteraçãoPdfReadStreamBytesrecusa agora um/Lengthmaior do que o ficheiro completo antes de alocar o buffer de resultado
Version 2.11.0
Adicionado (Added)
- O registo PDFium
FPDF_FILEHANDLERdeclara agora os seus seis callbacks (Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate) como campos reais em vez de comentários, correspondendo à disposição do cabeçalho C - O carregamento e descarregamento da biblioteca PDFium (
LoadLibrary/UnloadLibrary) são agora serializados por uma secção crítica global do processo, para que dois threads de trabalhoTPdfFuture<T>não possam ambos observarPDFiumLibrary=0e efectuar um double-bind - Uma secção
initialization/finalizationchama agoraUnloadLibraryao descarregar a unidade, garantindo queFPDF_DestroyLibraryé executado (junção do thread de trabalho, eliminação do isolate V8, libertação de tipo de letra/cache)
Alterado (Changed)
TPdf.SetActiveengole agora qualquer excepção durante o carregamento (anteriormente apenasEPdfError), para que um erro de fluxo ou violação de acesso durante a configuração de formulário/página deixeActive=Falseem vez de um componente parcialmente carregado com estado indeterminado- Codificação de caracteres consistente para argumentos de chave de metadados PDFium:
TPdf.GetMetaTextutiliza agora a mesma divisão FPCAnsiString/ DelphiUTF8EncodequeGetViewerPreferencee os caminhos de carregamento - Desduplicados os auxiliares
BytesToAnsi,AnsiToBytes,WriteByteseWriteStr:FPdfCompressimporta-os agora deFPdfPdfCommon
Corrigido (Fixed)
- Fuga de recursos em
TPdf.LoadDocumenteTPdf.CreateDocument: seInitializeFormFillouReloadPagelançasse após o êxito deFPDF_LoadDocument/FPDF_CreateNewDocument, o handleFPDF_DOCUMENTnativo era perdido. Cada caminho envolve agora a configuração pós-carregamento emtry/excepte fecha o documento em caso de falha - Diagnósticos mais amigáveis de carregamento de DLL PDFium:
CheckLoadLibrarydetectaERROR_BAD_EXE_FORMAT(193) e reporta uma incompatibilidade de arquitectura 32/64-bit apontando para a compilaçãoDLLs/Win32ouDLLs/Win64correspondente
Version 2.10.1
Corrigido (Fixed)
- Normalização do sid do SignerInfo PAdES: o identificador do assinante usa agora a forma
issuerAndSerialNumberda RFC 5652 §5.3 (issuer Name + serialNumber, ambos extraídos literalmente do DER do certificado do assinante), substituindo o marcador anterior não standardsubjectKeyIdentifier+ SHA-256-do-certificado-completo que o Adobe Acrobat e outros validadores conformes rejeitavam. Um novo analisador de TbsCertificate DER (ExtractIssuerAndSerial) lê a SEQUENCE do issuer e o INTEGER do número de série como bytes TLV em bruto — os números de série costumam exceder o intervalo doInt64, pelo que o TLV em bruto é obrigatório. A formasubjectKeyIdentifierpermanece apenas como recurso quando a análise do DER do certificado falha
Alterado (Changed)
TCmsSignerId.SerialNumber: Int64substituído porSerialDer: TBytes(o TLV do serialNumber em bruto). O construtor CMS incorpora o TLV recortado literalmente emIssuerAndSerialNumber, evitando o rebentamento deInt64em números de série de CA de 20 bytes (limite superior RFC 5280 §4.1.2.2)
Version 2.10.0
Adicionado (Added)
- Validação de longo prazo PAdES B-LT: quando
TPadesSignOptions.Level >= plB_LT,SignPadesBytesacrescenta uma actualização incremental que transporta um dicionário/DSScom o certificado do assinante e a cadeia intermédia completa (a raiz auto-assinada é excluída por RFC 5652 §10.2.3), mais o marcador/Extensions /ESICLevel 1 (EN 319 142-1 §5.4.2) - Carimbo de arquivo PAdES B-LTA: quando
Level >= plB_LTAeTsaUrlestá definido, é acrescentado um dicionário de assinatura Document Time-stamp (/SubFilter /ETSI.RFC3161) cujo/ByteRangecobre todo o ficheiro; o marcador ESIC é promovido para Level 2. Isto completa os quatro níveis de base PAdES (B-B, B-T, B-LT, B-LTA) - Recolha da cadeia de certificados:
ResolveWinSignerchama agoraCertGetCertificateChaine preencheTPadesResolvedSigner.ChainCertDercom os certificados de CA intermédios, de modo que o/DSS /Certsdo B-LT transporta todos os certificados necessários para validar a assinatura sem procuras externas.CertFreeCertificateContextestá agora vinculado, fechando a fuga de um-contexto-por-assinatura referida em v2.8.0 - Fluxo de integração PDF/A:
TPdf.SignPadesWithPdfAconverte primeiro o documento para PDF/A (o nível mais elevado que a biblioteca emite hoje) e depois aplica a assinatura PAdES solicitada — o padrão de contentor de arquivo de longo prazo que o EN 319 142-1 Annex A.7 recomenda
Version 2.9.0
Adicionado (Added)
- Carimbo de tempo fidedigno PAdES B-T:
TPadesSignOptionsganha os camposLevel,TsaUrleNonce. QuandoLevel >= plB_TeTsaUrlestá definido,SignPadesBytesextrai o valor da assinatura do CMS construído, pede um carimbo de tempo RFC 3161 sobre ele, e incorpora o TimeStampToken devolvido como atributo não assinado do SignerInfosignature-time-stamp— o passo de tempo fidedigno do B-T (EN 319 142-1 §6.3 req o) FPdfTsa: cliente RFC 3161 multiplataforma —BuildTimeStampReq(versão 1, messageImprint SHA-256 sobre o valor da assinatura, nonce, certReq=true),ParseTimeStampResp(aceita PKIStatus 0/1, rejeita 2+, extrai o ContentInfo do TimeStampToken literalmente), eRequestTimestamp(construir+POST+analisar numa só operação).PadesTsaAvailablecondiciona a funcionalidade em plataformas sem um backend HTTPFPdfTsaWin: backend Windows WinHttp, vinculado dinamicamente a partir de winhttp.dll (zero novas dependências de compilação; HTTPS negociado pelo arquivo de certificados do Windows). Espelha o padrão de vinculação dinâmica deFPdfCryptoWinFPdfCms:ExtractSignatureValuepercorre um CMS construído para recuperar os octetos da assinatura em bruto (a entrada de hash da TSA), eAddSignatureTimestampToCmsreconstrói o ContentInfo com um novounsignedAttrs [1](0xA1) que transporta o atributo de carimbo de tempo. O validador de stage-1 reconhece o resultado como uma assinatura B-T
Version 2.8.0
Adicionado (Added)
- Pilha de assinatura PAdES B-B: quatro novos blocos constitutivos em Pascal puro/multiplataforma (
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto) mais um backend Windows CNG (FPdfCryptoWin) permitem queTPdf.SignPades/SignPadesToStreamproduzam uma assinatura PAdES B-B de ponta a ponta. O certificado do assinante é resolvido por impressão digital SHA-1 a partir do arquivo Current User “MY”; RSA-PSS (recomendado), RSA PKCS#1 v1.5 e ECDSA são todos suportados viaNCryptSignHash FPdfSha256: SHA-256 FIPS 180-4 autossuficiente (Init/Update/Final + auxiliares de operação única). O FPC 3.2.2 não fornece nenhuma unidade SHA-2, pelo que a biblioteca possui uma para manter todos os caminhos de código do CMS num único tipoTSHA256Digestsem ramificações na RTLFPdfAsn1: codificador DER (TDerWriter) e leitor (TDerReader) cobrindo SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/tags específicas de contexto, com a codificação de comprimento definido e o processamento de tags IMPLICIT que o CMS exigeFPdfCms: construtor CAdES SignedData (BuildSignedData) que emite os atributos assinados content-type, message-digest e signing-certificate-v2 que a base PAdES exige, com signing-time e commitment-type-indication opcionais. O digest dos signedAttrs é calculado sobre a forma etiquetada como SET (0x31) e reemitiida com a tag IMPLICIT [0] (0xA0) por RFC 5652 §5.4FPdfCrypto+FPdfCryptoWin: abstração do backend criptográfico comPadesCryptoAvailable/ResolvePadesSigner, e a implementação Windows que vincula dinamicamente crypt32.dll / ncrypt.dll (nenhuma nova dependência de DLL em tempo de compilação). As assinaturas ECDSA são recodificadas da forma IEEE P1363 r¦s do Windows para oECDSA-Sig-ValueDER que o CMS exigeSignPadesBytes: injecção de assinatura ao nível do byte — reserva um bloco hex/Contentsde largura fixa, calcula o/ByteRangecobridor, faz o digest do documento, constrói e incorpora o CMS, e acrescenta a actualização incremental. O validador (v2.7.0) reconhece a saída como uma assinatura PAdES B-B
Version 2.7.0
Adicionado (Added)
- Validador estrutural PAdES (ETSI EN 319 142-1 V1.2.1): a nova unidade
FPdfPadese o métodoTPdf.ValidatePadesinspeccionam dicionários de valor de assinatura alcançáveis a partir de/ByteRange, percorrem oSignedDataCMS dentro de/Contentssuficientemente para confirmar a forma detached do CAdES, e detectam os quatro níveis de base (B-B, B-T, B-LT, B-LTA) mais dicionários Document Time-stamp (/SubFilter /ETSI.RFC3161) - Conjunto de problemas PAdES ao nível da cláusula: 26 enums
ppei*cobrem a aceitabilidade do/SubFilter(adbe.pkcs7.sha1eadbe.x509.rsa_sha1sinalizados como proibidos), a cobertura de ficheiro do/ByteRange, a proibição de/Cert, a forma doSignedDataCMS (assinante único, eContent detached, intervalo de versões), os atributos assinados exigidos (content-type,message-digest,signing-certificate/v2), digests proibidos (MD5, SHA-1), a exclusão mútua entre/Reasonecommitment-type-indication(req d), o requisito de tempo fidedigno do B-T, o marcador B-LT/DSS+/Certs+ ESIC Level 1, e o marcador B-LTA Document Time-stamp + ESIC Level 2 - Injector DSS:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStreamacrescentam uma actualização incremental que transporta um dicionário/DSS(com arrays de stream/Certs,/OCSPs,/CRLs) e o marcador/Extensions /ESIC(Level 1 ou 2) sobre uma cópia do documento, preservando os bytes originais — o passo de incorporação do material de validação B-LT/B-LTA (cláusula 5.4.2) - Palco multiplataforma, de dependência zero: o validador e o injector são Pascal puro e funcionam em todos os IDE suportados (Delphi, Lazarus, FPC, C++Builder); não é exigido qualquer backend criptográfico para esta versão, e nenhuma nova dependência de DLL é introduzida
Version 2.6.0
Alterado (Changed)
- Desduplicação entre normas: mais sete funções auxiliares duplicadas (PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr) foram removidas das unidades de norma individuais e consolidadas em
FPdfPdfCommon, reduzindo cerca de ~300 linhas de ónus de manutenção por copiar-colar - Qualidade do PreflightReport: problemas de classe de conteúdo PDF/X e PDF/E que anteriormente caíam na categoria genérica de “missing marker” transportam agora categorias Content/Metadata/Security exactas e recomendações específicas de cláusula (~15 enums em ambas as normas)
- Cobertura de testes PDF/E e PDF/R: mais seis enums sem cobertura ganharam testes positivos (
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Correcção de build do Lazarus:
Tests.PdfVT(uma unidade DUnitX só de Delphi adicionada em v2.5.x) está agora excluída do projecto Lazarus para restaurar a compilação
Version 2.5.3
Adicionado (Added)
- Completude do OutputIntent (PDF/X-4 §6.2.4):
pvviOutputIntentSchemesinaliza um OutputIntent cujo/Snão é/GTS_PDFX;pvviOutputIntentMissingIdentifiersinaliza um/OutputConditionIdentifierem falta - Excepção de Reference XObject PDF/VT-2 (§6.2.2):
pvviReferenceXObjectForbiddenjá não dispara para um ficheiroPDF/VT-2, que pode usar legalmente Reference XObjects numa base X-5g/5pg - Validação de caracteres de boundary MIME (RFC 2046 §5.1.1):
vtmviBoundaryInvalidCharsinaliza uma boundary cujos caracteres caem fora do conjunto bchars ou cujo comprimento excede 70
Corrigido (Fixed)
InjectPdfVTMarkersescreve agora Info/CreationDatee/ModDatea partir das opções de gravação, de modo que o ficheiro produzido percorreValidatePdfVTCompliancesem um falsopvviInfoModDateMismatch(o injector reescrevia anteriormente as datas XMP mas deixava as datas do dicionário Info desactualizadas)
Version 2.5.2
Adicionado (Added)
- Consistência do Info
/ModDate(§6.3 NOTE 2, base PDF/X-4):pvviInfoModDateMismatchsinaliza um/ModDatede dicionário Info que, após normalização de data-PDF para data-XMP, não é igual axmp:ModifyDate - Conformidade de chunk inline PDF/VT-2s (Annex A.2): o validador MIME executa agora
ValidatePdfVTComplianceem cada parteapplication/pdfinline e sinaliza um corpo não-PDF/VT viavtmviInlinePdfNotPdfVT
Version 2.5.1
Adicionado (Added)
- Validação de chunking DParts (ISO 16612-2 §6.5 Table 4):
pvviDPartsBadChunkingsinaliza um array/DPartscujos sub-arrays não finais não têm exactamente 8192 entradas ou cujo último sub-array cai fora de 1..8192 - Consistência de RecordLevel entre streams (Annex A.2): o validador MIME PDF/VT-2s extrai agora o
/RecordLevelde cada PDF inline e sinaliza discrepâncias viavtmviRecordLevelMismatch, complementando a verificação NodeNameList existente - Hints de objectos gráficos recorrentes (§6.7):
pvviGtsScopeInvalidValuesinaliza um/GTS_Scopefora de {SingleUse, Record, File, Stream, Global, Unknown};pvviGtsScopeRecordWithoutRecordLevelsinaliza/Recordsem um/RecordLevel;pvviGtsXidNotUuidsinaliza um/GTS_XIDque não é um uuid: URI da RFC 4122;pvviGtsEnvMissingsinaliza um/GTS_Envem falta quando/GTS_Scopeé Stream ou Global (§6.7.4) - Detecção de referência em antecipação MIME (Annex A.2):
vtmviForwardReferencesinaliza um PDF inline que cita um nome de ficheiro (via/EF /F) não introduzido por uma parte de anexo anterior na stream
Corrigido (Fixed)
ExtractNodeNameListFromPdfeExtractRecordLevelFromPdfemFPdfPdfvtMimeresolveram um off-by-one recorrente em que o deslocamento baseado em 1 devolvido porAnsiFindKeyera tratado como um deslocamento de byte absoluto no PDF expandido
Version 2.5.0
Adicionado (Added)
- Document Part Metadata PDF/VT (DPM, ISO 16612-2 §6.6):
TPdfVTSaveOptionsganhouDpmEntrieseDpmTargetpara que um escritor possa anexar um dicionário/DPMao nó DPart sintetizado, com validação de nomes de chave contra a regra de prefixo de segunda classe do Annex E e as regras de forma NMTOKEN / unicidade /GTS_Manageddo §6.6 no lado do validador - Troca por streaming PDF/VT-2s (Annex A): a nova unidade
FPdfPdfvtMimeforneceBuildPdfVT2sStreameValidatePdfVT2sStreampara o envelope MIMEmultipart/mixedque transporta chunks PDF/VT inline mais perfis ICC de anexo, com a regra de ordenação do cabeçalhoX-PDFVT-Stream-version: 1e a verificação de consistênciaNodeNameListentre streams TPdf.ValidatePdfVTexecuta agora uma contagem autoritativa de acções JavaScript viaFPDFDoc_GetJavaScriptActionCount, complementando a análise de nomes/JavaScriptao nível do byte
Corrigido (Fixed)
- Correcção de
TrappedPDF/VT na base PDF/X-4: o valor de enumptvUnknowné removido (o PDF/X-4 proíbe/Unknown),ptvUnspecifiedé normalizado para/Falsena escrita (um/Trappedem falta também é proibido), e um novo problemapvviTrappedInvalidsinaliza um valor ausente ouUnknown ValidatePdfVTComplianceexpande agora object streams (PdfExpandObjectStreams) antes de analisar, de modo que um dicionário de catálogo, OutputIntent ou Metadata armazenado dentro de um ObjStm comprimido (PDF 1.5+, típico de produtores PDF/X-4) seja alcançável pelas procuras ao nível do byte
Alterado (Changed)
- PDF/VT-1 herda agora as proibições de conteúdo completas do PDF/X-4:
pvviAcroFormForbidden(/AcroFormou/XFA),pvviAdditionalActionsForbidden(/AAdo catálogo),pvviMissingTrimBoxepvviReferenceXObjectForbidden(Reference XObject, só X-5g/5pg) - Desduplicação entre normas:
BuildDictObj,IccComponentCount, o perfil ICC sRGB incorporado (GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNumePdfExpandObjectStreamsforam promovidos de cópias locais triplicadas emFPdfPdfa/FPdfPdfx/FPdfPdfvtpara uma única casa canónica emFPdfPdfCommon; o literal ICC de 3144 bytes existe agora exactamente uma vez na base de código
Version 2.4.0
Corrigido (Fixed)
InjectPdfUaMarkersjá no descarta a referência/Infodo trailer numa base de fluxo de referência cruzada (cross-reference-stream): oSourceTrailerInfoReflocal (que carecia do fallback de fluxo xref) foi substituído peloPdfSourceTrailerInfoRefpartilhado (promovido a partir da cópia PDF/A que já dispunha do fallback desde a v2.0.0)- O
PdfReadStreamBytespartilhado agora lida com referências indiretas/Length N G R(portado da cópia local do PDF/A), de modo que os validadores PDF/VT, PDF/R e PDF/E já não leem incorretamente nem ignoram fluxos de metadados XMP produzidos por ferramentas que utilizam Length indireto (Acrobat, Ghostscript)
Alterado (Changed)
- Deduplicação entre normas: as cópias locais de
PdfReadTraileremFPdfPdfaeFPdfPdfx, as cópias locais deSourceTrailerInfoRefemFPdfPdfaeFPdfPdfua, e oPdfReadStreamByteslocal emFPdfPdfaforam eliminados — as versões partilhadas deFPdfPdfCommonaplicam-se agora em todo o lado, o que remove cerca de ~330 linhas de código duplicado e elimina o esforço de manutenção para manter as cópias sincronizadas - Resolução de lacunas de testes do PDF/X: sete enums de classes de conteúdo que antes possuíam cobertura zero obtiveram testes positivos (
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
Alterado (Changed)
- A resolução de lacunas de testes do PDF/A continua: mais três enums com cobertura zero obtiveram testes positivos;
pvaiForbiddenRenderingIntent(§6.2.9) sinaliza um nome de rendering-intent não normalizado num fluxo de conteúdo;pvaiJpeg2000Violation(§6.2.2) sinaliza uma imagem JPXDecode com/NumComponentsfora de {1,3,4} no Part 2;pvaiInlineImageLzwForbidden(§6.1.10) sinaliza uma imagem inline que utiliza o filtro LZW no Part 2
Version 2.2.0
Alterado
- Testes de regressão de fluxos de referência cruzada: o existente
Validate_XrefStreamTrailer_DetectsConformanceagora também verifica se a referência do catálogo/Metadataé resolvida e se o XMPpdfaid:parté lido numa base de fluxo xref (não apenas/Root+/ID). Um novo testeInjectPdfA_XrefStreamBase_RoundTripsprotege o caminho de fluxo xref do injetor adicionado na v2.0.0. Dois testes entre normas (PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable) verificam que os validadores PDF/E e PDF/R já não rejeitam PDFs com fluxo xref como impossíveis de analisar - Encerramento de dívida de testes PDF/A:
Validate_MinimalPdf_FlagsRequiredMarkersgarante que um PDF mínimo absoluto ativapvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadataepvaiMissingXmpDates— colmatando a lacuna de simetria com os validadores PDF/E e PDF/X que já tinham testes equivalentes. Mais dois enums com cobertura zero ganharam testes positivos:pvaiUnembeddedFontepvaiSubsetMissingCidSet
Version 2.1.0
Corrigido
- O PDF/E foi inadvertidamente deixado de fora da correção de fluxos de referência cruzada da v2.0.0: ambos
InjectPdfEMarkerseValidatePdfEComplianceainda chamavamPdfReadTrailersemAcceptXrefStream, pelo que o injetor PDF/E falhava silenciosamente na saída PDF 1.5+ (o padrão doSaveAsCopydo pdfium). Ambos os locais de chamada agora passamTrue - O fallback partilhado de fluxo de referência cruzada de
PdfReadTraileragora inclui a salvaguarda/Type /XRefque as cópias locais de PDF/A e PDF/X já tinham, para que um offsetstartxrefcorrompido a apontar para um dicionário não relacionado falhe de forma limpa em vez de ser incorretamente analisado como o trailer - O resolvedor de referência indireta de
/LangemValidatePdfUaCompliance(v2.0.0) estava inacessível: oPdfFindObjDictapenas encontra dicionários<<, mas um objeto string/Langé(...)ou<...>sem dicionário. Substituído por um varrimento direto do corpo do objeto que localiza o token da string
Alterado
- Sete duplicados auxiliares redundantes (dead-shadow) (PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj) que eram cópias idênticas ao nível do byte das versões partilhadas em
FPdfPdfCommonforam removidos deFPdfPdfaeFPdfPdfua— as versões partilhadas agora aplicam-se em todo o lado viauses
Version 2.0.0
Corrigido
- Falha silenciosa entre normas: o auxiliar partilhado
PdfReadTrailer(utilizado pelos injetores e validadores de marcadores PDF/UA, PDF/X, PDF/VT e PDF/R) agora aceita um parâmetroAcceptXrefStreame recorre ao dicionário de objetos do fluxo de referência cruzada quando nenhuma palavra-chavetrailerestá presente (PDF 1.5+). Anteriormente, a saída deSaveAsCopydo pdfium (que utiliza um fluxo de referência cruzada) fazia com que cada injetor de marcadores falhasse silenciosamente — os bytes de origem eram copiados sem alterações e a chamada continuava a devolver sucesso. O validador PDF/R-1.0 (cuja base PDF 2.0 é sempre um fluxo de referência cruzada) era efetivamente um no-op. A implementação madura do validador PDF/A foi portada para o auxiliar partilhado para que todas as normas beneficiem - A análise do dicionário trailer em
InjectPdfUaMarkerseInjectPdfAMarkersagora utiliza oPdfDictEndciente da profundidade em vez de uma pesquisa simples por>>, para que um trailer contendo um dicionário aninhado (por exemplo,/Encrypt << ... >>) já não seja truncado antes de uma entrada/Infofinal
Alterado
TPdf.ValidatePdfUaagora suprime opvuaiFontNotEmbeddedgenérico ao nível do byte quando opvuaiPdfiumFontNotEmbeddedpreciso do modelo de objetos do Pdfium já foi acionado, para que o relatório de preflight já não contenha duas linhas quase duplicadas de “incorporar as suas fontes” para o mesmo defeitopvuaiLangInvalidFormat(§7.2) agora resolve um/Langde referência indireta (N 0 R) para o seu objeto string e valida o conteúdo, para que uma etiqueta de idioma referenciada indiretamente já não seja um ponto cego
Version 1.99.0
Corrigido
pvuaiLangInvalidFormat(§7.2) já não dá passagem livre a strings/Langcodificadas em hexadecimal: os pares UTF-16BE (com um BOMFE FF) e as strings hexadecimais ASCII simples são agora descodificados e submetidos à mesma verificação gramatical BCP 47 que as strings literais(...), pelo que um/Langhexadecimal malformado é detetado enquanto um em conformidade (por exemplo, um UTF-16BEen-US) já não corre o risco de ser assinalado
Alterado
pvuaiFontMissingToUnicode(§7.21.7) agora isenta/MacExpertEncodinga par de/WinAnsiEncodingand/MacRomanEncoding, correspondendo às quatro condições de isenção que a cláusula lista
Version 1.98.0
Adicionado
pvuaiNeedAppearancesTrue(§7.18.4) assinala um AcroForm cujo sinalizador/NeedAppearancesé true, pelo que as aparências dos controlos visuais não estão bloqueadas de forma fiável e as tecnologias de apoio não as conseguem associar à árvore de estrutura. Importado do validador PDF/A e limitado à presença de/AcroFormpara reduzir a superfície de análise
Alterado
- Regressão do corpus veraPDF: ligados o par sucesso+falha Reference-XObject da §7.20 e os pares sucesso+falha do subconjunto CharSet/CIDSet da §7.21.4.2 em
Live_Corpus_ValidatePdfUaMatchesConformance. As amostras de sucesso ToUnicode-forbidden-value da §7.21.7 e media-clip da §7.18.6.2 também foram ligadas como salvaguardas contra falsos positivos (as suas amostras de falha utilizam esquemas de dicionário que a análise ao nível do byte não deteta, pelo que apenas o lado de sucesso está ligado) - A lista de asserções do caminho de sucesso do corpus ganhou 15 novas salvaguardas contra falsos positivos, para que cada verificação ativa de estrutura e de nível do byte
pvuai*seja agora testada contra amostras conformes (anteriormente, apenas cerca de 30 dos 60 problemas ativos eram salvaguardados). A salvaguardapvuaiLangInvalidFormatfoi deliberadamente omitida porque o verificador ao nível do byte assinala de forma conservadora strings/Langcodificadas em hexadecimal que não consegue descodificar
Version 1.97.0
Corrigido
- Robustecimento de
ValidatePdfUaStructureElements: a travessia da cadeia de paisEnclosingTableinclui agora um contador de saltos (limitado pelo número de elementos), garantindo que um cicloParentIndexmalformado num array de elementos de estrutura sintético já não bloqueia o chamador. A alocação do array de IDs de conteúdo marcado deValidatePdfUaPageContentTaggingestá agora limitada a um milhão de entradas, evitando uma alocação de múltiplos GB numMarkedContentIDmalformado ou malicioso
Alterado
- O comentário de documentação do enum
pvuaiOrderedListMissingListNumberingdescreve agora com precisão o que a verificação faz: assinala um elementoLcujo valorListNumberingestá fora do conjunto da Tabela 347 da ISO 32000-1 (um atributo ausente não é assinalado). O comentário anterior sugeria que também detetava listas ordenadas sem o atributo, o que a implementação não faz - As duas amostras de falha de incompatibilidade de WMode
7.21.3.3-t02do corpus estão agora ligadas emLive_Corpus_ValidatePdfUaMatchesConformance— desde a v1.95.0 que o fluxo CMap é descomprimido com FlateDecode, pelo que a comparação dicionário vs conteúdo corre agora num lado legível. O comentário obsoleto “não ligado” foi removido
Version 1.96.0
Adicionado
- Consistência entre normas:
TPdf.ValidatePdfUaganha duas verificações portadas do validador PDF/A.pvuaiAnnotationFlagsViolation(§7.18.1) assinala uma anotação não isenta que contenha o sinalizador Hidden / Invisible / NoView, o que interrompe o fluxo de leitura das tecnologias de apoio.pvuaiActionTargetMissing(§7.18.5) assinala uma ação GoToR / URI / SubmitForm que não possua a sua chave de destino obrigatória (/F+/D, /URI, /F), deixando a ligação inutilizável por tecnologias de apoio
Corrigido
- Fusão da árvore de estrutura entre páginas: o loop de acumulação
AllElemsemTPdf.ValidatePdfUaagora rebaseia oParentIndexde cada elemento do array local da página para o array fundido. Sem isto, os elementos filhos da página 2 mantinham um índice local da página que apontava para a fatia da página 1, corrompendo silenciosamente todas as verificações dependentes do ParentIndex (estrutura de tabelas/listas, contagem de filhos H da §7.4.4, EnclosingTable) - Análise sintática do RoleMap:
PdfReadRoleMapPairsjá não termina toda a pesquisa de chave/valor quando um valor é uma referência indireta (N 0 R) ou um array ([...]) — ambas formas válidas de RoleMap segundo a ISO 32000-1 14.8.5.1. Agora ignora apenas essa entrada (Continue) em vez de interromper comBreak, eliminando falsos positivos depvuaiRoleMapUnresolvedem tipos mapeados após uma entrada indireta ou de array
Alterado
FPdfPreflightReport: 18 activeTPdfUaValidationIssuevalues que anteriormente caíam na categoria genérica de “marcador em falta” e recomendação respetiva agora apresentam categorias precisas (Estrutura / Conteúdo / Metadados / Segurança) e recomendações específicas para cada cláusula. Também foi corrigido o erro tipográficopuaNone / pua1→pucNone / puc1emPDFSpecComplianceMatrix.md
Version 1.95.0
Alterado
- Passagem de fiabilidade e abrangência de
TPdf.ValidatePdfUa: a verificaçãopvuaiCMapWModeMismatchda §7.21.3.3 e a verificaçãopvuaiToUnicodeForbiddenValueda §7.21.7 descomprimem agora fluxos CMap / ToUnicode comprimidos comFlateDecodeantes de os analisar (anteriormente apenas os fluxos não comprimidos eram avaliados, um falso negativo conhecido). Os assistentes partilhadosPdfInflate/PdfReadAndDecodeStreamforam promovidos deFPdfPdfa/FPdfPdfxparaFPdfPdfCommon, para que todas as unidades de conformidade partilhem a mesma cópia
Adicionado
pvuaiSubsetCharSetEmpty(§7.21.4.2) assinala umFontDescriptorde subconjunto Type 1 que contenha uma chave/CharSetcujo valor de string esteja vazio — a verificaçãopvuaiSubsetMissingCharSetexistente apenas detetava chaves em falta. Um/CIDSetvazio não é assinalado, dado que uma fonte sem CIDs pode legitimamente conter um bitmap vazio
Version 1.94.0
Adicionado
- A auditoria de segunda passagem de
TPdf.ValidatePdfUaencerrou seis lacunas da ISO 14289-1 detetadas através de uma revisão cláusula a cláusula e de uma nova análise das APIs nativas do Pdfium que já estavam envolvidas mas não eram utilizadas pelo fluxo PDF/UA.pvuaiHeadingFormatInvalid(§7.4.3) assinala etiquetas de cabeçalho personalizadas que começam com H mas contêm separadores, espaços ou numeração romana em vez de dígitos árabes puros.pvuaiMissingDocumentOutline(§7.17, recomendável) assinala um documento com múltiplas páginas que não contenha um índice de marcadores (documentos de página única estão isentos).pvuaiStructElementLangInvalid(§7.2) assinala um valor/Langde elemento de estrutura que não seja uma etiqueta BCP 47 válida.pvuaiWidgetMissingPrintField(§7.14 / §7.18.4) assinala um elemento de estrutura Widget a que falte o proprietário do atributo PrintField.pvuaiLinkNotInStructureTree(§7.18.5) assinala um documento cujas anotações/Subtype /Linknão estejam expostas como elementos de estrutura Link.pvuaiPdfiumAnnotationMissingContentsepvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5) adicionam uma análise precisa de anotações ao nível do modelo de objetos do Pdfium que isenta anotações ocultas, fora da crop box, Popup e Widget — eliminando os falsos positivos da heurística ao nível do byte, que não consegue ler os sinalizadores/Fou a/Rect
Version 1.93.0
Adicionado
TPdf.ValidatePdfUaagora sobrepõe uma passagem baseada no modelo de objetos do Pdfium ao inspetor ao nível do byte, espelhando a arquitetura da ronda 7 do PDF/A: percorre os objetos de texto de cada página viaFPDFTextObj_GetFont→FPDFFont_GetIsEmbedded(pvuaiPdfiumFontNotEmbedded, §7.21.4) e analisa cada caráter através deFPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) eFPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8) — sendo mais preciso que as heurísticas ao nível do byte, que apenas disparam quando estão presentes zero programas de fontes ou quando não surge qualquer/ToUnicode. Esta travessia tem atalhos de saída em três níveis: o loop de página termina quando todos os três problemas da camada do Pdfium já estiverem definidos, o loop por objeto termina no primeiro caso de fonte não incorporada, e a análise de carateres ignora a passagem de.notdefquandoUnicodeMapErrorjá tiver ocorrido. O PDF/UA era o último validador de normas PDF que não possuía uma camada de modelo de objetos do Pdfium
Version 1.92.0
Adicionado
- Criado o
Tests.PdfR— o primeiro ficheiro de testes para o validador PDF/R-1 (FPdfPdfr), abrangendo validação de cabeçalhos, proibição de ObjStm, deteção de marcadores raster e uma salvaguarda de falsos positivos com ficheiros limpos. Todas as seis suítes de testes de normas PDF têm agora ficheiros de testes dedicados: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = 212 testes no total
Version 1.91.0
Adicionado
ValidatePdfEeValidatePdfVTganharam verificações ao nível do conteúdo anteriormente disponíveis apenas nos validadores PDF/A, PDF/UA e PDF/X:pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(apenas PDF/E),pveiEmbeddedFilesForbidden(apenas PDF/E),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbidden,pvviOpiForbidden.TPdf.ValidatePdfEeTPdf.ValidatePdfVTtambém ganham uma camada de modelo de objetos do Pdfium (pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded) que percorre objetos de texto de página viaFPDFFont_GetIsEmbedded, terminando com atalho de saída na primeira fonte não incorporada
Version 1.90.0
Adicionado
TPdf.ValidatePdfXagora sobrepõe uma passagem baseada no modelo de objetos do Pdfium ao inspetor ao nível do byte: percorre os objetos de texto de cada página viaFPDFTextObj_GetFont→FPDFFont_GetIsEmbeddede assinala qualquer fonte não incorporada comopvxiPdfiumFontNotEmbedded— sendo mais preciso que a heurística ao nível do byte, que apenas dispara quando estão presentes zero programas de fontes. A travessia termina com um atalho de saída ao encontrar a primeira fonte não incorporada
Alterado
- Travessia da árvore de estrutura de
TPdf.ValidatePdfUa: a chamada deValidatePdfUaPageContentTaggingpor página (que constrói um mapa de reivindicação de IDs de conteúdo marcado e efetua a verificação cruzada de cada objeto de texto/imagem) passa a ser ignorada nas páginas subsequentes assim quepvuaiUntaggedContentjá tiver sido encontrado — os elementos de estrutura continuam a ser recolhidos para as verificações entre páginas (ID único do Note, sequência de cabeçalhos), mas a passagem onerosa de etiquetagem de conteúdo por página termina mais cedo
Version 1.89.0
Alterado
- Desempenho da camada do modelo de objetos do Pdfium em
TPdf.ValidatePdfA: a travessia de páginas/objetos agora possui atalhos de saída em três níveis — o loop de página termina quando todos os problemas aplicáveis da camada do Pdfium já tiverem sido encontrados, o loop por objeto termina quando ambos os problemas por objeto (incorporação de fonte + transparência) estiverem definidos, e a análise de carateres da página de texto ignora a passagem de.notdefquandoUnicodeMapErrorjá tiver ocorrido. As verificações de disponibilidade da APIAssigned()e os sinalizadores de conformidade são colocados em cache em booleanos locais uma vez antes do loop, em vez de serem reavaliados em cada página/objeto/caráter. Num documento grande e não conforme, a travessia pode agora parar após a primeira página em vez de analisar todas as páginas; num documento conforme, o custo de processamento por página é menor (sem chamadasAssignedrepetidas)
Version 1.88.0
Adicionado
ValidatePdfXganhou oito novos valoresTPdfXValidationIssueao nível do conteúdo, cobrindo as restrições de intercâmbio de impressão que a norma PDF/X impõe além dos marcadores de formato de ficheiro:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(sem/TrimBoxem qualquer página) epvxiTrappedNotSet(/Trappedausente ou/Unknown). O validador PDF/X verificava anteriormente apenas os marcadores XMP/OutputIntent; esta é a sua primeira passagem ao nível do conteúdo. Os assistentes partilhadosPdfStructureBytes/PdfHasName/PdfCountNameforam adicionados aFPdfPdfCommonpara que todas as unidades de conformidade os possam utilizar
Version 1.87.0
Adicionado
- A validação PDF/UA abrange agora as regras de fontes compostas da ISO 14289-1 §7.21.3:
pvuaiCidSystemInfoMismatchassinala fontes Type0 cujo CMap incorporado e o CIDFont descendente discordam emRegistry/Ordering, ou cujoSupplementdo CIDFont excede o do CMap;pvuaiCMapNotEmbeddedassinala CMaps referenciados por nome (comoEncodingouUseCMap) que não são CMaps predefinidos da Tabela 118 da ISO 32000-1; epvuaiCMapWModeMismatchassinala CMaps incorporados cujoWModeno dicionário difere do WMode no conteúdo do fluxo
Corrigido
- A verificação
pvuaiCidFontMissingCidToGidMapda §7.21.3.2 não detetava dicionários CIDFontType2 cujo par chave/valorSubtypefosse separado por uma nova linha; agora assinala também um valor de nomeCIDToGIDMapdiferente deIdentity
Version 1.86.0
Adicionado
- A validação PDF/UA abrange agora as regras de codificação TrueType da ISO 14289-1 §7.21.6:
pvuaiTrueTypeEncodingInvalidassinala fontes TrueType não simbólicas cujaEncodingestá ausente ou não éMacRomanEncodingnemWinAnsiEncoding(diretamente ou através deBaseEncoding); epvuaiSymbolicTrueTypeEncodingassinala fontes TrueType simbólicas que transportam um nome deEncodingnão padrão
Version 1.85.1
Alterado
- A verificação de ordem de tabulação
pvuaiMissingTabsOrderda ISO 14289-1 §7.18.3 é agora executada por página: qualquer página que contenha anotações deve declarar/Tabs /Sno seu próprio dicionário de página, pelo que uma página irmã conforme já não mascara uma página que o não declare
Version 1.85.0
Adicionado
- A validação PDF/UA distingue agora formulários XFA dinâmicos de estáticos de acordo com a ISO 14289-1 §7.15:
pvuaiXfaDynamicassinala formulários cuja configuração XFA definedynamicRendercomorequired
Alterado
- O sinalizador candidato anterior para qualquer XFA,
pvuaiXfaPresent, foi retirado e deixou de ser ativado (XFA estático está em conformidade com §7.15); o valor do enumerador mantém-se por compatibilidade de API
Version 1.84.0
Adicionado
- A validação PDF/UA deteta agora conteúdo real não etiquetado exigido pela ISO 14289-1 §7.1:
pvuaiUntaggedContentassinala objetos de texto e imagem renderizados que não são reclamados pela árvore de estrutura da página (através dos seus IDs de conteúdo marcado) nem marcados como Artefacto - Novos auxiliares de nível de página
GetPageContentMarkInfoseValidatePdfUaPageContentTaggingcom o registoTPdfPageContentMarkInfopara utilização direta
Version 1.83.0
Adicionado
- A validação PDF/UA aplica agora o modelo de cabeçalhos da ISO 14289-1 §7.4.4:
pvuaiHeadingModelMixedassinala documentos que misturam a etiqueta genéricaHcom cabeçalhos numeradosH1..Hn; epvuaiHeadingMultipleInNodeassinala nós de estrutura que contêm mais de um cabeçalho filhoH
Version 1.82.0
Adicionado
- A validação PDF/UA resolve agora o RoleMap exigido pela ISO 14289-1 §7.1:
pvuaiRoleMapRemapsStandardassinala entradas do RoleMap que redefinem um tipo de estrutura padrão; epvuaiRoleMapUnresolvedassinala tipos de estrutura não padrão utilizados cuja cadeia RoleMap está ausente, pendente ou cíclica — cadeias indiretas que alcançam um tipo padrão são aceites, e entradas RoleMap não utilizadas nunca são avaliadas - Novos auxiliares
PdfUaIsStandardStructType,PdfReadRoleMapPairs(com descodificação de escape PDF#hh) eValidatePdfUaRoleMapUsagepara utilização direta
Version 1.81.0
Adicionado
- A validação PDF/UA abrange agora a etiquetagem de listas ISO 32000-1 exigida pela ISO 14289-1 §7.6:
pvuaiListStructureInvalidassinala itens LI fora de um contentor L e partes Lbl/LBody fora de um item LI, aceitando listas aninhadas e a utilização legítima de Lbl dentro dos elementos Note e BibEntry
Version 1.80.0
Adicionado
- A validação PDF/UA abrange agora a etiquetagem de tabelas ISO 32000-1 exigida pela ISO 14289-1 §7.5:
pvuaiTableStructureInvalidassinala células TH/TD fora de uma linha TR e linhas ou grupos de linhas fora do seu contentor Table;pvuaiTableHeaderMissingScopeassinala células de cabeçalho cuja relação não é determinável nem através de um atributo Scope nem de uma associação Headers/ID; epvuaiTableHeadersUndefinedIdassinala referências Headers em documentos que não definem IDs de elementos de estrutura TPdfStructureElementexpõe os atributos de tabelaScope,HasHeaders,HeadersIds,ColSpaneRowSpan, resolvidos durante a travessia da árvore de estrutura
Alterado
- A travessia da árvore de estrutura lê agora todos os atributos de disposição e de tabela numa única passagem pelos dicionários de atributos de cada elemento, em vez de uma análise por atributo
Version 1.79.1
Corrigido
TPdf.CreateAnnotationpoderia gerar a exceção “Cannot set attachment points” para anotações de marcação que utilizam pontos quad (Realce, Sublinhado, Rasurado, Ondulado) porque a nova anotação não possuía nenhum espaço quad para substituir; agora acrescenta o primeiro quad em vez disso
Version 1.79.0
Adicionado
- Novo exemplo de consola Delphi
AnnotationsLab: cria anotações de Texto, Realce, Quadrado e Círculo, escreve-as num PDF e, em seguida, recarrega o ficheiro e enumera a lista de anotações da página - Portado o exemplo
AnnotationsLabpara Lazarus e C++Builder, juntando-se ao exemplo existente de consola Delphi
Version 1.78.0
Adicionado
- Novas funções
TPdf.MeasureTexteTPdf.MeasureTextWidth: medem a largura e altura renderizadas de uma string para uma dada fonte e tamanho (unidades de utilizador do PDF, 1 unidade = 1/72 polegada) sem adicionar conteúdo à página, possibilitando a lógica de layout e quebra de linha com base noAddText; disponibilizado pela unidade autónomaFPdfMeasurecomo um class helper - Nova função
TPdf.WrapText: quebra de linha ambiciosa baseada emMeasureTextWidth, que divide o texto nos espaços e agrupa palavras em linhas cuja largura não excede um limite fornecido (unidades de utilizador do PDF); uma palavra excessivamente longa ocupará a sua própria linha (sem quebra interna da palavra), devolvendo as linhas num formato de array
Version 1.77.0
Adicionado
- A função
ValidatePdfAobteve três novos valoresTPdfAValidationIssuecobrindo as cláusulas anteriormente avaliadas como “NO” ou “reader behaviour” na auditoria de lacunas anterior (ordinais anexados, valores existentes inalterados):pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — um caráter que é resolvido para Unicode 0 sem um erro de mapeamento, o sintoma em tempo de execução de uma referência de glifo.notdef; detetado através da camada de modelo de objetos Pdfium),pvaiWordBreakMissing(Nível A 6.8.3.2 — uma string de exibição no fluxo de conteúdo com mais de 20 carateres e sem espaços, provavelmente uma violação de palavras fundidas; heurística aproximada que evita falsos positivos em CJK), epvaiLinkActionMissingTarget(6.6.3 — uma ação GoToR/URI/SubmitForm com falta da chave de destino de exibição, impedindo o leitor de a apresentar)
Version 1.76.0
Adicionado (Added)
ValidatePdfAganhou três novos valoresTPdfAValidationIssue(ordinais anexados, valores existentes inalterados):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — um token/BaseFontou/FontNameque contém bytes ≥ 0x80 que não formam um UTF-8 válido),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — uma imagem inline num fluxo de conteúdo de página utiliza o filtro LZW ou Crypt) epvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — uma fonte TrueType não simbólica cujo dicionário Encoding contém/Differences)
Version 1.75.0
Adicionado (Added)
ValidatePdfAganhou três novos valoresTPdfAValidationIssue(ordinais anexados, valores existentes inalterados):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — um token numérico que excede o limite de número inteiro com sinal de 32 bits de 2.147.483.647),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — um valor/BMfora do conjunto de blend-mode padrão da ISO 32000-1 §11.3.5; complementa opvaiTransparentColorSpacedo PDF/A-1 que apenas permite Normal/Compatible) epvaiHexStringOddDigits(6.1.6 — uma string hexadecimal<...>com um número ímpar de dígitos hexadecimais)
Version 1.74.0
Adicionado (Added)
ValidatePdfAganhou três novos valoresTPdfAValidationIssue(ordinais anexados, valores existentes inalterados):pvaiPermissionsViolation(6.1.12 — um dicionário/Permstransportando/DigestLocation,/DigestMethodou/DigestValuejuntamente com/DocMDP),pvaiTransActionForbidden(PDF/A-2 6.5.1 — uma ação de transição Trans, detetada através do padrão de dicionário de ação/S /Transpara evitar falsas correspondências com/Transparency) epvaiPdfiumObjectTransparency(PDF/A-1 6.4 — um objeto de página transporta transparência real segundoFPDFPageObj_HasTransparency, estendendo a camada do modelo de objetos do Pdfium introduzida na v1.73.0 para capturar efeitos de blend-mode/soft-mask que o varrimento de nomes ao nível do byte pode não detetar)
Version 1.73.0
Adicionado (Added)
TPdf.ValidatePdfAsobrepõe agora uma passagem do modelo de objetos do Pdfium ao inspetor ao nível do byte: percorre os objetos de texto de cada página através deFPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbeddede reporta um tipo de letra renderizado não incorporado comopvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4), e carrega cada página de texto para examinarFPDFText_HasUnicodeMapErrore reportar um mapeamento Unicode quebrado comopvaiPdfiumUnicodeMapError(6.3.8). Estas são verificações que o inspetor ao nível do byte não consegue fazer — este apenas vê tokens de nomes, e não identificadores (handles) de tipos de letra resolvidos ou estado de mapeamento por carácter — e são fundidas no resultado ao nível do byte. A função isoladaValidatePdfAComplianceao nível do byte mantém-se inalterada
Version 1.72.0
Adicionado (Added)
ValidatePdfAganhou cinco novos valoresTPdfAValidationIssue(ordinais anexados, valores existentes inalterados):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — o catálogo não deve conter/NeedsRendering),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — um OutputIntent não deve conter/DestOutputProfileRef),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 — uma especificação de ficheiro com/EFdeve também conter/UF),pvaiXmpPacketBytesAttr(6.7.5 — o cabeçalho do pacote XMP não deve conter o atributo obsoletobytes=ouencoding=) epvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — o bit ToggleNoView/Fda anotação, valor 512, é proibido)
Version 1.71.0
Alterado
ValidatePdfUaagora emitepvuaiOrderedListMissingListNumbering(ISO 14289-1 7.6): o explorador da árvore de estrutura resolve o atributo de layoutListNumberingem cada elementoLatravés da API de atributos do Pdfium e sinaliza qualquer valor fora do conjunto da Tabela 347 da ISO 32000-1 (Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square). Um atributo ausente não é sinalizado, uma vez que a lista pode não estar ordenada; isto colmata a última lacuna residual da ISO 14289-1 registada no final da ronda 5
Version 1.70.0
Adicionado
ValidatePdfUaganhou quatro novos valoresTPdfUaValidationIssue(ordinais anexados, valores existentes inalterados):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — umFontDescriptorde subconjunto CID deve declarar/CIDSet),pvuaiToUnicodeForbiddenValue(7.21.7 — um CMap ToUnicode não deve mapear nenhum código paraU+FEFFouU+FFFE; os fluxos não comprimidos são analisados em busca das formas de saída<FEFF>/<FFFE>),pvuaiLangInvalidFormat(7.2 —/Langdeve ser uma etiqueta RFC 1766 / BCP 47 válida; uma gramática permissiva aceitaen,en-US,zh-Hans,es-419e sinaliza valores claramente não conformes) epvuaiOrderedListMissingListNumbering(7.6 — mantido para integridade da API; ainda não emitido pelo validador porque distinguir de forma fiável as listas ordenadas das não ordenadas necessita do valor do atributoListNumbering, que o explorador da árvore de estrutura não expõe)
Version 1.69.0
Adicionado
ValidatePdfUaganhou dois novos valoresTPdfUaValidationIssue(ordinais anexados, valores existentes inalterados):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — um elemento de estrutura Widget deve estar aninhado dentro de um elementoForm; o explorador da árvore de estrutura verifica agora o tipo de elemento principal direto de cada Widget) epvuaiSubsetMissingCharSet(7.21.4.2 — umFontDescriptorde subconjunto do Tipo 1 deve declarar/CharSet, identificado pelo prefixo de nome de subconjunto+de seis letras em/FontName)
Version 1.68.0
Adicionado
ValidatePdfUaganhou dois novos valoresTPdfUaValidationIssue(ordinais anexados, valores existentes inalterados):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — um dicionário de ação URI não deve conter/IsMapcom valortrue, uma vez que desativa o destino da hiperligação acessível) epvuaiHeadingSequenceViolation(7.4.2 — os cabeçalhos numerados devem começar emH1e uma sequência descendente não deve ignorar um nível intermédio, por ex.,H1→H3é uma violação). A verificação de cabeçalho é a primeira regra PDF/UA ao nível da árvore de estrutura no validador:ValidatePdfUaStructureElementspercorre agora a lista de elementos tipificados e verifica a sequênciaH1…H6(eH7+conforme 7.4.3) pela ordem do documento
Version 1.67.0
Adicionado
ValidatePdfUaganhou cinco novos valoresTPdfUaValidationIssue(ordinais anexados, valores existentes inalterados):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — uma anotação Link deve conter uma descrição alternativa via/Contents),pvuaiAnnotationMissingContents(7.18.1 — qualquer anotação não isenta sem/Contentsdeve ter uma descrição alternativa; Popup e Widget estão isentos),pvuaiEmbeddedFileMissingName(7.11 — um dicionário de especificação de ficheiro deve conter/Fe/UF),pvuaiMediaClipMissingAlt(7.18.6.2 — um dicionário de dados de clipe multimédia deve conter/CTe/Alt) epvuaiCidFontMissingCidToGidMap(7.21.3.2 — um CIDFont do Tipo 2 incorporado deve conter/CIDToGIDMap)
Version 1.66.0
Adicionado
ValidatePdfUaganhou cinco novos valoresTPdfUaValidationIssue(ordinais anexados, valores existentes inalterados):pvuaiRoleMapMissing(ISO 14289-1 7.1 — um documento etiquetado com tipos de estrutura não padronizados deve conter um/RoleMap),pvuaiOptionalContentAsKey(7.10 — um dicionário de configuração de conteúdo opcional não deve conter a chave de estado automático/AS),pvuaiXfaPresent(7.15 — a presença de/XFAnum AcroForm é sinalizada, uma vez que o XFA dinâmico é proibido),pvuaiTrapNetAnnotation(7.18.2 — as anotações/TrapNetsão proibidas) epvuaiReferenceXObject(7.20 — Reference XObjects, dependentes do marcador/Ref, são proibidos)
Corrigido
ValidatePdfUajá não apresenta falsos positivos depvuaiEncryptionPresentem cada ficheiro encriptado: a PDF/UA permite a encriptação desde que a chave/Pdo dicionário de encriptação tenha a posição de bit 10 (valor 1024) definida, o que concede acesso a tecnologias de apoio (7.16). A violação precisa é agora reportada através do novopvuaiEncryptionPBitMissing;pvuaiEncryptionPresenté mantido na enumeração por motivos de compatibilidade de API, mas já não é emitido pelo validador ao nível do byte
Version 1.65.0
Adicionado
ValidatePdfAganhou cinco novos valoresTPdfAValidationIssue(ordinais anexados, valores existentes inalterados):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — um CIDFont do Tipo 2 incorporado deve conter/CIDToGIDMap),pvaiSubsetMissingCharSet(6.3.5 — umFontDescriptorde subconjunto do Tipo 1 deve conter/CharSet),pvaiSubsetMissingCidSet(6.3.5 — umFontDescriptorde subconjunto CID deve conter/CIDSet),pvaiWidgetActionForbidden(6.6.1 — uma anotação Widget não deve conter/Aou/AA) epvaiOptionalContentAsKey(ISO 19005-2 6.9 — um dicionário de configuração de conteúdo opcional não deve conter a chave de estado automático/AS, agora relevante porque a PDF/A-2 permite conteúdo opcional)
Version 1.64.0
Adicionado
ValidatePdfAganhou oito novos valoresTPdfAValidationIssue(ordinais anexados, valores existentes inalterados):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 — o cabeçalho%PDF-x.ydeve ser seguido por um comentário%com pelo menos quatro bytes maiores que 127),pvaiExternalStreamRef(6.1.7 — um dicionário de fluxo não deve conter/F,/FFilterou/FDecodeParms),pvaiOutputIntentScheme(6.2.2 — o/Sdo OutputIntent deve ser/GTS_PDFA1),pvaiInfoXmpDateMismatch(6.7.3 —CreationDate/ModDateem Info devem também aparecer comoxmp:CreateDate/xmp:ModifyDate),pvaiMarkInfoMissing(6.8.2.2 — O Nível A exige/MarkInfocom/Marked true),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — o dicionário/APda anotação deve conter apenas/N),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Anexo E.2 — cada especificação de ficheiro associada deve conter/AFRelationship) epvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — uma imagem JPEG2000 deve declarar 1, 3 ou 4 componentes)
Corrigido
ValidatePdfAjá não apresenta falsos positivos depvaiAnnotationFlagsViolationem documentos que utilizem um nome de recurso de tipo de letra de uma só letra, tal como/Font << /F 5 0 R >>; a análise do sinalizador/Festá agora limitada a um contexto de anotação (/Subtypede um tipo de anotação), correspondendo ao comportamento documentado (6.5.3)ValidatePdfAreporta agora o requisito de ficheiro associado da PDF/A-3 por ficheiro: um documento só é sinalizado quando uma/Type /Filespecincorporada que referencia um fluxo incorporado através de/EFnão tem/AFRelationship, em vez da verificação anterior de todo o documento (tudo ou nada) (ISO 19005-3 Anexo E.2)- Adicionada a ação obsoleta
/SetStateao conjunto de ações proibidas juntamente com/SetOCGState, pelo que o nome da ação da Referência PDF é detetado diretamente (6.6.1)
Version 1.63.0
Adicionado (Adicionado)
- Adicionados
TPdf.MeasureTexteTPdf.MeasureTextWidth: medem a largura e a altura de renderização do texto numa fonte e tamanho especificados sem adicionar conteúdo à página (em unidades de utilizador PDF, 1 unidade = 1/72 polegada), permitindo cálculos de layout e quebra de linha automática sobreAddText; fornecido pela unidade independenteFPdfMeasurecomo class helper
Alterado (Alterado)
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDFeDemo\Lazarus\MergePDFmelhorados para os três IDE: seleção de intervalo de páginas por ficheiro, caminho de saída opcional, deduplicacão, registo de execução, botão de cancelar e resumo de fusão; marcadores e metadados são importados a partir da primeira fonte- As demonstrações de
CreatePDFpara os três IDE incluem agora uma opção "Texto europeu" para escrever texto acentuado em checo, francês, alemão, espanhol, português, polaco e turco, para verificar a seleção de tipos de letra e o tratamento de Unicode (o antigo exemploEuropeanTextfoi integrado) - Removidos os exemplos
ExtractTextPageseEuropeanText: a funcionalidade de extração de texto página a página deExtractTextPagesjá é abrangida pelas opções de intervalo de páginas e separador de páginas deExtractText; a renderização multilingue deEuropeanTextfoi integrada emCreatePDF
Version 1.62.2
Corrigido (Corrigido)
- Os cabeçalhos C++Builder (
.hpp) foram regenerados para todas as versões e plataformas RAD Studio (Win32/Win64/Win64x); tinham divergido das fontes Pascal, deixando assinaturas de funções desactualizadas e unidades em falta que chegavam aos utilizadores C++Builder através da distribuição de código-fonte
Version 1.62.1
Corrigido (Corrigido)
- Foi restaurada a compilação a partir de código-fonte no RAD Studio 12 Athens e anteriores: uma atribuição de
TArray<Byte>no caminho de validação PDF/UA usava uma conversão implícita de matrizes exclusiva do Delphi 13 que falhava ao compilar em IDE mais antigos
Version 1.62.0
Adicionado (Adicionado)
TPdf.RenderPageThumbnailrenderiza qualquer página por índice para um bitmap ajustado à proporção sem alterar a página actual do documento, a página carregada nem dispararOnPageChange
Corrigido (Corrigido)
TPdfThumbnailViewjá não altera oPageNumberdo documento anfitrião enquanto desenha; anteriormente, cada repintura recarregava páginas, disparavaOnPageChangee descartava a página de texto, o que podia perturbar umTPdfViewligado e provocar ciclos de repintura. As miniaturas agora são renderizadas através deRenderPageThumbnailsem esses efeitos colaterais- A validação de conformidade PDF/X passa agora a inspeccionar documentos com cross-reference streams (PDF 1.6, típico de PDF/X-4) e objectos guardados em object streams comprimidos, em vez de classificar esses ficheiros em bloco como não conformes; o marcador
GTS_PDFXVersioné lido tanto a partir da forma de elemento como da forma de atributo RDF do XMP - A validação PDF/R passa agora a reportar
pvriInfoXmpMismatchquando o dicionário Info e o XMP divergem em Producer ou Creator; o problema era anteriormente declarado mas nunca assinalado - Os temporizadores de preenchimento de formulários são agora acompanhados por pedido, pelo que um documento que executa vários temporizadores ao mesmo tempo (por exemplo um intervalo JavaScript juntamente com o piscar do cursor do campo) mantém-nos a todos em vez de perder todos excepto o mais recente
- O desenho de
TPdfViewe os seus métodos públicosRenderPage/RenderTilemantêm agora o bloqueio de renderização do documento, serializando com a renderização em thread de trabalho do mesmoTPdf(o PDFium não é thread-safe) - O texto não ASCII escrito em metadados PDF/X, PDF/R e PDF/VT (nomes de condição do OutputIntent, Creator, Producer) é agora codificado como string UTF-16BE segundo ISO 32000-1 §7.9.2.2 em vez de UTF-8 bruto, que leitores conformes interpretariam incorrectamente
- Os auxiliares de conformidade leem correctamente fluxos de metadados incorporados cujo
/Lengthé uma referência indirecta, carregam bytes de origem comReadBuffer(para que uma leitura curta falhe de forma limpa) e rejeitam um offsetstartxrefnegativo em vez de arriscar uma leitura fora de intervalo
Version 1.61.0
Alterado (Alterado)
- Correcções de declaração FFI/ABI que podem exigir recompilar código que implementava os callbacks afectados: o callback de preenchimento de formulários
FFI_OpenFilepassa agora a tercdecl(convenção de stack Win32), e o parâmetrovaluedeFPDFAnnot_SetStringValueeFPDFAttachment_SetStringValueé agoraFPDF_WIDESTRING(UTF-16LE) para coincidir com os cabeçalhos PDFium - Os callbacks de carregamento progressivo
FX_FILEAVAIL.IsDataAvaileFX_DOWNLOADHINTS.AddSegmentrecebem agora offsetssize_t, esize_ttem a largura de um ponteiro no Free Pascal / Lazarus Win64 (anteriormente truncado para 32 bits), corrigindo chamadas da API de disponibilidade de dados e chamadasoutdesize_tem FPC Win64
Corrigido (Corrigido)
- Segurança de memória: um use-after-free do temporizador de preenchimento de formulários ao destruir um
TPdfcom um cursor AcroForm activo; umFPDF_CloseDocumentduplo no caminho de erro deImportNPagesToOne; excepções Pascal que escapam dos callbacksFPDF_FILEWRITE/FPDF_FILEACCESSatravés da fronteira C durante gravação e inserção JPEG; e um overflow inteiro na extracção de texto ao ler de um índice inicial até ao fim da página TPdfFuture<T>passa agora a entregar de forma fiável o respectivo callback de resultado; a resposta era anteriormente quase sempre descartada (e podia tocar numa thread libertada) porque a worker se libertava antes de a resposta enfileirada ser executada- A saída PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT e PDF/UA escreve agora entradas de cross-reference com exactamente 20 bytes, como exigido por ISO 32000-1 §7.5.4
- A injecção de marcadores de standards já não destrói um dicionário quando a chave removida, por exemplo
/Trapped, era a última entrada, o que anteriormente engolia o>>de fecho e produzia um objecto mal formado
Version 1.60.1
Alterado (Alterado)
- As demonstrações AccessibilityReader para Delphi, Lazarus e C++Builder passam agora a fazer leitura em voz alta com
TPdfReadingSession: cada página é agregada num único bloco falado comBuildSpokenTextFromWords, as posições de palavra SAPI alimentamFeedSpokenPositione a sessão avança páginas e conduz o cursor de palavras da vista, substituindo a orquestração manual que cada demonstração tinha antes - O acompanhamento de karaoke ao nível da palavra nas demonstrações passa agora também a funcionar quando NVDA é o motor de voz:
EstimatePacingsincroniza o cursor de leitura pelo tempo de fala decorrido, quando antes o NVDA fazia leitura em voz alta sem qualquer acompanhamento de palavra - Pause e Resume nas demonstrações funcionam agora também com NVDA:
ResumeRestartsChunkrelê a página actual desde o início em Resume, enquanto o SAPI mantém a sua pausa e retoma nativas no mesmo local
Version 1.60.0
Adicionado (Adicionado)
- Renderização em tempo real para baixa visão em
TPdfView: as novas opções de renderizaçãoreInvertereNightDuotonerecolorêm cada mosaico de página renderizado (inversão total de cor ou uma paleta duotone nocturna) antes de serem pintadas as camadas de pesquisa, selecção, leitura e cursor de palavra, trazendo as transformações de cor de bitmap existentes para o visualizador interactivo em disposições de página única e de páginas opostas; alternar as opções redesenha de imediato NightDuotoneInkeNightDuotonePaperconfiguram a paleta nocturna, com predefinição de texto âmbar sobre página preta;reInvertprevalece quando ambas as opções estão definidas
Version 1.59.0
Adicionado (Adicionado)
TPdfReadingSession: um componente de orquestração de leitura em voz alta independente do motor de fala. Mantém o cursor de bloco, o cursor de palavra e o estado de reprodução (Play/PlayFrom/Pause/Resume/Stop), avança pelos blocos carregados deTPdfSpokenTextà medida que o anfitrião sinaliza que o motor está inactivo através deTick, traduz offsets de texto falado de volta para caracteres da página e conduz automaticamente um cursor de palavra deTPdfViewassociado; o anfitrião liga qualquer motor de fala através deOnSpeake dos eventos de pedido de cancelamento / pausa / retoma, pelo que a biblioteca não liga por si qualquer API de falaFeedSpokenPositionconsome posições de palavra do motor (comoStatus.InputWordPositiondo SAPI);EstimatePacingcomEstimatedWordsPerMinutesincroniza motores sem sinal de posição;ResumeRestartsChunkrelê o bloco actual para motores sem pausa nativaOnChunkChange,OnWordChangeeOnFinisheddisparam apenas em alterações reais, e uma vista associada libertada desliga-se automaticamente, para que o código anfitrião se mantenha sem cintilação e seguro contra falhas
Version 1.58.0
Adicionado (Adicionado)
EstimateSpokenWordIndexestima que palavra está a ser vocalizada por um motor de fala a partir do tempo decorrido e de uma taxa de palavras por minuto, dando às palavras mais longas proporcionalmente mais tempo, para que motores que não reportam posição de palavra (como o cliente controlador NVDA) ainda possam conduzir o cursor de leitura ao nível da palavra; o chamador fornece o tempo decorrido, pelo que a rotina permanece independente de relógio e testável por unidade
Version 1.57.0
Adicionado (Adicionado)
- Construção de texto falado com mapeamento em dois domínios para acompanhamento de leitura em voz alta:
BuildSpokenTextFromWordseSpokenTextAppendconstroem a string entregue a um motor de conversão de texto em voz a partir das caixas de palavras da página enquanto registam uma tabela de intervalos, eSpokenToPageChartraduz um offset falado reportado pelo motor (comoStatus.InputWordPositiondo SAPI) de volta para o índice de carácter da página, para que o acompanhamento de realce ao nível da palavra permaneça correcto quando o texto falado não é o texto completo da página (regiões ignoradas, leitura por unidade, substituições de pronúncia) - Os tipos
TPdfSpokenTexteTPdfSpokenSpantransportam a string falada mais os intervalos de página de origem a partir dos quais foi construída; offsets em separadores inseridos resolvem para a próxima palavra mapeada e offsets para além dos trechos mapeados não produzem correspondência
Version 1.56.9
Adicionado (Adicionado)
Demo\Delphi\PreflightReportadiciona uma pré-visualização do Plano de Acção que condensa normas não aprovadas, prioridades, próximas acções, códigos de problemas e recomendações numa lista de correcçãoDemo\Delphi\PreflightReportCliaceitaplan/actionplancomo formato de saída para execuções de ficheiro único e em lote, escrevendo a mesma lista de correcção para um ficheiro de texto
Alterado (Alterado)
- As duas demonstrações Delphi PreflightReport mostram agora contagens de estado de aprovado / acção / revisão juntamente com o total de normas e problemas
Version 1.56.8
Alterado (Alterado)
ViewerInteractionLabinclui agora controlos de salto de página, controlos de zoom manual, registo de coordenadasDeviceToPage/PageToDevicebaseado em clique e um registo de interacção mais claro para verificações de selecção, pesquisa, rotação e navegação- As páginas readme de
ViewerInteractionLabdocumentam agora o fluxo de interacção adicionado ao longo do conjunto localizado de readme das demonstrações
Version 1.56.7
Adicionado (Adicionado)
AccessibilityWorkbenchClimapeia cada problema detectado para os respectivos critérios de sucesso WCAG 2.1 e área de cláusula ISO 14289-1 (PDF/UA-1) e mostra uma secção de cobertura de normas nos relatóriosAccessibilityWorkbenchClicalcula uma pontuação de acessibilidade documentada de 0-100 com uma tabela de penalizações publicada e uma faixa excelente / boa / precisa de trabalho / fraca, apresentada por ficheiro e como média do loteAccessibilityWorkbenchCliaceitafailscore=Npara falhar a execução (código de saída 2) quando qualquer ficheiro fica abaixo de NAccessibilityWorkbenchCliescreve um registo SARIF 2.1.0 quando o nome do resumo de lote termina em.sarif, com uma regra por tipo de problema contendo as suas etiquetas WCAG 2.1 e PDF/UA para ingestão por CI e code-scanningAccessibilityWorkbenchCliadiciona um comandoversionque imprime a versão PDFiumPas ligada
Version 1.56.6
Adicionado (Adicionado)
IntakeWorkbenchClicalcula um hash forense SHA-256 de cada ficheiro de entrada (recuando paraunavailableem compiladores semSystem.Hash) e reporta-o em todos os formatosIntakeWorkbenchCliaceitapasswords=file.txtpara testar a abertura de documentos protegidos por palavra-passe a partir de uma lista de candidatos, registando o índice do candidato correspondente sem nunca escrever o texto da palavra-passeIntakeWorkbenchCliaceitacopyto=dirpara encaminhar cada ficheiro auditado para uma subpasta por nível de risco, transformando o auditor num ordenador de ingestãoIntakeWorkbenchCliescreve um registo SARIF 2.1.0 quando o nome do resumo de lote termina em.sarif, com uma regra por indicador de risco e um resultado por ficheiro sinalizado para ingestão por CI e code-scanningIntakeWorkbenchCliadiciona um comandoversionque imprime a versão PDFiumPas ligada
Version 1.56.5
Adicionado (Adicionado)
IntakeWorkbenchClideriva agora acções recomendadas pós-ingestão como aceitar, pedir palavra-passe, revisão manual, quarentena e deduplicar, e expõe contagens de acções nos resumos de loteAccessibilityWorkbenchClideriva agora acções de correcção recomendadas como pass-through, remediate-tags, run-ocr, remediate-semantics e manual-review, com contagens de acções de lote correspondentes
Alterado (Alterado)
- Ambas as demonstrações CLI de nível de ferramenta apresentam a acção recomendada em saída de consola, texto, HTML, JSON e CSV para que os operadores em lote possam encaminhar ficheiros sem pós-processar campos de risco ou estado
Version 1.56.4
Corrigido (Corrigido)
- Ler anotações, marcadores ou anotações de ligação em ciclo já não liberta as cadeias de texto do item anterior: os records de resultado
TPdfAnnotation,TBookmarkeTLinkAnnotationsão agora limpos com inicialização consciente de tipos geridos em vez de zeragem bruta de memória, para que documentos com números muito elevados de anotações com texto já não inflem a memória do processo durante toda a vida da aplicação - Destruir um
TPdfque tinha registado um manipuladorOnUnsupportedFeaturedesliga-o agora do callback PDFium global do processo, para que um carregamento posterior de documento a partir de outra instânciaTPdfsem o seu próprio manipulador já não possa despachar para o componente libertado (use-after-free)
Version 1.56.3
Corrigido (Corrigido)
AccessibilityWorkbenchClijá não conta páginas em branco como páginas heurísticas da ordem de leitura, pelo que documentos etiquetados com páginas separadoras vazias mantêm o seu estado correcto de acessibilidade; páginas sem conteúdo legível passam agora a ser reportadas separadamente- A detecção de cabeçalhos de tabela em
AccessibilityWorkbenchClijá não credita uma tabela exterior por célulasTHque pertencem a uma tabela aninhada, e os nomes de campos de formulário e tipos de letra passam a ser correspondidos com distinção entre maiúsculas e minúsculas para que campos distintos não sejam fundidos - Os inventários de anfitrião URL em
IntakeWorkbenchCliremovem agora userinfo, query e fragment, para que uma ligação construída comotrusted.example@evil.exampleseja atribuída ao anfitrião real, e destinosmailto:contribuam com o respectivo domínio em vez de ficarem invisíveis - Os relatórios Markdown de
IntakeWorkbenchCliescapam agora crases em caminhos, anfitriões e nomes de anexos controlados por atacante, para que a formatação do relatório não possa ser quebrada a partir de dentro de um documento
Alterado (Alterado)
AccessibilityWorkbenchClireporta falhas de varrimento de tipos de letra e de campos de formulário como contadores separados, assinala tipos de letra não incorporados que também têm instâncias incorporadas e limita listas longas de tipos de letra com um marcador explícito de truncagem- Os resumos de lote de
IntakeWorkbenchCliacrescentam uma coluna de contagem de anotações de anexo, e o censo de anotações por página é limitado a 20000 anotações por página com o limite reportado em todos os formatos
Version 1.56.2
Adicionado (Adicionado)
AccessibilityWorkbenchCliaudita agora incorporação de tipos de letra, tooltips de campos de formulário, origem da ordem de leitura, estruturas de documento, estrutura de tabelas e listas, texto alternativo suspeito e detalhes de revisão por página mais ricos, para que os relatórios em lote de acessibilidade identifiquem mais alvos de correcçãoIntakeWorkbenchClireporta agora limites de varrimento de páginas, acções launch e remote-go-to, inventários de anfitriões URI, contagens de anotações, funcionalidades PDFium não suportadas, identificadores de documento duplicados e bandeiras de risco expandidas para revisão automática de ingestão
Alterado (Alterado)
IntakeWorkbenchCliaceitamaxpages=Nnos modos de ficheiro único e em lote para limitar os varrimentos de páginas por documento mantendo a conclusão dos relatórios de metadados, anexos, scripts, XFA, assinaturas e risco
Version 1.56.1
Corrigido (Corrigido)
- Carregar uma
pdfium.dllmais antiga que não tenha uma exportação mais recente falha agora de forma limpa: o caminho de falha repõe todos os pontos de entrada da API ligados, para que verificaçõesAssigned()(por exemplo emFPDF_GetLastErrorouFPDF_GetSecurityHandlerRevision) reportem a biblioteca como não carregada em vez de chamarem o módulo já libertado e falharem com uma violação de acesso UnloadLibrarylimpa agora todas as ligações da API PDFium em vez de apenas os auxiliares V8 opcionais, para que não sobrevivam ponteiros de função obsoletos depois de a DLL ser libertada
Version 1.56.0
Adicionado (Adicionado)
- Cursor de leitura em estilo karaoke ao nível da palavra em
TPdfView:TrackReadingWordAtmapeia o offset de carácter da palavra actual de um motor de conversão de texto em voz (comoStatus.InputWordPositiondo SAPI) para as caixas de palavras da página, realça a palavra que o contém como uma camada distinta acima do bloco de leitura, coloca-a em vista e devolve o índice da palavra, para que a palavra falada acenda à medida que a voz avança SetReadingWordeClearReadingWorddefinem ou limpam directamente a palavra realçada de umTPdfWordBox; voltar a definir a mesma palavra não produz efeito, pelo que o acompanhamento por palavra nunca faz cintilar a vistaReadingWordColoreReadingWordFollowcontrolam a cor do cursor de palavra e se a vista faz auto-deslocamento da palavra falada para a colocar em vista
Version 1.55.2
Corrigido (Corrigido)
ViewerInteractionLabdá agora mais espaço vertical às linhas da barra de ferramentas para que os controlos Open PDF, Create Sample, navegação, pesquisa e selecção já não se sobreponham com tipos de letra escalados
Version 1.55.1
Corrigido (Corrigido)
ViewerInteractionLabcoloca agora Prev, Next e Rotate na segunda linha da barra de ferramentas, evitando a sobreposição inicial com Open PDF e Create Sample
Version 1.55.0
Adicionado (Adicionado)
- Ponte palavra-para-selecção para leitura "leia-a, seleccione-a":
TPdfView.SelectWordBoxeSelectWordSpanseleccionam uma única caixa de palavra ou um intervalo de caixas de palavras na mesma página (a partir dePageWordBoxes) pelos respectivos intervalos de carácter, para que a palavra ou linha que está a ser lida também possa ser seleccionada e copiada WordBoxIndexAtCharIndexmapeia um índice de carácter de volta para a caixa de palavras que o contém, conduzindo o realce palavra a palavra à medida que o cursor de leitura TTS avança
Version 1.54.0
Adicionado (Adicionado)
- Accesores de preenchimento de formulários por voz que lêem o campo focado directamente do cursor lógico:
FocusedFormFieldValue,FocusedFormFieldNameeFocusedFormFieldDetailsemTPdfeTPdfViewreportam o valor do campo actual, o nome legível por humanos (/TUtooltip, com recurso a/Tquando necessário) e aTPdfFormFieldInfocompleta (tipo, flags, opções) — tudo o que uma interface de voz precisa de anunciar à medida que percorre um formulário
Corrigido (Corrigido)
FocusedFormFieldValuelê o campo através deFocusedFormFieldIndexem vez do foco interactivo do pdfium, pelo que um preenchedor de formulários orientado por voz obtém o valor correcto mesmo sem cursor no ecrã (oFocusedFormFieldTextexistente continua a reflectir o foco pdfium e não foi alterado)
Version 1.53.0
Adicionado (Adicionado)
- Suporte para realce ao nível da palavra:
TPdf.PageWordBoxeseTPdfView.PageWordBoxesdividem uma página em recordsTPdfWordBox, cada um com o texto da palavra, o respectivo intervalo de carácter e um rectângulo delimitador em espaço de página, para que um leitor de acessibilidade possa realçar cada palavra falada por ordem ("karaoke" reading) passando o rectângulo paraSetReadingHighlight BuildWordBoxesexpõe o passo do tokenizador por si só, convertendo texto de página em caixas de palavras com intervalos de carácter
Version 1.52.0
Adicionado (Adicionado)
- Os auxiliares de renderização para baixa visão
InvertPdfBitmap,GrayscalePdfBitmapeDuotonePdfBitmapaplicam transformações de cor in-place a um bitmap 32 bits renderizado, para que um leitor de acessibilidade possa apresentar páginas invertidas / em modo escuro, em tons de cinzento ou num esquema personalizado de duas cores (por exemplo fundo escuro com texto claro) para utilizadores com baixa visão - As transformações executam-se por pixel e comportam-se de forma idêntica em VCL e Lazarus/LCL, sem alterar as dimensões do bitmap
Version 1.51.0
Adicionado (Adicionado)
- Unidades de leitura ao nível da frase para leitura assistida:
TPdf.ReadingUnits,TPdf.DocumentReadingUnitseTPdfView.ReadingUnitslinearizam o fluxo de conteúdo legível em recordsTPdfReadingUnitordenados e com tamanho de frase — cada um transporta o texto a falar mais o respectivo tipo semântico, página, rectângulos de realce e etiqueta de idioma, para que uma aplicação de leitor de ecrã possa percorrer uma página ou o documento inteiro uma unidade falada de cada vez - Navegação semântica com
NextReadingUnitOfKind, permitindo que uma interface de voz salte para o próximo ou anterior cabeçalho, figura, item de lista ou célula de tabela sem varrer o fluxo manualmente BuildReadingUnitsconverte directamente qualquerTPdfContentFragmentsem unidades de leitura: cabeçalhos e descrições de figura/alt mantêm-se inteiros enquanto os parágrafos se dividem em limites de frase, os pontos decimais são preservados e o cursor de leitura é um índice simples pertencente ao chamador
Version 1.50.0
Adicionado (Adicionado)
ValidatePdfApode agora inspeccionar documentos PDF 1.5+ que guardam o catálogo, OutputIntent ou outros dicionários dentro de object streams comprimidos (/Type /ObjStm). Os object streams são descomprimidos e os objectos que transportam são resolvidos, pelo que tais documentos são validados pelos seus méritos em vez de serem reportados como se lhes faltassem marcadores PDF/A
Version 1.49.5
Corrigido (Corrigido)
ValidatePdfAjá não assinala a falta da descriçãopdfaExtension:schemascomo problema. O esquema de identificador PDF/A (pdfaid) é conhecido, por isso nem o veraPDF nem o PDF/A-2/-3 exigem uma descrição de esquema de extensão para ele, e assinalar a sua ausência fazia com que todos os PDF/A de terceiros conformes fossem reportados erradamente. Os documentos produzidos pela própria biblioteca continuam a incluir a descrição
Version 1.49.4
Corrigido (Corrigido)
ValidatePdfAdetecta agora o nível de conformidade quando o identificador PDF/A é escrito como atributos XML (pdfaid:part="2") em vez de elementos filhos, pelo que os documentos no formato de atributo já não são reportados com um nível desconhecido. Isto também corrige uma cascata em que um nível não detectado fazia com que as verificações específicas da parte recuassem para as regras estritas do PDF/A-1 e assinalassem erradamente ficheiros incorporados e transparência que o PDF/A-2 e o PDF/A-3 permitem
Version 1.49.3
Corrigido (Corrigido)
ValidatePdfAinspecciona agora documentos PDF 1.5+ cujos dados de cross-reference são um fluxo de cross-reference (ficheiros que não têm a palavra-chavetrailer). O nível de conformidade, o/IDdo trailer e os outros marcadores são lidos a partir do dicionário do fluxo de cross-reference, por isso tais documentos são validados pelo seu mérito em vez de serem reportados como totalmente não conformes
Version 1.49.2
Corrigido (Corrigido)
ValidatePdfAjá não assinala um problema espúrio de fonte não incorporada em documentos que incorporam todas as suas fontes. A heurística anterior comparava o número de tokens/FontDescriptorcom os programas de fonte incorporados, mas cada fonte incorporada contribui com dois tokens/FontDescriptor(a referência do dicionário da fonte mais o objecto descriptor), pelo que todos os ficheiros com fontes incorporadas eram assinalados erradamente. A verificação reporta agora apenas um documento que referencia fontes mas não incorpora qualquer programa de fonte, em linha com a correcção correspondente deValidatePdfUa
Version 1.49.1
Corrigido (Corrigido)
- A saída PDF/A valida agora como PDF/A-1b e PDF/A-1a conforme com o veraPDF: o fluxo ICC de OutputIntent sRGB incorporado (referenciado por
/DestOutputProfile) declara agora a contagem de componentes/Nexigida (3 para o perfil RGB incorporado), conforme imposto pela ISO 19005-1 6.2.3.2. Os documentos produzidos porSaveAsPdfAfalhavam anteriormente a validação estrita de PDF/A-1 porque o fluxo do perfil de destino omit ia/N; o valor é derivado do cabeçalho do perfil ICC, pelo que um perfil CMYK ou Gray fornecido pelo chamador recebe também a contagem correcta
Version 1.49.0
Corrigido (Corrigido)
ValidatePdfUajá não assinala a ausência espúria de identificação XMP em PDFs marcados conformes — o identificador PDF/UA (pdfuaid:part),dc:title, as datas XMP e o/IDdo trailer são agora lidos a partir dos bytes originais do documento em vez da cópia regravada, que omite o fluxo XMP/Metadatae, para ficheiros com fluxo de cross-reference, o/IDdo trailer- A verificação de incorporação de fontes de
ValidatePdfUafoi corrigida, de modo que um documento que incorpore todas as suas fontes já não é reportado como tendo fontes não incorporadas; agora assinala apenas um documento que referencia fontes mas não incorpora qualquer programa de fonte ValidatePdfUaaceita agora um elemento estruturalFormulacujo texto alternativo é fornecido através deActualTextem vez de uma entradaAlt(ISO 14289-1 §7.7), em consonância com a regra existente paraFigure
Version 1.48.0
Adicionado (Adicionado)
- Selecção de texto programática em
TPdfView:SelectTextRange(por página e intervalo de caracteres) eSetSelection(por intervalos explícitos por página) seleccionam texto a partir do código — por exemplo, para ler e realçar uma passagem; ambos redesenham e disparamOnSelectionChangequando a selecção muda.SelectionRangeslê a selecção actual como intervalos de caracteres por página, eSelectionRectanglesdevolve os seus rectângulos em coordenadas de página para realce personalizado ou scroll-to
Version 1.47.0
Adicionado (Adicionado)
- Navegação por campos de formulário para preenchimento por voz, tanto em
TPdfcomo emTPdfView:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocuseFocusedFormFieldText. Estes comandos movem um cursor lógico de campo pelos campos widget da página pela ordem de tabulação (com retorno ao início no fim), para que um leitor assistivo possa percorrer o formulário, anunciar cada campo através deFormFieldInfo[Index].AlternateName(o tooltip /TU) e preenchê-lo através deFormField[Index] - Evento
TPdfView.OnFormFieldFocusChange, disparado quando o cursor de campo se move (transmitindo o novo índice de campo, ou -1 quando é limpo)
Version 1.46.0
Adicionado (Adicionado)
- Leitura de conteúdo assistida por stream:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContenteTPdfView.ReadableContentdevolvem uma lista ordenada de itens semânticosTPdfContentFragment, cada um com o texto falado (glifos reais, ouActualText/Alt para figuras), um tipo de fragmento (cabeçalho com nível, parágrafo, figura, item de lista, célula de tabela, ligação, texto simples), idioma, página baseada em 1 e rectângulos de realce por bloco e por linha. Os PDFs com tags são linearizados pela ordem lógica de leitura a partir da árvore estrutural; as páginas sem tags recuam para a ordem de renderização, para que qualquer documento possa ser lido em voz alta - Realce de leitura sincronizado em
TPdfView:SetReadingHighlight,ClearReadingHighlighte a propriedade publicadaReadingHighlightColorrealçam o bloco que está a ser lido, por cima das sobreposições de pesquisa e selecção - Novos tipos públicos
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKindeTPdfReadingOrderSource, e o novo auxiliarClassifyStructType
Version 1.45.0
Adicionado (Adicionado)
ValidatePdfUapercorre agora também a árvore estrutural marcada em execução e reporta três violações de conteúdo de alta confiança que a análise ao nível de bytes não consegue detectar: um elementoFiguresem entrada Alt nem ActualText (ISO 14289-1, 7.3), um elementoFormulasem atributo Alt (7.7) e um elementoNotesem ID único (7.9). Três novos valoresTPdfUaValidationIssueexpõem estes casos:pvuaiFigureMissingAlt,pvuaiFormulaMissingAltepvuaiNoteMissingId. A travessia da árvore é omitida para documentos sem tags- O novo auxiliar público
ValidatePdfUaStructureElementsaplica essas regras da árvore estrutural a uma lista plana de elementos (tal como devolvida porTPdf.StructureElements), para que as verificações possam ser executadas ou testadas por unidade sem carregar um documento completo
Version 1.44.5
Corrigido (Corrigido)
- A verificação de incorporação de fontes de
ValidatePdfA(pvaiFontNotEmbedded, ISO 19005-1, 6.3.4) detecta agora também fontes simples não incorporadas que não têm/FontDescriptor, sobretudo as 14 fontes Type 1 standard (Helvetica, Times, Courier e outras) que o PDF/A exige que sejam incorporadas sem excepção. Anteriormente tal fonte passava despercebida; a verificação passa agora também a contar dicionários de fontes simples (/Type1,/TrueType,/MMType1) face aos programas de fonte incorporados, espelhando a correcção PDF/UA em 1.44.3
Version 1.44.4
Corrigido (Corrigido)
ValidatePdfVTrejeita agora árvores DPart ISO 16612-2 §6.5 mal formadas em que/DPartsé um array de referências plano em vez do necessário array de arrays, ou em que um DPart folha repete a sua página/Startcomo/Endapesar de o intervalo conter apenas uma páginaValidatePdfVTvalida agora os nomes de/NodeNameListcomo valores XML NMTOKEN depois da expansão das sequências de escape#xxdo nome PDF, pelo que nomes de nível de hierarquia inválidos são reportados através depvviMissingDPartRootem vez de serem aceites como estrutura DPart utilizável
Version 1.44.3
Corrigido (Corrigido)
- A verificação de incorporação de fontes de
ValidatePdfUa(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4) detecta agora também fontes simples não incorporadas que não têm/FontDescriptor, sobretudo as 14 fontes Type 1 standard (Helvetica, Times, Courier e outras) para as quais o PDF/UA não concede qualquer isenção de incorporação. Anteriormente tal fonte passava despercebida e um documento que a usasse podia ser reportado como conforme; a verificação passa agora também a contar dicionários de fontes simples (/Type1,/TrueType,/MMType1) face aos programas de fonte incorporados
Version 1.44.2
Corrigido (Corrigido)
ValidatePdfVTdeixa agora um marcadorpdfvtid:GTS_PDFVTVersionpresente mas não reconhecido comopvcUnknownem vez de o rebaixar parapvcNone. Isto mantém cadeias de nível de ficheiro inválidas comoPDF/VT-2sdistinguíveis de documentos que não transportam qualquer marcador PDF/VT; o PDF/VT-2s é identificado pelo cabeçalho de fluxo MIME na ISO 16612-2 Anexo A, não pelo marcador XMP de um ficheiro PDF- A verificação de
/DPartRootvalida agora a semântica da árvore ISO 16612-2 §6.5 de forma mais rigorosa:/DPartRootNodee/NodeNameListtêm de descrever a profundidade real do DPart, as ligações pai dos DPart têm de formar uma árvore,/Starte/DPartssão mutuamente exclusivos, e cada/DPartde página tem de apontar para o DPart folha que cobre a mesma ordem depth-first da árvore de páginas
Version 1.44.1
Corrigido (Corrigido)
SaveAsPdfVTescreve agora uma Hierarquia de Partes do Documento ISO 16612-2 §6.5 mínima quando o PDF de origem não tem um/DPartRootutilizável. A árvore gerada liga cada página através de/DPart, preserva uma hierarquia válida existente e deixa metadados de recipient/DPM mais ricos para o fluxo de trabalho que chamaValidatePdfVTvalida agora a estrutura DPart utilizável, lê valores XMP PDF/VT tanto de atributos RDF como de texto de elemento e impõe o emparelhamento exacto base PDF/VT para PDF/X: PDF/VT-1 requer PDF/X-4, enquanto PDF/VT-2 requer PDF/X-4p, PDF/X-5g ou PDF/X-5pgTPdfVTSaveOptions.Conformance = pvc2já não escreve marcadores PDF/VT-2 inválidos num só ficheiro. O escritor de ficheiro único normaliza a saída para PDF/VT-1 porque PDF/VT-2 requer semântica de conjunto de ficheiros
Version 1.44.0
Adicionado (Adicionado)
ValidatePdfUareporta agora também violações de conteúdo a nível de PDF/UA que podem ser verificadas por bytes, além dos marcadores de formato de ficheiro: um programa de fonte que não está incorporado (ISO 14289-1, 7.21.4), uma fonte que não tem um mapa/ToUnicodeCMap quando não existe uma codificação de fonte simples isenta (7.21.7), e um documento que contém anotações mas não declara qualquer ordem de tabulação de página/Tabs /S(7.18.3)- Três novos valores
TPdfUaValidationIssue—pvuaiFontNotEmbedded,pvuaiFontMissingToUnicodeepvuaiMissingTabsOrder— são expostos porValidatePdfUae no relatório de preflight. São heurísticas grosseiras destinadas a pistas de preflight e não a uma verificação completa da ISO 14289-1
Version 1.43.1
Corrigido (Corrigido)
SaveAsPdfUaimpõe agora as entradas de catálogo obrigatórias ISO 14289-1, 7.1/ViewerPreferences/DisplayDocTitle truee/MarkInfo/Marked true/Suspects falsemesmo quando o documento de origem já fornece esses dicionários com valores em falta ou contraditórios. Anteriormente os marcadores só eram injectados quando os dicionários estavam completamente ausentes, pelo que uma origem que contivesse, por exemplo, um/ViewerPreferencessemDisplayDocTitleou um/MarkInfocom/Marked falsevoltava a gerar um ficheiro não conforme- As chaves existentes num dicionário
/ViewerPreferencesou/MarkInfopré-existente são preservadas, e um dicionário fornecido como referência indirecta é resolvido antes de aplicar as chaves obrigatórias
Version 1.43.0
Adicionado (Adicionado)
ValidatePdfAaplica agora as regras PDF/A-2 / PDF/A-3 para ficheiros embutidos e associados e para texto de Nível U. Os ficheiros embutidos continuam a ser rejeitados para PDF/A-1; para PDF/A-3, um ficheiro embutido que não tenha a chave obrigatória/AFRelationship(ISO 19005-3 Anexo E) é assinalado, enquanto anexos PDF/A-2 são permitidos (a sua própria conformidade não é verificada recursivamente). Um novo problemapvaiUnicodeMappingMissingreporta um documento PDF/A-2u ou PDF/A-3u cujas fontes não têm qualquer mapeamento/ToUnicode(ISO 19005-2 6.2.11.7). Transparência e conteúdo opcional continuam a ser assinalados apenas para PDF/A-1
Version 1.42.0
Adicionado (Adicionado)
- PDF/A-2 (ISO 19005-2) e PDF/A-3 (ISO 19005-3) são agora suportados em todos os três níveis de conformidade — a, b e u — por
SaveAsPdfA,ValidatePdfAe pela propriedadePdfAConformance. A enumeraçãoTPdfAConformanceganhapac2a,pac2u,pac3aepac3u(o PDF/A-1 não tem Nível u). A gravação escreve opdfaid:partcorrespondente (2 ou 3) epdfaid:conformance(A, B ou U), mantendo o subtipo de OutputIntentGTS_PDFA1que a ISO 19005-2 conserva por compatibilidade. Um pedido de Nível A continua a descer para o Nível B correspondente (para qualquer parte) quando o documento não tem a estrutura marcada exigida por esse nível
Version 1.41.0
Adicionado (Adicionado)
ValidatePdfAdetecta agora violações de PDF/A ao nível de conteúdo que a injecção de marcadores não consegue corrigir, além dos marcadores estruturais que já reportava: JavaScript e outras acções proibidas, acções adicionais (/AA), ficheiros embutidos,LZWDecode, transparência (máscaras de suavização e grupos de transparência), conteúdo opcional (/OCProperties), subtipos de anotação proibidos (FileAttachment, Sound, Movie, 3D, Screen),/NeedAppearances truee/XFAem AcroForm, fontes cujos descritores não têm um programa de fonte incorporado, e uma alegação de Nível A feita sem a estrutura marcada exigida pela ISO 19005-1 6.8. As verificações de transparência, conteúdo opcional e ficheiros embutidos aplicam-se apenas a PDF/A-1 (estas funcionalidades são permitidas em PDF/A-2 e PDF/A-3). Novos valoresTPdfAValidationIssueexpõem cada caso; os valores existentes não foram alterados
Version 1.40.3
Corrigido (Corrigido)
SaveAsPdfAremove agora qualquer encriptação do documento de origem antes de produzir a saída PDF/A. A ISO 19005-1 6.1.3 proíbe a chave/Encryptdo trailer, mas o caminho de gravação preservava anteriormente o security handler da origem, pelo que guardar um documento encriptado como PDF/A produzia um ficheiro encriptado e não conforme. A gravação PDF/A desencripta agora o documento primeiro. Os documentos não encriptados não são afectados
Version 1.40.2
Corrigido (Corrigido)
- Impedido que
SaveAsPdfAemitisse uma falsa alegação de conformidade PDF/A Nível A. Quando o Nível A (pac1a) é pedido mas o documento de origem não tem os marcadores de estrutura marcada exigidos pela ISO 19005-1 6.8 — um/StructTreeRootno catálogo e um dicionário/MarkInfocom/Marked true— o ficheiro guardado é agora identificado como o Nível B correspondente (pdfaid:conformance=B) em vez de afirmar Nível A. A saída PDF/A-1b puramente visual não é afectada
Version 1.40.1
Corrigido (Corrigido)
- A validação da conformidade de versão PDF foi apertada para que a acção
SetOCGState(set-optional-content-group-state) seja reconhecida como uma funcionalidade PDF 1.5. Guardar num destino PDF 1.2, 1.3 ou 1.4 que contenha uma acçãoSetOCGStateé agora rejeitado para corresponder à ISO 32000-1 (Table 198); anteriormente tal acção podia passar para uma saída de versão inferior. A distinta e obsoleta acção PDF 1.2SetStatecontinua a ser aceite desde PDF 1.2
Version 1.40.0
Adicionado (Adicionado)
- Ligada a API ascendente
FPDFPageObj_AddExistingMark(), que associa uma marca de conteúdo existente a um objecto de página. Quando objectos de página consecutivos partilham a mesma marca, o PDF guardado colapsa-os numa única marca que os abrange a todos; os objectos não consecutivos recebem cópias separadas - Ligada a API ascendente
FPDFTextObj_SetFontSize()para alterar o tamanho em pontos de um objecto de texto existente, complementando a ligação existenteFPDFTextObj_GetFontSize()
Alterado (Alterado)
- Actualizados os DLLs de runtime PDFium incluídos (Win32 e Win64, builds standard e V8) para a snapshot ascendente de 2026-06-02
Version 1.39.53
Alterado (Alterado)
- As demos Delphi
PDFViewer,SplitVieweMultiPageViewerpassam agora a abrir documentos no modoZoom to Pagepor predefinição - A renderização inicial ajusta agora a página inteira à superfície do visualizador antes de o utilizador escolher um nível de zoom manual
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.53
Version 1.39.52
Alterado (Alterado)
- Melhorado
Demo\Lazarus\CreatePDFpara que a amostra introdutória gere agora um PDF de duas páginas com caminhos vectoriais, conteúdo em tabela, uma imagem incorporada, uma anotação de texto, texto rodado e um percurso de construção do documento mais claro - Adicionadas páginas
README.htmlpolidas para todas as pastas de demonstrações Delphi, C++Builder e Lazarus, substituindo o restante README textual por um guia legível no browser - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.52
Version 1.39.51
- Melhorados os resumos em lote de
Demo\Delphi\PreflightReportClicom totais de estado dos standards para resultados Pass, Action required e Review nos standards seleccionados - As linhas por ficheiro incluem agora contagens de action-required e review nos resumos TXT / HTML / JSON / CSV, tornando os artefactos de CI mais fáceis de inspeccionar sem abrir cada relatório gerado
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.51
Version 1.39.50
- Melhorado o modo em lote por directório de
Demo\Delphi\PreflightReportClipara quebatchdir=folderrecolha os caminhos PDF descobertos, os ordene e depois gere os relatórios numa ordem estável - As análises recursivas de directório produzem agora uma ordem de relatório e linhas de resumo reproduzíveis, enquanto o processamento explícito de
batch=list.txtcontinua a preservar a ordem do ficheiro de lista - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.50
Version 1.39.49
- Melhorados os resumos em lote de
Demo\Delphi\PreflightReportClipara registar as definições da execução: tipo de origem, caminho da origem, estado recursivo, directório de saída, formato do relatório, standards seleccionados e modofailon= - Os resumos JSON incluem agora um objecto
run, os resumos TXT e HTML mostram uma secção de definições da execução, e as linhas CSV repetem as mesmas colunas de auditoria para folhas de cálculo e pipelines de CI - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.49
Version 1.39.48
- Melhorada a nomeação da saída em lote de
Demo\Delphi\PreflightReportClipara que nomes de ficheiro de entrada duplicados que partilhem um únicooutdir=já não sobrescrevam os relatórios gerados uns dos outros - As execuções em lote passam agora a acrescentar sufixos
-2,-3e seguintes quando um caminho de relatório gerado já foi atribuído na mesma execução, e os resumos registam o caminho final do relatório seguro contra colisões - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.48
Version 1.39.47
- Melhorados os resumos em lote de
Demo\Delphi\PreflightReportClipara que as saídas TXT e JSON incluam agora totais agregados de ficheiros totais, ficheiros processados, ficheiros com falha, problemas e correspondências defailon= - Os resumos CSV continuam a ser uma tabela pura de linhas para os consumidores existentes, enquanto os resumos HTML continuam a mostrar as mesmas métricas agregadas no cabeçalho do painel
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.47
Version 1.39.46
- Melhorado
Demo\Delphi\PreflightReportClicomsummary=batch.html/.htmpara que as execuções em lote possam emitir um painel legível no browser ao lado dos manifestos TXT / CSV / JSON - Os resumos HTML mostram métricas totais, processadas, falhadas, de problemas e de correspondências
failon=, e depois listam cada entrada com ligações para o relatório, estado, contagens e texto do erro - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.46
Version 1.39.45
- Melhorado
Demo\Delphi\PreflightReportClicombatchdir=foldererecursivepara que os scripts possam analisar directamente pastas PDF sem antes escrever um ficheiro de lista - O modo em lote por directório reutiliza o comportamento de
outdir=,summary=,standards=efailon=do modo em lote baseado em lista, enquanto as análises não recursivas abrangem apenas a pasta seleccionada erecursiveinclui subpastas - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.45
Version 1.39.44
- Melhorado
Demo\Delphi\PreflightReportClicomsummary=batch.csv|json|txtpara que as execuções em lote possam emitir um manifesto legível por máquina ao lado dos relatórios por ficheiro - Os resumos em lote incluem cada caminho de entrada, caminho do relatório, estado, contagem de standards, contagem de aprovados, contagem de problemas, estado de correspondência
failon=e texto do erro para jobs de CI e scripts externos - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.44
Version 1.39.43
- Melhorado
Demo\Delphi\PreflightReportClicombatch=list.txteoutdir=reportspara que os scripts possam gerar relatórios de preflight para uma lista de ficheiros PDF numa única execução - O modo em lote ignora linhas vazias e linhas de comentário
#, deriva cada nome de relatório.preflight.<ext>a partir do PDF de entrada, continua após erros por ficheiro e resume os ficheiros processados e falhados antes de terminar - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.43
Version 1.39.42
- Melhorado
Demo\Delphi\PreflightReportClicomfailon=none|issues|action|reviewpara que os jobs de CI possam converter resultados de preflight gerados em códigos de saída determinísticos - A CLI devolve agora o código de saída 2 quando uma regra seleccionada de
failon=corresponde depois de o ficheiro de relatório e o eventual PDF de relatório anexado terem sido gerados, enquanto os erros em tempo de execução continuam a devolver o código de saída 1 - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.42
Version 1.39.41
- Melhorado
Demo\Delphi\PreflightReportClicomattach=output.pdfpara que um relatório de preflight gerado possa ser embebido como um anexo ao nível do documento numa nova cópia PDF - A CLI mantém o ficheiro de relatório TXT / HTML / Markdown / JSON / CSV gerado em disco e recusa anexá-lo de volta ao caminho PDF original de entrada, reduzindo o risco de sobrescrita acidental
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.41
Version 1.39.40
- Adicionado
Demo\Delphi\PreflightReportCli, um companheiro de consola Delphi para geração scriptável deFPdfPreflightReportsem abrir um visualizador - A CLI suporta criação de amostras sem argumentos, além de argumentos de entrada / saída, palavra-passe opcional, formatos de saída
text/html/md/json/csve filtragemstandards=para PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.40
Version 1.39.39
- Melhorado
FPdfPreflightReportcomTPdfPreflightReport.ToMarkdowneSaveMarkdownToFilepara que os relatórios de preflight possam ser exportados como Markdown adequado a issue trackers - Actualizadas as amostras
PreflightReportde Delphi, C++Builder e Lazarus com mudança de pré-visualização Markdown e acções Save MD ao lado do fluxo existente TXT / HTML / JSON / CSV - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.39
Version 1.39.38
- Melhoradas as amostras
SecurityAuditde Delphi, C++Builder e Lazarus com exportação de relatório de auditoria JSON ao lado do fluxo existente de guardar / copiar TXT - O relatório JSON contém
format,generatedAt,summary,findingCounte linhas estruturadasfindingscom campos de severidade, área e detalhe - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.38
Version 1.39.37
- Melhorado
FPdfPreflightReportcomTPdfPreflightReport.ToCsveSaveCsvToFilepara que os relatórios de preflight possam ser exportados como CSV adequado a folhas de cálculo - Actualizadas as amostras
PreflightReportde Delphi, C++Builder e Lazarus com mudança de pré-visualização CSV e acções Save CSV ao lado do fluxo existente TXT / HTML / JSON - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.37
Version 1.39.36
- Melhorado
FPdfPreflightReportcomTPdfPreflightReport.IssueCategoryCountsmais os tipos reutilizáveisTPdfPreflightIssueCategoryCounteTPdfPreflightIssueCategoryCountspara agregar problemas ao nível de marcador por categoria - Actualizados
TPdfPreflightReport.ToText,ToHtmleToJsonpara que a saída gerada de PreflightReport inclua resumos de contagem por categoria de problema ao lado das linhas por standard e das recomendações detalhadas de problemas - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.36
Version 1.39.35
- A amostra expandida
PrintDialogfoi renomeada paraPrintPreferencesem Delphi, C++Builder e Lazarus para que o nome da demo passe agora a corresponder ao seu fluxo de trabalho de preferências de impressão do autor PDF, impressão N-up, filtragem ímpar / par, escala de cinzentos, margem de célula e mapeamento duplex - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.35
Version 1.39.34
- Melhorado
Demo\Delphi\PrintPDFcom carregamento de PDF por arrastar e largar e documentado o fluxo de trabalho existenteDemo\CBuilder\PrintPDFao lado das amostras PrintPDF de Delphi e Lazarus - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.34
Version 1.39.33
- Adicionado
Demo\CBuilder\SplitView, completando a matriz de amostras SplitView em Delphi, C++Builder e Lazarus - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.33
Version 1.39.32
- Adicionado
Demo\Lazarus\SplitView, trazendo a comparação lado a lado de PDF para Lazarus com esquemas de duas ou três áreas, navegação pela vista activa, comandos sincronizados, predefinições de zoom e rotação - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.32
Version 1.39.31
- Adicionado
Demo\Lazarus\PrintPDF, trazendo para Lazarus o fluxo de trabalho standard de impressão PDF com navegação de pré-visualização, intervalos de páginas, cópias, modo de colagem, progresso e cancelamento - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.31
Version 1.39.30
- Adicionado
Demo\Lazarus\FontProperties, completando a matriz de amostras FontProperties em Delphi, C++Builder e Lazarus - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.30
Version 1.39.29
- Adicionado
Demo\CBuilder\FontProperties, trazendo para C++Builder a inspecção indexada de caracteres e metadados de fontes ao lado da amostra Delphi - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.29
Version 1.39.28
- Adicionado
Demo\Delphi\ExtractTextPages, completando a matriz de amostras de extracção de texto por página em Delphi, C++Builder e Lazarus - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.28
Version 1.39.27
- Adicionado
Demo\Lazarus\PrintDialog, completando a matriz de amostras PrintDialog em Delphi, C++Builder e Lazarus - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.27
Version 1.39.26
- Adicionado
Demo\CBuilder\PrintDialog, trazendo para C++Builder o fluxo de trabalho de impressão N-up e preferências de impressão do autor PDF ao lado da amostra Delphi - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.26
Version 1.39.25
- Adicionado
Demo\CBuilder\ViewerInteractionLab, completando a matriz de amostras ViewerInteractionLab em Delphi, C++Builder e Lazarus - Actualizado o fluxo de compilação da biblioteca e as saídas dos pacotes Win64 C++Builder para que os métodos de interacção do visualizador de
TPdfViewliguem correctamente nas demos Win64 - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.25
Version 1.39.24
- Adicionado
Demo\Lazarus\ViewerInteractionLab, trazendo para Lazarus o fluxo de trabalho de interacção focada com o visualizador ao lado da amostra Delphi - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.24
Version 1.39.23
- Adicionado
Demo\Lazarus\SearchAndSelect, completando a matriz de amostras SearchAndSelect em Delphi, C++Builder e Lazarus - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.23
Version 1.39.22
- Adicionado
Demo\CBuilder\ContentExtractionLabeDemo\Lazarus\ContentExtractionLab, trazendo o fluxo de trabalho de extracção de conteúdo multi-categoria para todos os IDE de demonstração suportados - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.22
Version 1.39.21
- Melhoradas
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportcom um selector de formato de pré-visualização para que os utilizadores possam inspeccionar a saída de texto ou JSON antes de guardar os relatórios - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.21
Version 1.39.20
- Adicionada exportação JSON a
FPdfPreflightReportatravés deTPdfPreflightReport.ToJsoneSaveJsonToFile, produzindo resumos legíveis por máquina, estado / prioridade por standard, próximas acções e detalhes dos problemas - Actualizadas
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportcom acções Save JSON ao lado da exportação TXT / HTML - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.20
Version 1.39.19
- Melhorado
FPdfPreflightReportcomTPdfPreflightStatus, categorias de problemas, prioridade por standard e orientação para a próxima acção nos relatórios TXT / HTML - Actualizadas
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReporteDemo\CBuilder\PreflightReportpara mostrarem estado, prioridade, contagem de problemas e próxima acção na grelha de resumo - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.19
Version 1.39.18
- Adicionado
Demo\Lazarus\SecurityAudit, completando a matriz de demonstrações de Delphi, C++Builder e Lazarus para o fluxo de auditoria de superfície de risco PDF só de leitura - A amostra Lazarus enumera permissões, anexos, acções JavaScript, anotações de ligação URI / Launch, hiperligações Web, assinaturas, estado XFA, disponibilidade dos auxiliares V8 / XFA e callbacks de funcionalidades não suportadas, e depois guarda ou copia a lista de resultados como relatório TXT
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.18
Version 1.39.17
- Adicionado
Demo\CBuilder\SecurityAudit, trazendo para C++Builder o fluxo de auditoria de superfície de risco PDF só de leitura ao lado da amostra Delphi existente - A amostra C++Builder enumera permissões, anexos, acções JavaScript, anotações de ligação URI / Launch, hiperligações Web, assinaturas, estado XFA, disponibilidade dos auxiliares V8 / XFA e callbacks de funcionalidades não suportadas, e depois guarda ou copia a lista de resultados como relatório TXT
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.17
Version 1.39.16
- Adicionado
Demo\CBuilder\SearchAndSelect, trazendo para C++Builder o fluxo de trabalho autónomo do visualizador SearchAndSelect ao lado da amostra Delphi existente - A amostra C++Builder cria ou abre PDFs, lista correspondências em todas as páginas com pré-visualizações por página / índice de carácter, suporta navegação Previous / Next e por duplo clique, e realça as correspondências da página actual com
HighlightSearchText - Expõe também as opções
AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChangeeDisplayModeem espalhamento; os metadados da versão reportam agora 1.39.16
Version 1.39.15
- Adicionado
Demo\CBuilder\WatermarkStamp, completando a matriz de demonstrações de Delphi, Lazarus e C++Builder para fluxos de trabalho reutilizáveis de marcas de água e carimbos Form XObject - A amostra C++Builder cria PDFs de destino e de carimbo, reutiliza a página de carimbo através de
CreateXObjectFromPage, aplica transformaçõesTPdfMatrixe guarda marcas de água centradas, carimbos de canto e etiquetas de número de página - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.15
Version 1.39.14
- Adicionado
Demo\Lazarus\WatermarkStamp, trazendo para Lazarus o fluxo de trabalho reutilizável de marcas de água e carimbos Form XObject - A amostra Lazarus cria PDFs de destino e de carimbo, reutiliza a página de carimbo através de
CreateXObjectFromPage, aplica transformaçõesTPdfMatrixe guarda marcas de água centradas, carimbos de canto e etiquetas de número de página - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.14
Version 1.39.13
- Adicionado
Demo\CBuilder\PreflightReport, completando a matriz de demonstrações de Delphi, Lazarus e C++Builder para o fluxo de trabalho reutilizávelFPdfPreflightReport - A amostra C++Builder usa
FPdfPreflightReport.hpppara gerar resumos de standards, pré-visualizações de relatórios TXT, ficheiros de relatório TXT / HTML e comportamento Open Last Report - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.13
Version 1.39.12
- Adicionado
Demo\Lazarus\PreflightReport, trazendo para Lazarus o fluxo de trabalho de relatórios de preflight PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - A amostra Lazarus pode abrir ou criar um PDF, seleccionar standards de destino, pré-visualizar linhas de resumo e saída de relatório TXT, guardar relatórios TXT / HTML e abrir o relatório mais recentemente guardado
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.12
Version 1.39.11
- Melhorado
Demo\Delphi\SearchAndSelectcom uma lista de resultados de pesquisa em todas as páginas que regista o número da página, o índice do carácter e o texto de pré-visualização - Adicionada navegação Previous / Next entre correspondências e salto para resultado por duplo clique, preservando o comportamento
HighlightSearchTextna página actual - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.11
Version 1.39.10
- Melhorado
Demo\Delphi\SecurityAuditcom acções Save Report e Copy Report que exportam o resumo actual e as linhas de resultados como um relatório de auditoria TXT - A demo limpa agora o estado de exportação do relatório quando o painel de auditoria é reposto, mantendo os relatórios copiados ou guardados alinhados com os resultados visíveis
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.10
Version 1.39.9
- Melhorado
Demo\Delphi\ContentExtractionLabcom gravação do PDF de origem, cópia do relatório para a área de transferência e acções de selecção de categoria all / none - A demo invalida agora o relatório actual quando as selecções de categoria mudam, para que as exportações TXT / JSON reflictam o âmbito de extracção visível
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.9
Version 1.39.8
- Adicionado
Demo\Delphi\ContentExtractionLab, uma amostra unificada de fluxo de trabalho de extracção de conteúdo para metadados do documento, texto da página, objectos da página, imagens, anexos, ligações, anotações, marcadores e métricas de fonte / carácter - A amostra pode abrir um PDF existente ou criar um PDF sintético com conteúdo de texto, imagem, anexo e anotação, e depois gerar linhas de resumo e relatórios detalhados TXT / JSON
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.8
Version 1.39.7
- Adicionado
Lib\FPdfPreflightReport.pas, um auxiliar de relatórios reutilizável que encapsulaValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfReValidatePdfVTnum único objectoTPdfPreflightReport - Adicionado
Demo\Delphi\PreflightReport, uma amostra de fluxo de trabalho que abre ou cria um PDF, selecciona standards de destino, pré-visualiza linhas de resumo e recomendações de problemas e guarda relatórios TXT ou HTML - Os relatórios gerados descrevem explicitamente o limite de validação integrado ao nível de marcador para que as aplicações os possam combinar com ferramentas dedicadas de preflight ao nível de conteúdo quando necessário
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus, as listas de projectos de pacote e os metadados da versão do instalador para reportar 1.39.7
Version 1.39.6
- Adicionado
Demo\Delphi\SearchAndSelect, uma amostra de fluxo de trabalho focada do visualizador para realce de pesquisa, selecção de texto, pré-visualização do texto seleccionado, copiar, limpar e modos de visualização em espalhamento - A amostra demonstra
HighlightSearchText, opções de pesquisa match-case / whole-word,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboardeClearSelectionsem adicionar nova API à biblioteca - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.6
Version 1.39.5
- Expandido
Demo\Delphi\ViewerInteractionLabpara uma amostra de UX do visualizador ao estilo SearchAndSelect comHighlightSearchText, opções match-case / whole-word, pré-visualização do texto seleccionado e controlos de selecção / área de transferência já existentes - Estendido
Demo\Delphi\PrintDialogpara inspeccionar preferências de impressão do autor PDF:PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandlinge o mapeamento duplex visível deSetPdfPrintPaperHandlingDevMode - Adicionado
Demo\Delphi\SecurityAudit, uma amostra de superfície de risco só de leitura que lista permissões, anexos, JavaScript do documento, ligações URI / Launch, hiperligações Web, assinaturas, estado XFA e disponibilidade dos auxiliares V8 / XFA - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.5
Version 1.39.4
- Adicionado
Demo\CBuilder\ImageToPDFeDemo\Lazarus\ImageToPDF, completando a matriz de amostras ImageToPDF em Delphi, C++Builder e Lazarus - As novas amostras demonstram selecção de várias imagens, pré-visualização da imagem seleccionada, uma página PDF por imagem, tamanho de página A4 em retrato / paisagem, escala de imagem centrada, progresso por imagem e abertura do PDF gerado após guardar
- Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.4
Version 1.39.3
- Adicionado
Demo\CBuilder\BatchExport, trazendo para C++Builder o fluxo de trabalho de exportação de vários PDFs para JPG ao lado das amostras Delphi e Lazarus existentes - A amostra demonstra
LoadCustomDocument,IPdfCancellationTokenSource, entrada em streaming porTFileStream, progresso por ficheiro e por página, tratamento de cancelamento, entradas de DPI / qualidade / palavra-passe e abertura da pasta de saída após a conclusão - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.3
Version 1.39.2
- Adicionado
Demo\Delphi\WatermarkStamp, uma amostra executável de fluxo de trabalho Form XObject que cria um PDF de destino e um PDF de carimbo reutilizável e depois aplica marcas de água centradas, carimbos no canto superior direito e etiquetas de número de página em todas as páginas - A amostra demonstra
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrixeFPDFPageObj_SetMatrixsem adicionar nova API à biblioteca - Actualizado
Docs\en-us\Examples.htmlpara usar o padrão actualTPdfMatrix.Handleao passar matrizes paraFPDFPageObj_SetMatrix - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.2
Version 1.39.1
- Adicionado
Demo\Delphi\ViewerInteractionLab, uma amostra focada deTPdfViewpara modos de visualização, modos de ajuste, cores da página, rotação, selecção de texto pelo utilizador, acções da área de transferência e feedback de coordenadasDeviceToPage - Adicionados
Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLabpara que os utilizadores de Lazarus possam executar o fluxo de trabalho de validação e saída de marcadores PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R e PDF/VT - Listadas as unidades de standards em
Lib\37.0\PDFiumPas.dprojeLib\FPC\PDFiumLaz.lpke corrigida a compilação da demo DelphiSplitViewremovendo uma importação duplicada deWinapi.ShellAPI - Corrigidos bloqueadores de compilação em lote das demos Delphi em
BatchExport,PDFViewer,MultiPageViewereSplitViewsem alterar o seu comportamento em tempo de execução - Corrigida a compatibilidade de compilação em lote da demo C++Builder em
PDFViewereMultiPageViewersubstituindonullptrporNULLpara o modo actual do projecto - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.1
Version 1.39.0
- Adicionado
Demo\Delphi\StandardsLab, uma amostra executável de fluxo de trabalho de standards que carrega ou cria um PDF, executaValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfReValidatePdfVTe mostra a conformidade detectada, o estado de aprovação / reprovação e as contagens de problemas numa única grelha - Os botões de guardar do StandardsLab chamam
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfReSaveAsPdfVT, tornando visível a saída de marcadores dos standards PDF sem escrever um harness personalizado - Actualizados
TPdf.AboutInfo, os metadados do pacote Lazarus e os metadados da versão do instalador para reportar 1.39.0
Version 1.38.0
- As sobreposições de pesquisa e de selecção de texto em
TPdfViewusam agora mistura alfa real em vez de pintura de máscara lógica, preservando o conteúdo da página por baixo dos realces - Adicionado
SetPdfPrintPaperHandlingDevModepara mapearTPrintPaperHandlingpara valores WindowsDEVMODE.dmDuplex:DMDUP_SIMPLEX,DMDUP_HORIZONTALeDMDUP_VERTICAL TPdfView.SmoothScrollanima agora comandos de barra de scroll de linha / página em segmentos dirigidos por temporizador; o arrastamento do polegar continua imediato- Actualizados
TPdf.AboutInfoe os metadados da versão do instalador para reportar 1.38.0
Version 1.37.0
TPdfpassa agora a ter um bloqueio de renderização por instância que serializa os caminhosRenderPage,RenderTile,RenderPageProgressive, recarga de página e descarregamento de documento. A renderização conduzida por worker através de um componente partilhado é agora prática, enquanto as aplicações continuam a coordenar a mutação e o ciclo de vida do documento- Corrigido o invólucro de bitmap zero-copy para rejeitar layouts DIB de
TBitmapde baixo para cima e recuar para um buffer propriedade do PDFium antes de copiar para fora, eliminando falhas de corrompimento de stride / violação de acesso nos testes de renderização VCL - Comportamento de selecção em
TPdfViewfoi apertado:AllowUserTextSelectiongateia apenas a entrada do utilizador, as APIs de selecção ao nível do código continuam a desenhar eSelectAllsegue o espalhamento visível real para que a página de capa já não seleccione a página 2. Os testes Delphi, Lazarus e C++Builder foram expandidos em conformidade - Actualizados
TPdf.AboutInfoe os metadados da versão do instalador para reportar 1.37.0
Version 1.36.0
- Activada a selecção de texto pelo utilizador final em
TPdfView— a propriedadeAllowUserTextSelectionreservada na v1.17.0 conduz agora um pipeline completo de arrastar para seleccionar. Um clique esquerdo num carácter de texto entra em modo de selecção (hit-test automático); um clique esquerdo numa área vazia continua a fazer pan como antes. O widget de preenchimento de formulários mantém prioridade, pelo que clicar num campo de formulário continua a focar o campo em vez de iniciar uma selecção - Duplo clique selecciona a palavra, triplo clique selecciona a linha,
Ctrl+Aselecciona a página actual (ambas as páginas nos modos de visualização em espalhamento) eCtrl+Ccopia a selecção para a área de transferência do Windows comoCF_UNICODETEXT Shift+Left/Shift+Rightestende a selecção um carácter de cada vez (transbordando para a página adjacente em modo em espalhamento);Shift+Início/Shift+Endestende até à margem visual da linha usando a altura da caixa do carácter semente como tolerância do cluster de linha, para que linhas com tamanhos de fonte mistos continuem agrupadas correctamente- Passar o cursor sobre texto muda o cursor para
crIBeam; sair do texto restaura o cursor predefinido. Enquanto um arrasto de selecção de texto está em curso, arrastar para uma zona morta de 20 pixels em qualquer margem do visualizador faz auto-scroll da página (tick de 50 ms, 16 px / tick, limitado aos mesmos limites usados pelo caminho de pan) para que a selecção possa estender-se para lá da viewport actual sem primeiro largar o rato - A selecção entre páginas funciona nos modos de visualização em espalhamento (
dmTwoPageContinuous,dmTwoPageContinuousWithCover): um arrasto iniciado na página esquerda e terminado na página direita selecciona o intervalo contínuo que abrange ambas.SelectedTextjunta as fatias por página com CR/LF para que o texto round-tripped se leia como conteúdo normal de várias linhas - Nova propriedade publicada
SelectionColor(predefiniçãoclHighlight, a cor de selecção do sistema Windows) — independente deHighlightColor, que colore os resultados de pesquisa a amarelo. Os realces de pesquisa e uma selecção por arrasto em tempo real podem ser mostrados no ecrã simultaneamente sem conflito de cores - Novo evento publicado
OnSelectionChangedispara sempre que os intervalos materializados da selecção mudam de facto — nunca numa re-aplicação idêntica, para que as aplicações anfitriãs o possam ligar directamente a texto da barra de estado ou ao estado de activação de botões sem debouncing - Nova API pública em
TPdfView:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. Estes são pontos de entrada ao nível do código e funcionam sempre independentemente deAllowUserTextSelection— a flag apenas gateia a entrada do utilizador (rato, Ctrl+C, Ctrl+A, Shift+setas), para que hosts de kiosk possam desactivar a selecção conduzida pelo utilizador e ainda assim construir botões de barra de ferramentas "Select All / Copy" que accionem a mesma API - Um menu popup predefinido
Copy/复制de clique direito é ligado automaticamente quando o host não atribuiu o seu próprioPopupMenu— o padrão "select text, right-click, copy" funciona de imediato. A legenda é escolhida entre inglês e chinês porSysLocale.PriLangID; hosts que precisem de localização completa (ou de um menu mais rico) apenas atribuem o seu próprioPopupMenue a predefinição é suprimida - A selecção é automaticamente limpa em transições
SetPdf,SetPageNumber,SetActive(False)eDisplayMode, comOnSelectionChangea disparar exactamente uma vez quando a selecção anterior não estava vazia. O subsistema de preenchimento de formulários mantém prioridade — enquanto um campo de formulário está a ser editado, todos os atalhos de teclado de selecção aguardam para que o campo recebaCtrl+C/Ctrl+A/Shift+arrowspara a sua própria selecção - Expandidas as suites de regressão de Delphi e Lazarus para 202 casos cada, e a suite C++Builder para 159 casos, cobrindo valores predefinidos, round-trip, comportamento da API pública, limpezas por mudança de estado, arrasto do rato (hit-text / hit-blank), click vs drag, mudança de cursor IBeam, palavra por duplo clique, linha por triplo clique, atalhos de teclado, anexo / defer / legenda do popup predefinido e selecção entre páginas em espalhamento — incluindo uma verificação de round-trip CR/LF na área de transferência
Version 1.35.0
- Adicionada injecção de marcadores PDF/VT (ISO 16612-2:2010):
TPdf.SaveAsPdfVTpromove o documento actual para um ficheiro conforme PDF/VT-1 ou PDF/VT-2 (o subconjunto PDF de impressão variável e transaccional). O PDF/VT é construído sobre PDF/X-4 — a ISO 16612-2 §6.2.1 exige que cada ficheiro PDF/VT-1 também seja conforme PDF/X-4 — pelo que o injector escreve o conjunto completo de marcadores PDF/X-4 (pdfxid:GTS_PDFXVersion = "PDF/X-4"em XMP,/GTS_PDFXVersion (PDF/X-4)e/Trappedem Info,/OutputIntentsno catálogo a referenciar um dicionário OutputIntent com perfil ICC incorporado) ao lado das propriedades específicas de PDF/VT - A injecção específica de PDF/VT cobre
pdfvtid:GTS_PDFVTVersionem XMP (= "PDF/VT-1" ou "PDF/VT-2" segundo §6.3 Table 2) epdfvtid:GTS_PDFVTModDate(mantido sincronizado comxmp:ModifyDatesegundo §6.3 NOTE 1), mais uma descriçãopdfaExtension:schemasque declara os namespaces pdfxid e pdfvtid (URIs NPEShttp://www.npes.org/pdfx/ns/id/ehttp://www.npes.org/pdfvt/ns/id/). O trailer transporta um array/ID - Adicionado
TPdf.SaveAsPdfVTToStreampara saída PDF/VT em memória, e um atalho de opções predefinidasTPdf.SaveAsPdfVT(FileName)que produz PDF/VT-1 com o OutputIntent sRGB IEC61966-2.1 incluído (3144 bytes, o mesmo perfil de SaveAsPdfA / SaveAsPdfX) e/Trapped /False - Adicionado
TPdf.ValidatePdfVT: verifica um PDF aberto quanto a marcadores de conformidade PDF/VT (presença de XMPpdfvtid:GTS_PDFVTVersioneGTS_PDFVTModDate, igualdade entrepdfvtid:GTS_PDFVTModDateexmp:ModifyDate, presença do identificador subjacentepdfxid:GTS_PDFXVersion, presença de/DPartRootno catálogo segundo §6.5,/OutputIntentscom/DestOutputProfile,/IDdo trailer, estado de encriptação, presença dexmp:CreateDate/ModifyDate) e devolveTPdfVTValidationResultcom o nível de conformidade detectado e o conjunto de problemas encontrados - Adicionada propriedade
TPdf.PdfVTConformance: devolve o nível de conformidade do documento actualmente aberto (pvc1, pvc2, pvcNone ou pvcUnknown) sem necessidade de chamarValidatePdfVTexplicitamente - Novos tipos exportados na nova unidade
FPdfPdfvt:TPdfVTConformance(pvcUnknown/None/1/2),TPdfVTTrappedState(ptvUnspecified/True/False/Unknown),TPdfVTValidationResult,TPdfVTValidationIssue,TPdfVTSaveOptions - A Hierarquia de Partes do Documento (
DPartRoot/ árvoreDPartsegundo §6.5) é uma estrutura ao nível da aplicação que depende do mapeamento de recipient / page-range do fluxo de trabalho de impressão de dados variáveis.SaveAsPdfVTNÃO sintetiza uma árvore DPart —ValidatePdfVTexpõe um/DPartRootem falta comopvviMissingDPartRootpara que os chamadores possam encaminhar ficheiros PDF/VT através de uma etapa separada de construção de DPart. Os requisitos de PDF/X-4 ao nível de conteúdo (incorporação de fontes, transparência, cor gerida por ICC, proibições de OPI / JavaScript / Reference XObject, etc.) continuam a ser responsabilidade do autor do documento e do pipeline de renderização do PDFium - Actualizada a string
TPdf.AboutInfopara reportar a versão actual do produto
Version 1.34.0
- Adicionada injecção de marcadores PDF/R-1 (ISO 23504-1:2020):
TPdf.SaveAsPdfRpromove o documento actual para um ficheiro conforme PDF/R-1 (o subconjunto de transporte de imagem raster de PDF usado para documentos digitalizados). A injecção cobre os requisitos ao nível de formato de ficheiro que podem ser acrescentados por pós-processamento — o comentário único de identificação de versão%PDF-raster-1.0escrito entre o dicionário do trailer e a palavra-chave startxref (§5), o dicionário de catálogo reduzido à white list da §6.3 (sobrevivem apenas Version / ViewerPreferences / PageLayout / PageMode / AcroForm / Metadata), o Document Information Dictionary reduzido à white list da §6.4.3 (apenas Creator / Producer / CreationDate / ModDate), um fluxo XMP /Metadata no catálogo com as quatro entradas da Table 1 da §6.4.4 (xmp:CreatorTool / pdf:Producer / xmp:CreateDate / xmp:ModifyDate) e um array /ID do trailer - Adicionado
TPdf.SaveAsPdfRToStreampara saída PDF/R em memória, e um atalho de opções predefinidasTPdf.SaveAsPdfR(FileName)para o caso comum - Adicionado
TPdf.ValidatePdfR: verifica um PDF aberto quanto a marcadores de conformidade PDF/R-1 (comentário de rodapé%PDF-raster-x.y, versão do cabeçalho, ausência de/Type /ObjStm, conformidade com a white list do catálogo, conformidade com a white list do dicionário Info, presença do fluxo de metadados XMP,/IDdo trailer) e devolveTPdfRValidationResultcom o nível de conformidade detectado e o conjunto de problemas encontrados - Adicionada propriedade
TPdf.PdfRConformance: devolve o nível de conformidade do documento actualmente aberto (prc1, prcNone ou prcUnknown) sem necessidade de chamarValidatePdfRexplicitamente - Novos tipos exportados na nova unidade
FPdfPdfr:TPdfRConformance,TPdfRValidationResult,TPdfRValidationIssue,TPdfRSaveOptions.TPdfRSaveOptions.DefaultdefineStripInfoOptionalEntrieseStripCatalogOptionalEntriescomo True, pelo que o injector passa a produzir por predefinição um catálogo e um dicionário Info conformes com §6.3 / §6.4.3; os chamadores podem definir estes valores como False para preservar as entradas de origem (a saída então não satisfaz essas cláusulas PDF/R, mas os outros marcadores permanecem anexados) - Os requisitos ao nível de conteúdo continuam a ser responsabilidade do PDF de origem: estrutura Contents por página (§6.5.1), forma
MediaBox [0 0 w h](§6.5.3), restrições de filtros (§6.2.2 — apenas FlateDecode, CCITTFaxDecode bitonal, DCTDecode 8-bit gray/RGB), ausência de object streams (§6.2.4) e layout de strip segundo §6.6. Estes requisitos não podem ser impostos por pós-processamento — estruturalmente, PDF/R é um subconjunto muito mais restrito do que os outros standards PDF/x e exige que os bytes de origem sejam gerados correctamente.ValidatePdfRexpõe os problemas ao nível de formato de ficheiro que esta unidade consegue detectar; combine-a com um validador PDF/R do TWAIN Working Group para verificações completas ao nível de conteúdo - Actualizada a string
TPdf.AboutInfopara reportar a versão actual do produto
Version 1.33.0
- Adicionada injecção de marcadores PDF/X (família ISO 15930):
TPdf.SaveAsPdfXpromove o documento actual para um ficheiro conforme PDF/X-1a:2001, PDF/X-3:2002 ou PDF/X-4 através de pós-processamento do PDF base com uma actualização incremental. A injecção cobre os requisitos ao nível de formato de ficheiro que podem ser acrescentados por pós-processamento — fluxo de metadados XMP compdfxid:GTS_PDFXVersion(epdfxid:GTS_PDFXConformancepara PDF/X-1a / PDF/X-3) mais a descrição correspondentepdfaExtension:schemas, um Document Information Dictionary reescrito com entradas/GTS_PDFXVersion,/GTS_PDFXConformancee/Trapped, um catálogo actualizado com/OutputIntents [N 0 R]a referenciar um dicionário OutputIntent com/S /GTS_PDFXe um perfil ICC incorporado, e um array/IDdo trailer - Adicionado
TPdf.SaveAsPdfXToStreampara saída PDF/X em memória, e um atalho de opções predefinidasTPdf.SaveAsPdfX(FileName)que produz PDF/X-4 com o OutputIntent sRGB IEC61966-2.1 incluído (3144 bytes, idêntico ao perfil usado por SaveAsPdfA) - Adicionado
TPdf.ValidatePdfX: verifica um PDF aberto quanto a marcadores de conformidade PDF/X (identificador XMP pdfxid e igualdade com o valor do dicionário Info, descrição do esquema de extensão pdfxid, array/OutputIntentscom/DestOutputProfile, presença de Title,/IDdo trailer, estado de encriptação, presença dexmp:CreateDate/xmp:ModifyDate) e devolveTPdfXValidationResultcom o nível detectado e o conjunto de problemas encontrados - Adicionada propriedade
TPdf.PdfXConformance: devolve o nível de conformidade do documento actualmente aberto (pxc1a, pxc3, pxc4, pxcNone ou pxcUnknown) sem necessidade de chamarValidatePdfXexplicitamente. A string de versão XMP é analisada para desambiguar entre os três níveis de conformidade - Novos tipos exportados na nova unidade
FPdfPdfx:TPdfXConformance(pxcUnknown/None/1a/3/4),TPdfXTrappedState(ptUnspecified/True/False/Unknown),TPdfXValidationResult,TPdfXValidationIssue,TPdfXSaveOptions.TPdfXSaveOptions.Defaultaponta para PDF/X-4 com OutputIntent sRGB e/Trapped /False; os chamadores podem substituirConformance, fornecer um blob CMYKIccProfileDatapara fluxos de trabalho de impressão comercial ou alterarOutputCondition/OutputConditionIdentifier/RegistryNamepara apontar para uma entrada específica de registo de caracterização ICC (por exemplo FOGRA39, GRACoL2006_Coated1v2) - Os requisitos ao nível de conteúdo (todas as fontes incorporadas, sem JavaScript, sem anotações visíveis, proibição OPI, regras de transparência para PDF/X-1a / PDF/X-3, etc.) continuam a ser responsabilidade do autor do documento e do pipeline de renderização do PDFium. Combine
ValidatePdfXcom uma ferramenta de preflight como callas pdfaPilot ou o Ghent PDF Workgroup Output Suite para verificação completa da conformidade - Actualizada a string
TPdf.AboutInfopara reportar a versão actual do produto
Version 1.32.0
- Adicionada injecção de marcadores PDF/E-1 (ISO 24517-1:2008):
TPdf.SaveAsPdfEpromove o documento actual para um ficheiro conforme PDF/E-1 através de pós-processamento do PDF base com uma actualização incremental. A injecção cobre os requisitos ao nível de formato de ficheiro que podem ser acrescentados por pós-processamento — um fluxo de metadados XMP compdfe:ISO_PDFEVersion = "PDF/E-1"mais a descrição correspondentepdfaExtension:schemas, um Document Information Dictionary reescrito com a entrada obrigatória/ISO_PDFEVersion (PDF/E-1)exigida pela §5, os blocos de ponte Info-XMP herdados da ISO 19005-1 §6.7 via §13.1 (dc:title / dc:creator / dc:description / pdf:Producer / pdf:Keywords / xmp:CreateDate / xmp:ModifyDate / xmp:MetadataDate / xmp:CreatorTool) e um array/IDdo trailer exigido pela §6.2 - Adicionado
TPdf.SaveAsPdfEToStreampara saída PDF/E em memória e um atalho de opções predefinidasTPdf.SaveAsPdfE(FileName)para o caso comum - Adicionado
TPdf.ValidatePdfE: verifica um PDF aberto quanto a marcadores de conformidade PDF/E-1 (presença e igualdade entre o valor XMPpdfe:ISO_PDFEVersione o valor do dicionário Info, descrição do esquema de extensão pdfe, entrada/ISO_PDFEVersionno dicionário Info,/IDdo trailer, presença dexmp:CreateDate/xmp:ModifyDate) e devolve um resultado estruturado com o nível de conformidade detectado e o conjunto de problemas encontrados - Adicionada propriedade
TPdf.PdfEConformance: devolve o nível de conformidade do documento actualmente aberto (pec1, pecNone ou pecUnknown) sem necessidade de chamarValidatePdfEexplicitamente - Novos tipos exportados na nova unidade
FPdfPdfe:TPdfEConformance,TPdfEValidationResult,TPdfEValidationIssue,TPdfESaveOptions - A reescrita do dicionário Info é uma estreia no caminho de pós-processamento PDF/x do PDFiumPas — reescreve o objecto Info existente com o mesmo número de objecto (para que a xref subsection / trailer /Info continuem válidos) e sintetiza um novo dicionário Info quando o trailer de origem não tem entrada /Info. O próprio PDFium emite um dicionário Info em cada saída SaveAs, pelo que o caso comum é o caminho de reescrita
- Os requisitos ao nível de conteúdo (incorporação de fontes, ToUnicode CMaps, XObjects proibidos / chaves ExtGState / formulários XFA, etc.) continuam a ser responsabilidade do autor do documento —
SaveAsPdfEanexa os marcadores de formato de ficheiro mas não altera o conteúdo da página nem remove funcionalidades proibidas - Actualizada a string
TPdf.AboutInfopara reportar a versão actual do produto
Version 1.31.0
- Adicionada injecção de marcadores PDF/UA-1 (ISO 14289-1:2014):
TPdf.SaveAsPdfUapromove o documento actual para um ficheiro conforme PDF/UA-1 através de pós-processamento do PDF base com uma actualização incremental. A injecção cobre os requisitos ao nível de formato de ficheiro que podem ser aplicados por pós-processamento — um fluxo de metadados XMP compdfuaid:part = 1mais a descrição correspondentepdfaExtension:schemas,dc:titleobrigatório, catálogo/MarkInfo << /Marked true /Suspects false >>e/ViewerPreferences << /DisplayDocTitle true >>(apenas quando a origem não tiver nenhum), catálogo/Lang(quando o chamador fornece uma etiqueta BCP 47) e um array/IDdo trailer - Adicionado
TPdf.SaveAsPdfUaToStreampara saída PDF/UA em memória, e um atalho de opções predefinidasTPdf.SaveAsPdfUa(FileName)para o caso comum - Adicionado
TPdf.ValidatePdfUa: verifica um PDF aberto quanto a marcadores de conformidade PDF/UA-1 (existência de StructTreeRoot,/Lang,/MarkInfo /Marked truecom/Suspects = false,/ViewerPreferences /DisplayDocTitle true, identificador XMPpdfuaid:part, presença dedc:title,/IDdo trailer, estado de encriptação) e devolve um resultado estruturado com o nível de conformidade detectado e o conjunto de problemas encontrados - Adicionada propriedade
TPdf.PdfUaConformance: devolve o nível de conformidade do documento actualmente aberto (puc1, pucNone ou pucUnknown) sem necessidade de chamarValidatePdfUaexplicitamente - Novos tipos exportados na nova unidade
FPdfPdfua:TPdfUaConformance,TPdfUaValidationResult,TPdfUaValidationIssue,TPdfUaSaveOptions - Os campos Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language deixados em branco em
TPdfUaSaveOptionssão preenchidos automaticamente a partir deFPDF_GetMetaText/FPDF_GetFileIdentifier/FPDFCatalog_GetLanguage, para que os chamadores existentes possam guardar com uma única linha - Os requisitos ao nível de conteúdo (completude da marcação StructTreeRoot, texto Alt em Figure, CMaps ToUnicode, incorporação de fontes, etc.) continuam a ser responsabilidade do autor do documento —
SaveAsPdfUaanexa os marcadores de formato de ficheiro mas não altera o conteúdo da página nem inventa tags.ValidatePdfUaexpõe a ausência de StructTreeRoot comopvuaiMissingStructTreeRootpara que os chamadores possam encaminhar documentos sem tags para um pipeline de marcação separado - Actualizada a string
TPdf.AboutInfopara reportar a versão actual do produto
Version 1.30.0
- A saída PDF/A-1b satisfaz agora os requisitos ISO 19005-1 (com Cor.1:2007) para equivalência Document Information Dictionary / XMP: cada entrada do dicionário Info que o PDFium escreve no PDF base é espelhada no pacote XMP, incluindo Title (dc:title), Author (dc:creator), Subject (dc:description segundo Cor.1), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate) e ModDate (xmp:ModifyDate).
xmp:MetadataDatetambém é emitido - O trailer de um documento PDF/A contém agora sempre um array
/ID(requisito obrigatório ISO 19005-1 6.1.3). QuandoTPdf.SaveAsPdfAprocessa um documento cuja origem já tem um identificador de ficheiro, os IDs permanentes e mutáveis de 16 bytes existentes são reutilizados; caso contrário, um ID de substituição determinístico de 16 bytes é derivado dos bytes de origem - O XMP injectado inclui agora a descrição do esquema de extensão pdfaid exigida pela ISO 19005-1 6.7.8 (substituída por Cor.1) — pdfaid é tratado como um esquema de extensão em relação à XMP Specification 2004, pelo que todos os ficheiros conformes têm de declarar os seus nomes de propriedade, tipos de valor e categorias no contentor
pdfaExtension:schemas TPdfASaveOptionsganhou cinco novos campos opcionais: Producer, CreationDate, ModDate (strings de data PDF no formatoD:YYYYMMDDHHmmSSOHH'mm'), DocumentId e InstanceId (strings de bytes de 16 bytes para o array/IDdo trailer).TPdf.SaveAsPdfA/SaveAsPdfAToStreampreenchem automaticamente os campos em falta a partir deFPDF_GetMetaTexteFPDF_GetFileIdentifier, para que os chamadores existentes continuem a funcionar sem alteraçõesTPdf.ValidatePdfA/TPdf.PdfAConformancereportam agora três problemas adicionais:pvaiMissingTrailerId(sem/IDno trailer),pvaiMissingXmpDates(xmp:CreateDateouxmp:ModifyDateem falta) epvaiMissingExtensionSchema(descrição do esquema de extensão pdfaid ausente)- Os caracteres não ASCII em Title, Author, Subject, Keywords, Creator e Producer são agora codificados como UTF-8 no pacote XMP (a XMP Specification exige UTF-8), preservando o round-trip de metadados multilingues através de
SaveAsPdfA - Actualizada a string
TPdf.AboutInfopara reportar a versão actual do produto
Version 1.29.0
- Actualizados os DLLs PDFium incluídos (Win32 e Win64, builds standard e V8) para a snapshot ascendente de 2026-05-22, incorporando correcções ascendentes para os caminhos de crash de
FPDFText_SetText/FPDFText_SetCharcodese vários endurecimentos internos do projecto PDFium - Exposto o novo sinalizador de gravação
FPDF_SUBSET_NEW_FONTSdo PDFium emFPdfPageOps.pas, permitindo que os chamadores deFPDF_SaveAsCopysolicitem o subset automático de ficheiros de fontes incorporadas para objectos de texto recentemente adicionados. As constantes existentesFPDF_INCREMENTAL,FPDF_NO_INCREMENTALeFPDF_REMOVE_SECURITYsão agora definidas usando a forma de bit-shift ascendente (o valor numérico legado 3 é preservado comoFPDF_REMOVE_SECURITY_DEPRECATEDpor compatibilidade binária) - Adicionada a enumeração
FPDF_FONT_BACKEND_TYPE(FREETYPE / FONTATIONS) e o campo correspondentem_FontLibraryTypeemFPDF_LIBRARY_CONFIGnoFPdfView.pas, para que as aplicações que inicializam o PDFium com o renderizador Skia possam agora escolher o backend de fontes no arranque - Actualizada a assinatura de
TFPDFPage_InsertObjectpara corresponder à upstream: a função C devolve agoraFPDF_BOOL(TRUE em sucesso, FALSE sepage_objectfor NULL ou se a transferência de ownership falhar) em vez de void. Os chamadores existentes de PDFiumPas continuam a compilar inalterados porque Delphi / FPC permitem ignorar o valor de retorno de uma função - Corrigida a string
TPdf.AboutInfopara reportar a versão actual do produto (estava desactualizada em v1.27.0 desde a release v1.28.0 apenas de documentação)
Version 1.28.0
- Expandida de forma substancial a documentação em página em toda a referência da API: cada entrada de propriedade, método, evento e função global inclui agora uma Description de 3 parágrafos, uma lista Remarks, um exemplo Delphi multi-linha e um bloco See Also mais rico — cobrindo mais de 200 páginas anteriormente magras, incluindo todos os contadores TPdf, getters de metadados, acessos de fontes e caracteres, propriedades ao nível de página, records indexados, métodos ao nível de documento e toda a superfície de estado / visualização / eventos de
TPdfView - Afinação do layout da ajuda para corresponder à baseline visual losLab usada na referência HotXLS: tamanhos h1/h2 alinhados, estilos da grelha de navegação da API consolidados na StyleSheet partilhada e remoção dos overrides CSS inline por página em
Navigation.html - A documentação passa agora a incluir um script auxiliar (
Docs\Build-Expand-Entries.ps1) que regenera o enriquecimento das páginas de entrada a partir de uma única tabela de dados para manutenção repetível
Version 1.27.0
- Adicionado suporte à criação PDF/A-1b:
TPdf.SaveAsPdfAguarda qualquer documento aberto como um ficheiro conforme PDF/A-1b através de pós-processamento do PDF base com uma actualização incremental que injecta um fluxo de metadados XMP, um OutputIntent ICC sRGB e um catálogo de documento actualizado — tudo sem exigir APIs DLL extra. Funciona em qualquer plataforma suportada por PDFiumPas - Adicionado
TPdf.SaveAsPdfAToStreampara saída PDF/A em memória - Adicionado
TPdf.ValidatePdfA: verifica um PDF aberto quanto a conformidade PDF/A (marcadores XMP pdfaid, OutputIntent com perfil ICC incorporado, encriptação) e devolve um resultado estruturado com o nível de conformidade detectado e um conjunto de problemas específicos encontrados - Adicionada propriedade
TPdf.PdfAConformance: devolve o nível de conformidade do documento actualmente aberto (pac1b, pac1a, pac2b, pac3b, pacNone ou pacUnknown) sem necessidade de chamarValidatePdfAexplicitamente - Novos tipos exportados:
TPdfAConformance,TPdfAValidationResult,TPdfAValidationIssue,TPdfASaveOptions(na nova unidadeFPdfPdfa.pas) SaveAsPdfAsuporta um perfil ICC personalizado através deTPdfASaveOptions.IccProfileData; quando deixado vazio, o perfil integrado sRGB IEC61966-2.1 (HP/Microsoft, 3144 bytes) é usado automaticamente- Substituída a referência HTML monolítica por um sistema de ajuda web reestruturado: 302 páginas individuais de entrada da API (uma por propriedade, método, evento e função global) cobrindo
TPdfeTPdfView, cada uma com descrição completa, tabela de parâmetros, exemplo de código Delphi e ligações See Also - Adicionado
Navigation.html: um índice de navegação da API numa única página e completo, organizado em seis secções (propriedades/métodos/eventos deTPdf, propriedades/métodos/eventos deTPdfView, funções globais) com uma grelha flex de 5 colunas para leitura rápida TPdf.htmleTPdfView.htmlforam reconstruídos como páginas compactas de visão geral dos componentes, preservando as secções de referência de tipos (Types, Constants, Global Variables) e ligando para as páginas de entrada individuais de todos os membros- Adicionada pesquisa de texto completo alimentada por
Search.jscom correspondência incremental no cliente em todas as 312 páginas indexadas - Actualizadas todas as barras de navegação em todo o site para apontarem para
Navigation.html
Version 1.26.0
- Adicionado Demo/Lazarus/BatchExport, a porta LCL da demo Delphi BatchExport v1.14.0. Mesmo conjunto de funcionalidades: exportação PDF -> JPG de vários ficheiros com progresso global por ficheiro, progresso actual por página, entradas de DPI / qualidade / palavra-passe e um lote cooperativamente cancelável suportado por IPdfCancellationToken. A pasta de saída é aberta no gestor de ficheiros da plataforma quando a extracção termina com sucesso
Version 1.25.0
- Adicionada reutilização de páginas Form XObject a
TPdf, permitindo fluxos de trabalho de marca de água, sobreposição de modelo e “aplicar uma página a muitas”:CreateXObjectFromPagefabrica um handle reutilizável a partir de qualquer página de outro documento;InsertFormObjectFromXObjectinsere UMA cópia da página encapsulada na página actual. Devolve oFPDF_PAGEOBJECTinserido para que o chamador o possa posicionar / escalar / rodar comFPDFPageObj_SetMatrixe os auxiliaresTPdfMatrixda v1.9.0 - A nova classe Pascal
TPdfXObjectencapsula o handleFPDF_XOBJECTdo PDFium e fecha-o automaticamente no destrutor, eliminando a cerimónia manual deFPDF_CloseXObject - Expandidas as suites de regressão de Delphi e Lazarus para 147 casos cada, e a suite C++Builder para 123 casos, cobrindo criação de handle e contratos de inserção de objectos de página
Version 1.24.0
- Adicionado
TPdf.RenderPageProgressive— uma variante cancelável deRenderPageque conduz o ciclo de renderização progressiva do PDFium e faz polling a umIPdfCancellationTokenda v1.7.0 entre iterações, para que renderizações longas de alta DPI possam abortar a meio da página em vez de bloquear o chamador até à conclusão - Devolve um valor
TPdfProgressiveStatus:prsDone,prsCancelledouprsFailed. PasseAToken = nilpara renderizar até ao fim sem nunca pausar (sem possibilidade deprsCancelled) - Usa o mesmo caminho zero-copy introduzido na v1.21.0 — o PDFium desenha directamente para o buffer DIB do
TBitmapde destino. O mesmo fallback legado aplica-se quando o DIB não pode ser encapsulado - Expandidas as suites de regressão de Delphi e Lazarus para 145 casos cada, e a suite C++Builder para 121 casos, cobrindo token nil (completa), token pré-cancelado (
prsCancelled) e equivalência pixel a pixel comRenderPagesíncrono num token activo
Version 1.23.0
- Adicionados seis novos métodos
TPdfViewque expõem às aplicações a selecção de texto de widgets de formulário e Undo/Redo do PDFium:GetSelectedFormTextdevolve o texto actualmente seleccionado dentro do widget de formulário focado;SelectAllFormTextselecciona todos os caracteres;FormUndo/FormRedo/FormCanUndo/FormCanRedocontrolam o histórico de edição do widget focado. As APIs subjacentes do PDFium já estavam ligadas, mas não havia ponto de entrada de nível alto. Os seis terminam em segurança quando a vista está inactiva ou o documento não tem qualquer widget AcroForm focado - Expandidas as suites de regressão de Delphi e Lazarus para 142 casos cada, e a suite C++Builder para 119 casos, cobrindo o contrato sem-formulário-sem-foco para cada novo método
Version 1.22.0
- Adicionadas wrappers de composição de páginas a
TPdf:ImportPagesByIndexrecebe um array de índices baseado em zero para copiar páginas específicas de um documento de origem;ImportNPagesToOnedevolve um novoTPdfcujas páginas são composições N-up deste documento;MovePagesreordena páginas no local. As APIs subjacentes do PDFium já estavam ligadas, mas não havia um ponto de entrada amigável a Pascal ImportPagesByIndexaceita um array vazio para importar todas as páginas de origem (equivalente a passar nil ao nível da C ABI)- Expandidas as suites de regressão de Delphi e Lazarus para 136 casos cada, e a suite C++Builder para 115 casos, cobrindo importação de subconjunto, importação do documento inteiro, reordenação de páginas e composição N-up
Version 1.21.0
- Melhorado o desempenho de renderização ao mudar
TPdf.RenderPage/TPdf.RenderTile(e os auxiliares correspondentes deTPdfView) para um caminho de saída zero-copy. O PDFium escreve agora directamente para o buffer DIB doTBitmapde destino em vez de um buffer interno que era depois copiado linha a linha, poupando uma cópia de memória de largura x altura x 4 bytes por renderização. A melhoria é mais notória em DPI alto (painéis de miniaturas, exportação com qualidade de impressão, exportação em lote) - O caminho legado por linha de varrimento é mantido como fallback de segurança para o caso improvável de o DIB de destino não poder ser encapsulado (dimensões extremas, stride incomum, OOM). O comportamento é byte-idêntico entre os dois caminhos, apenas mais lento no fallback
- Expandidas as suites de regressão de Delphi e Lazarus para 132 casos cada, e a suite C++Builder para 112 casos, cobrindo a actualização do bitmap do chamador para pf32bit, round-trip de dimensões e um teste de sanidade de stride para bitmaps grandes
Version 1.20.0
- Adicionado realce de resultados de pesquisa a
TPdfView:HighlightSearchText(Text, MatchCase, MatchWholeWord)percorre a página actual do visualizador e devolve o número de correspondências encontradas, pintando uma máscaraHighlightColorsobre cada correspondência em cada redesenho.ClearHighlightremove os realces; mudar a vista para uma página diferente limpa-os automaticamente porque as correspondências são específicas da página HighlightColortem predefiniçãoclYellowe é publicado para que as aplicações possam ajustar o realce ao tema da sua paleta de IU- Expandidas as suites de regressão de Delphi e Lazarus para 129 casos cada, e a suite C++Builder para 109 casos, cobrindo cor predefinida, round-trip de cor, “correspondências reais de palavra de fixture” contra a string sample.pdf e o contrato “palavra em falta devolve zero correspondências”
Version 1.19.0
- Adicionada a propriedade
FitModeaTPdfViewcom quatro valores:pfmNone(zoom manual),pfmActualSize(100%),pfmFitPage(a página inteira cabe na viewport) epfmFitWidth(a largura da página corresponde à largura da viewport). O modo de ajuste activo é reaplicado automaticamente emResizee quando a página actual muda, para que documentos longos com tamanhos de página mistos permaneçam perfeitamente enquadrados - Definir
Zoomdirectamente cancela o modo de ajuste activo (FitModevolta parapfmNone), correspondendo à convenção standard dos visualizadores PDF em que escrever um valor de zoom faz sair de Fit Page / Fit Width - O valor predefinido é
pfmNone, para que as aplicações existentes mantenham o comportamento de zoom explícito - Expandidas as suites de regressão de Delphi e Lazarus para 124 casos cada, e a suite C++Builder para 106 casos, cobrindo o valor predefinido, round-trip de modo, fit-page a produzir um zoom real num documento carregado e o cancelamento do modo de ajuste por zoom manual
Version 1.18.0
- Adicionada a propriedade
PageColoraTPdfView, desacoplando o fundo renderizado da página PDF daColordo controlo envolvente. O valor predefinido éclWhite, pelo que as páginas PDF agora são renderizadas em branco de papel independentemente do tema da aplicação anfitriã. Os visualizadores em modo escuro podem agora manter a área de scroll escura enquanto deixam a página PDF real branca (ou qualquer cor escolhida pela aplicação) - Alteração de comportamento: as aplicações que antes definiam
TPdfView.Colorpara recolorir a página PDF devem agora definirPageColor. A experiência predefinida melhora para o caso comum (páginas brancas sobre fundos de controlos com tema) sem qualquer alteração de código - Expandidas as suites de regressão de Delphi e Lazarus para 120 casos cada, e a suite C++Builder para 103 casos, cobrindo o valor predefinido e o round-trip de cor
Version 1.17.0
- Adicionados controlos de bloqueio de entrada do utilizador a
TPdfViewpara que aplicações que incorporem o visualizador em quiosques, painéis de pré-visualização ou contextos só de leitura possam desactivar gestos de navegação sem subclasse:AllowUserPageChangecontrola os novos atalhos de tecladoPgUp/PgDn/Ctrl+Início/Ctrl+End;ChangePageOnMouseScrollingcontrola os novos saltos de página com roda para cima / para baixo;AllowUserTextSelectionfica reservado para o futuro caminho de selecção de texto por arrastar com o rato. Os três têm por predefiniçãoTrue, para que as aplicações existentes actualizem sem alteração de comportamento - A navegação de páginas com a roda do rato ignora
Ctrl+wheelpara que as aplicações possam reservarCtrl+wheelpara zoom - Expandidas as suites de regressão de Delphi e Lazarus para 118 casos cada, e a suite C++Builder para 101 casos, cobrindo os valores predefinidos e o round-trip dos alternadores
Version 1.16.2
- Expandidas as coberturas de regressão de
TPdfViewpara cliques em ligações de anotação quando a página do visualizador difere da página associada deTPdf, usando um caminho real de clique do rato sem interface nas suites Delphi, Lazarus e C++Builder - As suites Delphi e Lazarus executam agora 114 casos cada, e o C++Builder executa agora 99 casos
Version 1.16.1
- Corrigido o tratamento de cliques em ligações de
TPdfViewpara que as acções automáticas de anotação e de hiperligações Web usem a página actualmente mostrada pelo visualizador, mesmo quando o componenteTPdfassociado está noutra página TPdfThumbnailViewfoi reforçado contra referências Pdf penduradas quando o componenteTPdfligado é destruído- Adicionada cobertura de regressão para o ciclo de vida da referência da miniatura; as suites Delphi e Lazarus executam agora 113 casos cada, e o C++Builder executa agora 98 casos
- Sincronizados README, documentação de testes, conteúdo de pesquisa/índice da HTML Help e saídas geradas do pacote C++ com as actualizações de integração v1.7.0 a v1.16.0
Version 1.16.0
- Adicionada uma nova demo Delphi PrintDialog (Demo/Delphi/PrintDialog) focada em impressão N-up (1 / 2 / 4 / 9 páginas por folha) com filtragem de páginas ímpares / pares, renderização a cinzento e margens opcionais de 1 píxel nas células. É um pequeno companheiro deliberado da demo PrintPDF existente, que já cobre pré-visualização, ficheiros recentes, zoom e escala
Version 1.15.0
- Adicionado um novo componente
TPdfThumbnailView(unidadeFPdfThumbnail) que renderiza uma miniatura de página por linha num painel lateral com scroll, realce por passagem do rato e selecção, mais navegação por clique. Foi concebido para ficar ao lado de umTPdfViewpara que os utilizadores finais possam navegar por um documento longo página a página - O componente está registado no separador da palette losLab ao lado de
TPdfeTPdfView; propriedades principais:Pdf,CurrentPageIndex,ThumbnailWidth,ThumbnailHeight,TextColor,HoverColor,SelectionColor,BorderColore o eventoOnPageClick - Expandidas as suites de regressão de Delphi e Lazarus para 112 casos cada, e a suite C++Builder para 97 casos, cobrindo predefinições, round-trip do tamanho da miniatura, limitação de valores extremos, round-trip de cor e atribuição de manipulador de eventos
Version 1.14.0
- Adicionada uma nova demo Delphi BatchExport (Demo/Delphi/BatchExport) que mostra como converter muitos ficheiros PDF em JPG numa única passagem usando
TPdf.LoadCustomDocumentpara carregamento em streaming,IPdfCancellationTokenpara cancelamento cooperativo e barras de progresso global por ficheiro + por página. A demo usa uma instância deTPdfpor ficheiro (o próprio PDFium não é thread-safe) e abre a pasta de saída no Explorer quando a extracção termina com sucesso
Version 1.13.0
- Adicionada uma sobreposição de IU para renderização assíncrona a
TPdfViewatravés de três novas propriedades:AsyncRendering,LoadingTexteLoadingColor. QuandoAsyncRenderingé True, o caminho de pintura de página única desenha um pequeno indicador “A carregar...” sobre a página renderizada, para que as aplicações que usam o seu próprio worker para renderizações longas partilhem uma affordance visual consistente - As predefinições preservam o comportamento existente:
AsyncRenderingé False, por isso as aplicações que não activarem a funcionalidade não vêem qualquer alteração visual - A documentação esclarece que o próprio PDFium não é thread-safe — descarregar de facto a renderização para um worker requer que o chamador mantenha um
TPdfpor worker; a próxima demo de exportação em lote mostra esse padrão - Expandidas as suites de regressão de Delphi e Lazarus para 106 casos cada, e a suite C++Builder para 93 casos, cobrindo os valores predefinidos e o round-trip das três propriedades
Version 1.12.0
- Adicionado tratamento de ligações accionado por clique a
TPdfView. A nova propriedadeLinkOptionscontrola o comportamento automático para os quatro tipos de acção de ligação PDF: goto (salto de página), URI (ShellExecute), launch (ShellExecute) e GotoR incorporado (reservado). As predefinições activamloAutoGotoeloAutoOpenURI;loAutoLauncheloAutoEmbeddedGotoficam desligados para que um clique perdido não possa executar um programa arbitrário - Adicionados os eventos
OnAnnotationLinkClickeOnWebLinkClick, que disparam antes de qualquer acção automática e permitem às aplicações inspeccionar a ligação, marcá-la como Handled ou redireccioná-la (por exemplo, para um aviso de segurança) - A detecção de cliques em ligações funciona apenas quando o gesto é um clique e não um arrasto, usando um novo âncora
MouseDownpara que os gestos de pan continuem a fluir pelo caminho de scroll existente sem alterações - Expandidas as suites de regressão de Delphi e Lazarus para 102 casos cada, e a suite C++Builder para 91 casos, cobrindo
LinkOptionspredefinidos, round-trip do conjunto e atribuição de manipulador de eventos
Version 1.11.0
- Adicionado polimento visual a
TPdfView: as propriedadesPageShadowSize,PageShadowColorePageBorderColorpintam uma sombra opcional por baixo do rectângulo da página e uma moldura de um píxel à volta dele. As predefinições preservam o aspecto plano anterior (PageShadowSize = 0; a moldura é desenhada noclBlackpredefinido mas funde-se com o fundo branco predefinido até os chamadores mudarem as cores) - Adicionada a propriedade
SmoothScrollcomo um sinalizador opt-in para futura animação incremental de scroll; a propriedade faz round-trip hoje e está ligada para que as aplicações possam persistir a preferência, enquanto o lado de renderização continua a usar o comportamento imediato de scroll existente - Expandidas as suites de regressão de Delphi e Lazarus para 98 casos cada, e a suite C++Builder para 89 casos, cobrindo valores predefinidos, round-trip de propriedades e o clamp de tamanho de sombra negativo
Version 1.10.0
- Adicionada inserção directa de imagens através de novas sobrecargas
TPdf.AddImageeTPdfView.AddImageque recebem um caminho de ficheiro ou umTBitmap, além doAddPictureexistente baseado emTPicture.AddImage(FileName)reconhece qualquer formato registado com as unidades gráficas VCL ou LCL (BMP, PNG via a unidadePngImage, JPG, etc.) e segue o mesmo pipeline queAddPicture, pelo que o comportamento é idêntico AddImage(TBitmap)evita o intermediárioTPicture, o que simplifica os chamadores que já têm umTBitmapde trabalho de renderização ou geração em lote- Expandidas as suites de regressão de Delphi e Lazarus para 92 casos cada, e a suite C++Builder para 84 casos, cobrindo inserção de bitmap, limites de objectos de página, rejeição de bitmap nil e carregamento de ficheiros BMP
Version 1.9.0
- Adicionado suporte de nível alto a matrizes de transformação através da nova classe
TPdfMatrixna unidadeFPdfMatrix.TPdfMatrixencapsula aFS_MATRIXdo PDFium com uma API OO paraTranslate,Scale,Rotate,HorizontalFlip,VerticalFlip,CentralFlip,SkeweMultiply, adequada para compor transformações antes de as passar aFPDFPageObj_SetMatrixe APIs PDFium semelhantes TPdfMatrix.Multiplyfaz correctamente snapshot dos seis elementos da matriz antes de calcular os novos valores de linha, corrigindo um problema latente em que as implementações Pascal alternativas sobrescreviam elementos anteriores durante a mesma chamada e produziam resultados incorrectos para qualquer composição para além da translação pura- Expandidas as suites de regressão de Delphi e Lazarus para 88 casos cada, e a suite C++Builder para 81 casos, cobrindo identidade, reset, translate / scale / flip, ordem de composição pós-multiplicativa e o caso de regressão de
Multiply
Version 1.8.0
- Adicionado carregamento de stream a pedido através do novo método
TPdf.LoadCustomDocument(AStream, AOwnsStream)e da classe auxiliarTPdfStreamAdapter, suportados pelaFPDF_LoadCustomDocumentdo PDFium. O PDFium lê agora blocos doTStreamfornecido apenas quando necessário, pelo que PDFs muito grandes ou remotos já não exigem uma cópia inicial em memória - Adicionado ownership opcional do stream: passar
AOwnsStream = Trueentrega a vida doTStreamaoTPdf, que o liberta quandoUnloadDocumenté executado - Expandidas as suites de regressão de Delphi e Lazarus para 79 casos cada, e a suite C++Builder para 75 casos, cobrindo carregamento por streaming via
TFileStream, limpeza de stream possuído e o contrato de sobreviver ao descarregamento para stream pertencente externamente
Version 1.7.0
- Adicionadas primitivas de cancelamento assíncrono cooperativo na nova unidade
FPdfAsync, expondoIPdfCancellationToken/IPdfCancellationTokenSourcee um singleton reutilizávelPdfNoCancellationTokenpara que fluxos de trabalho longos de renderização e exportação suportem semântica limpa de cancelamento a partir da IU - Adicionado um auxiliar leve
TPdfFuture<T>que executa um worker numa thread em segundo plano e devolve o envelopeTPdfFutureResult<T>para a thread principal, distinguindo casos de sucesso, cancelamento e falha - Expandidas as suites de regressão de Delphi e Lazarus para 76 casos cada, e a suite C++Builder para 73 casos, com cobertura partilhada do estado de cancelamento, cancelamento idempotente, fan-out de callbacks e registo pós-cancelamento
Version 1.6.10
- Adicionado acesso de alto nível de
TPdf.PrintPageRangesao intervalo de páginas de impressão das preferências do visualizador PDF, devolvendo intervalos de páginas baseados em 1 para o código da aplicação - Adicionados
TPdf.SetFormFieldFlags/SetFormFieldFlagsAte auxiliares correspondentes deTPdfViewpara que as aplicações possam actualizar flags de campos AcroForm através da API pública, incluindo cobertura de flags de palavra-passe e multi-select - Reforçada a cobertura ABI das ligações PDFium para
FPDF_DWORDde tamanho Windows, callbacksFPDF_FILEACCESSe campos de slot do integrador V8
Version 1.6.9
- Adicionadas ligações de renderização Skia de baixo nível para as APIs
FPDF_RenderPageSkiaeFPDF_FFLDrawSkiarecém-exportadas nos DLLs PDFium standard e V8 incluídos - Expandidas as verificações de cobertura de ligações públicas para que o carregamento de DLLs standard e V8 verifique agora os pontos de entrada de renderização Skia ao lado das sondas de capacidade V8/XFA existentes
Version 1.6.8
- Adicionados
TPdf.SetTextPositionseTPdfSingleArraypara definir posições por carácter em objectos de texto existentes através da APIFPDFText_SetPositionsrecém-exportada FPDFText_SetPositionsfoi promovida a ligação obrigatória para os DLLs PDFium incluídos actuais, confirmando ao mesmo tempo que os pontos de entrada de renderização Skia continuam indisponíveis porque os DLLs ainda não os exportam- Expandidas as suites de regressão de Delphi, C++Builder e Lazarus para 65 casos cada, com cobertura de posições de texto
Version 1.6.7
- Adicionado acesso de alto nível de
TPdfàs acções de name-tree JavaScript do documento, devolvendo nomes de acção e scripts através deJavaScriptActioneJavaScriptActions - Adicionada
TPdf.FileIdentifierpara ler IDs permanentes e mutáveis do trailer comoTBytesbinários sem o byte terminador do PDFium - Adicionados
TPdf.PageBox,GetPageBoxeSetPageBoxparaMediaBox,CropBox,BleedBox,TrimBoxeArtBoxna página actual - Confirmado que os DLLs PDFium incluídos actuais deixam apenas indisponíveis em tempo de execução os pontos de entrada de renderização Skia porque essas exportações não estão presentes
- Expandidas as suites de regressão de Delphi, C++Builder e Lazarus para 64 casos cada, com cobertura de JavaScript do documento, ID do trailer e page-box
Version 1.6.6
- Adicionado suporte em tempo de execução para o DLL PDFium incluído com V8. Definir
EnableV8Engineantes do carregamento selecciona agorapdfium.v8.dlla partir da árvoreDLLs\Win32ouDLLs\Win64e expõe ligações apenas de V8/XFA quando o DLL carregado as fornece - Adicionados
V8FeaturesAvailable,XfaBStrHelpersAvailable,GetRecommendedV8Flagse ligações opcionais de baixo nível paraFPDF_BStr_*,FPDF_GetRecommendedV8FlagseFPDF_GetArrayBufferAllocatorSharedInstance - Foi tornado opcional
FPDFText_SetPositionspara que o PDFiumPas continue a carregar com DLLs PDFium que não exportam esse setter experimental de posição de texto - Expandidas as suites de regressão de Delphi, C++Builder e Lazarus para 61 casos cada, com cobertura de capacidade para DLL standard e DLL V8
Version 1.6.5
- Adicionada inspecção de árvore estrutural Tagged PDF através de
TPdf.StructureElementseTPdfView.StructureElements, incluindo tipo de elemento, título, texto alternativo, texto actual, texto de expansão, idioma, IDs de conteúdo marcado, contagens de filhos e contagens de atributos - Adicionada selecção de modo de impressão PDFium do Windows através de
TPdfPrintModeeSetPdfPrintMode, cobrindo modos de impressão EMF, apenas texto, PostScript, pass-through, image-mask e Type 42 - Adicionadas ligações de baixo nível para as restantes exportações públicas standard-DLL do PDFium, cobrindo acções JavaScript, flags / cor da fonte do formulário de anotação, estado activo de objectos de página, inserção indexada, valores float de content-mark, dados de perfil ICC de imagem, remoção de objectos de formulário e posições de texto
- Expandidas as suites de regressão de Delphi, C++Builder e Lazarus para 59 casos cada, com cobertura de árvore estrutural Tagged PDF, modo de impressão e ligações de exportação pública
Version 1.6.4
- Actualizadas as demos Delphi, C++Builder e Lazarus para abrirem automaticamente PDFs gerados, texto/imagens exportados e pastas de saída em lote após criação bem-sucedida
Version 1.6.3
- Expandidas as suites de regressão alinhadas de Delphi, C++Builder e Lazarus para 56 casos cada, com cobertura GUI de
TPdfViewpara auxiliares de ajuste de zoom, round-trips de coordenadas dispositivo/página, hit-testing de caracteres e pan do rato através de controlos de visualizador em janela oculta - Os fixtures de
TPdfViewusam agora um tamanho explícito de visualizador e subclasses apenas para teste que exercitam manipuladores de rato protegidos mantendo as suites totalmente sem interface
Version 1.6.2
- Corrigido
TPdf.AddPage(0, ...)para que a primeira página inserida se torne imediatamente a página activa. O código de exemplo existente continua a funcionar, enquantoPageNumberpassa a reportar uma página válida baseada em 1 após a inserção - Sincronizada a versão do pacote Lazarus e expandidas as suites de regressão alinhadas de Delphi, C++Builder e Lazarus para 52 casos cada
Version 1.6.1
- Corrigido um requisito incorrecto de versão mínima no validador de conformidade de versão PDF da v1.6.0: a acção
SetStatefoi reclassificada de PDF 1.5 para PDF 1.2, correspondendo à PDF 1.2 Reference 6.9.9. Destinos SaveAs em PDF 1.3 / 1.4 que contenham acçõesSetStatepassam agora a guardar correctamente em vez de serem rejeitados - Adicionadas verificações lexicais correspondentes de PDF 1.2 pela mesma secção da especificação: as acções Sound, Movie e NOP mais o espaço de cor Separation são agora bloqueados quando a versão de destino escolhida é anterior a PDF 1.2
- Expandidas as suites de regressão de Delphi, C++Builder e Lazarus para 50 casos cada, adicionando um teste positivo de aceitação de SetState em PDF 1.4 que fixa a fronteira corrigida
Version 1.6.0
- Reforçados os destinos SaveAs com versão explícita PDF 1.0 a PDF 1.7 com um validador completo de versão-funcionalidade que cobre toda a linha temporal de funcionalidades de PDF 1.1 até ISO 32000-1. O validador bloqueia agora gravações que contenham entradas de dicionário, nomes de filtros, subtipos de anotação, tipos de acção, fontes, espaços de cor ou parâmetros de encriptação introduzidos após a versão de destino escolhida. Exemplos: JBIG2Decode (1.4+), MarkInfo / Tagged PDF (1.4+), OutputIntents (1.4+), ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+), anotações Polygon / PolyLine / Caret / Screen / Watermark / Redact, encriptação AES e AES-256 (CFM AESV2 / AESV3), entradas de catálogo Perms / Legal / Requirements / NeedsRendering, e acções com versão como JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView são todas rejeitadas quando a versão PDF de destino não as pode representar
Version 1.5.13
- Expandidas as suites de regressão de Delphi, C++Builder e Lazarus para 49 casos cada, adicionando cobertura directa para rejeição de espaços de cor ICCBased, MarkInfo de Tagged PDF, anotações Polygon, encriptação AES (V2) e anotações Redact contra destinos PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 respectivamente
Version 1.5.12
- Corrigido o pós-processamento SaveAs para reescritas incrementais do catálogo. O PDFiumPas valida agora o objecto indirecto repetido mais recente, pelo que as substituições existentes de
/Versiondo catálogo são trocadas correctamente quando se guarda para uma versão de destino PDF mais antiga e explícita - Expandidas as suites de regressão de Delphi, C++Builder e Lazarus para 44 casos cada, adicionando cobertura directa para substituição de
/Versionde catálogo obsoleta, normalização da versão do catálogo PDF 1.4 e rejeição de transparência e funcionalidades de colecção portável quando a versão de destino PDF seleccionada não as pode representar
Version 1.5.11
- Reforçada a saída SaveAs versionada para destinos explícitos PDF 1.3, 1.4, 1.5, 1.6 e 1.7. O PDFiumPas normaliza agora os marcadores de versão do catálogo, mantém a OpenAction Fit Height predefinida segura para a versão e rejeita funcionalidades PDF mais recentes quando a versão de destino seleccionada não as pode representar
- Adicionada cobertura de regressão de Delphi, C++Builder e Lazarus que guarda e volta a carregar ficheiros explícitos PDF 1.3 a PDF 1.7, verificando o cabeçalho final, a OpenAction Fit Height predefinida e a versão PDF reportada
Version 1.5.10
- Passou da opção B da especificação para a opção C ao adicionar testes smoke de
TPdfViewem todas as três suites IDE (Tests.PdfView). Cada suite constrói umTFormpai oculto (viaTForm.CreateNewnos lados Pascal enew TForm(NULL, 0)no lado C++Builder), reparenta umTPdfView, defineActive := Truee depois verifica a superfície round-trip paraPageCount, valor predefinido dePageNumber,Zoom,Rotation,DisplayModee queView.Textcorresponde aoTPdf.Textsubjacente. Cada suite IDE executa agora 39 casos
Version 1.5.9
- Passou da opção A da especificação para a opção B ao adicionar testes smoke de renderização em todas as três suites IDE. Cada suite
Tests.RenderchamaTPdf.RenderPageemsample.pdfe verifica três sinais robustos em vez de checksums byte a byte: o bitmap devolvido corresponde exactamente ao tamanho de píxel pedido; tamanhos pedidos diferentes (200x100, 64x256) produzem bitmaps correspondentes; e a página renderizada tem pelo menos 95% de fundo branco com pelo menos 50 (Lazarus: 20) píxeis não brancos a marcar o texto anti-aliased. Cada suite IDE executa agora 33 casos
Version 1.5.8
- Fechados os grupos originais do plano de testes A(2) ao adicionar mais sete regressões por IDE:
TPdf.CreateAnnotationa construir uma anotaçãoanHighlightmais um round-tripSaveAs/LoadDocument, o caminho de leitura AcroForm emDemo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf(FormTypeéftAcroForm,FormFieldCount > 0,FlattenAllPagesreduz os campos para zero), e cobertura de leitura silenciosa paraBookmarks,LinkAnnotationCounteWebLinkCountnum documento que não tem nenhuma dessas funcionalidades. Cada suite IDE executa agora 30 casos
Version 1.5.7
- Expandidas as suites Delphi (
DUnitX), Lazarus (FPCUnit) e C++Builder (GoogleTest) com sete novas regressões por IDE:PdfVersion,PageRotation, procura de substringTPdf.FindFirst/FindNext, concordânciaCharacterOrigin/CharacterRectanglecontra a origem deAddText, registo deCreateAttachmentmais um round-tripSaveAs/LoadDocument, e um round-tripAddTextde texto acentuado que verifica que o caminho de incorporação europeia de TrueType da v1.3.0 mantém intactos os code points suplementares Latin-1
Version 1.5.6
- Os PDFs guardados passam agora a obter uma acção aberta Fit Height de primeira página por predefinição quando não existe qualquer
OpenAction, para que os leitores PDF apresentem inicialmente os documentos gerados com zoom à altura da página - Adicionada cobertura de regressão de Delphi, Lazarus e C++Builder para a acção
OpenActiongerada e a definição Fit Height
Version 1.5.5
- Adicionados testes de regressão nas suites Delphi (
DUnitX), Lazarus (FPCUnit) e C++Builder (GoogleTest) para a superfície de API de inspecção indexada de caracteres e fontes (TPdf.FontBaseName,FontFamilyName,FontWeight,FontItalicAngle,FontData,FontIsEmbedded,CharacterFontWeight,CharacterAngle). A suite Lazarus salta intencionalmenteFontData, que actualmente viola acesso dentro deFPDFFont_GetFontDatasob FPC
Version 1.5.4
- Adicionada uma demo C++Builder Attachment portada da amostra Delphi, cobrindo criação de PDFs, adição, listagem, extracção, eliminação e gravação de anexos de ficheiros incorporados com visualização do subtipo MIME
Version 1.5.3
- Exposta a cálculo de páginas em espalhamento que suporta os modos de duas páginas de
TPdfViewcomo auxiliar ao nível da unidadeComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo). O comportamento não se altera; o auxiliar torna a regra aware de capa testável de forma independente sem instanciar um visualizador - Adicionados cinco testes de regressão nas suites Delphi (
DUnitX), Lazarus (FPCUnit) e C++Builder (GoogleTest) cobrindo documentos vazios, o emparelhamento standard de duas páginas, a página de capa sozinha emdmTwoPageContinuousWithCover, pares pós-capa e o comportamento de limitação da última página / fora de intervalo
Version 1.5.2
- Adicionado suporte a idioma do documento através de
TPdf.Language, mapeado para a entrada/Langdo catálogo PDF - Adicionado acesso ao subtipo MIME dos anexos com
TPdf.AttachmentType - Adicionado
anRedactaTPdfAnnotationSubtypee adicionados auxiliares de remoção de objectos de página paraTPdfeTPdfView - Actualizadas as demos de visualizador e anexos para mostrarem a nova informação de idioma e tipo de anexo quando disponível
Version 1.5.1
- Adicionado
dmTwoPageContinuousWithCoverparaTPdfViewpara que os esquemas de visualização possam mostrar a primeira página sozinha e depois continuar com espalhamentos de duas páginas - Actualizadas as demos MultiPageViewer de Delphi, C++Builder e Lazarus para exporem o modo de visualização em duas páginas com consciência da capa
Version 1.5.0
- Adicionadas suites automatizadas de testes smoke para Delphi (
DUnitX), Lazarus (FPCUnit) e C++Builder (GoogleTest). As três suites partilham um único PDF de fixture emTests\TestDatae executam os mesmos sete casos cada, cobrindo carregamento de documento, informação de página, extracção de texto, metadados, round-trip de gravação, validação do cabeçalho PDF e a propriedadeCompressed
Version 1.4.3
- Melhorada a demo FontProperties para mostrar as APIs de metadados de fontes de
TPdfVieweTPdf, incluindo handles de fonte, tamanho dos dados da fonte e métricas de carácter - Adicionadas propriedades indexadas de inspecção de caracteres e fontes em
TPdfViewe actualizada a demo FontProperties para consultar metadados de fontes de objectos de texto
Version 1.4.2
- Adicionadas propriedades indexadas de inspecção de caracteres e fontes a
TPdfpara análise de texto sem necessidade de um visualizador. As propriedades indexadas por carácter (CharacterAngle,CharacterFontSize,CharacterFontWeight) consultam métricas por carácter a partir do fluxo de texto da página actual. As propriedades indexadas por objecto de página (FontAscent,FontBaseName,FontData,FontDescent,FontFamilyName,FontHandle,FontIsEmbedded,FontItalicAngle,FontWeight) consultam metadados da fonte para qualquer objecto de texto na página actual - Os objectos de página que não são texto devolvem valores zero ou vazios seguros para todas as propriedades Font* em vez de lançarem um erro, tornando simples iterar por todos os objectos de página e inspeccionar apenas os de texto
FontBaseNamelê directamente o nome base PostScript da fonte em vez de recorrer ao nome da família da fonte, fornecendo um identificador mais exacto para fontes incorporadas
Version 1.4.1
- Adicionadas versões C++Builder e Lazarus da demo EuropeanText para que todas as famílias IDE suportadas possam verificar a geração de texto europeu acentuado com fontes TrueType do sistema
- Adicionadas versões C++Builder e Lazarus da demo FormFill, incluindo PDFs de formulário de amostra, edição de campos, regeneração de aparência, gravação preenchida e fluxos de trabalho de gravação achatada
Version 1.4.0
- Adicionado suporte a Lazarus / Free Pascal: o novo pacote
PDFiumLazfornece os mesmos componentesTPdf,TPdfViewe relacionados sob o conjunto de widgets LCL, estendendo a biblioteca ao IDE Lazarus e ao compilador Free Pascal ao lado dos pacotes Delphi e C++Builder existentes - Adicionadas versões Lazarus das demos para que os developers Lazarus possam explorar todas as funcionalidades com exemplos executáveis
- Corrigido um problema de compilação Lazarus em que as definições condicionais do Free Pascal eram avaliadas em conjunto com verificações de versão do compilador Delphi, fazendo com que as compilações FPC tentassem resolver nomes de unidades específicos de Delphi e falhassem
Version 1.3.1
- Documentado o fluxo de trabalho de flattening de formulários no conjunto de ajuda:
GenerateFormAppearances,FlattenPage,FlattenAllPagese as constantes relacionadasFLAT_*/FLATTEN_*estão agora cobertas emTPdf,TPdfView, na referência da API, na matriz de funcionalidades e nos exemplos de programação - Corrigida a tabela de arquitectura na página de visão geral para que liste as unidades de ligação reais enviadas na pasta Lib
Version 1.3.0
- Melhorado o suporte a caracteres europeus ao criar PDFs.
TPdf.AddTextcarrega e guarda em cache a fonte TrueType do sistema correspondente antes de criar um objecto de texto, preservando caracteres acentuados do Checo, Francês, Alemão, Espanhol, Português, Polaco e Turco que as fontes standard incorporadas do PDFium não conseguem representar - As aplicações que anteriormente produziam pontos de interrogação ou glifos de substituição para texto latino não ASCII passam agora a renderizar correctamente sem qualquer alteração de código. Adicionada a demo EuropeanText para ilustrar a funcionalidade
Version 1.2.0
- Adicionada actualização da aparência AcroForm a
TPdf: chamarGenerateFormAppearancesapós modificar valores deFormField[]actualiza a aparência do widget para que os valores preenchidos fiquem visíveis em leitores PDF standard sem exigir uma sessão de edição interactiva - Adicionados auxiliares de flattening de formulários a
TPdf(FlattenPage/FlattenAllPages) eTPdfView(FlattenPagepara a página actual da vista). O flattening incorpora permanentemente os valores preenchidos dos campos como conteúdo normal da página e remove a camada de formulário interactiva, produzindo um documento estático que é renderizado de forma consistente em todos os visualizadores - Adicionado
Demo\Delphi\FormFillpara demonstrar os fluxos de trabalho fill-and-save e fill-and-flatten com um PDF AcroForm de amostra
Version 1.1.2
- Adicionada compressão do fluxo PDF no momento da gravação. A nova propriedade
TPdf.Compressed(activada por predefinição) reescreve fluxos de conteúdo não comprimidos como fluxos comprimidos FlateDecode na gravação, reduzindo significativamente o tamanho do ficheiro para PDFs gerados programaticamente. As aplicações que precisem de saída simples sem compressão podem definirCompressedcomo False antes de chamarSaveAs
Version 1.1.1
- As compilações do pacote Win64 já não incluem unidades de registo em tempo de desenho, evitando falhas em tempo de compilação quando o pacote Win64 é implantado num contexto apenas de execução
- O carregador de DLL do PDFium procura agora primeiro no subdirectório da aplicação Win32 ou Win64, usando os nomes standard
pdfium.dllepdfium.v8.dll, e depois recua para a pasta plana da aplicação e para o directório de sistema do Windows. Isto corresponde ao layout de DLL incluído no pacote do componente, tornando a instalação simples
Version 1.1.0
- Corrigido um defeito visual de clipping no modo de duas páginas de
TPdfView: o conteúdo da página estava a atravessar a calha porque os mosaicos da página esquerda e direita partilhavam um único rectângulo de clipping. Cada mosaico faz agora clipping de forma independente para que o conteúdo permaneça dentro do limite da sua página - Melhorada a mensagem de erro da demo Delphi quando o DLL do PDFium não pode ser encontrado, fornecendo um pedido mais claro com o nome de DLL esperado e a localização