Documentación de HotXLS / Referencia de la API

Salida headless portátil

Disponible desde la versión 2.384.100 como una canalización de salida acotada con API explícitas de captura y renderizado

Captura un rectángulo admitido de un libro Classic XLS o XLSX en Windows, transfiere su instantánea inmutable y renderiza PDF, SVG o PNG en Linux o macOS con Free Pascal y Cairo nativo

El adaptador de captura usa el motor del libro; la captura en Windows usa su servicio de geometría por defecto, mientras que la captura nativa en Linux y macOS puede aportar un servicio de geometría FreeType/HarfBuzz explícito respaldado por archivos de fuentes elegidos por la aplicación

El consumidor nativo independiente acepta escenas de lxPortableRender a través de lxPortableCairo, sin Excel ni una sesión de escritorio; su API de geometría también usa las unidades portátiles existentes de vista de libro y geometría de renderizado

El consumidor acepta una escena inmutable o un stream de transferencia; los requisitos de plataforma para cargar y calcular libros se describen aparte en el soporte de Free Pascal

Capturar un rectángulo de un libro existente

CaptureXLSPortableRenderSnapshot en lxPortableWorkbookCapture acepta un IXLSWorkbook o un IXLSXWorkbookOwner, con TXLSPortableRenderLimits explícitos o por defecto; dos sobrecargas adicionales aceptan límites explícitos seguidos de un proveedor IXLSRenderGeometry con ámbito en la vista de captura

SheetIndex y Row1, Col1, Row2, Col2 inclusivos son de base uno; la instantánea resultante almacena posiciones de base cero relativas al rectá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.

Mantén viva la interfaz propietaria mientras uses el objeto libro; libera la interfaz en lugar de liberar manualmente un libro propiedad de una interfaz

Para XLS Classic, usa TXLSWorkbook e IXLSWorkbook de lxHandle con la misma llamada de captura

La captura lee las cachés de fórmula existentes y rechaza cualquier fórmula del rectángulo sin caché; nunca recalcula implícitamente, recupera datos externos ni registra nuevos estilos en el libro de origen

Recalcula explícitamente antes de capturar cuando tu aplicación necesite resultados de fórmula frescos; una caché existente se renderiza tal como está almacenada, así que la captura no certifica su frescura

La operación mantiene una vista de lectura y comprueba la generación del libro antes de devolver; la instantánea que devuelve queda desacoplada de la propiedad del libro y sigue siendo utilizable después de liberar el libro

Apariencia y límites de la captura

La instantánea contiene el texto de visualización con formato, las dimensiones físicas en puntos, los colores RGB resueltos, las fuentes y alineaciones de celda admitidas, los rellenos, los bordes y los rectángulos combinados completos; las filas y columnas ocultas tienen tamaño cero

La apariencia de fuente admitida incluye negrita, cursiva, subrayado simple y tachado; la apariencia de celda admitida incluye rellenos sólidos, alineación horizontal izquierda/centro/derecha, alineación vertical superior/centro/inferior, ajuste de texto, reducción y orden de lectura de derecha a izquierda

Los bordes del libro fino, medio, grueso, hair, doble, punteado, discontinuo y discontinuo medio se mapean a los estilos de borde portátiles y a los anchos en puntos; los demás estilos de borde se rechazan

El texto enriquecido admitido lleva fuentes efectivas de run, tamaños en puntos, colores RGB, negrita, cursiva, subrayado simple, tachado y superíndice o subíndice a nivel de run; los efectos de fuente de contorno/sombra/vertical simples de celda, los estilos de subrayado no admitidos, los rellenos degradados o con patrón, los bordes diagonales, la sangría, la rotación de texto y las alineaciones no admitidas se rechazan

Un rectángulo de captura debe contener completamente cada celda combinada; las combinaciones recortadas, solapadas o incoherentes y los estilos incompatibles a lo largo de un borde exterior combinado se rechazan

Los fondos de hoja y los tipos de hoja no admitidos rechazan la captura; las imágenes PNG/JPEG admitidas y las formas de texto rectángulo/elipse ordinarias de ambas fachadas del libro se capturan como objetos de escena ordenados, junto con las imágenes de celda XLSX, las casillas de verificación Boolean y el subconjunto admitido de gráficos XLSX en caché descrito más abajo; los gráficos no admitidos, los presets de forma, WordArt, las transformaciones agrupadas, los controles flotantes, los Slicers, las Timelines y los sparklines se rechazan cuando sus huellas resueltas intersecan el rectángulo

El contenido no admitido con una huella resuelta de forma fiable fuera del rectángulo puede coexistir con la captura; una huella de dibujo irresoluble se rechaza en lugar de omitir silenciosamente contenido potencialmente solapado

El estilo de tablas Classic que interseca el rectángulo se rechaza; las secciones Table integradas de XLSX y las personalizadas admitidas se resuelven en un contexto de estilo desacoplado, con franjas del tamaño de la sección y anulaciones directas de formato de celda

En los rellenos diferenciales sólidos o implícitos de Table importadas que estén admitidos, el bgColor RGB aporta el fondo visible; un fgColor RGB solo deja el fondo heredado sin cambios, y una sección con ambos colores usa su color de fondo

Las secciones Table importadas que contengan apariencia que el resumen con tipo no pueda representar se rechazan cuando esa sección aplica, incluidos el subrayado, los formatos numéricos, la negrita/cursiva borrada explícitamente, los esquemas de fuente, un patrón explícito sin relleno y las formas de color no admitidas; una sección no relacionada fuera del rectángulo capturado no bloquea la captura

El formato condicional admitido se aplica sin evaluar fórmulas: comparaciones numéricas o de fecha en caché contra límites numéricos literales, expresiones literales Boolean o numéricas, reglas de contención/prefijo/sufijo de texto, blancos y errores; la apariencia de mayor prioridad gana por cada propiedad admitida, y el StopIfTrue de XLSX detiene las reglas coincidentes de menor prioridad

Las reglas de texto Classic exigen una cadena de búsqueda literal y comparan celdas de cadena en caché; las reglas de texto XLSX usan sus criterios de texto almacenados

La apariencia diferencial admitida incluye colores de tema resueltos con tint y colores indexados simples; los colores automáticos importados, el tint fuera de tema, un relleno diferencial con colores de primer plano y fondo a la vez, y los bordes, alineaciones, tachados u otra apariencia diferencial no representada se rechazan cuando la regla coincidente aplica

Las fórmulas condicionales que exigen evaluación, las reglas agregadas o dependientes de la fecha, las escalas de color, las barras de datos y los conjuntos de iconos se rechazan donde se encuentren; el recuento de reglas de formato condicional solapadas está acotado

La conversión Date1904 elige la sección de formato numérico en bruto aplicable antes de aplicar el desfase de calendario; las secciones de calendario inactivas no cambian la visualización numérica ordinaria, y los valores Boolean siguen siendo Boolean

Una sección de calendario Date1904 seleccionada combinada con condiciones de formato o construcciones de tiempo transcurrido se rechaza; los separadores de sección entre comillas o escapados también se rechazan, y este límite no bloquea una sección numérica ordinaria seleccionada solo porque otra sección sea un formato de calendario

Texto enriquecido y escenas de dibujo ordenadas

TXLSPortableCell.RichText es un array de registros TXLSPortableTextRun que contienen Text, FontFamily, FontSizePoints, FontStyles, ColorRGB y BaselineShiftPoints; el texto de los runs concatenados debe coincidir exactamente con el texto de visualización de la celda

Los runs XLSX heredan las propiedades omitidas de la fuente efectiva de la celda capturada, incluidos el formato de tabla y el condicional admitidos; las marcas false asignadas explícitamente y los valores de color none/baseline/automatic explícitos anulan la herencia

Las shared strings y las inline strings nativas conservan los límites de run y los espacios en blanco; los elementos font nativos no admitidos, los atributos, los namespaces, los colores enriquecidos de tema/indexados y las anotaciones fonéticas se rechazan en lugar de perder silenciosamente la apariencia visible

Los runs Classic resuelven sus índices de fuente BIFF almacenados a fuentes efectivas completas de run; los metadatos fonéticos y las fuentes de run no admitidas se rechazan, y la captura retiene la generación del libro y los pools de estilos

Las formas de texto Classic leen las propiedades OfficeArt existentes y los runs de fuente TXO sin crear wrappers de dibujo ni cambiar el libro; los anclajes usan dimensiones y desplazamientos reales de fila/columna, los rellenos sólidos y contornos admitidos conservan sus colores y anchos, y los bytes PNG/JPEG incrustados se desacoplan antes de la transferencia

El texto de rectángulo usa los márgenes nativos de 7,2pt horizontales y 3,6pt verticales; el texto de elipse usa además su rectángulo de texto inscrito, manteniendo el texto ordinario dentro del contorno de la forma en ambas fachadas del libro

Los contenedores Classic de rectángulo y elipse importados retienen su texto y formato con tipo; los metadatos nativos de forma o grupo omitidos sin huella resuelta rechazan la captura explícitamente, mientras que los registros de cola de objeto desconocidos, las extensiones de dibujo, la rotación, los rellenos no sólidos y los estilos de línea no admitidos rechazan un objeto que interseque

Los anclajes XLSX importados de rectángulo y elipse de dos celdas admiten rellenos sólidos RGB explícitos con alpha, contornos sólidos o discontinuos/punteados, desplazamientos físicos de anclaje y un único párrafo ordinario de texto enriquecido; cada run retiene su typeface efectiva, tamaño en puntos, color, negrita, cursiva, subrayado simple y tachado, incluidos los reinicios explícitos de negrita o cursiva

El lector de formas importadas reserva almacenamiento temporal de XML en bruto antes de analizar y comprueba cooperativamente los presupuestos de elementos, bytes y texto; retiene el orden de dibujo del libro y concesiones de lectura sin crear modelos de forma ni celdas ausentes

Las propiedades de forma nativas desconocidas, los efectos, los temas, las rotaciones, las transformaciones agrupadas, los párrafos múltiples y los tipos de anclaje no admitidos se rechazan explícitamente; una huella no admitida resuelta fuera del rectángulo de captura no bloquea la región solicitada

El superíndice y el subíndice a nivel de run usan dos tercios del tamaño de fuente del run y un desplazamiento de línea base de un tercio de su tamaño original en puntos; un límite de estilo que parta un clúster de shaping Unicode, o una secuencia CRLF que cruce límites de run incompatibles, se rechaza durante el diseño nativo

TXLSPortableSceneObject lleva un Kind, X, Y, Width, Height en puntos, rectángulo de recorte, colores y opacidad de relleno/contorno, puntos de ruta opcionales, celda de texto, o bytes raster codificados y dimensiones

TXLSPortableSceneKind contiene xpskRectangle, xpskEllipse, xpskPolyline, xpskPolygon, xpskText, xpskPNG y xpskJPEG; el orden del array es el orden de dibujo, y los objetos posteriores cubren a los anteriores

La sobrecarga adicional de CreateXLSPortableRenderSnapshot acepta un array TXLSPortableSceneObjects; consulta IXLSPortableRenderSceneSnapshot para obtener Objects y ObjectCount de base cero, cuyos getters devuelven copias desacopladas que incluyen arrays de run, puntos y raster

Las imágenes de celda y las rutas de casillas preceden a los dibujos flotantes; los dibujos flotantes conservan el orden del libro, los anclajes físicos y el recorte del viewport, y las formas de texto usan la fuente del tema minor a 11 puntos con márgenes de texto horizontales de 7,2 puntos y verticales de 3,6 puntos

Las imágenes PNG y JPEG se decodifican de forma nativa tras la comprobación previa de cabecera, tamaño de píxel y bytes; las imágenes flotantes admitidas conservan la transparencia y la geometría de estiramiento, mientras que las imágenes de celda caben dentro de la celda o del rectángulo combinado completo conservando su relación de aspecto

El recorte, la rotación, las sombras, el ajuste de luminancia/gamma, el mosaico, los acompañantes SVG y los enlaces de cámara en vivo siguen sin admitirse; el XML de imagen preservado se valida contra la apariencia admitida, así que las imágenes ocultas, los metadatos anidados desconocidos, las propiedades con namespaces ajenos, la geometría de imagen no rectangular y las transformaciones sin modelo se rechazan solo cuando su huella solapa la captura

Las casillas de verificación Boolean de celda usan una caja vectorial neutra al tema y una marca de verificación opcional, incluidos los controles efectivos heredados de los formatos de fila y columna; el recorrido de celdas solicitado está acotado antes de atravesarlo, los demás tipos de control y los valores de casilla en blanco o no Boolean se rechazan, y las escenas de celda admitidas suprimen el texto de reserva de Boolean escalar o de error de imagen

Una casilla por defecto son metadatos de inserción y no fabrica un Boolean para una celda ausente; el borrado explícito del control de celda directa enmascara un control heredado, mientras que las lecturas de captura preservan la ausencia dispersa y la generación del libro

XLSReadPortableImageDimensions valida un IHDR PNG acotado o un fotograma JPEG secuencial/progresivo de ocho bits admitido y devuelve su anchura y altura declaradas; la decodificación sigue siendo responsabilidad del renderizador

IXLSPortableSceneCaptureSource.ReadPortableSceneObjects usa coordenadas de libro de base uno y coordenadas de escena en puntos relativas al rango, valida el rango y los límites cooperativos, y devuelve los bytes, texto y elementos consumidos; HasPortableCellScene identifica las celdas cuya visualización escalar se sustituye por su escena capturada

El CellCount del diseño nativo cuenta celdas de la cuadrícula y LineCount también incluye objetos de escena de texto; el CellIndex de la línea de un objeto de texto es CellCount más su secuencia de base cero entre los objetos de escena de texto, mientras que GetCellGeometry sigue restringido a las celdas de la cuadrícula

Las instantáneas escalares siguen serializándose como HXRSNP01; las instantáneas que contienen runs u objetos de escena se serializan como HXRSNP02, y el loader acepta ambas versiones con el mismo contrato de propiedad inmutable y de reversión de la posición de entrada

El presupuesto combinado de elementos cuenta las celdas almacenadas, los runs enriquecidos, los objetos de escena y los puntos de ruta; los límites de bytes contabilizan los arrays preparados y desacoplados, el texto, las cargas raster codificadas y la inspección acotada de metadatos nativos antes de la asignación

API de instantáneas portátiles

SímboloContrato
EXLSPortableRenderExcepción lanzada por datos de instantánea no válidos, apariencia de captura no admitida, backend nativo no disponible, límites de recursos o fallos de renderizado
TXLSPortableFontStyle, TXLSPortableFontStylesxpfsBold, xpfsItalic, xpfsUnderline y xpfsStrikeout, combinados como un conjunto
TXLSPortableHorizontal, TXLSPortableVerticalxphLeft, xphCenter, xphRight y xpvTop, xpvCenter, xpvBottom
TXLSPortableBorderStyle, TXLSPortableBorderxpbsNone, xpbsSolid, xpbsDashed, xpbsDotted y xpbsDouble; cada borde lleva Style, WidthPoints y ColorRGB
TXLSPortableCellRow/Column de base cero, RowSpan/ColumnSpan positivos, Text de visualización, FontFamily, FontSizePoints, FontStyles, TextColorRGB, FillColorRGB, HasFill, WrapText, ShrinkToFit, RightToLeft, Horizontal, Vertical y cuatro registros LeftBorder/TopBorder/RightBorder/BottomBorder
TXLSPortableCells, TXLSPortableSizesArrays dinámicos de celdas almacenadas y tamaños físicos de fila/columna en puntos
TXLSPortableRenderLimitsMaxGridCells, MaxStoredCells, MaxBytes y MaxTextCharacters acotan la construcción, la captura y la serialización
XLSDefaultPortableRenderLimitsDevuelve 2000000 celdas de cuadrícula, 2000000 celdas almacenadas, 67108864 bytes y 16777216 caracteres de texto UTF-16
XLSDefaultPortableCellInicializa un span de una celda con Calibri a 11 puntos y apariencia por defecto con valores cero; establece su posición y la apariencia deseada antes de la construcción
CreateXLSPortableRenderSnapshotValida y copia la generación, las alturas de fila, las anchuras de columna y las celdas almacenadas en una interfaz inmutable desacoplada; las celdas deben ser únicas, estar en orden fila-major, dentro de los límites y tener spans no solapados
IXLSPortableRenderSnapshotGeneration, RowCount, ColumnCount, CellCount de solo lectura, RowHeightPoints, ColumnWidthPoints de base cero y registros Cells copiados
Métodos getter de la instantáneaGetGeneration, GetRowCount, GetColumnCount, GetCellCount, GetRowHeight, GetColumnWidth y GetCell exponen los mismos valores; el acceso indexado no válido lanza una excepción
SaveXLSPortableRenderSnapshotValida y serializa una instantánea en un búfer privado acotado, y después copia la carga completa HXRSNP01 o HXRSNP02 en el stream suministrado en su posición actual
LoadXLSPortableRenderSnapshotLee la instantánea versionada little-endian con texto UTF-8 estricto, valida recuentos, geometría, estilos y spans, y rechaza los datos finales; el fallo restaura la posición del stream de entrada

Todos los límites deben ser positivos; el máximo validado es de 2000000 celdas de cuadrícula/almacenadas, 1073741824 bytes y 268435456 caracteres de texto, con dimensiones de como máximo 1048576 filas por 16384 columnas

MaxGridCells cuenta el rectángulo completo, incluidas las celdas en blanco no almacenadas; CellCount cuenta las celdas visibles almacenadas y los anclajes combinados, y puede ser menor

Generation registra la generación de origen o un valor aportado por la aplicación; son metadatos, no un enlace en vivo a un libro ni una comprobación automática de frescura

Renderizado nativo y fuentes explícitas

XLSPortableCairoBackendAvailable informa de la disponibilidad del backend nativo compilado; la salida nativa exige Free Pascal en Linux o macOS, con las bibliotecas Cairo, FreeType, HarfBuzz y FriBidi disponibles para el proceso

Las compilaciones de macOS enlazan explícitamente las cuatro bibliotecas nativas; un prefijo de dependencias privado y una ruta de loader explícita para procesos hijo pueden aportarlas sin cambiar la configuración compartida del compilador ni los perfiles de shell

Delphi XE5 en Windows, Win32 y Win64 pueden compilar las interfaces portátiles y usar la serialización de instantáneas, pero la preparación de diseño nativa de Cairo informa allí de la indisponibilidad del backend

Pasa una cadena de fuentes explícita a PrepareXLSPortableCairoLayout; el renderizador prueba primero la familia y el estilo negrita/cursiva coincidentes, después los fallbacks del mismo estilo en el orden suministrado, exigiendo cobertura de glifos para cada clúster de texto admitido

Aporta los archivos regular, bold, italic y bold-italic reales que tu contenido capturado necesite; no hay descubrimiento de fuentes del sistema ni sustitución sintética de negrita/cursiva, y los archivos, mapeos de estilo o coberturas de glifos ausentes se rechazan

Los bytes de las fuentes se capturan antes del shaping, de modo que cambiar un archivo afecta a los diseños posteriores mientras que un diseño existente retiene sus bytes capturados; FaceIndex selecciona la cara no negativa en un archivo o colección de fuentes

Las operaciones nativas se serializan por la seguridad de las caras de FreeType; las instantáneas inmutables y la inspección del diseño preparado no exigen un libro activo

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

Aquí Calibri es un alias de familia explícito para el archivo elegido, lo que permite un mapeo de fuentes controlado por la aplicación; examina las métricas de salida al mapear a una fuente diferente

El renderizador admite saltos de línea duros, expansión de tabuladores a cuatro espacios, orden bidireccional de párrafos, ligaduras con shaping y marcas combinantes, ajuste con llenado codicioso y reducir hasta ajustar; el ajuste de línea tiene prioridad sobre la reducción

El ajuste de línea conserva los límites de clúster implementados de marcas combinantes, selectores de variación, ZWJ y virama, y favorece los espacios y los espacios ideográficos; no es una implementación completa de grafemas UAX #29 ni del algoritmo de salto de línea de Unicode, y los límites de ajuste de regional-indicator y Hangul-Jamo no están garantizados

Los tamaños de fuente se resuelven a 1/64 de punto y el texto se recorta a los límites de la celda; PDF incrusta las fuentes explícitas con mapeos de texto lógicos, SVG usa rutas de glifos vectoriales, y PNG dibuja los mismos glifos posicionados al DPI solicitado

Preparar e inspeccionar un diseño

SímboloContrato
TXLSPortableFontFile, TXLSPortableFontFilesCada mapeo explícito contiene FamilyName, FileName, FaceIndex, Bold e Italic; el array dinámico está ordenado y contiene entre 1 y 64 mapeos
TXLSPortableCairoFormat, TXLSPortableOutputFilesxpcfPDF, xpcfSVG o xpcfPNG, y un array de nombres de archivo de salida devuelto por el guardado a archivo
TXLSPortableCairoOptionsAnchura/altura de página, cuatro márgenes, padding de celda y DPI raster, más límites de página, glifos, líneas, diseño, salida, fuentes, shaping y dibujo
XLSDefaultPortableCairoOptionsInicializa cada opción con valores por defecto acotados; úsalo antes de sobrescribir campos individuales
PrepareXLSPortableCairoLayoutValida y copia una instantánea, captura los bytes de fuentes explícitos y devuelve un TXLSPortableCairoLayout preparado del que eres propietario; libéralo con Free
TXLSPortableCairoLayoutExpone PageCount, LineCount, CellCount, GetTextLine, GetCellGeometry, SaveToStream, Save y Destroy
TXLSPortableTextLineInfoUn registro de línea copiado tiene CellIndex, GlyphCount, XPoints, BaselinePoints, WidthPoints, FontSizePoints y el Text lógico
TXLSPortableCellGeometryUn rectángulo copiado tiene XPoints, YPoints, WidthPoints y HeightPoints en el diseño completo
GetTextLine(Index), GetCellGeometry(Index)Inspección indexada de base cero de las líneas preparadas y las celdas almacenadas; los índices no válidos se rechazan

La paginación recorta mosaicos fijos del área imprimible en orden primero a lo ancho y después hacia abajo; una celda o fragmento de texto que cruce límites de página aparece en cada página que interseca, sin ajuste automático de celdas completas, repetición de títulos de impresión de la hoja ni interpretación de la configuración de página del libro

Opciones y límites del renderizador

CamposValores por defecto y significado
PageWidthPoints, PageHeightPoints595 por 842 puntos
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints36 puntos cada uno; los márgenes deben dejar un rectángulo imprimible positivo
CellPaddingPoints, RasterDPI2 puntos y 96 DPI; el DPI afecta a las dimensiones PNG
MaxPages, MaxGlyphs, MaxLines256 páginas, 2000000 glifos con shaping y 200000 líneas de texto
MaxLayoutBytes268435456 bytes para trabajo de diseño acotado y comprobaciones de superficie raster
MaxOutputBytes268435456 bytes por búfer de salida renderizada, cubriendo el PDF completo o una página SVG/PNG en lugar de la suma de los archivos de página separados
MaxFontBytes134217728 bytes en total para los archivos de entrada de fuentes explícitas de un diseño
MaxShapedCharacters, MaxDrawOperations16000000 cada uno, acotando el trabajo de shaping y el de dibujo página por celda

La geometría no válida o no finita y los presupuestos de trabajo no positivos se rechazan; las dimensiones de página se limitan a 100000 puntos y el DPI raster a 1200, con comprobaciones adicionales de bytes, recuentos y área raster antes de renderizar

El pool nativo de bytes de fuentes de todo el proceso admite además como máximo 256 búferes distintos y 256 MiB; los bytes exactamente idénticos pueden compartir almacenamiento, y la capacidad solo se libera cuando la cara de fuente propiedad de Cairo libera su búfer

Libera cada diseño al terminar; la biblioteca no restablece las cachés compartidas de Cairo, y un diseño lógicamente completado puede dejar bytes de fuentes residentes mientras Cairo nativo aún posea una cara

Escribir la salida y gestionar los fallos

SaveToStream(Stream, Format, PageIndex = 0) escribe todas las páginas para PDF, exigiendo PageIndex = 0; SVG y PNG escriben la página seleccionada de base cero

La serialización de la instantánea y el renderizado nativo se completan en búferes privados acotados antes de copiar al stream de destino; los fallos de validación o de renderizado lo preservan, pero un fallo de escritura del stream de quien llama puede dejar bytes parciales y sigue el comportamiento de fallo del propio stream

Save(FileName, Format) escribe un archivo PDF o un archivo SVG/PNG por página y devuelve sus rutas; los nombres multipágina insertan -0001, -0002 y sufijos posteriores antes de la extensión

Los destinos de archivo o directorio existentes se rechazan; cada guardado prepara todas las páginas, publica destinos nuevos en exclusiva y elimina sus propias salidas preparadas/publicadas en caso de fallo

El sistema de archivos debe admitir las operaciones nativas de preparación exclusiva y publicación de enlaces; los guardados separados de PDF, SVG y PNG son operaciones separadas y no forman una transacción combinada

Consumidor Linux independiente

Tests/Portable/RenderPortableSnapshot.pas es un consumidor completo que carga una instantánea, prepara un diseño y guarda los tres formatos; compílalo en Linux con las unidades portátiles y las 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 es texto UTF-8 con cuatro campos separados por tabuladores por mapeo: alias de familia, ruta absoluta de la fuente en Linux, índice de cara y uno de regular, bold, italic o 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

Usa archivos de fuentes reales instalados o aportados por la aplicación, y elige una base de salida nueva porque los archivos de destino existentes se rechazan; incluye fallbacks adicionales del mismo estilo para los scripts no cubiertos por el primer mapeo

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;

Registro de gráficos en caché

XLSRecordCachedChartScene en lxPagination registra las primitivas basadas en puntos del renderizador de diseño de gráficos existente en una representación de escena portátil inmutable; su origen debe ser un TXLSXChart desacoplado sin hoja propietaria y sin XML nativo preservado, así que el registro no puede resolver referencias de hoja ni actualizar cachés del libro

El subconjunto actual admite gráficos de columnas, barras, líneas, dispersión, circular, anillo y áreas ordinarias de una sola serie con un grupo de trazado primario, cachés de valores numéricos finitos e índices de caché acotados estrictamente crecientes; las cachés de categorías de dispersión contienen coordenadas X numéricas, mientras que las demás familias usan etiquetas de categoría almacenadas

Las cachés de valores de columnas, barras, líneas y áreas deben tener índices contiguos de base cero; los huecos dispersos en valores de categoría se rechazan, y el registro nunca expande índices ausentes en un array grande

Los trazados de barras conservan la geometría horizontal y las etiquetas categóricas; los trazados circulares y de anillo usan leyendas de categoría, respetan FirstSliceAng y HoleSize, y omiten los ejes numéricos, mientras que los trazados de áreas ordinarios de una sola serie conservan un polígono relleno alrededor de la línea base cero

Las series de líneas y dispersión admiten visibilidad de línea independiente, color RGB explícito y anchura en puntos mediante LineVisible, LineColorRGB y LineWidthPoints; LineStyleSet, LineColorSet y LineWidthSet distinguen la configuración explícita de los valores por defecto heredados, y EffectiveLineVisible resuelve la convención existente de series de solo relleno

Los marcadores admiten el círculo automático, un círculo explícito o ningún marcador; un MarkerSize explícito de 2 a 72 fija su diámetro en puntos, y MarkerFillSet y MarkerBorderSet distinguen un valor RGB negro explícito de cero de la selección automática de color; los segmentos de conexión se pintan antes que los marcadores de datos opacos

Los bordes de marcador explícitos sin anchura almacenada usan la línea ordinaria de 0,75 puntos, mientras que las muestras de leyenda limitan el diámetro del círculo a 6 puntos; las fuentes de título solicitadas se escriben en el run de texto enriquecido real además de en sus propiedades de texto por defecto, conservando su tamaño, color y énfasis visibles cuando Excel exporta el gráfico

Las familias de gráficos no admitidas, los trazados de áreas apilados o de varias series, los trazados circulares de varias series, los estilos de galería, las esquinas redondeadas, los grupos de trazado secundarios o combinados, los ejes de fecha, los formatos numéricos personalizados, los ejes logarítmicos, el comportamiento de cruce personalizado, el texto rotado, las líneas de tendencia, las barras de error, las categorías jerárquicas, las etiquetas de datos, otras formas de marcador y las cachés de valores ausentes lanzan EXLSPortableRender antes de renderizar

Las fuentes personalizadas de marcas del eje de valores, las cuadrículas secundarias, las unidades mayores/menores explícitas, los colores de serie explícitos no válidos y las posiciones de eje no admitidas se rechazan; las leyendas de barras exigen por ahora la colocación ordinaria a la derecha, y los trazados circulares exigen un total en caché finito y distinto de cero y una geometría acotada con una reserva conservadora temprana de almacenamiento temporal para arcos

El array devuelto conserva el orden de dibujo de primitivas, los colores explícitos, las fuentes, la alineación del texto, la opacidad y los límites de recorte del gráfico; la contabilización de elementos, bytes y texto incluye reservas conservadoras de almacenamiento temporal del renderizador, y las comprobaciones cooperativas de caché preceden a la asignación de arrays temporales

XLSValidateCachedChartSceneModel realiza la misma comprobación previa acotada de caché y apariencia sobre un modelo sin resolver celdas de la hoja; el puente de captura XLSX usa esta comprobación antes de clonar y registra los modelos de gráfico creados admitidos con referencias A1 locales unidimensionales, desplazamientos físicos de anclaje nativos, recorte de rango y orden de dibujo

El registrador independiente de plataforma vive en lxPortableChart; los puntos de entrada existentes de lxPagination comparten los mismos cuerpos de diseño y registro de primitivas, conservando el comportamiento del renderizador de Windows e igualando los bytes de escena inmutables y la contabilización de presupuesto para cada familia admitida

La captura de libros nativa en Linux y macOS usa la sobrecarga de geometría explícita descrita más abajo; el relleno RGB de la serie importada, el fondo del área de trazado, el fondo del gráfico y el borde del gráfico se recuperan de sus propias propiedades de forma con namespace resuelto, de modo que un color de serie anidado no pueda sobrescribir el fondo del trazado

El ChartML preservado importado se acepta solo cuando su flujo de elementos con namespace expandido, atributos y texto significativo coincide con la reconstrucción con tipo admitida; los alias de namespace y el orden de atributos se normalizan, mientras que las extensiones nativas sin modelo, los atributos ajenos y la apariencia no admitida se rechazan de forma conservadora

Los presupuestos de almacenamiento temporal de XML en bruto y de reconstrucción se comprueban antes del trabajo de clonación y proyección; solo la copia desacoplada limpia su XML preservado validado, y el origen retiene los metadatos nativos, el almacenamiento de celdas, el contenido de las cachés y la generación

La captura recorre el orden de dibujo OfficeArt subyacente, incluidos los marcos de gráfico ausentes del wrapper público Shapes, y rechaza un marco no admitido que interseque en lugar de omitirlo silenciosamente

Gráficos Classic en caché con apariencia declarada

La captura Classic BIFF8 admite las siete familias de gráficos ordinarias de arriba cuando sus registros core, los valores locales almacenados, las escalas lineales explícitas y la apariencia son representables; lee los registros retenidos y las cachés de fórmula disponibles sin evaluar fórmulas, expandir almacenamiento disperso ni clonar árboles de fórmula compilados

Usa TXLSWorkbook.CreateReadOnlyViewWithChartAppearance(Source, Limits, Geometry) para crear una vista de solo lectura separada con un conjunto congelado de valores TXLSClassicChartAppearanceDeclaration aportados por IXLSClassicChartAppearanceSource; Geometry es opcional en Windows y aporta mediciones nativas explícitas de fuentes en Linux o macOS

TXLSClassicChartAppearanceDeclarations es el array dinámico de declaraciones de primitivas que una aplicación puede usar para implementar ese origen

Pasa esa vista configurada a CaptureXLSPortableViewRenderSnapshot(View, SheetIndex, Row1, Col1, Row2, Col2, Limits); las coordenadas son de base uno y el adaptador restaura la hoja activa de quien llama cuando la captura termina o se rechaza

Los puntos de entrada de captura ordinarios siguen rechazando fuentes efectivas de diseño o leyenda Classic sin resolver; el punto de entrada de vista diferenciado usa las declaraciones ya congeladas y el proveedor de geometría

Miembro de declaraciónContrato
Generation, SheetIndex, ObjectIdLa generación fijada del libro, el índice de hoja de base uno y la identidad real del objeto de gráfico almacenado; las generaciones obsoletas, las identidades ausentes o repetidas y las identidades de otro objeto se rechazan
HasChartSize, ChartWidthPoints, ChartHeightPointsUn tamaño explícito, finito y positivo del marco del gráfico en puntos; retiene el origen del anclaje almacenado y el orden de dibujo, mientras que una marca false conserva las dimensiones derivadas del anclaje
HasPlotInnerRectangle, PlotInnerRectangleUn rectángulo interior de trazado explícito que excluye etiquetas y títulos de eje; es obligatorio para esta ruta de apariencia declarada
HasTitleRectangle, TitleRectangleUn rectángulo de título explícito cuando el gráfico tiene título; el texto de origen, la familia de fuentes, el énfasis y el color siguen viniendo de los registros core validados
HasLegendRectangle, LegendRectangleLos límites declarados de la leyenda cuando hay leyenda
HasLegendFontSize, LegendFontSizePointsEl tamaño efectivo explícito en puntos de quien llama para una leyenda presente; la familia de fuentes core, el énfasis y el color se retienen
TXLSPortableChartRectangleLeft, Top, Width y Height son puntos finitos relativos al marco del gráfico capturado; los rectángulos activos exigen dimensiones positivas dentro de ese marco
Count, GetCount, ReadDeclarationEl origen informa de un recuento acotado y devuelve un registro de primitiva por cada índice de base cero mientras la vista está configurada; las declaraciones se copian antes de la captura posterior

Estos valores son apariencia declarada por quien llama, no un diseño automático de Excel ni un escalado de fuentes inferido; obténlos de una fuente comprobada de forma independiente o de un diseño definido por la aplicación, y revisa la salida con el mapeo nativo explícito de fuentes usado para renderizar

Las dimensiones explícitas del marco y los límites interiores de trazado deben dejar espacio suficiente para las fuentes de etiquetas de eje validadas; el espacio insuficiente para etiquetas se rechaza en lugar de recortar texto o aplicar un factor de escala ajustado

Las aplicaciones mantienen vivo el propietario del libro hasta que se libera la vista; la vista prestada mantiene una concesión de lectura y retiene el origen de declaraciones, mientras que la instantánea inmutable resultante no retiene ni el libro ni el proveedor

La proyección core admitida incluye rellenos sólidos literales, líneas sólidas visibles, marcadores circulares, texto de título y leyenda, colocación de categorías y marcas numéricas explícitas acotadas; las escalas automáticas, la apariencia automática de marcador sin resolver, el suavizado, las extensiones enriquecidas desconocidas, las referencias de serie ajenas o no lineales y los estilos de punto no representados se rechazan antes de la salida

Declarar geometría o un tamaño de leyenda no autoriza a ignorar las extensiones de gráfico desconocidas ni los estilos sin validar; los límites de bytes, texto, celdas almacenadas y escena siguen siendo efectivos para los datos de origen retenidos, las declaraciones, las cachés desacopladas y el espacio temporal de registro

Las sobrecargas adicionales de XLSValidateCachedChartSceneModel y XLSRecordCachedChartScene aceptan TXLSCachedChartSceneAppearance para un modelo desacoplado; inicialízalo con XLSDefaultCachedChartSceneAppearance antes de establecer controles explícitos

El XLSReadClassicChartScene de nivel inferior en lxClassicChartScene devuelve un TXLSXChart desacoplado propiedad de quien llama, una apariencia de primitivas y contadores de presupuesto a partir de un TXLSCustomChart retenido, su calculadora de origen exacta y un TXLSClassicChartSceneSource en concesión; libera el modelo devuelto después del registro

TXLSClassicChartSceneSource.ReadAppearance aporta una declaración de primitiva, ReadCell lee valores locales almacenados fijados y acotados, ReadFont rellena el estilo de texto suministrado con datos efectivos acotados de fuente core, y PaletteColor resuelve entradas explícitas de paleta almacenadas; las implementaciones de la aplicación deben preservar el origen fijado y respetar cada cuota de bytes y caracteres suministrada

Miembro de apariencia de escenaSignificado
SeriesMarkerSizePointsDiámetros en puntos por serie acotados, incluidos los valores fraccionarios; cero conserva el tamaño de marcador del modelo y una anulación distinta de cero debe estar entre 2 y 72 puntos
OverrideBorder, BorderColorRGB, BorderWidthPointsApariencia explícita del contorno del marco del gráfico
AxisColorRGB, TickColorRGB, GridlineColorRGB, AxisWidthPoints, TickWidthPoints, GridlineWidthPointsPintados y anchos en puntos explícitos de eje, marcas y cuadrícula mayor
AreaFillOpacity, SeriesFillAlphaOpacidad de área y alpha de relleno de serie
UseAxisTickControls, CategoryBetweenControles de eje explícitos validados y colocación categórica
TitleOffsetXPoints, TitleOffsetYPointsDesplazamientos finitos aplicados a la posición ordinaria del título del registrador
OverridePlotInnerRectangle, OverrideTitleRectangle, OverrideLegendRectangle, PlotInnerRectangle, TitleRectangle, LegendRectangleRectángulos de puntos literales relativos al marco del gráfico
PieRadiusRatioRadio del trazado circular como fracción acotada de la dimensión menor del trazado

Las primitivas de gráfico siguen la política de diseño existente de HotXLS; la apariencia de galería de gráficos que exige los valores por defecto sin modelo de Excel sigue siendo un límite explícito no admitido

Captura nativa directa del libro

CreateXLSPortableCairoRenderGeometry(Fonts, Calibration, Generation, Backend, Options, CacheCapacity) devuelve un IXLSRenderGeometry respaldado por los mismos archivos de fuentes explícitos, FreeType, HarfBuzz y shaping de texto usados para la salida nativa; las anchuras de columna usan la anchura real medida del dígito máximo con la calibración del libro

El proveedor posee bytes de fuentes desacoplados y una caché de métricas acotada, comprueba los presupuestos de fuentes y diseño antes de asignar, y valida las solicitudes de medición antes de cambiar el estado en caché; una caché llena puede devolver mediciones sin caché sin expandirse más allá de su capacidad

La captura verifica que la generación del proveedor y todos los campos de calibración coinciden con la vista de solo lectura actual del libro, retiene el proveedor para esa vista y deja sin cambiar la fábrica de geometría por defecto del libro; la geometría nativa por defecto ordinaria sigue siendo un límite GDI explícito

Captura la generación a través de una vista liberada explícitamente antes de crear el proveedor; retener un resultado temporal de interfaz puede retener su concesión de lectura hasta que termine el ámbito circundante

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);

Los consumidores nativos compilan con LX_PORTABLE_CORE y las dependencias nativas correspondientes; las llamadas en Windows a la fábrica de geometría nativa de Cairo se rechazan explícitamente, mientras que la captura en Windows puede usar su fábrica de geometría existente mediante las mismas sobrecargas con ámbito

La captura nativa real admite el escalar modelado, el texto enriquecido, el raster admitido, las formas ordinarias y las siete familias de gráficos en caché descritas arriba; la captura de gráficos preserva el ChartML importado original, los puntos en caché, el almacenamiento disperso de celdas, el almacenamiento empaquetado y la generación del libro

Para áreas de impresión inmutables, márgenes, escalado de ajuste o porcentual, títulos repetidos, saltos manuales y paginación de celdas completas o combinadas, consulta los planes de impresión portátiles

Puente de captura avanzado

IXLSRenderCaptureSource en lxSemanticSnapshot es la interfaz interna de coordinación implementada por las vistas de libro de solo lectura admitidas; las aplicaciones ordinarias deben llamar a las sobrecargas de captura basadas en propietario

TXLSClassicReadOnlyWorkbookView y TXLSXReadOnlyWorkbookView implementan IXLSRenderCaptureSource, incluidos los ocho métodos de renderizado de abajo; estas clases coordinan la captura a través de vistas de solo lectura, y el adaptador gestiona su ciclo de vida mientras las aplicaciones retienen su interfaz propietaria del libro y llaman a CaptureXLSPortableRenderSnapshot

Su método TryReadCell existente aporta una instantánea de celda almacenada a través de la vista de solo lectura; los métodos de renderizado añaden apariencia y geometría desacopladas para la captura portátil

Miembro o helperPropósito
ValidateRenderRangeComprueba los límites del rectángulo de base uno y las huellas de apariencia no admitidas antes de la captura
ReadRenderStyleDevuelve metadatos TXLSSemanticCellStyle desacoplados y una marca de presencia de texto enriquecido para una celda de base uno
IXLSRenderRichTextCaptureSource, ReadRenderRichTextExtensión opcional de la vista que devuelve TXLSRenderTextRuns desacoplados y acotados; cada TXLSRenderTextRun contiene Text y un Style semántico efectivo, usando el estilo base suministrado y cuotas positivas de run/bytes sin materializar celdas ni modificar pools de estilos
RenderRowHeightPoints, RenderColumnWidthPointsDevuelven la geometría física, colapsando las dimensiones ocultas a cero
IXLSRenderGeometryCaptureSource, SetRenderCaptureGeometryExtensión opcional de la vista que retiene un proveedor explícito solo tras la validación de generación y calibración; los proveedores no válidos dejan sin cambiar el proveedor retenido de la vista
ReadRenderMergeInforma del rectángulo combinado completo, inclusivo y de base uno, que contiene una celda
ResolveRenderColorResuelve la apariencia semántica theme/indexed/RGB a un color RGB portátil, usando el valor por defecto suministrado donde está admitido
RenderDate1904, RenderRightToLeftExponen el contexto de sistema de fechas del libro y el orden de lectura de la hoja
XLSRenderCaptureLiteralReconoce el subconjunto admitido de Boolean literal, número finito o texto simple entre comillas para capturar sin evaluación
XLSRenderCaptureIntersectsComprueba rangos A1 locales separados por espacios en blanco contra un rectángulo de base uno, rechazando la sintaxis de rango sin resolver
XLSRenderCaptureConditionEvalúa el subconjunto de condiciones admitido contra un escalar existente; los códigos de operador de comparación del 1 al 8 significan entre, no entre, igual, distinto, mayor, menor, mayor-o-igual y menor-o-igual
XLSRenderCaptureApplyDxfAplica la apariencia diferencial desacoplada admitida usando una máscara AppliedSlots para retener el formato de mayor prioridad
TXLSDxfStyle._MarkRenderUnsupportedAppearance, TXLSDxfStyle._HasRenderUnsupportedAppearanceLos métodos de coordinación de importación con prefijo interno registran e inspeccionan la apariencia que el modelo diferencial con tipo no puede renderizar de forma segura; Assign retiene la marca, y la captura rechaza un estilo coincidente marcado

Estos helpers del puente pueden lanzar EXLSSemanticSnapshot; el adaptador de captura público traduce esa excepción a EXLSPortableRender