2014-12-09 2 views
2

PHP의 Imagick을 사용하여 PDF를 JPEG로 변환하고 있습니다. 일부 PDF에는 PDF에 포함되지 않은 사용자 정의 TTF 글꼴이 있으므로 파일 시스템에 설치해야합니다. 나는 GhostScript가 실제로 변환을한다고 믿습니다. 그래서 그 부분에서 글꼴로드를 시도하는 데 많은 시간을 보내고 있습니다. 내가 gs -help을 실행하면GhostScript에서 TTF 글꼴을 전역으로로드하는 방법은 무엇입니까?

내가 얻을이에서

GPL Ghostscript 9.15 (2014-09-22) 
Copyright (C) 2014 Artifex Software, Inc. All rights reserved. 
Usage: gs [switches] [file1.ps file2.ps ...] 
Most frequently used switches: (you can use # in place of =) 
-dNOPAUSE   no pause after page | -q  `quiet', fewer messages 
-g<width>x<height> page size in pixels | -r<res> pixels/inch resolution 
-sDEVICE=<devname> select device   | -dBATCH exit after last file 
-sOutputFile=<file> select output file: - for stdout, |command for pipe, 
            embed %d or %ld for page # 
Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF 
Default output device: x11alpha 
Available devices: 
    alc1900 alc2000 alc4000 alc4100 alc8500 alc8600 alc9100 ap3250 appledmp 
    atx23 atx24 atx38 bbox bit bitcmyk bitrgb bitrgbtags bj10e bj10v bj10vh 
    bj200 bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono bmp16 bmp16m 
    bmp256 bmp32b bmpgray bmpmono bmpsep1 bmpsep8 ccr cdeskjet cdj1600 cdj500 
    cdj550 cdj670 cdj850 cdj880 cdj890 cdj970 cdjcolor cdjmono cdnj500 cfax 
    chp2200 cif cljet5 cljet5c cljet5pr coslw2p coslwxl cp50 cups declj250 
    deskjet devicen dfaxhigh dfaxlow dj505j djet500 djet500c dl2100 dnj650c 
    epl2050 epl2050p epl2120 epl2500 epl2750 epl5800 epl5900 epl6100 epl6200 
    eplcolor eplmono eps2write eps9high eps9mid epson epsonc escp escpage 
    faxg3 faxg32d faxg4 fmlbp fmpr fpng fs600 gdi hl1240 hl1250 hl7x0 
    hpdj1120c hpdj310 hpdj320 hpdj340 hpdj400 hpdj500 hpdj500c hpdj510 
    hpdj520 hpdj540 hpdj550c hpdj560c hpdj600 hpdj660c hpdj670c hpdj680c 
    hpdj690c hpdj850c hpdj855c hpdj870c hpdj890c hpdjplus hpdjportable ibmpro 
    ijs imagen inferno ink_cov inkcov itk24i itk38 iwhi iwlo iwlq jetp3852 
    jj100 jpeg jpegcmyk jpeggray la50 la70 la75 la75plus laserjet lbp310 
    lbp320 lbp8 lex2050 lex3200 lex5700 lex7000 lips2p lips3 lips4 lips4v 
    lj250 lj3100sw lj4dith lj4dithp lj5gray lj5mono ljet2p ljet3 ljet3d ljet4 
    ljet4d ljet4pjl ljetplus ln03 lp1800 lp1900 lp2000 lp2200 lp2400 lp2500 
    lp2563 lp3000c lp7500 lp7700 lp7900 lp8000 lp8000c lp8100 lp8200c lp8300c 
    lp8300f lp8400f lp8500c lp8600 lp8600f lp8700 lp8800c lp8900 lp9000b 
    lp9000c lp9100 lp9200b lp9200c lp9300 lp9400 lp9500c lp9600 lp9600s 
    lp9800c lps4500 lps6500 lq850 lxm3200 lxm5700m m8510 mag16 mag256 
    md1xMono md2k md50Eco md50Mono md5k mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 
    mgrmono miff24 mj500c mj6000c mj700v2c mj8000c ml600 necp6 npdl nullpage 
    oce9050 oki182 oki4w okiibm oprp opvp paintjet pam pamcmyk32 pamcmyk4 pbm 
    pbmraw pcl3 pcx16 pcx24b pcx256 pcx2up pcxcmyk pcxgray pcxmono pdfwrite 
    pgm pgmraw pgnm pgnmraw photoex picty180 pj pjetxl pjxl pjxl300 pkm 
    pkmraw pksm pksmraw plan plan9bm planc plang plank planm png16 png16m 
    png256 png48 pngalpha pnggray pngmono pnm pnmraw ppm ppmraw pr1000 
    pr1000_4 pr150 pr201 ps2write psdcmyk psdcmykog psdrgb pxlcolor pxlmono 
    r4081 rinkj rpdl samsunggdi sgirgb sj48 spotcmyk st800 stcolor sunhmono 
    t4693d2 t4693d4 t4693d8 tek4696 tiff12nc tiff24nc tiff32nc tiff48nc 
    tiff64nc tiffcrle tiffg3 tiffg32d tiffg4 tiffgray tifflzw tiffpack 
    tiffscaled tiffsep tiffsep1 txtwrite uniprint x11 x11alpha x11cmyk 
    x11cmyk2 x11cmyk4 x11cmyk8 x11gray2 x11gray4 x11mono x11rg16x x11rg32x 
    xcf xes xpswrite 
Search path: 
    %rom%Resource/Init/ : %rom%lib/ : 
    /usr/local/share/ghostscript/9.15/Resource/Init : 
    /usr/local/share/ghostscript/9.15/lib : 
    /usr/local/share/ghostscript/9.15/Resource/Font : 
    /usr/local/share/ghostscript/fonts : 
    /usr/local/share/fonts/default/ghostscript : 
    /usr/local/share/fonts/default/Type1 : 
    /usr/local/share/fonts/default/TrueType : /usr/lib/DPS/outline/base : 
    /usr/openwin/lib/X11/fonts/Type1 : /usr/openwin/lib/X11/fonts/TrueType : 
    /usr/share/cups/fonts 
Ghostscript is also using fontconfig to search for font files 
Initialization files are compiled into the executable. 
For more information, see /usr/local/share/ghostscript/9.15/doc/Use.htm. 
Please report bugs to bugs.ghostscript.com. 

, 내 검색 경로에/usr/지방/공유/폰트/기본/트루을 볼 수 있습니다. 그 폴더에 GLFONT.TTF를 업로드했습니다. 그런 다음 /usr/share/ghostscript/8.70/Resource/Init/Fontmap.GS에 파일 /GLFont[tab](GLFONT.TTF)[tab];의 맨 아래에 다음을 추가했습니다. 나는 이것이 fontmap 파일의 올바른 구문이라고 생각한다. 나는 commad gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -sOutputFile=test.jpg www/product_images/test.pdf을 실행하면

나는 다음과 같은 출력을 얻을 :

GPL Ghostscript 9.15 (2014-09-22) 
Copyright (C) 2014 Artifex Software, Inc. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Processing pages 1 through 1. 
Page 1 
Substituting font Times-Roman for GLFont. 
Loading NimbusRomNo9L-Regu font from %rom%Resource/Font/NimbusRomNo9L-Regu... 4499544 2930395 9030496 7679326 3 done.` 

그래서, 당신은 글꼴이 인식되지 않습니다 볼 수 있습니다. 내가 gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -sOutputFile=test.jpg -sFONTPATH=/usr/local/share/fonts/default/TrueType www/product_images/test.pdf 내 폰트 디렉토리를 지정할 때, 글꼴이 발견 : 글꼴이 Fontmap이에서 세계적으로로드되지 않는 이유를 디버깅하는 방법에 대한

GPL Ghostscript 9.15 (2014-09-22) 
Copyright (C) 2014 Artifex Software, Inc. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Processing pages 1 through 1. 
Page 1 
Scanning /usr/local/share/fonts/default/TrueType for fonts... 1 files, 1 scanned, 1 new fonts. 
Loading GLFont font from /usr/local/share/fonts/default/TrueType/GLFONT.TTF... 4509572 2891739 9232600 7842698 3 done. 

어떤 아이디어?

답변

1

Ghostscript 8.70의 글꼴 맵을 사용자가 지정한 경로 (/usr/share/ghostscript/8.70/Resource/Init/Fontmap.GS)로 판단한 것 같습니다.

그러나 표준 출력 출력에서 ​​Ghostscript 9.15를 사용하고 있습니다.

Ghostscript가 8.70 fontmap.GS을 읽을 수 있도록 설정할 수는 있지만 실제로는 그렇지 않습니다. (여기서 gs -help의 결과는 아마도 유용 할 것입니다).

또한 fontmap.GS 파일의 TTF에 대한 전체 경로를 지정하지 않았습니다. 당신도 그것을 시도하고 싶을지도 모른다. 실제로 gs -help에서 실제 출력을 게시하는 것은 물론 유용 할 것입니다.

+0

아, 다른 버전이 의미가 있습니다. 위의 글에서'gs -help' 결과를 게시했습니다. 나는 9.15와 연관된 fontmaps를 찾는데 아무 것도 없었다. 실제로'/ usr/local/share/ghostscript/9.15 /'에 갔을 때 Resource 디렉토리가 존재하지 않았습니다. 그래서 8.80의 fontmaps와 구조체를 복사하여 TTF 파일의 전체 경로에 넣었습니다. GS가 새로운 Fontmap을 인식하도록하기 위해 무엇을해야합니까, 아니면 그냥 그 디렉토리를 파싱하고 그것을 볼 수 있어야합니까? – user3116226

+0

Ghostscript 빌드가 ROM 파일 시스템을 사용하고있을 가능성이 있습니다. 실제로 나는 gs-help에서 볼 수 있습니다. 즉, 리소스 파일은 실행 파일에 저장됩니다. 그 중 하나를 변경하려면 Ghostscript의 소스를 확보하고 'Resource'폴더와 그 내용을 편리하게 넣어야합니다. 그런 다음 Ghostscript에 해당 폴더를 사용하도록 지시해야합니다. -sGenericResourceDir = 내가 생각하는 트릭을 수행해야합니다. * 그 다음에 * 거기에서 fontmap.GS를 성공적으로 수정할 수 있습니다. – KenS

+0

나는 usr/local/share/Ghostscript/9.15에있는 파일을 사용하고있다 * Ghostscript/9.15가 존재한다면 그것을 사용해야한다는 것을 알아야한다. 그러나 gs -help의 검색 순서에 따라 먼저 % rom %를 검색한다고 생각한다. -GenericResourceDir =/usr/local/share/Ghostscript/9.15/Resource – KenS

관련 문제