Documentação HotXLS / Referência da API

Saída headless portátil

Disponível desde a versão 2.384.100 como um pipeline de saída limitado, com APIs explícitas de captura e renderização

Capture um retângulo com suporte de uma pasta de trabalho Classic XLS ou XLSX no Windows, transfira o snapshot imutável dele e renderize PDF, SVG ou PNG no Linux ou no macOS com Free Pascal e Cairo nativo

O adaptador de captura usa o motor da pasta de trabalho; a captura no Windows usa o serviço de geometria padrão dele, enquanto a captura nativa no Linux e no macOS pode fornecer um serviço de geometria FreeType/HarfBuzz explícito apoiado em arquivos de fonte selecionados pela aplicação

O consumidor nativo separado aceita cenas lxPortableRender por meio de lxPortableCairo, sem Excel nem sessão de desktop; a API de geometria dele também usa as unidades existentes de view portátil de pasta de trabalho e de geometria de renderização

O consumidor aceita uma cena imutável ou um stream de transferência; os requisitos de plataforma para carregar e calcular pastas de trabalho são descritos separadamente no suporte a Free Pascal

Capturar um retângulo de pasta de trabalho existente

CaptureXLSPortableRenderSnapshot em lxPortableWorkbookCapture aceita um IXLSWorkbook ou IXLSXWorkbookOwner, com TXLSPortableRenderLimits explícito ou padrão; dois overloads adicionais aceitam limites explícitos seguidos de um provedor IXLSRenderGeometry com escopo da view de captura

SheetIndex e Row1, Col1, Row2, Col2 inclusivos têm base um; o snapshot resultante armazena posições com base zero relativas ao retângulo capturado

program CaptureRectangle;
{$APPTYPE CONSOLE}
uses SysUtils, Classes, lxHandleX, lxPortableRender,
  lxPortableWorkbookCapture;
var
  Workbook: TXLSXWorkbook;
  Owner: IXLSXWorkbookOwner;
  Snapshot: IXLSPortableRenderSnapshot;
  Stream: TFileStream;
begin
  Workbook := TXLSXWorkbook.Create;
  Owner := Workbook;
  if Workbook.Open('report.xlsx') <> 1 then
    raise Exception.Create('Cannot open report.xlsx');
  Snapshot := CaptureXLSPortableRenderSnapshot(Owner, 1, 1, 1, 30, 6);
  Stream := TFileStream.Create('report.hxrs', fmCreate);
  try
    SaveXLSPortableRenderSnapshot(Snapshot, Stream,
      XLSDefaultPortableRenderLimits);
  finally
    Stream.Free;
  end;
  Owner := nil;
end.

Mantenha a interface de dono viva enquanto usa o objeto de pasta de trabalho; libere a interface em vez de liberar manualmente uma pasta de trabalho de propriedade da interface

Para XLS Classic, use TXLSWorkbook e IXLSWorkbook de lxHandle com a mesma chamada de captura

A captura lê os caches de fórmula existentes e rejeita qualquer fórmula no retângulo sem cache; ela nunca recalcula implicitamente, busca dados externos nem registra novos estilos na pasta de trabalho de fonte

Recalcule explicitamente antes da captura quando a sua aplicação precisar de resultados de fórmula frescos; um cache existente é renderizado como armazenado, então a captura não certifica a frescura dele

A operação mantém uma view de leitura e verifica a geração da pasta de trabalho antes de retornar; o snapshot retornado é desanexado da propriedade da pasta de trabalho e continua utilizável depois que a pasta de trabalho é liberada

Aparência e limites de captura

O snapshot contém texto de exibição formatado, dimensões físicas em pontos, cores RGB resolvidas, fontes e alinhamentos de célula com suporte, preenchimentos, bordas e retângulos mesclados completos; linhas e colunas ocultas têm tamanho zero

A aparência de fonte com suporte inclui negrito, itálico, sublinhado simples e tachado; a aparência de célula com suporte inclui preenchimentos sólidos, alinhamento horizontal à esquerda/centro/direita, alinhamento vertical superior/central/inferior, quebra de linha, redução e ordem de leitura da direita para a esquerda

Bordas de pasta de trabalho thin, medium, thick, hair, double, dotted, dashed e medium-dashed mapeiam para os estilos de borda portáteis e larguras em pontos; outros estilos de borda são rejeitados

Rich text com suporte carrega fontes efetivas de run, tamanhos em pontos, cores RGB, negrito, itálico, sublinhado simples, tachado e sobrescrito ou subscrito no nível de run; efeitos de fonte de célula simples de contorno/sombra/vertical, estilos de sublinhado sem suporte, preenchimentos com gradiente ou padrão, bordas diagonais, recuo, rotação de texto e alinhamentos sem suporte são rejeitados

Um retângulo de captura deve conter cada célula mesclada completamente; mesclagens cortadas, sobrepostas ou inconsistentes e estilos incompatíveis ao longo de uma borda externa mesclada são rejeitados

Fundos de planilha e tipos de planilha sem suporte rejeitam a captura; imagens PNG/JPEG com suporte e formas de texto comuns de retângulo/elipse nas duas fachadas de pasta de trabalho são capturadas como objetos de cena ordenados, junto com imagens de célula XLSX, caixas de seleção Boolean e o subconjunto com suporte de gráficos XLSX em cache descrito abaixo; gráficos sem suporte, presets de forma, WordArt, transformações agrupadas, controles flutuantes, Slicers, Timelines e sparklines são rejeitados quando as pegadas resolvidas deles cruzam o retângulo

Conteúdo sem suporte com pegada resolvida de forma confiável fora do retângulo pode coexistir com a captura; uma pegada de desenho não resolvível é rejeitada em vez de omitir silenciosamente conteúdo potencialmente sobreposto

Estilização de tabela Classic que cruza o retângulo é rejeitada; seções de Table internas do XLSX e personalizadas com suporte são resolvidas em contexto de estilo desanexado, com faixas do tamanho da seção e sobreposições diretas de formato de célula

Para preenchimentos diferenciais sólidos ou implícitos importados de Table com suporte, o bgColor RGB fornece o fundo visível; apenas o fgColor RGB deixa o fundo herdado inalterado, e uma seção que carrega as duas cores usa a cor de fundo dela

Seções de Table importadas contendo aparência que o resumo tipado não consegue representar são rejeitadas quando a seção se aplica, incluindo sublinhado, formatos de número, negrito/itálico explicitamente limpos, esquemas de fonte, um padrão explícito de sem preenchimento e formas de cor sem suporte; uma seção sem relação fora do retângulo capturado não bloqueia a captura

Formatação condicional com suporte é aplicada sem avaliação de fórmula: comparações de número ou data em cache contra limites numéricos literais, expressões literais Boolean ou numéricas, regras de contenção/prefixo/sufixo de texto, brancos e erros; a aparência de prioridade mais alta vence por propriedade com suporte, e o StopIfTrue XLSX interrompe regras correspondentes de prioridade mais baixa

Regras de texto Classic exigem uma agulha de string literal e correspondem a células de string em cache; regras de texto XLSX usam os critérios de texto armazenados delas

A aparência diferencial com suporte inclui cores de tema resolvidas com tonalidade e cores indexadas simples; cores automáticas importadas, tonalidade fora do tema, um preenchimento diferencial que carrega cores de primeiro plano e de fundo e aparência diferencial sem suporte de borda, alinhamento, tachado ou outra não representada são rejeitados quando a regra correspondente se aplica

Fórmulas condicionais que exigem avaliação, regras de agregação ou dependentes de data, escalas de cores, barras de dados e conjuntos de ícones são rejeitados onde encontrados; as contagens de regras de formatação condicional sobrepostas são limitadas

A conversão Date1904 escolhe a seção aplicável de formato numérico bruto antes de aplicar o offset de calendário; seções de calendário inativas não alteram a exibição numérica comum, e valores Boolean permanecem Boolean

Uma seção de calendário Date1904 selecionada combinada com condições de formato ou construções de tempo decorrido é rejeitada; separadores de seção entre aspas ou escapados também são rejeitados, e este limite não bloqueia uma seção numérica comum selecionada apenas porque outra seção é um formato de calendário

Rich text e cenas de desenho ordenadas

TXLSPortableCell.RichText é um array de records TXLSPortableTextRun contendo Text, FontFamily, FontSizePoints, FontStyles, ColorRGB e BaselineShiftPoints; o texto de runs concatenado deve ser igual ao texto de exibição da célula exatamente

Runs XLSX herdam propriedades omitidas da fonte efetiva capturada da célula, incluindo formatação de tabela e condicional com suporte; sinalizadores false atribuídos explicitamente e valores explícitos de cor none/baseline/automática sobrepõem a herança

Shared strings nativas e strings inline preservam limites de run e espaços em branco; filhos de fonte nativos sem suporte, atributos, namespaces, rich colors de tema/indexados e anotações fonéticas são rejeitados em vez de perder silenciosamente a aparência visível

Runs Classic resolvem os índices de fonte BIFF armazenados deles para fontes efetivas completas de run; metadados fonéticos e fontes de run sem suporte são rejeitados, e a captura retém a geração da pasta de trabalho e os pools de estilo

Formas de texto Classic leem propriedades OfficeArt existentes e runs de fonte TXO sem criar wrappers de desenho nem alterar a pasta de trabalho; âncoras usam dimensões e offsets reais de linha/coluna, preenchimentos sólidos e contornos com suporte retêm as cores e larguras deles, e os bytes PNG/JPEG embutidos são desanexados antes da transferência

Texto de retângulo usa as margens nativas de 7.2pt na horizontal e 3.6pt na vertical; texto de elipse usa adicionalmente o retângulo de texto inscrito dele, mantendo o texto comum dentro do contorno da forma nas duas fachadas de pasta de trabalho

Contêineres Classic importados de retângulo e elipse retêm o texto tipado e a formatação deles; metadados nativos pulados de forma ou de grupo sem pegada resolvida rejeitam a captura explicitamente, enquanto records desconhecidos de cauda de objeto, extensões de desenho, rotação, preenchimentos não sólidos e estilos de linha sem suporte rejeitam um objeto que cruza o retângulo

Âncoras XLSX importadas de retângulo e elipse de duas células aceitam preenchimentos sólidos RGB explícitos com alfa, contornos sólidos ou tracejados/pontilhados, offsets físicos de âncora e um único parágrafo comum de rich text; cada run retém a fonte efetiva, o tamanho em pontos, a cor, o negrito, o itálico, o sublinhado simples e o tachado dele, incluindo reinícios explícitos de negrito ou itálico

O reader de formas importadas reserva armazenamento de rascunho de XML bruto antes da análise e verifica orçamentos de itens, bytes e texto cooperativamente; ele retém a ordem de desenho da pasta de trabalho e concessões de leitura sem criar modelos de forma nem células ausentes

Propriedades nativas de forma desconhecidas, efeitos, temas, rotações, transformações agrupadas, parágrafos múltiplos e tipos de âncora sem suporte são rejeitados explicitamente; uma pegada sem suporte resolvida fora do retângulo de captura não bloqueia a região solicitada

Sobrescrito e subscrito no nível de run usam dois terços do tamanho da fonte do run e um deslocamento de linha de base de um terço do tamanho original em pontos dele; um limite de estilo que divide um cluster de modelagem Unicode, ou uma sequência CRLF cruzando limites de run incompatíveis, é rejeitado durante o layout nativo

TXLSPortableSceneObject carrega um Kind, X, Y, Width, Height em pontos, retângulo de recorte, cores e opacidade de preenchimento/contorno, pontos de caminho opcionais, célula de texto ou bytes e dimensões de raster codificados

TXLSPortableSceneKind contém xpskRectangle, xpskEllipse, xpskPolyline, xpskPolygon, xpskText, xpskPNG e xpskJPEG; a ordem do array é a ordem de desenho, com objetos posteriores cobrindo objetos anteriores

O overload adicional de CreateXLSPortableRenderSnapshot aceita um array TXLSPortableSceneObjects; consulte IXLSPortableRenderSceneSnapshot para Objects e ObjectCount com base zero, cujos getters retornam cópias desanexadas, incluindo arrays de run, ponto e raster

Imagens de célula e caminhos de caixa de seleção precedem desenhos flutuantes; desenhos flutuantes retêm a ordem da pasta de trabalho, âncoras físicas e recorte de viewport, e formas de texto usam a fonte de tema secundária a 11 pontos, com margens de texto de 7.2 pontos na horizontal e 3.6 pontos na vertical

Imagens PNG e JPEG são decodificadas nativamente após preflight de cabeçalho, tamanho de pixel e bytes; imagens flutuantes com suporte retêm transparência e geometria de estiramento, enquanto imagens de célula cabem dentro da célula ou do retângulo mesclado completo, com a proporção delas preservada

Recorte, rotação, sombras, ajuste de luminância/gamma, tiling, companheiros SVG e vínculos de câmera dinâmica continuam sem suporte; o XML de imagem preservado é validado contra a aparência com suporte, de modo que imagens ocultas, metadados aninhados desconhecidos, propriedades com namespace estrangeiro, geometria de imagem não retangular e transformações não modeladas são rejeitadas apenas quando a pegada delas sobrepõe a captura

Caixas de seleção Boolean de célula usam uma caixa vetorial neutra de tema e uma marca de verificação opcional, incluindo controles efetivos herdados de formatos de linha e coluna; o caminhamento de células solicitado é limitado antes da travessia, outros tipos de controle e valores de caixa de seleção em branco ou não Boolean são rejeitados, e cenas de célula com suporte suprimem texto de fallback de Boolean escalar ou de erro de imagem

Um padrão de caixa de seleção é um metadado de inserção e não fabrica um Boolean para uma célula ausente; a limpeza explícita de controle de célula direta mascara um controle herdado, enquanto as leituras de captura preservam a ausência esparsa e a geração da pasta de trabalho

XLSReadPortableImageDimensions valida um IHDR PNG limitado ou um frame JPEG sequencial/progressivo de oito bits com suporte e retorna a largura e a altura declaradas dele; a decodificação continua sendo responsabilidade do renderer

IXLSPortableSceneCaptureSource.ReadPortableSceneObjects usa coordenadas de pasta de trabalho com base um e coordenadas de cena em pontos relativas ao intervalo, valida o intervalo e os limites cooperativos e retorna as contagens consumidas de bytes, texto e itens; HasPortableCellScene identifica células cuja exibição escalar é substituída pela cena capturada delas

O CellCount de layout nativo conta células da grade e o LineCount também inclui objetos de cena de texto; o CellIndex de linha de um objeto de texto é o CellCount mais a sequência com base zero dele entre os objetos de cena de texto, enquanto GetCellGeometry permanece restrito a células da grade

Snapshots escalares continuam sendo serializados como HXRSNP01; snapshots contendo runs ou objetos de cena são serializados como HXRSNP02, e o loader aceita as duas versões com o mesmo contrato imutável de propriedade e de reversão de posição de entrada

O orçamento combinado de itens conta células armazenadas, runs de rich text, objetos de cena e pontos de caminho; os limites de bytes levam em conta arrays preparados e desanexados, texto, payloads de raster codificados e inspeção limitada de metadados nativos antes da alocação

API portátil de snapshot

SímboloContrato
EXLSPortableRenderExceção disparada para dados de snapshot inválidos, aparência de captura sem suporte, backend nativo indisponível, limites de recursos ou falhas de renderização
TXLSPortableFontStyle, TXLSPortableFontStylesxpfsBold, xpfsItalic, xpfsUnderline e xpfsStrikeout, combinados como um set
TXLSPortableHorizontal, TXLSPortableVerticalxphLeft, xphCenter, xphRight e xpvTop, xpvCenter, xpvBottom
TXLSPortableBorderStyle, TXLSPortableBorderxpbsNone, xpbsSolid, xpbsDashed, xpbsDotted e xpbsDouble; cada borda carrega Style, WidthPoints e ColorRGB
TXLSPortableCellRow/Column com base zero, RowSpan/ColumnSpan positivos, Text de exibição, FontFamily, FontSizePoints, FontStyles, TextColorRGB, FillColorRGB, HasFill, WrapText, ShrinkToFit, RightToLeft, Horizontal, Vertical e quatro records LeftBorder/TopBorder/RightBorder/BottomBorder
TXLSPortableCells, TXLSPortableSizesArrays dinâmicos de células armazenadas e de tamanhos físicos de linha/coluna em pontos
TXLSPortableRenderLimitsMaxGridCells, MaxStoredCells, MaxBytes e MaxTextCharacters limitam construção, captura e serialização
XLSDefaultPortableRenderLimitsRetorna 2000000 células de grade, 2000000 células armazenadas, 67108864 bytes e 16777216 caracteres de texto UTF-16
XLSDefaultPortableCellInicializa um span de uma célula com Calibri a 11 pontos e aparência padrão com valor zero; defina a posição e a aparência desejada dele antes da construção
CreateXLSPortableRenderSnapshotValida e copia geração, alturas de linha, larguras de coluna e células armazenadas para uma interface imutável desanexada; as células devem ser únicas, em ordem linha a linha, dentro dos limites e com spans sem sobreposição
IXLSPortableRenderSnapshotGeneration, RowCount, ColumnCount, CellCount somente leitura, RowHeightPoints, ColumnWidthPoints com base zero e records Cells copiados
Métodos getters de snapshotGetGeneration, GetRowCount, GetColumnCount, GetCellCount, GetRowHeight, GetColumnWidth e GetCell expõem os mesmos valores; acesso indexado inválido dispara uma exceção
SaveXLSPortableRenderSnapshotValida e serializa um snapshot para um buffer privado limitado, depois copia o payload completo de HXRSNP01 ou HXRSNP02 para o stream fornecido na posição atual dele
LoadXLSPortableRenderSnapshotLê o snapshot versionado little-endian com texto UTF-8 estrito, valida contagens, geometria, estilos e spans e rejeita dados à direita; uma falha restaura a posição do stream de entrada

Todos os limites devem ser positivos; o máximo validado é 2000000 células de grade/armazenadas, 1073741824 bytes e 268435456 caracteres de texto, com dimensões de no máximo 1048576 linhas por 16384 colunas

MaxGridCells conta o retângulo inteiro, incluindo células em branco não armazenadas; o CellCount conta células visíveis armazenadas e âncoras mescladas, e pode ser menor

Generation registra a geração da fonte ou um valor fornecido pela aplicação; é um metadado, e não um link vivo para uma pasta de trabalho nem uma verificação automática de frescura

Renderização nativa e fontes explícitas

XLSPortableCairoBackendAvailable relata a disponibilidade do backend nativo compilado; a saída nativa exige Free Pascal no Linux ou no macOS, com as bibliotecas Cairo, FreeType, HarfBuzz e FriBidi disponíveis para o processo

Builds de macOS vinculam as quatro bibliotecas nativas explicitamente; um prefixo privado de dependências e um caminho explícito de loader de processo filho podem fornecê-las sem alterar configurações compartilhadas de compilador nem perfis de shell

Delphi XE5 no Windows, Win32 e Win64 podem compilar as interfaces portáteis e usar a serialização de snapshot, mas a preparação nativa de layout Cairo relata indisponibilidade de backend nesse ambiente

Passe uma cadeia de fontes explícita a PrepareXLSPortableCairoLayout; o renderer tenta primeiro a família e o estilo negrito/itálico correspondentes, depois os fallbacks do mesmo estilo na ordem fornecida, exigindo cobertura de glifos para cada cluster de texto com suporte

Forneça os arquivos reais regular, negrito, itálico e negrito-itálico que o seu conteúdo capturado exigir; não ocorre descoberta de fontes do sistema nem substituição sintética de negrito/itálico, e arquivos, mapeamentos de estilo ou cobertura de glifos ausentes são rejeitados

Os bytes de fonte são capturados antes da modelagem, de modo que alterar um arquivo afeta layouts posteriores enquanto um layout existente retém os bytes capturados dele; FaceIndex seleciona a face não negativa em um arquivo ou coleção de fontes

Operações nativas são serializadas para a segurança de faces do FreeType; snapshots imutáveis e inspeção de layout preparado não exigem uma pasta de trabalho viva

Fonts[0].FamilyName := 'Calibri';
Fonts[0].FileName := '/srv/fonts/Regular.ttf';
Fonts[0].FaceIndex := 0;
Fonts[0].Bold := False;
Fonts[0].Italic := False;

Aqui Calibri é um alias explícito de família para o arquivo escolhido, permitindo um mapeamento de fontes controlado pela aplicação; inspecione as métricas de saída ao mapear para uma fonte diferente

O renderer aceita quebras de linha duras, expansão de tabulação de quatro espaços, ordenação bidirecional de parágrafo, ligaduras modeladas e marcas combinantes, quebra de linha gulosa e reduzir para caber; a quebra tem precedência sobre a redução

A quebra de linha preserva os limites implementados de clusters de marcas combinantes, seletores de variação, ZWJ e virama, e favorece espaços e espaços ideográficos; não é uma implementação completa de grafemas do UAX #29 nem do algoritmo de quebra de linha Unicode, e os limites de quebra de regional-indicator e Hangul-Jamo não são garantidos

Tamanhos de fonte resolvem para 1/64 de ponto e o texto é recortado nos limites da célula; o PDF embute fontes explícitas com mapeamentos lógicos de texto, o SVG usa caminhos vetoriais de glifos, e o PNG desenha os mesmos glifos posicionados no DPI solicitado

Preparar e inspecionar um layout

SímboloContrato
TXLSPortableFontFile, TXLSPortableFontFilesUm mapeamento explícito contém FamilyName, FileName, FaceIndex, Bold e Italic; o array dinâmico é ordenado e contém entre 1 e 64 mapeamentos
TXLSPortableCairoFormat, TXLSPortableOutputFilesxpcfPDF, xpcfSVG ou xpcfPNG, e um array de nomes de arquivo de saída retornado pelo salvamento em arquivo
TXLSPortableCairoOptionsLargura/altura de página, quatro margens, padding de célula e DPI de raster, além de limites de página, glifo, linha, layout, saída, fonte, modelagem e desenho
XLSDefaultPortableCairoOptionsInicializa cada opção com padrões limitados; use-o antes de sobrepôr campos individuais
PrepareXLSPortableCairoLayoutValida e copia um snapshot, captura bytes de fonte explícitos e retorna um TXLSPortableCairoLayout preparado próprio; libere-o com Free
TXLSPortableCairoLayoutExpõe PageCount, LineCount, CellCount, GetTextLine, GetCellGeometry, SaveToStream, Save e Destroy
TXLSPortableTextLineInfoUm record de linha copiado tem CellIndex, GlyphCount, XPoints, BaselinePoints, WidthPoints, FontSizePoints e Text lógico
TXLSPortableCellGeometryUm retângulo copiado tem XPoints, YPoints, WidthPoints e HeightPoints no layout completo
GetTextLine(Index), GetCellGeometry(Index)Inspeção indexada com base zero de linhas preparadas e células armazenadas; índices inválidos são rejeitados

A paginação recorta tiles fixos de área imprimível na ordem primeiro-à-largura-depois-para-baixo; uma célula ou fragmento de texto que cruza limites de página aparece em toda página de interseção, sem ajuste automático de célula inteira, repetição de títulos de impressão de planilha nem interpretação de configuração de página da pasta de trabalho

Opções e limites do renderer

CamposPadrões e significado
PageWidthPoints, PageHeightPoints595 por 842 pontos
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints36 pontos cada; as margens devem deixar um retângulo imprimível positivo
CellPaddingPoints, RasterDPI2 pontos e 96 DPI; o DPI afeta as dimensões do PNG
MaxPages, MaxGlyphs, MaxLines256 páginas, 2000000 glifos modelados e 200000 linhas de texto
MaxLayoutBytes268435456 bytes para trabalho de layout limitado e verificações de superfície de raster
MaxOutputBytes268435456 bytes por buffer de saída renderizado, cobrindo o PDF completo ou uma página SVG/PNG, em vez da soma de arquivos de página separados
MaxFontBytes134217728 bytes nos arquivos de entrada de fontes explícitos de um layout
MaxShapedCharacters, MaxDrawOperations16000000 cada, limitando o trabalho de modelagem e o trabalho de desenho página por célula

Geometria inválida ou não finita e orçamentos de trabalho não positivos são rejeitados; as dimensões de página têm teto de 100000 pontos e o DPI de raster, de 1200, com verificações adicionais de bytes, contagens e área de raster antes da renderização

O pool nativo de bytes de fonte de todo o processo admite adicionalmente no máximo 256 buffers distintos e 256 MiB; bytes exatamente idênticos podem compartilhar armazenamento, e a capacidade é liberada apenas quando a face de fonte real de propriedade do Cairo libera o buffer dela

Libere cada layout ao terminar; a biblioteca não reinicia caches compartilhados do Cairo, e um layout logicamente concluído pode deixar bytes de fonte residentes enquanto o Cairo nativo ainda é dono de uma face

Gravar a saída e tratar falhas

SaveToStream(Stream, Format, PageIndex = 0) grava todas as páginas para PDF, exigindo PageIndex = 0; SVG e PNG gravam a página selecionada com base zero

A serialização de snapshot e a renderização nativa terminam em buffers privados limitados antes de copiar para o stream de destino; falhas de validação ou de renderização o preservam, mas uma falha de gravação do stream do chamador pode deixar bytes parciais e segue o comportamento de falha do próprio stream

Save(FileName, Format) grava um arquivo PDF ou um arquivo SVG/PNG por página e retorna os caminhos deles; nomes de arquivo multipágina inserem -0001, -0002 e sufixos seguintes antes da extensão

Destinos de arquivo ou diretório existentes são rejeitados; cada salvamento prepara todas as páginas, publica destinos novos exclusivos e remove as próprias saídas preparadas/publicadas em caso de falha

O sistema de arquivos deve aceitar as operações nativas de preparação exclusiva e de publicação de link; salvamentos separados de PDF, SVG e PNG são operações separadas e não formam uma transação combinada

Consumidor Linux autônomo

Tests/Portable/RenderPortableSnapshot.pas é um consumidor completo que carrega um snapshot, prepara um layout e salva os três formatos; faça o build dele no Linux com as unidades portáteis e as bibliotecas nativas instaladas

fpc -Mdelphiunicode -Fu/path/to/HotXLS/Lib RenderPortableSnapshot.pas
./RenderPortableSnapshot report.hxrs /srv/output/report fonts.tsv 595 842 96

fonts.tsv é texto UTF-8 com quatro campos separados por tabulação por mapeamento: alias de família, caminho absoluto de fonte no Linux, índice de face e um entre regular, bold, italic ou bolditalic

Calibri	/srv/fonts/Regular.ttf	0	regular
Calibri	/srv/fonts/Bold.ttf	0	bold
Calibri	/srv/fonts/Italic.ttf	0	italic
Calibri	/srv/fonts/BoldItalic.ttf	0	bolditalic

Use arquivos de fonte reais instalados ou fornecidos pela aplicação, e escolha uma nova base de saída porque arquivos de destino existentes são rejeitados; inclua fallbacks adicionais do mesmo estilo para scripts não cobertos pelo primeiro mapeamento

Stream := TFileStream.Create('report.hxrs', fmOpenRead or fmShareDenyWrite);
try
  Snapshot := LoadXLSPortableRenderSnapshot(Stream,
    XLSDefaultPortableRenderLimits);
finally
  Stream.Free;
end;
Options := XLSDefaultPortableCairoOptions;
Layout := PrepareXLSPortableCairoLayout(Snapshot, Fonts, Options);
try
  Files := Layout.Save('/srv/output/report.pdf', xpcfPDF);
  Files := Layout.Save('/srv/output/report.svg', xpcfSVG);
  Files := Layout.Save('/srv/output/report.png', xpcfPNG);
finally
  Layout.Free;
end;

Gravação de gráfico em cache

XLSRecordCachedChartScene em lxPagination grava as primitivas em pontos do renderer de layout de gráfico existente em uma representação portátil imutável de cena; a fonte dele deve ser um TXLSXChart desanexado, sem planilha proprietária e sem XML nativo preservado, de modo que a gravação não consegue resolver referências de planilha nem atualizar caches da pasta de trabalho

O subconjunto atual aceita gráficos de coluna, barra, linha, dispersão, pizza, rosca e área comum de série única, com um grupo de plotagem primário, caches de valores numéricos finitos e índices de cache limitados estritamente crescentes; caches de categoria de dispersão contêm coordenadas X numéricas, enquanto as outras famílias usam rótulos de categoria armazenados

Caches de valores de coluna, barra, linha e área devem ter índices contíguos com base zero; lacunas esparsas de valores de categoria são rejeitadas, e a gravação nunca expande índices ausentes em um array grande

Plotagens de barra retêm a geometria horizontal e os rótulos categóricos; plotagens de pizza e rosca usam legendas de categoria, honram FirstSliceAng e HoleSize e omitem eixos numéricos, enquanto plotagens de área comuns de série única retêm um polígono preenchido em torno da linha de base zero

Séries de linha e dispersão aceitam visibilidade de linha independente, cor RGB explícita e largura em pontos por meio de LineVisible, LineColorRGB e LineWidthPoints; LineStyleSet, LineColorSet e LineWidthSet distinguem configurações explícitas de padrões herdados, e EffectiveLineVisible resolve a convenção existente de séries apenas de preenchimento

Marcadores aceitam o círculo automático, um círculo explícito ou nenhum marcador; um MarkerSize explícito de 2 a 72 define o diâmetro em pontos dele, e MarkerFillSet e MarkerBorderSet distinguem um valor RGB preto explícito de zero da seleção automática de cor; os segmentos de conexão são pintados antes dos marcadores opacos de dados

Bordas de marcador explícitas sem largura armazenada usam a linha comum de 0.75 ponto, enquanto amostras de legenda limitam o diâmetro do círculo a 6 pontos; as fontes de título solicitadas são gravadas no run real de rich text, além das propriedades de texto padrão dele, retendo o tamanho visível, a cor e o ênfase delas quando o Excel exporta o gráfico

Famílias de gráfico sem suporte, plotagens de área empilhadas ou de múltiplas séries, plotagens circulares de múltiplas séries, estilos de galeria, cantos arredondados, grupos de plotagem secundários ou combinados, eixos de data, formatos de número personalizados, eixos logarítmicos, comportamento de cruzamento personalizado, texto rotacionado, linhas de tendência, barras de erro, categorias hierárquicas, rótulos de dados, outras formas de marcador e caches de valores ausentes disparam EXLSPortableRender antes da renderização

Fontes de marcação de eixo de valores personalizadas, grades secundárias, unidades explícitas principais/secundárias, cores de série explícitas inválidas e posições de eixo sem suporte são rejeitadas; legendas de barra atualmente exigem a colocação comum à direita, e plotagens circulares exigem um total em cache finito diferente de zero e geometria limitada, com uma reserva conservadora antecipada de armazenamento de rascunho para arcos

O array retornado retém a ordem primitiva de desenho, cores explícitas, fontes, alinhamento de texto, opacidade e limites de recorte do gráfico; a contabilidade de itens, bytes e texto inclui reservas conservadoras de rascunho do renderer, e as verificações cooperativas de cache precedem a alocação do array de rascunho

XLSValidateCachedChartSceneModel executa o mesmo preflight limitado de cache e aparência em um modelo sem resolver células da planilha; a ponte de captura XLSX usa esta verificação antes da clonagem e registra modelos de gráfico criados com suporte, com referências A1 locais unidimensionais, offsets físicos de âncora nativos, recorte de intervalo e ordem de desenho

O gravador neutro de plataforma vive em lxPortableChart; os pontos de entrada existentes de lxPagination compartilham os mesmos corpos de layout e de gravação de primitivas, retendo o comportamento do renderer do Windows e correspondendo bytes de cena imutáveis e contabilidade de orçamento para cada família com suporte

A captura nativa de pasta de trabalho no Linux e no macOS usa o overload de geometria explícita descrito abaixo; o preenchimento RGB de séries importadas, o fundo da área de plotagem, o fundo do gráfico e a borda do gráfico são recuperados das propriedades de forma próprias resolvidas por namespace, de modo que uma cor de série aninhada não pode sobrescrever o fundo da plotagem

O ChartML preservado importado é aceito apenas quando o stream de elementos expandidos por namespace, atributos e texto significativo dele corresponde à reconstrução tipada com suporte; aliases de namespace e a ordem de atributos se normalizam, enquanto extensões nativas não modeladas, atributos estrangeiros e aparência sem suporte são rejeitados de forma conservadora

Os orçamentos de rascunho de XML bruto e de reconstrução são verificados antes do trabalho de clonagem e de projeção; apenas a cópia desanexada limpa o XML preservado validado dela, e a fonte retém metadados nativos, armazenamento de células, conteúdos de cache e geração

A captura percorre a ordem de desenho OfficeArt subjacente, incluindo frames de gráfico ausentes do wrapper público Shapes, e rejeita um frame sem suporte que cruza o retângulo em vez de omiti-lo silenciosamente

Gráficos Classic em cache com aparência declarada

A captura Classic BIFF8 aceita as sete famílias comuns de gráfico acima quando os records principais, os valores armazenados locais, as escalas lineares explícitas e a aparência delas são representáveis; ela lê records retidos e caches de fórmula disponíveis sem avaliar fórmulas, expandir armazenamento esparso nem clonar árvores de fórmula compiladas

Use TXLSWorkbook.CreateReadOnlyViewWithChartAppearance(Source, Limits, Geometry) para criar uma view somente leitura separada com um conjunto congelado de valores TXLSClassicChartAppearanceDeclaration fornecidos por IXLSClassicChartAppearanceSource; Geometry é opcional no Windows e fornece medições nativas explícitas de fonte no Linux ou no macOS

TXLSClassicChartAppearanceDeclarations é o array dinâmico de declarações primitivas que uma aplicação pode usar para implementar essa fonte

Passe essa view configurada a CaptureXLSPortableViewRenderSnapshot(View, SheetIndex, Row1, Col1, Row2, Col2, Limits); as coordenadas têm base um, e o adaptador restaura a planilha ativa do chamador quando a captura termina ou é rejeitada

Os pontos de entrada comuns de captura continuam rejeitando fontes efetivas não resolvidas de layout ou legenda Classic; o ponto de entrada distinto de view usa as declarações já congeladas e o provedor de geometria

Membro de declaraçãoContrato
Generation, SheetIndex, ObjectIdA geração fixada da pasta de trabalho, o índice de planilha com base um e a identidade real do objeto de gráfico armazenado; gerações obsoletas, identidades ausentes ou repetidas e identidades pertencentes a outro objeto são rejeitadas
HasChartSize, ChartWidthPoints, ChartHeightPointsUm tamanho explícito finito positivo de frame de gráfico em pontos; ele retém a origem de âncora armazenada e a ordem de desenho, enquanto um sinalizador false mantém as dimensões derivadas da âncora
HasPlotInnerRectangle, PlotInnerRectangleUm retângulo interno de plotagem explícito, excluindo rótulos e títulos de eixo; é exigido para este caminho de aparência declarada
HasTitleRectangle, TitleRectangleUm retângulo de título explícito quando o gráfico tem título; o texto da fonte, a família de fonte, o ênfase e a cor ainda vêm de records principais validados
HasLegendRectangle, LegendRectangleOs limites declarados da legenda quando uma legenda está presente
HasLegendFontSize, LegendFontSizePointsO tamanho efetivo em pontos explícito do chamador para uma legenda presente; a família, o ênfase e a cor da fonte principal são retidos
TXLSPortableChartRectangleLeft, Top, Width e Height são pontos finitos relativos ao frame de gráfico capturado; retângulos ativos exigem dimensões positivas dentro desse frame
Count, GetCount, ReadDeclarationA fonte relata uma contagem limitada e retorna um record primitivo para cada índice com base zero enquanto a view está configurada; as declarações são copiadas antes da captura posterior

Esses valores são aparência declarada pelo chamador, e não layout automático do Excel nem escala de fonte inferida; obtenha-os de uma fonte verificada de forma independente ou de um layout definido pela aplicação e revise a saída com o mapeamento nativo explícito de fontes usado para renderizar

Dimensões explícitas de frame e limites internos de plotagem devem deixar espaço suficiente para as fontes validadas de rótulos de eixo; espaço insuficiente de rótulos é rejeitado em vez de recortar texto ou aplicar um fator de escala ajustado

Aplicativos mantêm o dono da pasta de trabalho vivo até a view ser liberada; a view emprestada mantém uma concessão de leitura e retém a fonte de declarações, enquanto o snapshot imutável resultante não retém nem a pasta de trabalho nem o provedor

A projeção principal com suporte inclui preenchimentos sólidos literais, linhas sólidas visíveis, marcadores de círculo, texto de título e legenda, colocação de categorias e marcações numéricas explícitas limitadas; escalas automáticas, aparência automática de marcador não resolvida, suavização, extensões ricas desconhecidas, referências de série estrangeiras ou não lineares e estilos de ponto não representados são rejeitados antes da saída

Declarar geometria ou um tamanho de legenda não autoriza ignorar extensões de gráfico desconhecidas nem estilos não validados; os limites de bytes, texto, células armazenadas e cena permanecem efetivos para dados de fonte retidos, declarações, caches desanexados e espaço de rascunho de gravação

Os overloads adicionais de XLSValidateCachedChartSceneModel e XLSRecordCachedChartScene aceitam TXLSCachedChartSceneAppearance para um modelo desanexado; inicialize-o com XLSDefaultCachedChartSceneAppearance antes de definir controles explícitos

O XLSReadClassicChartScene de nível mais baixo em lxClassicChartScene retorna um TXLSXChart desanexado de propriedade do chamador e contadores primitivos de aparência e de orçamento a partir de um TXLSCustomChart retido, a calculadora exata de fonte dele e um TXLSClassicChartSceneSource alugado; libere o modelo retornado após a gravação

TXLSClassicChartSceneSource.ReadAppearance fornece uma declaração primitiva, ReadCell lê valores armazenados locais fixados e limitados, ReadFont preenche o estilo de texto fornecido com dados efetivos limitados de fonte principal, e PaletteColor resolve entradas explícitas de paleta armazenadas; as implementações da aplicação devem preservar a fonte fixada e honrar cada cota de bytes e caracteres fornecida

Membro de aparência de cenaSignificado
SeriesMarkerSizePointsDiâmetros em pontos limitados por série, incluindo valores fracionários; zero mantém o tamanho de marcador do modelo, e uma sobreposição diferente de zero deve ser de 2 a 72 pontos
OverrideBorder, BorderColorRGB, BorderWidthPointsAparência explícita de contorno do frame de gráfico
AxisColorRGB, TickColorRGB, GridlineColorRGB, AxisWidthPoints, TickWidthPoints, GridlineWidthPointsPinturas e larguras em pontos explícitas de eixo, marcação e grade principal
AreaFillOpacity, SeriesFillAlphaOpacidade de área e alfa de preenchimento de série
UseAxisTickControls, CategoryBetweenControles explícitos de eixo validados e colocação categórica
TitleOffsetXPoints, TitleOffsetYPointsOffsets finitos aplicados à posição comum de título do gravador
OverridePlotInnerRectangle, OverrideTitleRectangle, OverrideLegendRectangle, PlotInnerRectangle, TitleRectangle, LegendRectangleRetângulos literais em pontos relativos ao frame do gráfico
PieRadiusRatioRaio da plotagem circular como uma fração limitada da dimensão menor de plotagem

Primitivas de gráfico seguem a política existente de layout do HotXLS; a aparência de galeria de gráfico que exige os padrões não modelados do Excel permanece um limite explícito sem suporte

Captura nativa direta de pasta de trabalho

CreateXLSPortableCairoRenderGeometry(Fonts, Calibration, Generation, Backend, Options, CacheCapacity) retorna um IXLSRenderGeometry apoiado nos mesmos arquivos de fonte explícitos, FreeType, HarfBuzz e modelagem de texto usados para a saída nativa; as larguras de coluna usam a largura máxima medida real de dígitos com a calibração da pasta de trabalho

O provedor é dono dos bytes de fonte desanexados e de um cache de métricas limitado, verifica os orçamentos de fonte e de layout antes da alocação e valida pedidos de medição antes de alterar o estado em cache; um cache cheio pode retornar medições fora do cache sem expandir além da capacidade dele

A captura verifica que a geração do provedor e todos os campos de calibração correspondem à view atual somente leitura da pasta de trabalho, retém o provedor para essa view e deixa a fábrica padrão de geometria da pasta de trabalho inalterada; a geometria nativa padrão comum continua sendo um limite explícito de GDI

Capture a geração por meio de uma view liberada explicitamente antes de criar o provedor; reter um resultado temporário de interface pode reter a concessão de leitura dele até o escopo ao redor terminar

View := Owner.CreateReadOnlyView;
Generation := View.Generation;
View := nil;
Geometry := CreateXLSPortableCairoRenderGeometry(Fonts,
  Workbook.CaptureRenderCalibration, Generation, xlsrgbBitmap,
  XLSDefaultPortableCairoOptions, 4096);
Snapshot := CaptureXLSPortableRenderSnapshot(Owner, 1, 1, 1, 30, 6,
  XLSDefaultPortableRenderLimits, Geometry);

Consumidores nativos compilam com LX_PORTABLE_CORE e as dependências nativas correspondentes; chamadas do Windows à fábrica nativa de geometria Cairo são rejeitadas explicitamente, enquanto a captura do Windows pode usar a fábrica de geometria existente dela pelos mesmos overloads com escopo

A captura nativa real aceita as famílias descritas acima de escalar modelado, rich text, raster com suporte, forma comum e sete famílias de gráfico em cache; a captura de gráfico preserva o ChartML importado original, os pontos em cache, o armazenamento esparso de células, o armazenamento compactado e a geração da pasta de trabalho

Para áreas de impressão imutáveis, margens, escala de ajuste ou porcentagem, títulos repetidos, quebras manuais e paginação de célula inteira ou de célula mesclada, consulte os planos de impressão portáteis

Ponte avançada de captura

IXLSRenderCaptureSource em lxSemanticSnapshot é a interface interna de coordenação implementada pelas views somente leitura de pasta de trabalho com suporte; aplicativos comuns devem chamar os overloads de captura baseados em dono

TXLSClassicReadOnlyWorkbookView e TXLSXReadOnlyWorkbookView implementam IXLSRenderCaptureSource, incluindo os oito métodos de renderização abaixo; essas classes coordenam a captura por meio de views somente leitura, e o adaptador gerencia o tempo de vida delas enquanto os aplicativos retêm a interface de dono da pasta de trabalho e chamam CaptureXLSPortableRenderSnapshot

O método TryReadCell existente delas fornece um snapshot de célula armazenada por meio da view somente leitura; os métodos de renderização adicionam aparência e geometria desanexadas para a captura portátil

Membro ou helperFinalidade
ValidateRenderRangeVerifica limites de retângulo com base um e pegadas de aparência sem suporte antes da captura
ReadRenderStyleRetorna metadados TXLSSemanticCellStyle desanexados e um sinalizador de presença de rich text para uma célula com base um
IXLSRenderRichTextCaptureSource, ReadRenderRichTextExtensão opcional de view que retorna TXLSRenderTextRuns desanexados e limitados; cada TXLSRenderTextRun contém Text e um Style semântico efetivo, usando o estilo base fornecido e cotas positivas de run/bytes sem materializar células nem modificar pools de estilo
RenderRowHeightPoints, RenderColumnWidthPointsRetornam a geometria física, colapsando dimensões ocultas para zero
IXLSRenderGeometryCaptureSource, SetRenderCaptureGeometryExtensão opcional de view que retém um provedor explícito apenas após validação de geração e calibração; provedores inválidos deixam o provedor retido da view inalterado
ReadRenderMergeRelata o retângulo completo de mesclagem inclusivo com base um que contém uma célula
ResolveRenderColorResolve a aparência semântica de tema/indexado/RGB para uma cor RGB portátil, usando o padrão fornecido onde há suporte
RenderDate1904, RenderRightToLeftExpõem o contexto de sistema de data da pasta de trabalho e de ordem de leitura da planilha
XLSRenderCaptureLiteralReconhece o subconjunto com suporte de Boolean literal, número finito ou texto simples entre aspas para captura sem avaliação
XLSRenderCaptureIntersectsTesta intervalos A1 locais separados por espaço contra um retângulo com base um, rejeitando sintaxe de intervalo não resolvida
XLSRenderCaptureConditionAvalia o subconjunto com suporte de condições contra um escalar existente; os códigos de operador de comparação de 1 a 8 significam entre, fora-de-entre, igual, diferente, maior, menor, maior-ou-igual e menor-ou-igual
XLSRenderCaptureApplyDxfAplica aparência diferencial desanexada com suporte usando uma máscara AppliedSlots para reter formatação de prioridade mais alta
TXLSDxfStyle._MarkRenderUnsupportedAppearance, TXLSDxfStyle._HasRenderUnsupportedAppearanceMétodos de coordenação de importação com prefixo interno registram e inspecionam aparência que o modelo diferencial tipado não consegue renderizar com segurança; Assign retém o marcador, e a captura rejeita um estilo correspondente marcado

Estes helpers de ponte podem disparar EXLSSemanticSnapshot; o adaptador público de captura traduz essa exceção para EXLSPortableRender