Gibt es eine Möglichkeit, PhantomJS (oder einen kopflosen Browser) dazu zu bringen, einen alternativen Schriftarten-Cache zu verwenden?

7

Gibt es eine Möglichkeit, PhantomJS (oder einen kopflosen Browser) dazu zu bringen, einen alternativen Schriftcache zu verwenden /usr/share/fonts/? Eine Möglichkeit, mehr Schriftarten (z. B. CJK-Schriftarten) mit PhantomJS zu verwenden, besteht darin, sie in diesem Verzeichnis zu installieren . Dies ist jedoch ein gemeinsam genutzter Server und kann nicht ausgeführt werden.

Ich kann anscheinend keinen CLI-Parameter dafür finden. Bitte vergib mir, wenn dies eine dumme Frage ist.

Dies ist ein RedHat-Build, und yum und rpm sind deaktiviert.

Screenshot mit PhantomJS - Schriftarten werden nicht geladen :

Fehler beim Rendern von Schriftarten

Gewünschtes Ergebnis ( http://v1.jontangerine.com/silo/typography/web-fonts/ ):

Rendering der tatsächlichen Schriftarten


Gelöst: @gro♀ hat mir gezeigt, dass Schriftarten im Home-Ordner installiert werden können. Ich lief fc-cache -vfund die Systemschriftarten und die ~/.fonts/TTFSchriftarten werden zwischengespeichert. Beim Ausführen wird beispielsweise fc-list "impact"die Impact-Schriftart gefunden (nur für den persönlichen Gebrauch ):

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

Ich habe dies mit dem von @gro♀ geschickt vorgeschlagenen Stack-Trace bestätigt:

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

und fand heraus, dass PhantomJS tatsächlich in meinem Benutzerschriftartenverzeichnis sucht

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
...
Drakes
quelle
Ops, mein Raster-Beispiel war schlecht. Sie sollten mit strace phantomjs rasterize.js http://v1.jontangerine.com/silo/typography/web-fonts/ file.pdf 2>&1 | grep ttf(dh Verwenden des Browsers zum Rastern der Seite selbst, obwohl ich die impactauf der Seite verwendete Schriftart nicht sehe) ein besseres Ergebnis erzielen . Auch Ihr System verwendet fontconfigdeshalb setzt die Schrift in ~/.local/share/fonts/TTFsicherer (und es gibt keinen Grund zur Verwendung (ich nehme an, es eine TTF - Schriftart ist, nicht wahr?) ttmkfdirOder mkfontdirdort.)
grochmal
Entschuldigung, wenn dies verwirrend ist, ist das Problem, dass aktuelle * nix zwei Systeme zum Verwalten von Schriftarten mkfontdirund hat fontconfig. Die HomemadeAppleAusgabe in meiner Antwort erfolgte auch, weil ich vergessen hatte, sie auszuführen, fc-cachesodass die Schriftart manuell geladen wurde (anstatt aus dem Cache übernommen zu werden).
Gro♀
@gro♀ Du hast es gelöst. Dies funktioniert für die CLI in einer Shell. Vielen Dank
Drakes

Antworten:

4

PhantomJS respektiert fontconfigVerzeichnisse und sogar die alte font.dir/ font.scalepostscript-Schriftartkonfiguration. Zum Beispiel habe ich eine alte Schriftart vom Typ 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

(Das wurde mit dem alten X11 erstellt mkfontdir)

Und für ein besseres Beispiel kopiere ich eine fotnconfigSchriftart in mein Home-Verzeichnis:

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

Nun wollen wir sehen, wie PhantomJS sie verwendet (anhand eines klassischen Beispiels aus dem PhantomJS-Github):

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

strace druckt alle Systemaufrufe (einschließlich Dateisystemzugriff):

$ 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

Und PhantomJS ging zu den Schriftverzeichnissen und lud sie!

Ich habe keine, ~/.config/fontconfig/fonts.confdie möglicherweise für CJK-Schriftarten benötigt wird (da diese möglicherweise eine tatsächliche Konfiguration benötigen), aber Sie können eine Datei kopieren /etc/fonts/conf.d/*(insbesondere eine nonlatinSchriftart, um eine Beispielkonfiguration zu erhalten).

Sie können jedoch wahrscheinlich mit den meisten Schriftarten davonkommen, indem Sie sie einfach ablegen ~/.local/share/fonts/TTFund dann ausführen fc-cache.

Haftungsausschluss: Ein alter RedHat (5 sicher, nicht sicher über 6) wird möglicherweise nicht verwendet fontconfig. Deshalb habe ich die PFB-Schriftart in das Beispiel aufgenommen. In diesem Fall müssen Sie die und -Dateien verwenden ttmkfdirund mkfontdirgenerieren .font.scalefont.dir

Verweise:

gro♀
quelle
Sie haben mir hier viele gute Informationen gegeben. Lassen Sie mich einige dieser Dinge ausprobieren und Sie wissen lassen, wie es geht. ^^
Drakes
Ihre Vorschläge sind hilfreich und Ihre Bemühungen werden geschätzt. Ich habe versucht, Ihre Ergebnisse zu reproduzieren. Würden Sie sich bitte meine Frage bearbeiten?
Drakes