進階轉譯與匯出
PDF、SVG、點陣圖、Metafile、預覽及列印流程共用同一套分頁模型與後端中立的幾何計算,同時保留各格式專屬的編碼器
自訂圖形後端
TXLSGraphicsTextAlign 為 TXLSGraphicsBackend定義靠左、置中與靠右的文字對齊方式;樣式化繪圖呼叫則使用其餘共用的列舉——字型樣式(TXLSGraphicsFontStyles)、線端樣式(TXLSGraphicsLineCap)、虛線圖樣(TXLSGraphicsLineDash)與垂直文字對齊(TXLSGraphicsTextVAlign)
| Page lifecycle | BeginPage 與 EndPage |
| Primitives | FillRect、 StrokeRect、 DrawLine、 DrawStyledLine、 DrawEllipse、 DrawPath、 DrawText、 DrawStyledText、 DrawCellText與 DrawImage |
| Pagination entry point | TXLSPaginationModel.RenderPageToBackend 將單一邏輯頁傳送到任何後端實作 |
實作端會收到以 point 為單位的座標、已解析的文字與影像效果、裁切資訊及頁面本地的繪製位置,無須重複實作 Workbook 的版面配置邏輯。邏輯頁上的每個繪圖物件都會以 TXLSPageDrawingPlacement 記錄的形式送達,其 Kind (TXLSPageDrawingKind: xpdkImage、 xpdkChart、 xpdkTextBox、 xpdkShape、 xpdkControl)告訴後端目前正在繪製的是什麼;工作表背景圖塊則以已解碼的 TXLSSheetBackgroundRenderData
作業專屬的轉譯幾何
TXLSPaginationModel.RenderBackend 選擇下一次 Build 呼叫要擷取的後端識別,而 RenderGeometry 會公開所得的不可變校正值、Workbook 世代、後端及受限的度量快取狀態;作用中的轉譯工作階段以 TXLSRenderSession handle 的形式傳遞,色彩原則則是 TXLSRenderColorMode (xlsrcColor 或 xlsrcMonochrome)
PDF 模型使用 xlsrgbPdf、SVG 使用 xlsrgbSvg、頁面影像使用 xlsrgbBitmap、列印及列印預覽模型使用 xlsrgbPrintPreview,而 TXLSWorkbookViewer 使用 xlsrgbViewer;SVG、影像、列印及檢視器元件上的 PaginationModel 可公開作用中的模型以供診斷,但不轉移其所有權
Classic 與 XLSX 的 HTML 進入點會擷取 xlsrgbHtml; TXLSHTMLExport.RenderGeometry 公開最近一次 Classic 快照,而 TXLSXHtmlExportSession.RenderGeometry 公開增量匯出期間保留並跨越所有工作表的快照
HTML 欄輸出會先依 Normal 字型的最大數字寬度與設定的螢幕縮放,轉換 Workbook 的字元寬度模型,再輸出固定的 CSS 像素長度;point 與像素的換算使用相同的已擷取測量 DPI
每項作業都會保留其擷取的校正值,即使之後 Workbook 發生變更,且轉譯絕不寫入工作表的列高或欄寬。分頁會由 TXLSLogicalPage 物件建構頁面,其繪圖物件、方向(TXLSPageOrientation: xpoPortrait 或 xpoLandscape)與註解位置(TXLSPrintComments: xpcNone 或 xpcAtEnd)都來自解析後的頁面設定
邏輯頁會公開後端或回呼所需的一切:識別資訊(DocumentPageNumber、 SheetPageNumber、 SheetName,以及所屬的 ClassicWorksheet 或 XlsxWorksheet)、幾何(PageWidth、 PageHeight、 Scale,以及 LeftMargin、 RightMargin、 TopMargin、 BottomMargin、 HeaderMargin與 FooterMargin 值)、資料矩形(DataFirstRow、 DataLastRow、 DataFirstCol、 DataLastCol)及列印標題(RepeatFirstRow、 RepeatLastRow、 RepeatFirstCol、 RepeatLastCol)、背景位置(BackgroundOffsetX、 BackgroundOffsetY)、格線輸出(PrintGridlines、 GridlineColor)、六個頁首與頁尾帶的文字(LeftHeader、 CenterHeader、 RightHeader、 LeftFooter、 CenterFooter、 RightFooter),以及頁面的列與欄骨架(RowCount 搭配 Rows 與 RowEdges、 ColumnCount 搭配 Columns 與 ColumnEdges)和繪圖清單(DrawingCount 與 Drawings)。 ExpandHeaderFooter 會針對該頁解析頁首與頁尾格式碼, ExpandHeaderFooterStyled 則額外回報開頭的 point 大小與色彩,讓自訂繪製器能對齊 Excel 自身的頁首轉譯
原生分頁中的合併儲存格
TXLSPaginationModel.RenderPageToBackend 會把合併範圍解析回原始錨點,並為每個頁面片段繪製一個可見矩形;被覆蓋的儲存格不會輸出重複文字或內部格線
XLSX 片段共用錨點的填滿、對齊、換行、字型與條件式格式評估,明確的外部框線段保持可見,合併內部框線則被抑制; Classic 片段則透過既有的 Classic 文字繪製器共用錨點的文字與實心填滿
列印範圍或分頁符號可以裁切合併範圍,每個可見片段都使用原始錨點,即使錨點位於列印區域之外;隱藏列與隱藏欄貢獻零範圍,重複的列印標題片段也採用相同的錨點原則
合併不會強迫範圍落在單一頁面、不會擴大列印範圍,也不改變已儲存的列高與欄寬;分頁保留既有頁面設定,並把每個片段裁切到其邏輯頁面
工作表背景轉譯
Workbook 檢視器會將有效的 Classic 與 XLSX 工作表背景顯示為未填滿儲存格後方重複平鋪的影像,明確與條件式的儲存格填滿則仍位於背景之上
TXLSPaginationModel、 TXLSSvgExport、 TXLSPageImageExporter、 TXLSPrintDocument、 TXLSPDFExport、 TXLSHTMLExport、 TXLSXHtmlExportOptions與 TXLSWorkbookViewer 都公開 ExportSheetBackgroundImages;列印、預覽、Metafile、PDF、SVG、點陣圖及 HTML 輸出的預設值皆為 False 。工作表會以 TXLSSheetBackgroundFormat 影像格式儲存其承載資料,解碼後的位元組則以 TXLSSheetBackgroundResource 的形式傳遞,並以世代、DPI 與色彩模式作為鍵值
啟用的分頁輸出會將平鋪相位錨定於跨頁邊界的工作表座標,並在轉譯工作階段中,針對每個工作表、資源世代、後端、DPI 與色彩模式保留一張已解碼影像; BackgroundDecodeCount 公開解碼總數以供診斷,損毀的承載資料則會略過並加入 Workbook 診斷。作用中的 TXLSRenderSession 會自行管理這份共用快取: AcquireBackground 取得(或只解碼一次)工作表的平鋪 TXLSSheetBackgroundRenderData , DrawTiledBackground 將它繪製到裁切後的頁面區域,而 DecodeCount 回報目前為止已解碼的承載資料數量
Workbook 物件顯示原則
ObjectDisplayMode 可為 Classic XLS 與 XLSX Workbook 選擇 xlsodmShowAll、 xlsodmShowPlaceholders或 xlsodmHideAll ;檢視器會使用全部三種狀態,並在預留位置模式中以低成本方塊呈現可用的物件類型、名稱、文字與替代文字
PDF、SVG、點陣圖、實體列印及 XLSX HTML 匯出器預設會將預留位置模式視為完整物件輸出;在相應的匯出器或 HTML 選項上設定 ExportObjectPlaceholders ,即可要求輸出方塊而不解碼影像或建構圖表場景
xlsodmHideAll 是更早套用的全域閘門,可在轉譯開始前阻止收集繪圖、由物件驅動的範圍擴張、點擊測試及媒體轉譯;工作表背景、條件式格式圖示、頁首或頁尾圖片、儲存格與匯出器專用的列印物件篩選仍各自獨立
重新整理圖表來源資料
XLSX 圖表序列化與共用圖表轉譯會對照目前的活頁簿世代解析本機數列快取,因此來源儲存格編輯、重新計算與可見性變更,都會在輸出前重新整理值、分類、泡泡大小與連結範圍的數列名稱
一般來源範圍必須是本機 A1 參照的單一列或單一欄;支援帶引號的工作表名稱,未限定的範圍則對圖表所屬工作表解析;階層式分類層級保留各自獨立的矩形範圍解析器
分類文字使用格式化後的儲存格文字,數值快取為空白與非數值文字保留空的資料點槽位,錯誤儲存格保留其顯示的錯誤字面值,日期則使用活頁簿的 1900 或 1904 序列系統; PlotVisibleOnly 決定是否省略隱藏的來源列與欄
當本機來源從未被具現化時,匯入或手動填入的快取會被保留,而已由本機儲存格管理的快取則在刪除後清除過期資料點; TXLSXChartSeries.RefreshDataCaches 會明確重新整理可解析的本機來源,包括空的來源範圍
外部活頁簿參照與不受支援的參照運算式保留其已儲存快取;快取重新整理不開啟外部檔案,也不發出網路要求
感知日曆的圖表日期座標軸
TXLSXChartSeries.ResolveDataCaches 會為目前世代解析受支援的本機數列來源, RefreshDataCaches 則要求明確重新整理,即使空來源沒有任何儲存格歷史
分類座標軸使用 xlsxAxisDate 的 XLSX 圖表,會透過 Workbook 的 1900 或 1904 序列日期系統對映每個有效分類,並保留稀疏日期間的實際距離,而非配置等距的資料點槽位
BaseTimeUnit 控制日、月或年的正規化, MajorUnit、 MinorUnit、 MajorTimeUnit與 MinorTimeUnit 則以日曆單位推進刻度;因此月與年的間隔即使跨越不同月份長度及閏年,仍可保持對齊
相同的受限刻度集合會為以分頁為基礎的 PDF、SVG、點陣圖、預覽、列印與檢視器輸出提供座標、標籤、刻度及所要求的格線,而 XLSX HTML 的內嵌圖表 SVG 會使用共用的日曆運算
獨立 PDF 寫入器
TXLSPDFWriter 可建立不源自 Workbook 的 PDF 文件,例如發票、票券、標籤與覆蓋式表單; BeginDoc 會設定精確到 point 的頁面框、 NewPage 關閉目前頁面,而 SaveToStream 或 SaveToFile 完成文件
繪圖方法使用從左下角起算的 PDF point 與 $00BBGGRR 或 $AABBGGRR 格式的函式庫色彩;可用操作包含 FillRectangle、 StrokeRectangle、 ClipRectangle、 MeasureText、 SaveGraphicsState與 RestoreGraphicsState ,可處理填滿與描邊矩形、線段、橢圓、可精確測量寬度的樣式化文字、仿射轉換、矩形裁切,以及圖形狀態的明確儲存與還原; PageWidth 與 PageHeight 會以 point 回報目前的頁面框
SVG 匯出
TXLSSvgExport 為 Classic 與 XLSX 範圍、工作表、Workbook 及備妥的邏輯頁提供七個 SaveAsSVG 多載,並在支援時提供具名物件輸出
UseWorksheetPageSetup、 Orientation與 Margin 使用與 PDF 及預覽輸出相同的頁面設定決策
TXLSSvgExport.PrintComments (型別為 TXLSPrintComments)選擇分頁 SVG 輸出如何產生儲存格註解;設為 xpcAtEnd時,工作表最後一頁會在資料區下方附加註解清單(儲存格位址、作者與文字),而 xpcNone 則省略註解
ExportPages 每次透過 OnPage傳送一份完整 SVG 文件,並經由 ExportedPageCount回報已提交的頁數;回呼取消時,會在產生後續頁面前停止; IdPrefix 會為裁切路徑、濾鏡、圖樣與共用資源建立可重現的文件及頁面命名空間
HyperlinkMode (型別為 TXLSSvgHyperlinkMode)設為 xshmSafe 時,會在視覺內容後加入經裁切的透明點擊區域;允許的外部配置為 HTTP、HTTPS、mail、FTP 與相對連結,活動、本機、UNC 與含控制字元的目標會被省略; LinksInNewWindow 會加入 noopener noreferrer 保護,ScreenTips 則成為 SVG 標題
增量 PNG、JPEG 與多頁 TIFF 輸出
TXLSPageImageFormat 選擇 PNG 或 JPEG 輸出,而 TXLSPageImageExporter 會維持單一分頁工作階段,並及時釋放每張已完成的點陣圖
| Session | 六個 BeginExport 多載接受 Classic 或 XLSX 範圍、工作表與 Workbook; ExportNext 寫入一頁,而 EndExport 釋放工作階段 |
| Multipage TIFF | ExportAllAsTiff 將所選邏輯頁寫入資料流或檔案,成為單一 LZW 壓縮 TIFF,並保有進度、取消及目的地原子性語意 |
| Page setup | UseWorksheetPageSetup、 Orientation、 Margin、 DefaultRowHeight、 PaperWidthOverride與 PaperHeightOverride |
| Raster output | Scale、 ImageFormat與 JpegQuality,而 ExportObjectAsPNG 將單一繪圖物件轉譯為其擁有的 PNG |
| Compact ranges | ExportRange 將 Classic 或 XLSX 範圍轉譯為單一緊湊點陣圖,不含紙張、邊界、頁首、頁尾、列印標題或分頁 |
| Canvas events | BeforeRenderPage 在清除背景後執行, AfterRenderPage 在 Workbook 繪製完成但編碼前執行;PNG、JPEG 與 TIFF 影格共用相同的事件路徑 |
| State | Active、 Aborted、 TotalPageCount、 PageCount與 ExportedPageCount |
標記式 PDF 與 PDF/A
TXLSPDFExport.TagMode 會自動建立文件、表格、列、標頭儲存格、資料儲存格與資訊性圖片結構,包含密集的頁面本地標記內容識別碼、精確的父項樹對映、合併儲存格跨距及成品隔離;列印標題列與表格標頭列會成為語意標頭儲存格,具非空白 AltText 的 XLSX 圖片會成為帶有 Unicode 替代文字的獨立 Figure 元素,而沒有替代文字的圖片維持為裝飾性成品
每個可見的資訊性圖片執行個體都會取得自己的 Figure 元素與標記內容識別碼,即使相同影像承載資料共用一個 PDF XObject; AltTextTitle 不會取代缺失的替代文字,圖表仍為成品,且此專注的結構支援並不宣稱完整符合 PDF/UA
TXLSPDFExport.PDFAProfile 以符合性等級 a 或 b 選擇 PDF/A-1、PDF/A-2 或 PDF/A-3;在提交輸出資料流前,會驗證不相容的加密、字型、附件、透明度、簽章與中繼資料
TXLSPDFExport.ExportCommentsAsAnnotations 將 Unicode 作者與註解文字放入原始儲存格的矩形區域,傳統的頁末註解輸出仍可各自設定
UsePDFA 是 PDF/A-1b 的相容性開關,而 UseXRefStream 會在所選設定檔允許時選用交叉參照資料流
頁面幾何與選取範圍
六個 CalculatePageCount 多載接受 Classic 與 XLSX 範圍、工作表或 Workbook,無須建立 PDF 物件
PaperWidth 與 PaperHeight 以 point 覆寫紙張尺寸, LastPage 結束以一為起點的輸出區間, Orientation (型別為 TXLSPDFOrientation)選擇直向或橫向輸出, HidePrintObjects ( TXLSPDFHidePrintObject的集合: xlsPdfHideHeaders、 xlsPdfHideFooters)隱藏所選頁首或頁尾帶,而 PageLayout (型別為 TXLSPDFPageLayout)設定檢視器初始的頁面排列
PDF 頁面模式與開啟動作
TXLSPDFExport.PageMode (型別為 TXLSPDFPageMode)透過 xlsPdfModeDefault、 xlsPdfModeUseOutlines、 xlsPdfModeUseThumbs、 xlsPdfModeFullScreen、 xlsPdfModeUseOC與 xlsPdfModeUseAttachments
OpenAction (型別為 TXLSPDFOpenAction)以 xlsPdfOpenNone、 xlsPdfOpenPage或 xlsPdfOpenOutlines選擇檢視器的初始行為;對於 xlsPdfOpenPage, OpenActionPage 是以一為起點的目標頁面(限制在頁數範圍內), OpenActionZoom 是初始縮放倍率,其中 0 保留檢視器預設的縮放或適合頁面設定
共用自適應向量幾何
XLSBuildEllipticArcCubics 會遞迴套用呼叫端選定的平坦度界限,將橢圓弧轉成三次 Bezier 線段;PDF、SVG 與點陣圖轉譯共用此幾何計算,因此大型或離心率很高的弧線會取得更多線段,簡單弧線則不會受到額外負擔
XLSDecodeVectorScene 會驗證 EMF 與 WMF 標頭、記錄對齊與大小、宣告總數、精確 EOF 位置及資源限制,而不呼叫平台 Metafile 播放;原生白名單會重播含儲存與還原的裝置內容狀態堆疊、結合世界轉換的視窗與檢視區對映、包含內建物件的筆刷、畫筆與延伸畫筆物件表、矩形、橢圓、線鏈、多邊形、折線與帶虛線樣式的 Bézier 曲線、填滿、描邊及合併描邊填滿通道的路徑括弧、圓角矩形、弧、弦、扇形及經精確弧轉 Bezier 的角度弧、由受限 RGNDATA 矩形建立的區域填滿與框線、含字型、色彩與對齊的受限文字串,以及透過 Canvas 與 SVG 重新編碼為 PNG 的受限 stretch-DIB 影像;它拒絕 escape 記錄,並將裁切與私有記錄交由既有的受限後援處理
PDF 大綱與頁面回呼
PDF 大綱存放在 Bookmarks 集合(型別為 TXLSPDFBookmarks)中: Add 與 AddForSheet 附加項目, Delete 移除一個項目, Count 搭配 Items 則列舉整棵樹。每個 TXLSPDFBookmark 項目都支援父子項目(Children)、同層鏈結、Unicode 標題、色彩(Color)、 PageNumber 目標、工作表書籤的來源 SheetName ,以及粗體或斜體旗標( TXLSPDFBookmarkStyle的集合: xlsPdfBookmarkBold、 xlsPdfBookmarkItalic),還有展開或摺疊的子項;自動工作表書籤使用相同的階層模型, AutoSheetBookmarks 可切換是否產生
BeforeNewPage 可調整每個頁面框,而 BeforeGeneratePage 與 AfterGeneratePage 則透過公開頁面輔助函式 AppendPageContent、 FillPageRectangle、 StrokePageRectangle與 DrawPageText
簽章與附件
TXLSPDFSignature 可設定可見或不可見的簽章欄位,而 CertificationPolicy 可選擇建立 DocMDP 認證簽章,允許不進行變更、填寫表單及簽署,或填寫表單、簽署及加註;PDF/A-1 不允許此 PDF 1.5 功能,並會在提交輸出前遭拒絕
TXLSPDFCertificationPolicy 提供 xlsPdfApprovalSignature、 xlsPdfCertifyNoChanges、 xlsPdfCertifyFormFillingAndSigning與 xlsPdfCertifyFormFillingSigningAndAnnotations ,可明確選擇簽章原則
A TXLSPDFSignDigestEvent 會接收摘要並傳回由主機建立的 CMS 資料,因此 HotXLS 無須持有私密金鑰
TXLSPDFExport.Signature 會附加簽章設定,PDF/A-3 設定檔可透過 AddAttachment加入已驗證的關聯檔案,該方法會把一個 TXLSPDFAttachment排入佇列;詳細多載接受 Unicode 顯示名稱、MIME 類型、描述、修改時間、承載資料,以及 Source、Data、Alternative、Supplement 或 Unspecified 的 TXLSPDFAttachmentRelationship 值,而 AttachmentCount 回報已排入佇列的總數, AttachmentDuplicatePolicy (型別為 TXLSPDFAttachmentDuplicatePolicy)則決定同名項目的處理方式
TXLSPDFSignature.ImageData、 ImageFormat與 ImageFit (型別為 TXLSPDFSignatureImageFit:contain、cover 或 stretch)會在凍結位元組範圍前,將 PNG 放入一般外觀 Form;contain、cover 與 stretch 模式共用文件影像快取,無效影像則會在簽署前失敗
The IXLSPDFAttachmentSource 多載在儲存前保持延遲執行,每次儲存對每個來源只呼叫一次,並在建立 EmbeddedFile 物件前最多暫存 256 MiB,因此提供者失敗時目的地交易不會改變
最終組裝會依序將物件寫入目的地,而非建立一個完整文件字串:未簽署的匯出直接串流至僅向前的資料流,每個 EmbeddedFile 會透過在承載資料後產生的間接 /Length 物件參照其位元組大小,提供者位元組則以固定區塊自暫存區複製;已簽署的匯出會組裝到受限的文件暫存區,其中包含 ByteRange 與簽章內容修補、兩個涵蓋範圍的增量 SHA-256,以及單次向前複製
PDF/A-3 輸出會將每個關聯檔案同時寫入 EmbeddedFiles 名稱樹與 catalog AF 陣列,包含 Unicode UF 名稱、已逸出的 MIME PDF Name、 AFRelationship、位元組大小、可選的修改日期與可選描述;PDF/A-1 與 PDF/A-2 會在提交輸出前拒絕已排入佇列的附件
文件中繼資料
DocumentTitle、 DocumentAuthor、 DocumentSubject、 DocumentKeywords與 DocumentFileName 會填入 PDF 的資訊與中繼資料字典
字型後援
TXLSPDFExport.SetFontFallbackChain、 AddFontFallback與 ClearFontFallbackChains 可設定來源字族與樣式專屬的後援層級; LoadedFallbackFontCount 公開快取的字面數, FontFallbackSelectionCacheCount 公開每次選取的後援決策快取數,兩者均供診斷使用
TXLSPDFExport.FontSize 以 point 設定預設文字大小,預設為 9
後援選取會依字形涵蓋範圍進行,並保留 Unicode 對映、補充字元、字素叢集、塑形叢集與獨立 TTC 字面
OnGetFontDirectories 可為所要求的字族與樣式傳回一或多個以分號分隔的字型目錄;被接受的目錄會遞迴搜尋一次,依內部字族與樣式中繼資料建立索引,並快取供後續測量與繪製使用
字型嵌入原則
TXLSPDFExport.FontEmbedding (型別為 TXLSPDFFontEmbedding)可透過 xlsPdfFontEmbedAuto、 xlsPdfFontEmbedSubset、 xlsPdfFontEmbedFull與 xlsPdfFontEmbedNone選擇自動嵌入、必要的子集化、完整字型程式或僅對映輸出;無法產生有效子集時,必要子集化會以原子方式失敗,TTC 字面會轉為獨立字型,而 PDF/A 會拒絕僅對映輸出
OnFontEmbed 會在解析各 Unicode 字面的度量、字元對映、塑形與字形識別碼前,為每個字面觸發一次;設定 Handled 可接受傳回的每字型模式與選用替代位元組,保留為 false 則維持文件原則與原始字面
具有 CFF 外框的獨立 OpenType 字型會透過具 FontFile3 資料流與 OpenType 後代的 CIDFontType0 嵌入;自動與完整模式會保留完整程式,而必要 CFF 子集化因無法保留有效子集而以原子方式失敗
內嵌且帶有 OpenType GPOS 或舊版 kern 資料的字型,會對簡單與複雜文字使用定位後的字形前進量,因此測量、換行、對齊及輸出的字形位置共用相同的字距微調結果
進度與取消
TXLSPDFExport.OnProgress 與 OnProgressEx 會回報開始、頁面與結束階段; Cancel 要求取消,而 Aborted 在不提交部分資料流的情況下回報最終狀態