Aparências portáteis de password no XFA
Unit: HPDFXFAHeadless
HPDFXFAWriteHeadlessPDF consome campos XFA passwordEdit como widgets nativos de texto com a flag de password do PDF e uma aparência mascarada com fonte embutida no Windows e no Linux
A aparência contém um asterisco por valor de Unicode scalar: um caractere suplementar representado por um surrogate pair UTF-16 produz um asterisco, enquanto combining marks e ZWJ contribuem cada um com seu próprio asterisco
O /V nativo retém o valor Unicode autorado completo; o mascaramento de aparências não fornece criptografia nem remove esse valor do PDF
Por exemplo, A😀B produz três asteriscos, e é produz dois porque o acento combinante é um scalar separado
Limites e cancelamento
O adapter checa o cancelamento enquanto conta os scalars e checa o orçamento agregado restante de glyphs antes de alocar a string da máscara
TXFAHeadlessPDFResult.GlyphUnits conta os asteriscos realmente gerados para aparências de password; a contabilidade UTF-16 existente para texto comum e outros consumers de aparências permanece inalterada
Dois caracteres suplementares cabem num orçamento restante de MaxGlyphs de dois; um orçamento de um falha antes da alocação da máscara
O valor original permanece sujeito aos limites de entrada e de object-bytes, e todos os campos compartilham o orçamento agregado de aparências
Falhas de preparação, orçamento e cancelamento deixam a posição, o comprimento e os bytes existentes do destino do chamador inalterados; erros de gravação no destino seguem o comportamento de partial-write do próprio stream
Verificação
Tests/Linux/XFAHeadlessPasswordTests.pas e os runners de password do Windows e do Linux verificam orçamentos exatos, fronteiras de cancelamento, preservação de streams e comportamento de retry
O verifier independente checa valores nativos, flags, sequências CID reais do AP, ToUnicode e glyph IDs embutidos, e depois renderiza e extrai os PDFs salvos com MuPDF
Criação automática de XFA descreve os demais consumers nativos de campos e desenhos