2024 年日本 PHP 研討會

ps_findfont

(PECL ps >= 1.1.0)

ps_findfont載入字型

說明

ps_findfont(
    資源 $psdoc,
    字串 $fontname,
    字串 $encoding,
    布林值 $embed = false
): 整數

載入字體以供後續使用。在使用載入的字體輸出文字之前,必須使用 ps_setfont() 設定字體。此函式需要 Adobe 字體指標檔案 (afm) 來計算字元所佔用的空間。在頁面中載入的字體將僅在該頁面中可用。要在整個文件中使用的字體必須在第一次呼叫 ps_begin_page() 之前載入。在頁面之間呼叫 ps_findfont() 將使該字體可供所有後續頁面使用。

afm 檔案的名稱必須是 fontname.afm。如果要嵌入字體,則也必須存在包含字體輪廓的檔案 fontname.pfb

在第一頁之前呼叫 ps_findfont() 需要輸出包含整個文件邊界框 (BoundingBox) 的 PostScript 標頭。通常,邊界框是在第一次呼叫 ps_begin_page() 時設定的,而現在是在 ps_findfont() 之後。因此,尚未設定邊界框,並且在呼叫 ps_findfont() 時會發出警告。為了避免這種情況,應該在呼叫 ps_findfont() 之前呼叫 ps_set_parameter() 來設定邊界框。

參數

psdoc

ps_new() 返回的 PostScript 檔案的資源識別碼。

fontname

字體的名稱。

encoding

ps_findfont() 會嘗試載入參數 encoding 中傳遞的檔案。編碼檔案的語法與 dvips(1) 使用的語法相同。它們包含一個字體編碼向量(目前未使用,但必須存在)和一個額外連字的列表,以擴展從 afm 檔案衍生的連字列表。

如果要使用預設編碼 (TeXBase1),則 encoding 可以是 null 或空字串。

如果編碼設定為 builtin,則不會進行重新編碼,並且將使用字體特定的編碼。這對於符號字體非常有用。

embed

如果設定為大於 0 的值,則字體將嵌入到文件中。這需要字體輪廓檔案 (.pfb 檔案) 存在。

回傳值

返回字體的識別碼,如果發生錯誤則返回零。識別碼是一個正數。

另請參閱

新增註釋

使用者貢獻的註釋 4 則註釋

zeldorblat at gmail dot com
19 年前
我發現我的 Postscript 檔案生成時間非常長,而且檔案大小異常大。問題在於,每次我選擇設定字體時,都會呼叫 ps_findfont(),然後再呼叫 ps_setfont()。

每次呼叫 ps_findfont() 時,字型似乎都會嵌入檔案中。為了避免這種情況,我維護一個已載入字型的陣列,以字型名稱作為鍵值。當我要設定字型時,我會先檢查這個陣列,看看是否已經載入該字型,如果是,則從該陣列返回資源控制代碼。否則,我會呼叫 ps_findfont() 並將控制代碼儲存在陣列中。

請注意,如果在頁面內呼叫 ps_findfont(),則該字型在其他頁面上將無法使用。為了避免這個問題,我在每頁結束時清除陣列。

我的 PS 檔案從 10 MB 縮減到 75 KB,建立檔案的時間也從大約 15 秒縮短到不到 1 秒。
yarych at bigmir dot net
16 年前
我發現 pslib 在其資料目錄 (/usr/share/pslib) 中搜尋字型。目前無法更改搜尋路徑。
yarych at bigmir dot net
16 年前
好的,現在我找到了設定所需字型路徑的方法 - 在呼叫 ps_findfont() 之前,進行如下呼叫
<?php ps_set_parameter($psdoc, 'SearchPath', $fonts_dir); ?>

它適用於 pslib 0.4.1 版本。(看起來在某些早期版本中無法運作。)
pepe at dexef dot hu
18 年前
我發現您必須將 <fontname>.afm 檔案複製到 php 旁邊,因為預設會在那裡搜尋。
To Top