Optional Document Handlers
THPDFDocumentHandlerRegistry seleciona handlers substituíveis pelo conteúdo inspecionado antes de dicas fracas de extensão ou MIME, e depois converte a origem selecionada em um cache PDF imutável compartilhado por exportação e renderização
Handlers opcionais embutidos
- XPS e OpenXPS mantêm dimensões de página fixas e ordem visual, convertem geometria abreviada
Pathautoencerrada ou com propriedades em vetores nativos do PDF, preservam brushes sólidos de atributos e elementos de propriedade, padrões de shadingLinearGradientBrushmulti-stop eRadialGradientBrushelípticos, e preenchem paths por meio de recursos de pacote JPEG, PNG, TIFF ou JPEG XRImageBrushcomTileMode=None - Os preenchimentos de imagem XPS suportam o mapeamento absoluto ou
RelativeToBoundingBoxdeViewboxeViewport, os modos de tileNone,Tile,FlipX,FlipYeFlipXY, clipping nativo de path e de posicionamento, atributosTransformfinitos de seis parâmetros ou elementosImageBrush.TransformcomMatrixTransform, opacidade de brush e de path, alpha de soft mask PNG, DPI da imagem e cache de recursos do pacote - XPS
Path.OpacityMasksuporta gradiente sólido, linear multi-stop ou radial elíptico, e máscaras PNGImageBrush, incluindo células de imagem repetidas e refletidas; alfa uniforme é incorporado aos graphics states existentes, enquanto alfa variável usa transparency groups nativos DeviceGray limitados que compartilham padrões de shading e streams de soft mask de imagem Opacityde Canvas XPS eCanvas.OpacityMaskcompõem os descendentes sobrepostos uma única vez, por meio de Form XObjects DeviceRGB isolados, em vez de atenuar cada filho de forma independente; o alpha uniforme da máscara é incorporado ao estado do grupo, o alpha variável de gradiente ou de imagem PNG reaproveita recursos nativos de soft mask, e grupos aninhados preservam clips transformados, a posse dos recursos e link annotations limitadas, dentro dos limites de 4.096 grupos e 16 MiB de conteúdo capturado por grupoVisualBrushdo XPS converte recursivamente visuaisCanvas,PatheGlyphsinline ou baseados em recursos, resolve escopos deResourceDictionaryaninhados e remotos, mapeia umViewboxabsoluto para umViewportabsoluto ou relativo e reaproveita um único Form XObject PDF limitado em posicionamentos diretos, em tile e refletidosCanvas.Clipdo XPS aceita geometria abreviada limitada, valoresStaticResourcelocais ou remotos do tipoPathGeometrye property elements diretos com figuras estruturadas de linha, Bézier, quadráticas ou de arco, transformações de geometria, geometria vazia e regras de preenchimentoEvenOddouNonZero; clips aninhados viram paths nativos PDFW*ouW, os retângulos de navegação são intersectados com os limites do clip transformado ativo, o parsing é limitado a 100.000 valores numéricos, e clips malformados ou singulares falham de forma fechada antes de qualquer visual filho ser pintadoGlyphsdo XPS aceita no máximo 65.536 mapeamentosIndicesestritos, mantém a progressão de clusters um-para-muitos e muitos-para-um, avanços explícitos em centésimos de em, deslocamentos horizontais e verticais, progressão reversa paraBidiLevelímpar, preenchimentos sólidos por atributo ou property element, opacidade, extração de Unicode e diagnósticos de entrada malformada com falha fechada; runs simples usam arraysTJnativos do PDF, e buffers de mapeamento grandes crescem com custo linear amortizado- Recursos de pacote
FontUrisuportam programas TrueType e OpenType, fragmentos de membros TTC e fontes ofuscadas por GUID do XPS; IDs exatos de glifos, runs derivados de cmap, clusters, avanços, offsets, origens RTL, reutilização de recursos de fonte, permissões de embutimento, subsetting opcional e mapas de extraçãoToUnicodepermanecem dados nativos de fontes do PDF sem substituição por GDI FixedPage.NavigateUrido XPS em visuaisPatheGlyphstransformados vira uma link annotation nativa do PDF, com limites derivados da geometria ou das métricas; links HTTP, HTTPS e mail continuam como ações URI, enquanto páginas relativas ao pacote e fragmentosLinkTargetdecodificados de percent-encoding viram ações GoTo para frente ou para trás depois que todas as páginas estão disponíveis- Um Canvas
FixedPage.NavigateUrivira o destino herdado de todo visual descendentePath,Glyphsou Canvas aninhado até que um descendente forneça o próprio URI; destinos com escopo restauram após sobrescritas aninhadas, seguem a geometria e a transform de cada visual, permanecem limitados pelos clips ativos de Canvas, sobrevivem à captura isolada de grupos de opacidade e ficam suprimidos dentro de Forms reutilizáveisVisualBrush - A navegação é limitada a 65.536 links com 8.192 caracteres por URI, checada quanto a cancelamento durante a publicação, suprimida durante a captura de
VisualBrushreutilizável e rejeitada para caracteres de controle, schemes inseguros, alvos ausentes ou incompatibilidades de path e fragmento RelativeTransformfora do padrão, recursos de matriz não resolvidos, espalhamento de gradiente Repeat ou Reflect, interpolação não sRGB, brushes de pintura com alfa variável, conversão de cor, strokes de imagem, viewboxesVisualBrushrelativas, simulação de estilo, glifos deitados e propriedades avançadas de stroke permanecem diagnósticos explícitos- EPUB resolve
container.xml, manifest e ordem do spine, e depois usa o importador limitado de paged media HTML5 com recursos de pacote somente por callback - CBZ reconhece entradas de imagem suportadas, aplica ordem natural determinística de nomes de arquivo e cria uma página por imagem no DPI de imagem configurado
Orçamentos e isolamento de falhas
Um único scan validado do central directory do ZIP impõe limites de entradas, bytes comprimidos, bytes expandidos, por entrada, paths duplicados, paths inseguros e razão de compressão antes da conversão
Entradas ZipCrypto do PKZIP clássico podem pedir credenciais por meio de ArchivePasswordCallback; o callback recebe o nome da origem, o nome da entrada e um número de tentativa de base um, enquanto MaxPasswordAttempts limita as retries de 1 a 16
Credenciais e bytes de entrada parcialmente decodificados permanecem em memória e são limpos entre tentativas, o cancelamento é checado antes e depois de todo callback, e callbacks ausentes, credenciais declinadas, retries esgotadas ou criptografia não suportada falham fechados
ZipCrypto é proteção por senha legada em vez de criptografia autenticada moderna, e as convenções de bytes de senha não ASCII podem variar entre produtores de ZIP
Entradas protegidas por senha precisam de Delphi 12 ou posterior, cujo System.Zip expõe o hook de descriptografia; construídos com uma versão anterior do Delphi, os handlers ainda leem entradas não criptografadas, mas rejeitam as criptografadas como não suportadas antes que ArchivePasswordCallback seja chamado
Entradas cujos tamanhos ou offsets precisam de campos ZIP64 exigem Delphi 11 ou posterior; versões anteriores do Delphi as rejeitam como não suportadas
Limites de recursos, reflow, página, pixel, DPI, saída e cancelamento permanecem ativos durante toda a conversão e renderização, enquanto a publicação de saída falha restaura um stream de destino posicionável
Registro e uso
var
Registry: THPDFDocumentHandlerRegistry;
Options: THPDFDocumentHandlerOptions;
Handled: IHPDFHandledDocument;
Info: THPDFDocumentHandlerInfo;
begin
Registry:= THPDFDocumentHandlerRegistry.Create;
try
Registry.RegisterStandardHandlers;
Options:= THPDFDocumentHandlerOptions.Default;
Options.ArchivePasswordCallback:= SupplyArchivePassword;
if Registry.OpenFromFile('book.epub', '', Options, Handled, Info) then
Handled.WritePDF(OutputStream, Options, Info);
finally
Registry.Free;
end;
end;