PhantomJS(또는 헤드리스 브라우저)가 대체 글꼴 캐시를 사용하도록 하는 방법이 있습니까?

PhantomJS(또는 헤드리스 브라우저)가 대체 글꼴 캐시를 사용하도록 하는 방법이 있습니까?

그 외에도 PhantomJS(또는 헤드리스 브라우저)가 대체 글꼴 캐시를 사용하도록 할 수 있는 방법이 있습니까 /usr/share/fonts/? PhantomJS에서 더 많은 글꼴(예: CJK 글꼴)을 사용하는 한 가지 방법은 다음과 같습니다.설치하세요이 디렉토리에. 단, 공유서버이므로 불가능합니다.

못찾는거같아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.scale포스트스크립트 글꼴 구성도 존중합니다. 예를 들어 이전 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개)에서는 이 글꼴을 사용하지 않을 수 있으므로 fontconfig예제에 PFB 글꼴을 포함시켰습니다. 이 경우 및를 사용하여 ttmkfdir및 파일 을 mkfontdir생성 해야 합니다 .font.scalefont.dir

인용하다:

관련 정보