PhantomJS(またはヘッドレスブラウザ)に代替フォントキャッシュを使用させる方法はありますか?

PhantomJS(またはヘッドレスブラウザ)に代替フォントキャッシュを使用させる方法はありますか?

それ以外に、PhantomJS(またはヘッドレスブラウザ)に代替フォントキャッシュを使用させる方法はありますか/usr/share/fonts/? PhantomJSでより多くのフォント(CJKフォントなど)を使用する1つの方法は次のとおりです。インストールしてくださいこのディレクトリに。ただし、共有サーバーなので不可能です。

見つかりません。CLIパラメータこのために。愚かな質問なら許してください。

これはyumとrpmが無効になっているRedHatバージョンです。

PhantomJSを使ったスクリーンショット- フォントが読み込まれませんでした:

フォントレンダリングに失敗しました

希望する結果http://v1.jontangerine.com/silo/typography/web-fonts/):

実際のフォントレンダリング


解決済み:@grochmalは、ホームフォルダにフォントをインストールできることを示しました。実行するfc-cache -vfと、システムフォントと~/.fonts/TTFフォントがキャッシュされます。たとえば、実行するとfc-list "impact"Impact フォント(個人的な用途にのみ使用可能):

> fc-list impact
Impact:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta

@grochmalが提案したスタックトレースでこれを確認しました。

strace ./phantomjs ../examples/rasterize.js http://example.com img.jpg 2>&1 | grep font

PhantomJSが私のユーザーフォントディレクトリを見つけることがわかりました。

open("/home/user1/.fonts/TTF/verdana.ttf", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/AndaleMo.TTF", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/arial.ttf", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/cour.ttf", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/georgia.ttf", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/impact.ttf", O_RDONLY) = 11
...

ベストアンサー1

PhantomJSは、fontconfigディレクトリ、さらには古いfont.dir/ font.scalePostScriptフォントの設定も尊重します。たとえば、古いType 1フォントがあります。

$ find ~/.fonts/Type1/
/home/grochmal/.fonts/Type1/
/home/grochmal/.fonts/Type1/augie___.pfb
/home/grochmal/.fonts/Type1/fonts.scale
/home/grochmal/.fonts/Type1/fonts.dir

(これはX11で作られていますmkfontdir

そして、より良い例のために、fotnconfigフォントをホームディレクトリにコピーします。

$ mkdir -p ~/.local/share/fonts/TTF
$ cp /usr/share/fonts/TTF/HomemadeApple.ttf ~/.local/share/fonts/TTF
$ fc-cache  # just in case

次に、PhantomJSがこれをどのように使用しているかを見てみましょう(PhantomJS githubの典型的な例を使用して):

$ wget https://raw.githubusercontent.com/ariya/phantomjs/master/examples/rasterize.js

straceすべてのシステムコールを印刷します(ファイルシステムアクセスを含む)。

$ strace phantomjs rasterize.js 2>&1 | grep font | grep grochmal |grep -v cache
stat("/home/grochmal/.config/fontconfig/conf.d", 0x7ffff95fbbc0) = -1 ENOENT (No such file or directory)
stat("/home/grochmal/.config/fontconfig/conf.d", 0x7ffff95fbbc0) = -1 ENOENT (No such file or directory)
access("/home/grochmal/.config/fontconfig/conf.d", R_OK) = -1 ENOENT (No such file or directory)
access("/home/grochmal/.config/fontconfig/conf.d", R_OK) = -1 ENOENT (No such file or directory)
stat("/home/grochmal/.config/fontconfig/fonts.conf", 0x7ffff95fbbc0) = -1 ENOENT (No such file or directory)
stat("/home/grochmal/.config/fontconfig/fonts.conf", 0x7ffff95fbbc0) = -1 ENOENT (No such file or directory)
access("/home/grochmal/.config/fontconfig/fonts.conf", R_OK) = -1 ENOENT (No such file or directory)
access("/home/grochmal/.config/fontconfig/fonts.conf", R_OK) = -1 ENOENT (No such file or directory)
access("/home/grochmal/.fonts.conf.d", R_OK) = -1 ENOENT (No such file or directory)
access("/home/grochmal/.fonts.conf.d", R_OK) = -1 ENOENT (No such file or directory)
access("/home/grochmal/.fonts.conf", R_OK) = -1 ENOENT (No such file or directory)
access("/home/grochmal/.fonts.conf", R_OK) = -1 ENOENT (No such file or directory)
stat("/home/grochmal/.local/share/fonts", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/home/grochmal/.local/share/fonts", O_RDONLY|O_CLOEXEC) = 4
stat("/home/grochmal/.local/share/fonts", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/home/grochmal/.local/share/fonts", O_RDONLY|O_CLOEXEC) = 4
open("/home/grochmal/.local/share/fonts", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 5
stat("/home/grochmal/.local/share/fonts/HomemadeApple.ttf", {st_mode=S_IFREG|0644, st_size=110080, ...}) = 0
open("/home/grochmal/.local/share/fonts/HomemadeApple.ttf", O_RDONLY) = 6
stat("/home/grochmal/.local/share/fonts/TTF", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/home/grochmal/.fonts", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/home/grochmal/.fonts", O_RDONLY|O_CLOEXEC) = 4
stat("/home/grochmal/.local/share/fonts/TTF", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/home/grochmal/.local/share/fonts/TTF", O_RDONLY|O_CLOEXEC) = 4
stat("/home/grochmal/.local/share/fonts/TTF", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/home/grochmal/.local/share/fonts/TTF", O_RDONLY|O_CLOEXEC) = 4
open("/home/grochmal/.local/share/fonts/TTF", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 4
stat("/home/grochmal/.local/share/fonts/TTF/HomemadeApple.ttf", {st_mode=S_IFREG|0644, st_size=110080, ...}) = 0
open("/home/grochmal/.local/share/fonts/TTF/HomemadeApple.ttf", O_RDONLY) = 5
stat("/home/grochmal/.fonts/Type1", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/home/grochmal/.fonts/Type1", O_RDONLY|O_CLOEXEC) = 4

PhantomJSはフォントディレクトリに移動してロードします!

~/.config/fontconfig/fonts.conf私は何もない可能CJKフォントが必要です(なぜなら可能いくつかの実際の構成が必要ですが、ここからファイルをコピーすることができます/etc/fonts/conf.d/*(特にnonlatinサンプル構成を得るためにいくつかのフォント)。

~/.local/share/fonts/TTFただし、単にフォントを追加して実行すると、ほとんどのフォントを削除できますfc-cache

注意:以前のRedHats(確かに5つ、不明6つ)ではこのフォントを使用しない可能性があるため、サンプルにfontconfigPFBフォントを含めました。この場合、およびを使用してttmkfdirファイルをmkfontdir生成する必要があります。font.scalefont.dir

引用:

おすすめ記事