THotPDF.BuildLoadedPageSVG Method
從選定的已載入 PDF 頁面建立獨立的 SVG 文件
宣告
function BuildLoadedPageSVG(PageIndex: Integer): AnsiString; overload;
function BuildLoadedPageSVG(PageIndex: Integer;
EmbedFonts: boolean): AnsiString; overload;
單元
HPDFDoc
參數
| 名稱 | 用途 |
|---|---|
PageIndex | 已載入頁面的零基索引 |
EmbedFonts | True 會把內嵌字型的字形寫成外框,讓頁面在未安裝這些字型的環境下看起來一致;False 與未帶此參數的 overload 則把文字交給檢視器已安裝的字型 |
傳回值
傳回完整的 SVG 文件;若頁面無法匯出則傳回空字串
使用說明
- 路徑、解碼後的文字、影像 XObject、內嵌影像與遞迴的 Form XObject,都透過共用的內容裝置直譯器輸出;Form XObject 從繪製當下生效的顏色開始
- 畫布涵蓋頁面的可見部分,即
/CropBox裁到/MediaBox的範圍(見GetLoadedPageVisibleBox),再經/Rotate旋轉;即使 box 不從原點開始,box 的左下角也對應到畫布的角 - 文字以 UTF-8 寫出,每個字元一個
x位置並帶xml:space="preserve",因此空格會保留;連結字 ligature glyph 會展開成它所代表的所有字元,XML 1.0 不允許的碼位則變成 U+FFFD - 文字定位遵循完整的文字矩陣,包括字元與字間距、水平縮放、rise 與
TJ調整;render mode 0 到 2 填充、描邊或兩者皆做,mode 3 不畫任何東西,mode 4 到 7 顯示的文字字形也會從文字物件結尾(ET)到 graphics state 結尾之間形成一條裁剪路徑 - 預設情況下文字使用已安裝的字型:標準 14 族及其 TrueType 對應字型對映到 Helvetica 或 Arial、Times New Roman 與 Courier New,其他字型以其家族命名(詞與詞之間也保留空格,如
MyriadPro, Myriad Pro),後面再接一個取自字型描述器旗標或名稱的通用家族。粗體與斜體文字會從字型名稱的樣式部分(Arial-BoldMT、Helvetica-Oblique、MinionPro-It)以及字型描述器的 weight、旗標與 italic angle 取得font-weight與font-style EmbedFonts設為True時,TrueType 或 CFF 程式內嵌在 PDF 裡的字型,其文字會用該程式的字形外框繪製。每個字形只在<defs>中定義一次<path>,出現處以<use>放置,因此重複字元不會重複外框;填充與筆劃模式、線寬與文字裁剪都比照 SVG 文字跟隨文字本身。文字本身仍以透明的 SVG 文字疊在外框上層,因此依然可以選取、搜尋,也能被輔助技術讀取- 未內嵌的字型、Type 1 字型程式(
/FontFile)、直式 CJK 書寫,以及碼位在內嵌程式中沒有字形的文字,即使設了EmbedFonts也維持 SVG 文字。外框會讓檔案變大,文字密集的頁面常達兩到三倍 - 任何色彩空間(
DeviceGray、DeviceRGB、DeviceCMYK、ICCBased、calibrated、Lab、Indexed、Separation 與 DeviceN)設定的填充與筆劃色彩,都會像頁面 renderer 一樣轉成 sRGB - 以平鋪 pattern 填充的路徑,改用 SVG
<pattern>填充,該 pattern 每XStep與YStep重複一次 pattern 儲存格,並裁剪到其/BBox;無色 pattern 以 pattern 指定的顏色為儲存格上色。以著色 pattern 填充的路徑會得到其著色的漸層或網格,並裁剪到路徑。pattern 矩陣在頁面空間(或使用該 pattern 的 form 的空間)中套用。帶 pattern 的筆劃使用其顏色,彩色 pattern 時為黑色 - Type 2 軸向與 Type 3 放射狀著色使用帶有取樣停駐點的 SVG 漸層;
Extend未延伸的那一端維持不上色,與 PDF 相同 - Type 4 到 Type 7 的網格著色使用有界的透明 PNG data URI,上限為 1600 萬像素
- 內嵌影像透過同一條已載入文件影像路徑解碼,並以 PNG data URI 內嵌
- 影像 mask(包含內嵌者)變成以目前填充色上色的 PNG 影像,沒畫到的部分透明;
/SMask與/Maskstencil 會為影像加上 alpha 色版,mask 解析度比影像細時以 mask 解析度為準。Color-key/Mask陣列對 Flate、LZW 與未過濾的影像會把相符像素變透明 W與W*裁剪路徑變成 SVG<clipPath>元素,並在設定它們的 graphics state 結束時一併結束;Form XObject 會被裁剪到自己的/BBox,軸向與放射狀著色也一樣- Type 3 字型的文字以其字型的字形程序繪製,透過該字型的
/FontMatrix放置,而不是以 SVG 文字呈現;以d1開頭的字形以目前填充色上色。Type 3 字形不會加入 render mode 4 到 7 的裁剪路徑 - 著色的
Background顏色會在著色之前先填滿著色 pattern 的區域,因此著色沒畫到的地方會顯示它;與 PDF 相同,著色以sh繪製時會忽略它 - Type 1 函式型著色會在其
Domain上取樣成最多 256×256 像素的 PNG data URI,並透過著色的Matrix放置;縮放時由檢視器平滑化