簡體   English   中英

如何使用 Ghostscript 將 TTF 格式的字體嵌入到 PDF 中?

[英]How to use Ghostscript to embed fonts in TTF-Format into PDFs?

Atm 我想使用 GhostScript v9.26(在 Debian 上)並將字體嵌入到 PDF 中。 我使用“ Roboto ”字體。 但是每次我使用 GhostScript 嵌入字體時,它都沒有嵌入 Roboto,而是嵌入了“ Helvetica ”和“ Arial ”,它們甚至沒有在我的 PDF 中使用。

我認為這只是回退到其他一些字體,因為它無法加載我的 Roboto.ttf 字體

-sFONTPATH='../../templates/fonts/Roboto/'

我聽說我首先必須將我的 TTF 字體轉換為某種 FontMap。 但是具體怎么做呢?

我執行 GhostScript(來自 PHP)的命令是這樣的:

exec("gs -o '../../archiv/tmp/Ghost.pdf' -sDEVICE=pdfwrite -sFONTPATH='../../templates/fonts/Roboto/' '../../archiv/tmp/source.pdf'");

source.pdf不包含與任何其他字體相關的任何內容,然后“Roboto”我已經用 Adob​​e Acrobat DC Pro source.pdf過。 但是Ghost.pdf可以。 它確實有所有 3 種字體,最重要的是。 已經“ Roboto ”但尚未嵌入的部分現在是ArialHelvetica 已經嵌入的部分 ofc 保持原樣。

示例 source.pdf(截圖): 在此處輸入圖片說明 ( Roboto )

Ghost.pdf(截圖): 在此處輸入圖片說明 ( Arial )

我是否必須將 TTF 字體轉換為 OTF/WOFF/WOFF2/SVG 或任何其他常見格式才能在 GhostScript 中使用它們?

如您所知,TTF 字體可以由 ghostscript 直接使用。 -sFONTPATH 也適用於我的測試,如您再次發現的那樣,使用 pdfwrite 生成 TTF 來源的嵌入字體。 所以這一定是php的問題。 也許 -sFONTPATH 中的絕對路徑會更好,以防 php 更改目錄。

也可以將各種字體復制到工作目錄,然后只需使用 gs -P 選項即可在當前目錄中查找字體。 這需要通過“字體文件名”指定字體,例如:

/Roboto-Regular.ttf 12 selectfont

我剛剛測試了將 Roboto-Regular.ttf 重命名為 Roboto-Regular 的基本名稱,ghostscript 能夠使用 gs -P 在當前目錄中正確找到字體,因此如果有幫助,則不需要更改所有字體名稱:

/Roboto-Regular 12 selectfont

編輯:要將 TTF 字體添加到 Fontmap,只需找到 ghostscript 使用的實際字體名稱並將其添加到 Fontmap。 fontforge 是一種查找字體名稱的簡單方法,因為這對於 TTF 文件有時很困難。 另一種方法是將 TTF 轉換為 type42,以便在文件中查找並找到 /FontName。 然后,如果使用系統范圍的 Fontmap 或沒有目錄 Fontmap 的完整路徑,則像這樣添加到 Fontmap (我想知道 -sFONTPATH 是否可以選擇帶有完整路徑):

(Roboto-Black)          (/usr/local/share/fonts/Roboto-Black.ttf)       ;
(Roboto-BlackItalic)            (/usr/local/share/fonts/Roboto-BlackItalic.ttf) ;
(Roboto-Bold)           (/usr/local/share/fonts/Roboto-Bold.ttf)        ;
(Roboto-BoldItalic)             (/usr/local/share/fonts/Roboto-BoldItalic.ttf)  ;
(Roboto-Italic)         (/usr/local/share/fonts/Roboto-Italic.ttf)      ;
(Roboto-Light)          (/usr/local/share/fonts/Roboto-Light.ttf)       ;
(Roboto-LightItalic)            (/usr/local/share/fonts/Roboto-LightItalic.ttf) ;
(Roboto-Medium)         (/usr/local/share/fonts/Roboto-Medium.ttf)      ;
(Roboto-MediumItalic)           (/usr/local/share/fonts/Roboto-MediumItalic.ttf)        ;
(Roboto-Regular)                (/usr/local/share/fonts/Roboto-Regular.ttf)     ;
(Roboto-Thin)           (/usr/local/share/fonts/Roboto-Thin.ttf)        ;
(Roboto-ThinItalic)             (/usr/local/share/fonts/Roboto-ThinItalic.ttf)  ;
(RobotoCondensed-Bold)          (/usr/local/share/fonts/RobotoCondensed-Bold.ttf)       ;
(RobotoCondensed-BoldItalic)            (/usr/local/share/fonts/RobotoCondensed-BoldItalic.ttf) ;
(RobotoCondensed-Italic)                (/usr/local/share/fonts/RobotoCondensed-Italic.ttf)     ;
(RobotoCondensed-Light)         (/usr/local/share/fonts/RobotoCondensed-Light.ttf)      ;
(RobotoCondensed-LightItalic)           (/usr/local/share/fonts/RobotoCondensed-LightItalic.ttf)        ;
(RobotoCondensed-Regular)               (/usr/local/share/fonts/RobotoCondensed-Regular.ttf)    ;
(RobotoMono-Bold)               (/usr/local/share/fonts/RobotoMono-Bold.ttf)    ;
(RobotoMono-BoldItalic)         (/usr/local/share/fonts/RobotoMono-BoldItalic.ttf)      ;
(RobotoMono-Italic)             (/usr/local/share/fonts/RobotoMono-Italic.ttf)  ;
(RobotoMono-Light)              (/usr/local/share/fonts/RobotoMono-Light.ttf)   ;
(RobotoMono-LightItalic)                (/usr/local/share/fonts/RobotoMono-LightItalic.ttf)     ;
(RobotoMono-Medium)             (/usr/local/share/fonts/RobotoMono-Medium.ttf)  ;
(RobotoMono-MediumItalic)               (/usr/local/share/fonts/RobotoMono-MediumItalic.ttf)    ;
(RobotoMono-Regular)            (/usr/local/share/fonts/RobotoMono-Regular.ttf) ;
(RobotoMono-Thin)               (/usr/local/share/fonts/RobotoMono-Thin.ttf)    ;
(RobotoMono-ThinItalic)         (/usr/local/share/fonts/RobotoMono-ThinItalic.ttf)      ;
(RobotoSlab-Bold)               (/usr/local/share/fonts/RobotoSlab-Bold.ttf)    ;
(RobotoSlab-Light)              (/usr/local/share/fonts/RobotoSlab-Light.ttf)   ;
(RobotoSlab-Regular)            (/usr/local/share/fonts/RobotoSlab-Regular.ttf) ;
(RobotoSlab-Thin)               (/usr/local/share/fonts/RobotoSlab-Thin.ttf)    ;

這也有效:

/Roboto-Regular  (/usr/share/fonts/TTF/Roboto-Regular.ttf) ;

EDIT2:此外,還有一個名為ttfontmap的 perl 程序可以輕松生成 Fontmap 文件,而無需先找到 /FontName,除非 ttfontmap 依賴於 ttf2pt1 程序。

剛剛發現將 Fontmap 文件放在工作目錄中可以使用 gs -P 選項正確找到字體。 例如:

/Candara-Bold    (Candara_Bold.ttf);
/Hack-Regular    (/usr/share/fonts/TTF/Hack-Regular.ttf);

注意 Candara 文件名與 FontName 不同的地方,字體可以在任何地方。 只要確保在與所需的自定義字體映射相同的目錄中運行 gs -P 即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM