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ímbolo | Contrato |
|---|---|
EXLSPortableRender | Excepció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, TXLSPortableFontStyles | xpfsBold, xpfsItalic, xpfsUnderline y xpfsStrikeout, combinados como un conjunto |
TXLSPortableHorizontal, TXLSPortableVertical | xphLeft, xphCenter, xphRight y xpvTop, xpvCenter, xpvBottom |
TXLSPortableBorderStyle, TXLSPortableBorder | xpbsNone, xpbsSolid, xpbsDashed, xpbsDotted y xpbsDouble; cada borde lleva Style, WidthPoints y ColorRGB |
TXLSPortableCell | Row/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, TXLSPortableSizes | Arrays dinámicos de celdas almacenadas y tamaños físicos de fila/columna en puntos |
TXLSPortableRenderLimits | MaxGridCells, MaxStoredCells, MaxBytes y MaxTextCharacters acotan la construcción, la captura y la serialización |
XLSDefaultPortableRenderLimits | Devuelve 2000000 celdas de cuadrícula, 2000000 celdas almacenadas, 67108864 bytes y 16777216 caracteres de texto UTF-16 |
XLSDefaultPortableCell | Inicializa 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 |
CreateXLSPortableRenderSnapshot | Valida 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 |
IXLSPortableRenderSnapshot | Generation, RowCount, ColumnCount, CellCount de solo lectura, RowHeightPoints, ColumnWidthPoints de base cero y registros Cells copiados |
| Métodos getter de la instantánea | GetGeneration, GetRowCount, GetColumnCount, GetCellCount, GetRowHeight, GetColumnWidth y GetCell exponen los mismos valores; el acceso indexado no válido lanza una excepción |
SaveXLSPortableRenderSnapshot | Valida 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 |
LoadXLSPortableRenderSnapshot | Lee 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ímbolo | Contrato |
|---|---|
TXLSPortableFontFile, TXLSPortableFontFiles | Cada mapeo explícito contiene FamilyName, FileName, FaceIndex, Bold e Italic; el array dinámico está ordenado y contiene entre 1 y 64 mapeos |
TXLSPortableCairoFormat, TXLSPortableOutputFiles | xpcfPDF, xpcfSVG o xpcfPNG, y un array de nombres de archivo de salida devuelto por el guardado a archivo |
TXLSPortableCairoOptions | Anchura/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 |
XLSDefaultPortableCairoOptions | Inicializa cada opción con valores por defecto acotados; úsalo antes de sobrescribir campos individuales |
PrepareXLSPortableCairoLayout | Valida 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 |
TXLSPortableCairoLayout | Expone PageCount, LineCount, CellCount, GetTextLine, GetCellGeometry, SaveToStream, Save y Destroy |
TXLSPortableTextLineInfo | Un registro de línea copiado tiene CellIndex, GlyphCount, XPoints, BaselinePoints, WidthPoints, FontSizePoints y el Text lógico |
TXLSPortableCellGeometry | Un 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
| Campos | Valores por defecto y significado |
|---|---|
PageWidthPoints, PageHeightPoints | 595 por 842 puntos |
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints | 36 puntos cada uno; los márgenes deben dejar un rectángulo imprimible positivo |
CellPaddingPoints, RasterDPI | 2 puntos y 96 DPI; el DPI afecta a las dimensiones PNG |
MaxPages, MaxGlyphs, MaxLines | 256 páginas, 2000000 glifos con shaping y 200000 líneas de texto |
MaxLayoutBytes | 268435456 bytes para trabajo de diseño acotado y comprobaciones de superficie raster |
MaxOutputBytes | 268435456 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 |
MaxFontBytes | 134217728 bytes en total para los archivos de entrada de fuentes explícitas de un diseño |
MaxShapedCharacters, MaxDrawOperations | 16000000 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ón | Contrato |
|---|---|
Generation, SheetIndex, ObjectId | La 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, ChartHeightPoints | Un 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, PlotInnerRectangle | Un rectángulo interior de trazado explícito que excluye etiquetas y títulos de eje; es obligatorio para esta ruta de apariencia declarada |
HasTitleRectangle, TitleRectangle | Un 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, LegendRectangle | Los límites declarados de la leyenda cuando hay leyenda |
HasLegendFontSize, LegendFontSizePoints | El 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 |
TXLSPortableChartRectangle | Left, 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, ReadDeclaration | El 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 escena | Significado |
|---|---|
SeriesMarkerSizePoints | Diá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, BorderWidthPoints | Apariencia explícita del contorno del marco del gráfico |
AxisColorRGB, TickColorRGB, GridlineColorRGB, AxisWidthPoints, TickWidthPoints, GridlineWidthPoints | Pintados y anchos en puntos explícitos de eje, marcas y cuadrícula mayor |
AreaFillOpacity, SeriesFillAlpha | Opacidad de área y alpha de relleno de serie |
UseAxisTickControls, CategoryBetween | Controles de eje explícitos validados y colocación categórica |
TitleOffsetXPoints, TitleOffsetYPoints | Desplazamientos finitos aplicados a la posición ordinaria del título del registrador |
OverridePlotInnerRectangle, OverrideTitleRectangle, OverrideLegendRectangle, PlotInnerRectangle, TitleRectangle, LegendRectangle | Rectángulos de puntos literales relativos al marco del gráfico |
PieRadiusRatio | Radio 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 helper | Propósito |
|---|---|
ValidateRenderRange | Comprueba los límites del rectángulo de base uno y las huellas de apariencia no admitidas antes de la captura |
ReadRenderStyle | Devuelve metadatos TXLSSemanticCellStyle desacoplados y una marca de presencia de texto enriquecido para una celda de base uno |
IXLSRenderRichTextCaptureSource, ReadRenderRichText | Extensió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, RenderColumnWidthPoints | Devuelven la geometría física, colapsando las dimensiones ocultas a cero |
IXLSRenderGeometryCaptureSource, SetRenderCaptureGeometry | Extensió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 |
ReadRenderMerge | Informa del rectángulo combinado completo, inclusivo y de base uno, que contiene una celda |
ResolveRenderColor | Resuelve la apariencia semántica theme/indexed/RGB a un color RGB portátil, usando el valor por defecto suministrado donde está admitido |
RenderDate1904, RenderRightToLeft | Exponen el contexto de sistema de fechas del libro y el orden de lectura de la hoja |
XLSRenderCaptureLiteral | Reconoce el subconjunto admitido de Boolean literal, número finito o texto simple entre comillas para capturar sin evaluación |
XLSRenderCaptureIntersects | Comprueba rangos A1 locales separados por espacios en blanco contra un rectángulo de base uno, rechazando la sintaxis de rango sin resolver |
XLSRenderCaptureCondition | Evalú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 |
XLSRenderCaptureApplyDxf | Aplica la apariencia diferencial desacoplada admitida usando una máscara AppliedSlots para retener el formato de mayor prioridad |
TXLSDxfStyle._MarkRenderUnsupportedAppearance, TXLSDxfStyle._HasRenderUnsupportedAppearance | Los 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