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
...

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:


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.