ポータブル ヘッドレス出力
バージョン 2.384.100 以降、明示的なキャプチャとレンダリング API を備えた上限付き出力パイプラインとして利用可能です
Windows 上の Classic XLS または XLSX ワークブックから対応する矩形をキャプチャし、不変のスナップショットを転送し、Free Pascal とネイティブ Cairo で Linux や macOS 上に PDF、SVG、PNG をレンダリングします
キャプチャ アダプターはワークブック エンジンを使います。Windows のキャプチャはデフォルトのジオメトリ サービスを使い、ネイティブの Linux・macOS キャプチャは、アプリケーションが選んだフォント ファイルを基盤とする明示的な FreeType/HarfBuzz ジオメトリ サービスを供給できます
独立したネイティブ コンシューマーは、Excel やデスクトップ セッションなしで、lxPortableCairo を通じて lxPortableRender のシーンを受け付けます。そのジオメトリ API も既存のポータブル ワークブック ビューとレンダリング ジオメトリのユニットを使います
コンシューマーは不変のシーンか転送ストリームを受け付けます。ワークブックの読み込みと計算のプラットフォーム要件は、Free Pascal サポート で別途説明しています
既存ワークブック矩形のキャプチャ
lxPortableWorkbookCapture の CaptureXLSPortableRenderSnapshot は、IXLSWorkbook か IXLSXWorkbookOwner を、明示的またはデフォルトの TXLSPortableRenderLimits とともに受け付けます。追加の 2 つのオーバーロードは、明示的な上限の後に、キャプチャ ビューにスコープされた IXLSRenderGeometry プロバイダーを受け付けます
SheetIndex と、両端を含む Row1、Col1、Row2、Col2 は 1 始まりです。結果のスナップショットは、キャプチャ矩形を基準にしたゼロ始まり位置を保存します
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.
ワークブック オブジェクトを使っている間、オーナー インターフェースを生存させてください。インターフェース所有のワークブックを手動で解放する代わりに、インターフェースを解放します
Classic XLS では、同じキャプチャ呼び出しに対して lxHandle の TXLSWorkbook と IXLSWorkbook を使ってください
キャプチャは既存の数式キャッシュを読み、キャッシュのない矩形内の数式は拒否します。ソース ワークブックで、暗黙の再計算、外部データの取得、新しいスタイルのインターンを行うことはありません
アプリケーションが新しい数式結果を必要とするなら、キャプチャ前に明示的に再計算してください。既存のキャッシュは保存されたままレンダリングされるため、キャプチャはその鮮度を保証しません
この操作は読み取りビューを保持し、戻る前にワークブックの世代をチェックします。返されたスナップショットはワークブックの所有から切り離され、ワークブック解放後も利用できます
外観とキャプチャの境界
スナップショットには、書式付き表示テキスト、ポイント単位の物理寸法、解決済み RGB カラー、対応するセル フォントと配置、塗りつぶし、罫線、完全な結合矩形が含まれます。非表示の行と列はサイズ 0 です
対応するフォント外観には、太字、斜体、一重下線、取り消し線があります。対応するセル外観には、単一塗りつぶし、左/中央/右の横配置、上/中央/下の縦配置、折り返し、縮小、右から左の読み順があります
thin、medium、thick、hair、double、dotted、dashed、medium-dashed のワークブック罫線は、ポータブル罫線スタイルとポイント幅へマッピングされます。その他の罫線スタイルは拒否されます
対応するリッチテキストは、実効 run フォント、ポイント サイズ、RGB カラー、太字、斜体、一重下線、取り消し線、run レベルの上付き・下付きを運びます。単純なセルのアウトライン/影/縦書きフォント効果、未対応の下線スタイル、グラデーションやパターン塗りつぶし、斜め罫線、インデント、テキスト回転、未対応の配置は拒否されます
キャプチャ矩形は各結合セルを完全に含まなければなりません。切り詰められた結合、重なる結合、不整合のある結合、結合外周に沿った非互換スタイルは拒否されます
シート背景と未対応のシート種別はキャプチャを拒否します。両ワークブック ファサードの対応する PNG/JPEG 画像と通常の矩形/楕円テキスト図形は、順序付きシーン オブジェクトとしてキャプチャされます。XLSX セル画像、Boolean チェックボックス、後述の対応するキャッシュ済み XLSX グラフ サブセットも一緒です。未対応のグラフ、図形プリセット、ワードアート、グループ化変換、フローティング コントロール、スライサー、タイムライン、スパークラインは、解決されたフットプリントが矩形と交差すると拒否されます
フットプリントが確実に解決され、矩形の外にある未対応コンテンツは、キャプチャと共存できます。解決できない描画フットプリントは、重なる可能性のある内容を黙って省略する代わりに拒否します
矩形と交差する Classic テーブル スタイルは拒否されます。XLSX の組み込みと対応するカスタム Table セクションは、切り離されたスタイル コンテキストで解決され、セクション サイズの縞模様と直接セル書式の上書きを伴います
対応するインポート済み Table の単一塗りつぶしや暗黙の差分塗りつぶしでは、RGB bgColor が可視の背景を供給します。RGB fgColor だけでは継承された背景は変わらず、両色を持つセクションはその背景色を使います
型付きサマリーが表現できない外観を含むインポート済み Table セクションは、そのセクションが適用されるときに拒否されます。下線、表示形式、明示的にクリアされた太字/斜体、フォント スキーム、明示的な塗りなしパターン、未対応の色形式などです。キャプチャ矩形の外にある無関係なセクションはキャプチャを妨げません
対応する条件付き書式は、数式評価なしで適用されます。リテラル数値境界に対するキャッシュ済みの数値・日付比較、リテラルの Boolean・数値式、テキストの包含/前方/後方一致規則、空白、エラーです。優先度の高い外観が対応するプロパティごとに勝ち、XLSX の StopIfTrue は優先度の低い一致規則を止めます
Classic のテキスト規則はリテラル文字列の needle を要求し、キャッシュ済み文字列セルと照合します。XLSX のテキスト規則は保存されたテキスト条件を使います
対応する差分外観には、tint 付きの解決済みテーマ カラーと単純なインデックス カラーがあります。インポート済みの自動カラー、テーマ外の tint、前景と背景の両色を持つ差分塗りつぶし、未対応の罫線・配置・取り消し線やその他の表現できない差分外観は、一致する規則が適用されるときに拒否されます
評価を要する条件数式、集計や日付依存の規則、カラースケール、データバー、アイコン セットは、遭遇した場所で拒否されます。重なる条件付き書式規則の数には上限があります
Date1904 変換は、カレンダー オフセットを適用する前に、適用可能な生の表示形式セクションを選びます。非アクティブなカレンダー セクションは通常の数値表示を変えず、Boolean 値は Boolean のままです
選択された Date1904 カレンダー セクションが書式条件や経過時間の構成と組み合わさると拒否されます。引用符付きやエスケープされたセクション区切りも拒否します。この境界は、別のセクションがカレンダー形式だからといって、選択された通常の数値セクションを妨げません
リッチテキストと順序付き描画シーン
TXLSPortableCell.RichText は、Text、FontFamily、FontSizePoints、FontStyles、ColorRGB、BaselineShiftPoints を含む TXLSPortableTextRun レコードの配列です。連結した run テキストは、セル表示テキストと正確に一致しなければなりません
XLSX の run は、省略されたプロパティを実効的なキャプチャ済みセル フォントから継承します。対応するテーブル書式と条件付き書式も含まれます。明示的に代入された false フラグと、明示的な none/ベースライン/自動カラー値は継承に優先します
ネイティブの共有文字列とインライン文字列は、run 境界と空白を保持します。未対応のネイティブ フォント子要素、属性、名前空間、テーマ/インデックス リッチ カラー、ふりがな注釈は、可視外観を黙って失う代わりに拒否します
Classic の run は、保存された BIFF フォント インデックスを完全な実効 run フォントへ解決します。ふりがなメタデータと未対応の run フォントは拒否され、キャプチャはワークブックの世代とスタイル プールを保持します
Classic のテキスト図形は、描画ラッパーを作らずワークブックも変えずに、既存の OfficeArt プロパティと TXO フォント run を読みます。アンカーは実際の行・列寸法とオフセットを使い、対応する単一塗りつぶしと輪郭は色と幅を保持し、埋め込み PNG/JPEG バイトは転送前に切り離されます
矩形テキストはネイティブの水平 7.2pt、垂直 3.6pt の余白を使います。楕円テキストはさらに内接テキスト矩形を使い、両ワークブック ファサードで通常のテキストを図形の輪郭内に保ちます
インポート済み Classic の矩形・楕円コンテナは、型付きテキストと書式を保持します。解決されたフットプリントを持たない、スキップされたネイティブ図形やグループ メタデータはキャプチャを明示的に拒否し、未知のオブジェクト末尾レコード、描画拡張、回転、非単一塗りつぶし、未対応の線スタイルは交差するオブジェクトを拒否します
インポート済み XLSX の 2 セル矩形・楕円アンカーは、アルファ付き明示的 RGB 単一塗りつぶし、単一または破線/点線の輪郭、物理アンカー オフセット、1 つの通常リッチテキスト段落をサポートします。各 run は、明示的な太字・斜体のリセットも含めて、実効書体、ポイント サイズ、カラー、太字、斜体、一重下線、取り消し線を保持します
インポート済み図形リーダーは、解析前に raw XML の作業ストレージを確保し、アイテム、バイト、テキストの各予算を協調的にチェックします。図形モデルや存在しないセルを作らずに、ワークブックの描画順序と読み取りリースを保持します
未知のネイティブ図形プロパティ、エフェクト、テーマ、回転、グループ化変換、複数段落、未対応のアンカー種別は明示的に拒否されます。解決された未対応フットプリントがキャプチャ矩形の外にあれば、要求された領域は妨げられません
run レベルの上付き・下付きは、run フォント サイズの 3 分の 2 と、元のポイント サイズの 3 分の 1 のベースライン シフトを使います。Unicode シェーピング クラスタを分断するスタイル境界や、非互換の run 境界を越える CRLF シーケンスは、ネイティブ レイアウト中に拒否されます
TXLSPortableSceneObject は、Kind、ポイント単位の X、Y、Width、Height、クリッピング矩形、塗りつぶし/輪郭カラーと不透明度、省略可能なパス点、テキスト セル、またはエンコードされたラスター バイトと寸法を運びます
TXLSPortableSceneKind には xpskRectangle、xpskEllipse、xpskPolyline、xpskPolygon、xpskText、xpskPNG、xpskJPEG があります。配列の順序は描画順で、後のオブジェクトが前のオブジェクトを覆います
追加の CreateXLSPortableRenderSnapshot オーバーロードは TXLSPortableSceneObjects 配列を受け付けます。ゼロ始まりの Objects と ObjectCount は IXLSPortableRenderSceneSnapshot で照会し、その getter は run、点、ラスター配列を含む切り離されたコピーを返します
セル画像とチェックボックス パスはフローティング描画に先行します。フローティング描画はワークブック順序、物理アンカー、ビューポート クリッピングを保持し、テキスト図形は 11 ポイントの minor テーマ フォントを、水平 7.2 ポイント、垂直 3.6 ポイントのテキスト余白付きで使います
PNG と JPEG 画像は、ヘッダー、ピクセル サイズ、バイトのプリフライトの後にネイティブにデコードされます。対応するフローティング画像は透明度とストレッチ ジオメトリを保持し、セル画像はアスペクト比を保ったままセルまたは完全な結合矩形の中に収まります
トリミング、回転、影、明るさ/ガンマ調整、タイリング、SVG コンパニオン、ライブ カメラ バインディングは未対応のままです。保持された画像 XML は対応する外観に対して検証されるため、非表示画像、未知のネスト メタデータ、外部名前空間のプロパティ、非矩形の画像ジオメトリ、モデル化されていない変換は、フットプリントがキャプチャと重なるときにだけ拒否されます
Boolean セルのチェックボックスは、テーマに中立なベクター ボックスと省略可能なチェック マークを使います。行・列書式から継承された実効コントロールも含まれます。要求されたセルの走査は走査前に上限が課され、その他のコントロール種別や空白、Boolean 以外のチェックボックス値は拒否されます。対応するセル シーンは、スカラー Boolean や画像エラーのフォールバック テキストを抑制します
チェックボックスのデフォルトは挿入メタデータであり、存在しないセルの Boolean を作り出しません。明示的な直接セル コントロール クリアは継承されたコントロールをマスクし、キャプチャ読み取りはスパースな不在とワークブックの世代を保持します
XLSReadPortableImageDimensions は、上限付き PNG IHDR か、対応する 8 ビットのシーケンシャル/プログレッシブ JPEG フレームを検証し、宣言された幅と高さを返します。デコードはレンダラーの責任のままです
IXLSPortableSceneCaptureSource.ReadPortableSceneObjects は、1 始まりのワークブック座標と、範囲を基準にしたポイント単位のシーン座標を使い、範囲と協調上限を検証して、消費したバイト、テキスト、アイテム数を返します。HasPortableCellScene は、スカラー表示がキャプチャ済みシーンに置き換えられたセルを識別します
ネイティブ レイアウトの CellCount はグリッド セルを数え、LineCount はテキスト シーン オブジェクトも含みます。テキスト オブジェクトの行 CellIndex は、CellCount にテキスト シーン オブジェクト間でのゼロ始まり順番を足したもので、GetCellGeometry は引き続きグリッド セルに限定されます
スカラー スナップショットは引き続き HXRSNP01 として直列化され、run やシーン オブジェクトを含むスナップショットは HXRSNP02 として直列化されます。ローダーは両バージョンを、同じ不変所有と入力位置ロールバック契約で受け付けます
合計アイテム予算は、保存セル、リッチ run、シーン オブジェクト、パス点を数えます。バイト上限は、割り当て前にステージング済みと切り離し配列、テキスト、エンコードされたラスター ペイロード、上限付きネイティブ メタデータ検査を計上します
ポータブル スナップショット API
| シンボル | 契約 |
|---|---|
EXLSPortableRender | 無効なスナップショット データ、未対応のキャプチャ外観、利用不可のネイティブ バックエンド、リソース上限、レンダリング失敗に対して発生する例外です |
TXLSPortableFontStyle, TXLSPortableFontStyles | xpfsBold、xpfsItalic、xpfsUnderline、xpfsStrikeout をセットとして組み合わせます |
TXLSPortableHorizontal, TXLSPortableVertical | xphLeft、xphCenter、xphRight と、xpvTop、xpvCenter、xpvBottom です |
TXLSPortableBorderStyle, TXLSPortableBorder | xpbsNone、xpbsSolid、xpbsDashed、xpbsDotted、xpbsDouble です。各罫線は Style、WidthPoints、ColorRGB を持ちます |
TXLSPortableCell | ゼロ始まりの Row/Column、正の RowSpan/ColumnSpan、表示 Text、FontFamily、FontSizePoints、FontStyles、TextColorRGB、FillColorRGB、HasFill、WrapText、ShrinkToFit、RightToLeft、Horizontal、Vertical と、4 つの LeftBorder/TopBorder/RightBorder/BottomBorder レコードです |
TXLSPortableCells, TXLSPortableSizes | 保存セルと、ポイント単位の物理的な行/列サイズの動的配列です |
TXLSPortableRenderLimits | MaxGridCells、MaxStoredCells、MaxBytes、MaxTextCharacters が構築、キャプチャ、直列化を制限します |
XLSDefaultPortableRenderLimits | 2000000 グリッド セル、2000000 保存セル、67108864 バイト、16777216 UTF-16 テキスト文字を返します |
XLSDefaultPortableCell | 11 ポイントの Calibri とデフォルトのゼロ値外観で 1 セルのスパンを初期化します。構築前に位置と希望する外観を設定してください |
CreateXLSPortableRenderSnapshot | 世代、行の高さ、列の幅、保存セルを検証して、切り離された不変インターフェースへコピーします。セルは一意で、行優先順で、境界内にあり、重ならないスパンを持つ必要があります |
IXLSPortableRenderSnapshot | 読み取り専用の Generation、RowCount、ColumnCount、CellCount、ゼロ始まりの RowHeightPoints、ColumnWidthPoints と、コピーされた Cells レコードです |
| スナップショットの getter メソッド | GetGeneration、GetRowCount、GetColumnCount、GetCellCount、GetRowHeight、GetColumnWidth、GetCell が同じ値を公開します。無効なインデックス アクセスは例外を発生させます |
SaveXLSPortableRenderSnapshot | 1 つのスナップショットを検証して上限付きプライベート バッファへ直列化し、その後、完全な HXRSNP01 か HXRSNP02 ペイロードを、指定されたストリームの現在位置へコピーします |
LoadXLSPortableRenderSnapshot | バージョン付きリトルエンディアンのスナップショットを厳密な UTF-8 テキストで読み、カウント、ジオメトリ、スタイル、スパンを検証し、末尾の余分なデータは拒否します。失敗時は入力ストリーム位置を復元します |
すべての上限は正でなければなりません。検証済みの最大値は、グリッド/保存セル 2000000、1073741824 バイト、テキスト文字 268435456 で、寸法は 1048576 行 x 16384 列までです
MaxGridCells は、保存されていない空白セルも含めて矩形全体を数えます。CellCount は保存された可視セルと結合アンカーを数えるため、より小さくなり得ます
Generation は、ソースの世代かアプリケーション指定の値を記録します。これはメタデータであって、ワークブックへのライブ リンクや自動鮮度チェックではありません
ネイティブ レンダリングと明示的フォント
XLSPortableCairoBackendAvailable はコンパイル済みネイティブ バックエンドの可用性を報告します。ネイティブ出力には Linux か macOS 上の Free Pascal が必要で、プロセスから Cairo、FreeType、HarfBuzz、FriBidi の各ライブラリが利用可能でなければなりません
macOS ビルドは 4 つのネイティブ ライブラリを明示的にリンクします。プライベートな依存プレフィックスと明示的な子プロセス ローダー パスで、共有コンパイラ設定やシェル プロファイルを変えずに供給できます
Windows の Delphi XE5、Win32、Win64 はポータブル インターフェースをコンパイルし、スナップショット直列化を使えますが、ネイティブ Cairo レイアウト準備はその環境ではバックエンド利用不可を報告します
明示的なフォント チェーンを PrepareXLSPortableCairoLayout に渡してください。レンダラーはまず一致するファミリーと太字/斜体スタイルを試し、その後、供給順に同スタイルのフォールバックを試します。対応する各テキスト クラスタに対するグリフ カバレッジが必要です
キャプチャした内容が必要とする実際の regular、bold、italic、bold-italic の各ファイルを供給してください。システム フォントの探索や合成的な太字/斜体の代用は行われず、欠落したファイル、スタイル マッピング、グリフ カバレッジは拒否されます
フォント バイトはシェーピングの前にキャプチャされるため、ファイルを変えると以後のレイアウトに影響し、既存のレイアウトはキャプチャ済みバイトを保持します。FaceIndex はフォント ファイルやコレクション内の負でないフェイスを選びます
ネイティブ操作は FreeType フェイスの安全性のため直列化されます。不変スナップショットと準備済みレイアウトの検査に、ライブ ワークブックは不要です
Fonts[0].FamilyName := 'Calibri'; Fonts[0].FileName := '/srv/fonts/Regular.ttf'; Fonts[0].FaceIndex := 0; Fonts[0].Bold := False; Fonts[0].Italic := False;
ここでの Calibri は選択したファイルに対する明示的なファミリー エイリアスで、アプリケーション制御のフォント マッピングが可能です。別のフォントへマッピングするときは出力メトリクスを確認してください
レンダラーは、強制改行、4 スペース タブ展開、段落の双方向順序、シェーピングされた合字と結合記号、貪欲な折り返し、縮小して全体を表示をサポートします。折り返しが縮小より優先されます
折り返しは、実装済みの結合記号、異体字セレクタ、ZWJ、virama クラスタの境界を保持し、空白と全角スペースを優先します。完全な UAX #29 書記素実装や Unicode 行分割アルゴリズムではなく、regional-indicator と Hangul-Jamo の折り返し境界は保証されません
フォント サイズは 1/64 ポイントに解決され、テキストはセル境界でクリップされます。PDF は論理テキスト マッピング付きで明示的フォントを埋め込み、SVG はベクター グリフ パスを使い、PNG は要求された DPI で同じ配置グリフを描画します
レイアウトの準備と検査
| シンボル | 契約 |
|---|---|
TXLSPortableFontFile, TXLSPortableFontFiles | 1 つの明示的マッピングは FamilyName、FileName、FaceIndex、Bold、Italic を含みます。動的配列は順序付きで、1 〜 64 個のマッピングを持ちます |
TXLSPortableCairoFormat, TXLSPortableOutputFiles | xpcfPDF、xpcfSVG、xpcfPNG と、ファイル保存が返す出力ファイル名の配列です |
TXLSPortableCairoOptions | ページの幅/高さ、4 つの余白、セル パディング、ラスター DPI に加え、ページ、グリフ、行、レイアウト、出力、フォント、シェーピング、描画の各上限です |
XLSDefaultPortableCairoOptions | すべてのオプションを上限付きデフォルトで初期化します。個々のフィールドを上書きする前に使ってください |
PrepareXLSPortableCairoLayout | スナップショットを検証してコピーし、明示的なフォント バイトをキャプチャし、所有された準備済み TXLSPortableCairoLayout を返します。解放は Free で行います |
TXLSPortableCairoLayout | PageCount、LineCount、CellCount、GetTextLine、GetCellGeometry、SaveToStream、Save、Destroy を公開します |
TXLSPortableTextLineInfo | コピーされた行レコードは、CellIndex、GlyphCount、XPoints、BaselinePoints、WidthPoints、FontSizePoints と論理 Text を持ちます |
TXLSPortableCellGeometry | コピーされた矩形は、完全なレイアウトにおける XPoints、YPoints、WidthPoints、HeightPoints を持ちます |
GetTextLine(Index), GetCellGeometry(Index) | 準備済み行と保存セルのゼロ始まりインデックス検査です。無効なインデックスは拒否されます |
ページ分割は、横→下の順で固定された印刷可能領域タイルをクリップします。ページ境界をまたぐセルやテキスト断片は、交差するすべてのページに現れます。セル全体の自動収録、ワークシート印刷タイトルの繰り返し、ワークブック ページ設定の解釈は行われません
レンダラー オプションと上限
| フィールド | デフォルトと意味 |
|---|---|
PageWidthPoints, PageHeightPoints | 595 x 842 ポイント |
MarginLeftPoints, MarginTopPoints, MarginRightPoints, MarginBottomPoints | それぞれ 36 ポイントです。余白は正の印刷可能矩形を残す必要があります |
CellPaddingPoints, RasterDPI | 2 ポイントと 96 DPI です。DPI は PNG の寸法に影響します |
MaxPages, MaxGlyphs, MaxLines | 256 ページ、シェーピング済みグリフ 2000000、テキスト行 200000 です |
MaxLayoutBytes | 上限付きレイアウト作業とラスター サーフェス チェックのための 268435456 バイトです |
MaxOutputBytes | レンダリング出力バッファごとの 268435456 バイトです。個別ページ ファイルの合計ではなく、完全な PDF か 1 つの SVG/PNG ページを対象とします |
MaxFontBytes | 1 レイアウトの明示的フォント入力ファイル全体で 134217728 バイトです |
MaxShapedCharacters, MaxDrawOperations | それぞれ 16000000 で、シェーピング作業とページごとのセル描画作業を制限します |
無効または非有限のジオメトリ、正でない作業予算は拒否されます。ページ寸法は 100000 ポイント、ラスター DPI は 1200 までに制限され、レンダリング前に追加のバイト、カウント、ラスター面積チェックがあります
ネイティブのプロセス全体フォント バイト プールは、さらに最大 256 個の異なるバッファと 256 MiB までを許します。完全に同一のバイト列はストレージを共有でき、容量が解放されるのは、実際に Cairo 所有のフォント フェイスがバッファを解放したときだけです
使い終わった各レイアウトは解放してください。ライブラリは共有 Cairo キャッシュをリセットせず、論理的に完了したレイアウトでも、ネイティブ Cairo がフェイスを所有し続けている間、フォント バイトが常駐したままになり得ます
出力の書き込みと失敗の処理
SaveToStream(Stream, Format, PageIndex = 0) は PDF の全ページを書き込み、PageIndex = 0 が必要です。SVG と PNG は選択されたゼロ始まりページを書き込みます
スナップショット直列化とネイティブ レンダリングは、宛先ストリームへのコピーの前に、プライベートな上限付きバッファで完了します。検証やレンダリングの失敗では宛先は保持されますが、呼び出し側ストリームの書き込み失敗は部分的なバイト列を残すことがあり、そのストリーム自身の失敗動作に従います
Save(FileName, Format) は 1 つの PDF ファイルか、ページごとに 1 つの SVG/PNG ファイルを書き込み、そのパスを返します。複数ページのファイル名は、拡張子の前に -0001、-0002 と続く接尾辞を挿入します
既存のファイルやディレクトリ宛先は拒否されます。各保存は全ページをステージングし、排他的な新しい宛先を公開し、失敗時には自身のステージング/公開済み出力を取り除きます
ファイルシステムは、ネイティブの排他ステージングとリンク公開操作をサポートする必要があります。PDF、SVG、PNG の個別保存は独立した操作であり、結合されたトランザクションにはなりません
スタンドアロン Linux コンシューマー
Tests/Portable/RenderPortableSnapshot.pas は、スナップショットを読み込み、1 つのレイアウトを準備し、3 形式すべてを保存する完全なコンシューマーです。ポータブル ユニットとネイティブ ライブラリをインストールした Linux でビルドしてください
fpc -Mdelphiunicode -Fu/path/to/HotXLS/Lib RenderPortableSnapshot.pas ./RenderPortableSnapshot report.hxrs /srv/output/report fonts.tsv 595 842 96
fonts.tsv は、マッピングごとにタブ区切り 4 フィールドの UTF-8 テキストです。ファミリー エイリアス、絶対 Linux フォント パス、フェイス インデックス、regular、bold、italic、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
実際にインストールされたか、アプリケーションが供給したフォント ファイルを使い、既存の宛先ファイルは拒否されるため新しい出力ベースを選んでください。最初のマッピングがカバーしない文字体系向けに、追加の同スタイル フォールバックを含めてください
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;
キャッシュ済みグラフの記録
lxPagination の XLSRecordCachedChartScene は、既存のグラフ レイアウト レンダラーのポイント単位プリミティブを、不変のポータブル シーン表現へ記録します。ソースは、所有ワークシートも保持ネイティブ XML もない切り離された TXLSXChart でなければならず、記録がワークシート参照を解決したりワークブック キャッシュを更新したりすることはありません
現在のサブセットは、1 つの主プロット グループ、有限の数値値キャッシュ、厳密に増加する上限付きキャッシュ インデックスを備えた、縦棒、横棒、折れ線、散布図、円、ドーナツ、通常の単一系列面グラフをサポートします。散布図の項目キャッシュは数値 X 座標を含み、その他の種別は保存された項目ラベルを使います
縦棒、横棒、折れ線、面の値キャッシュは、連続するゼロ始まりインデックスを持たなければなりません。疎な項目値の欠落は拒否され、記録が欠落インデックスを大きな配列へ展開することはありません
横棒プロットは水平ジオメトリと項目ラベルを保持します。円とドーナツ プロットは項目凡例を使い、FirstSliceAng と HoleSize を守り、数値軸を省きます。通常の単一系列面プロットは、ゼロ基準線の周りの塗りつぶし多角形を保持します
折れ線と散布図の系列は、LineVisible、LineColorRGB、LineWidthPoints による独立した線の可視性、明示的 RGB カラー、ポイント幅をサポートします。LineStyleSet、LineColorSet、LineWidthSet が明示的な設定を継承デフォルトと区別し、EffectiveLineVisible が既存の塗りつぶし専用系列規約を解決します
マーカーは、自動円、明示的円、マーカーなしをサポートします。2 から 72 の明示的な MarkerSize がポイント直径を設定し、MarkerFillSet と MarkerBorderSet が、明示的な黒 RGB 値ゼロを自動カラー選択と区別します。接続セグメントは不透明なデータ マーカーの前に描画されます
保存された幅のない明示的マーカー罫線は通常の 0.75 ポイント線を使い、凡例サンプルの円直径は 6 ポイントに制限されます。要求されたタイトル フォントは、既定テキスト プロパティだけでなく実際のリッチテキスト run にも書き込まれ、Excel がグラフをエクスポートしても可視のサイズ、カラー、強調が保持されます
未対応のグラフ種別、積み上げや複数系列の面プロット、複数系列の円形プロット、ギャラリー スタイル、角丸、副次または結合プロット グループ、日付軸、カスタム表示形式、対数軸、カスタム交差動作、回転テキスト、近似曲線、誤差範囲、階層的項目、データラベル、その他のマーカー形状、欠落した値キャッシュは、レンダリング前に EXLSPortableRender を発生させます
カスタム数値軸目盛フォント、補助目盛線、明示的な主/輔単位、無効な明示系列カラー、未対応の軸位置は拒否されます。横棒の凡例は現在、通常の右側配置を要求し、円形プロットは有限で非ゼロのキャッシュ済み合計と、円弧作業ストレージのための早期保守的確保を伴う上限付きジオメトリを要求します
返された配列は、プリミティブの描画順序、明示的カラー、フォント、テキスト配置、不透明度、グラフ クリッピング境界を保持します。アイテム、バイト、テキストの計上には保守的なレンダラー作業確保が含まれ、作業配列の割り当ての前に協調的なキャッシュ チェックがあります
XLSValidateCachedChartSceneModel は、ワークシート セルを解決せずに、モデルに対して同じ上限付きキャッシュと外観のプリフライトを実行します。XLSX キャプチャ ブリッジはクローンの前にこのチェックを使い、ローカル 1 次元 A1 参照、物理ネイティブ アンカー オフセット、範囲クリッピング、描画順序を伴う、対応する作成済みグラフ モデルを記録します
プラットフォーム中立のレコーダーは lxPortableChart にあります。既存の lxPagination エントリ ポイントは同じレイアウトとプリミティブ記録本体を共有し、Windows レンダラーの動作を保ちつつ、対応する各種別で不変シーン バイトと予算計上を一致させます
ネイティブの Linux・macOS ワークブック キャプチャは、後述の明示的ジオメトリ オーバーロードを使います。インポート済みの系列 RGB 塗りつぶし、プロット エリア背景、グラフ背景、グラフ罫線は、それぞれの名前空間解決済み図形プロパティから復元されるため、ネストした系列カラーがプロット背景を上書きすることはありません
インポート済み保持 ChartML が受け付けられるのは、名前空間展開された要素、属性、有意テキスト ストリームが、対応する型付き再構築と一致するときだけです。名前空間エイリアスと属性順は正規化されますが、モデル化されていないネイティブ拡張、外部属性、未対応の外観は保守的に拒否されます
raw XML と再構築の作業予算は、クローンと投影作業の前にチェックされます。検証済み保持 XML をクリアするのは切り離されたコピーだけで、ソースはネイティブ メタデータ、セル ストレージ、キャッシュ内容、世代を保持します
キャプチャは、公開 Shapes ラッパーに存在しないグラフ フレームも含めて、基盤の OfficeArt 描画順序を辿り、交差する未対応フレームを黙って省略する代わりに拒否します
宣言された外観を持つ Classic キャッシュ済みグラフ
Classic BIFF8 キャプチャは、コア レコード、ローカル保存値、明示的な線形スケール、外観が表現可能な場合、上記 7 つの通常グラフ種別をサポートします。数式の評価、疎ストレージの展開、コンパイル済み数式ツリーのクローンなしで、保持レコードと利用可能な数式キャッシュを読みます
TXLSWorkbook.CreateReadOnlyViewWithChartAppearance(Source, Limits, Geometry) を使い、IXLSClassicChartAppearanceSource が供給する凍結済み TXLSClassicChartAppearanceDeclaration 値のセットを持つ、別の読み取り専用ビューを作成してください。Geometry は Windows では省略可能で、Linux か macOS では明示的なネイティブ フォント計測を供給します
TXLSClassicChartAppearanceDeclarations は、アプリケーションがそのソースを実装するために使えるプリミティブ宣言の動的配列です
その設定済みビューを CaptureXLSPortableViewRenderSnapshot(View, SheetIndex, Row1, Col1, Row2, Col2, Limits) に渡してください。座標は 1 始まりで、アダプターはキャプチャの完了時や拒否時に、呼び出し側のアクティブ ワークシートを復元します
通常のキャプチャ エントリ ポイントは、未解決の実効 Classic レイアウトや凡例フォントを引き続き拒否します。専用のビュー エントリ ポイントは、既に凍結された宣言とジオメトリ プロバイダーを使います
| 宣言メンバー | 契約 |
|---|---|
Generation, SheetIndex, ObjectId | 固定されたワークブック世代、1 始まりワークシート インデックス、実際の保存グラフ オブジェクト識別子です。古い世代、欠落や重複した識別子、別オブジェクトに属す識別子は拒否されます |
HasChartSize, ChartWidthPoints, ChartHeightPoints | ポイント単位の明示的な有限正グラフ フレーム サイズです。保存されたアンカー原点と描画順序は保持され、false フラグはアンカー派生の寸法を保ちます |
HasPlotInnerRectangle, PlotInnerRectangle | ラベルと軸タイトルを除く明示的な内側プロット矩形です。この宣言外観パスには必須です |
HasTitleRectangle, TitleRectangle | グラフにタイトルがあるときの明示的なタイトル矩形です。ソース テキスト、フォント ファミリー、強調、カラーは引き続き検証済みコア レコードから取得します |
HasLegendRectangle, LegendRectangle | 凡例があるときの宣言された凡例境界です |
HasLegendFontSize, LegendFontSizePoints | 存在する凡例に対する呼び出し側の明示的実効ポイント サイズです。コアのフォント ファミリー、強調、カラーは保持されます |
TXLSPortableChartRectangle | Left、Top、Width、Height は、キャプチャされたグラフ フレームを基準にした有限ポイントです。アクティブな矩形はそのフレーム内の正の寸法を要求します |
Count, GetCount, ReadDeclaration | ソースは上限付きカウントを報告し、ビューの設定中、ゼロ始まりインデックスごとに 1 つのプリミティブ レコードを返します。宣言は後のキャプチャの前にコピーされます |
これらの値は呼び出し側が宣言した外観であり、Excel の自動レイアウトや推測フォント スケーリングではありません。独立にチェックされたソースかアプリケーション定義レイアウトから取得し、レンダリングに使う明示的なネイティブ フォント マッピングで出力を確認してください
明示的なフレーム寸法と内側プロット境界は、検証済み軸ラベル フォントのための十分な空きを残さなければなりません。ラベル スペースが不十分な場合、テキストを切り詰めたり、フィット済みスケール係数を適用したりする代わりに拒否されます
アプリケーションは、ビューが解放されるまでワークブック オーナーを生存させます。借用ビューは読み取りリースを保持し宣言ソースを保持しますが、結果の不変スナップショットはワークブックもプロバイダーも保持しません
対応するコア投影には、リテラル単一塗りつぶし、可視の単一線、円マーカー、タイトルと凡例テキスト、項目配置、上限付き明示数値目盛があります。自動スケール、未解決の自動マーカー外観、平滑化、未知のリッチ拡張、外部や非線形の系列参照、表現されないポイント スタイルは出力の前に拒否されます
ジオメトリや凡例サイズの宣言が、未知のグラフ拡張や未検証スタイルの無視を許可することはありません。バイト、テキスト、保存セル、シーンの各上限は、保持されたソース データ、宣言、切り離しキャッシュ、記録作業領域に対して引き続き有効です
追加の XLSValidateCachedChartSceneModel と XLSRecordCachedChartScene オーバーロードは、切り離されたモデルに対する TXLSCachedChartSceneAppearance を受け付けます。明示的なコントロールを設定する前に XLSDefaultCachedChartSceneAppearance で初期化してください
lxClassicChartScene の低レベル XLSReadClassicChartScene は、保持された TXLSCustomChart とその正確なソース計算機、リースされた TXLSClassicChartSceneSource から、呼び出し側所有の切り離し TXLSXChart とプリミティブ外観、予算カウンタを返します。記録後に返されたモデルを解放してください
TXLSClassicChartSceneSource.ReadAppearance はプリミティブ宣言を供給し、ReadCell は上限付き固定ローカル保存値を読み、ReadFont は上限付き実効コア フォント データで渡されたテキスト スタイルを満たし、PaletteColor は明示的に保存されたパレット エントリを解決します。アプリケーション実装は固定されたソースを保持し、供給されたすべてのバイト・文字クォータを守る必要があります
| シーン外観メンバー | 意味 |
|---|---|
SeriesMarkerSizePoints | 系列ごとの上限付きポイント直径です。小数値も含まれます。ゼロはモデルのマーカー サイズを保ち、非ゼロの上書きは 2 〜 72 ポイントでなければなりません |
OverrideBorder, BorderColorRGB, BorderWidthPoints | 明示的なグラフ フレーム輪郭の外観です |
AxisColorRGB, TickColorRGB, GridlineColorRGB, AxisWidthPoints, TickWidthPoints, GridlineWidthPoints | 明示的な軸、目盛、主目盛線の描画カラーとポイント幅です |
AreaFillOpacity, SeriesFillAlpha | 面の不透明度と系列塗りつぶしのアルファです |
UseAxisTickControls, CategoryBetween | 検証済みの明示的軸コントロールと項目配置です |
TitleOffsetXPoints, TitleOffsetYPoints | レコーダーの通常タイトル位置に適用される有限オフセットです |
OverridePlotInnerRectangle, OverrideTitleRectangle, OverrideLegendRectangle, PlotInnerRectangle, TitleRectangle, LegendRectangle | グラフ フレームを基準にしたリテラル ポイント矩形です |
PieRadiusRatio | 円形プロットの半径を、プロットの短い方の寸法に対する上限付き比率で表したものです |
グラフ プリミティブは HotXLS の既存レイアウト ポリシーに従います。Excel のモデル化されていないデフォルトを要求するグラフ ギャラリー外観は、明示的な未対応境界のままです
ネイティブ ワークブックの直接キャプチャ
CreateXLSPortableCairoRenderGeometry(Fonts, Calibration, Generation, Backend, Options, CacheCapacity) は、ネイティブ出力に使うのと同じ明示的フォント ファイル、FreeType、HarfBuzz、テキスト シェーピングを基盤とする IXLSRenderGeometry を返します。列幅は、ワークブック キャリブレーションによる実際の最大数字幅の計測を使います
プロバイダーは切り離されたフォント バイトと上限付きメトリック キャッシュを所有し、割り当て前にフォントとレイアウトの予算をチェックし、キャッシュ状態を変える前に計測要求を検証します。満杯のキャッシュでも、容量を超えて拡大せずに未キャッシュの計測を返せます
キャプチャは、プロバイダーの世代とすべてのキャリブレーション フィールドが現在の読み取り専用ワークブック ビューと一致することを検証し、そのビュー向けにプロバイダーを保持し、ワークブックのデフォルト ジオメトリ ファクトリはそのままにします。通常のデフォルト ネイティブ ジオメトリは明示的な GDI 境界のままです
プロバイダーを作成する前に、明示的に解放されたビューを通じて世代をキャプチャしてください。一時的なインターフェース結果を保持すると、周辺スコープが終わるまで読み取りリースが保持され得ます
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);
ネイティブ コンシューマーは LX_PORTABLE_CORE と対応するネイティブ依存でコンパイルします。ネイティブ Cairo ジオメトリ ファクトリへの Windows 呼び出しは明示的に拒否されますが、Windows のキャプチャは同じスコープ付きオーバーロードで既存のジオメトリ ファクトリを使えます
実際のネイティブ キャプチャは、上記のモデル化されたスカラー、リッチテキスト、対応するラスター、通常の図形、7 つのキャッシュ済みグラフ種別をサポートします。グラフ キャプチャは、元のインポート済み ChartML、キャッシュ済み点、疎セル ストレージ、パック ストレージ、ワークブックの世代を保持します
不変の印刷範囲、余白、フィットや倍率スケーリング、繰り返しタイトル、手動改ページ、セル単位・結合セル単位のページ分割については、ポータブル印刷プラン を参照してください
高度なキャプチャ ブリッジ
lxSemanticSnapshot の IXLSRenderCaptureSource は、対応する読み取り専用ワークブック ビューが実装する内部調整インターフェースです。通常のアプリケーションは、オーナー ベースのキャプチャ オーバーロードを呼び出してください
TXLSClassicReadOnlyWorkbookView と TXLSXReadOnlyWorkbookView は、以下の 8 つのレンダリング メソッドを含めて IXLSRenderCaptureSource を実装します。これらのクラスは読み取り専用ビューを通じてキャプチャを調整し、アプリケーションはワークブック オーナー インターフェースを保持して CaptureXLSPortableRenderSnapshot を呼び出す一方、アダプターがそのライフタイムを管理します
既存の TryReadCell メソッドは、読み取り専用ビューを通じて保存セルのスナップショットを供給します。レンダリング メソッドは、ポータブル キャプチャ用に切り離された外観とジオメトリを追加します
| メンバーとヘルパー | 目的 |
|---|---|
ValidateRenderRange | キャプチャ前に 1 始まりの矩形境界と未対応外観のフットプリントをチェックします |
ReadRenderStyle | 1 始まりセルに対する切り離された TXLSSemanticCellStyle メタデータとリッチテキスト存在フラグを返します |
IXLSRenderRichTextCaptureSource, ReadRenderRichText | 上限付き切り離し TXLSRenderTextRuns を返す省略可能なビュー拡張です。各 TXLSRenderTextRun は Text と実効セマンティック Style を含み、セルをマテリアライズせずスタイル プールも変更せずに、供給された基底スタイルと正の run/バイト クォータを使います |
RenderRowHeightPoints, RenderColumnWidthPoints | 物理ジオメトリを返し、非表示寸法はゼロに潰します |
IXLSRenderGeometryCaptureSource, SetRenderCaptureGeometry | 世代とキャリブレーションの検証後にのみ明示的プロバイダーを保持する、省略可能なビュー拡張です。無効なプロバイダーでは保持されたビュー プロバイダーは変わりません |
ReadRenderMerge | セルを含む完全な両端を含む 1 始まり結合矩形を報告します |
ResolveRenderColor | セマンティックなテーマ/インデックス/RGB 外観をポータブル RGB カラーへ解決します。対応する場所では指定されたデフォルトを使います |
RenderDate1904, RenderRightToLeft | ワークブック日付システムとシート読み順コンテキストを公開します |
XLSRenderCaptureLiteral | 評価なしのキャプチャのために、対応するリテラル Boolean、有限数、単純引用テキストのサブセットを認識します |
XLSRenderCaptureIntersects | 空白区切りのローカル A1 範囲を 1 始まり矩形に対してテストし、未解決の範囲構文は拒否します |
XLSRenderCaptureCondition | 既存スカラーに対して対応する条件サブセットを評価します。比較演算子コード 1 〜 8 は、between、not-between、equal、not-equal、greater、less、greater-or-equal、less-or-equal を意味します |
XLSRenderCaptureApplyDxf | AppliedSlots マスクを使い、優先度の高い書式を保持しながら、対応する切り離し差分外観を適用します |
TXLSDxfStyle._MarkRenderUnsupportedAppearance, TXLSDxfStyle._HasRenderUnsupportedAppearance | 内部プレフィックス付きのインポート調整メソッドが、型付き差分モデルが安全にレンダリングできない外観を記録・検査します。Assign はマーカーを保持し、キャプチャはマークされた一致スタイルを拒否します |
これらのブリッジ ヘルパーは EXLSSemanticSnapshot を発生させ得ます。公開キャプチャ アダプターはその例外を EXLSPortableRender へ変換します