PDF에서 포함 된 글꼴을 유효한 글꼴 파일로 추출하려면 어떻게해야합니까?


161

pdftk.exePDF에서 사용하는 글꼴을 표시 할 수 있는 유틸리티를 알고 있으며 글꼴이 포함되어 있는지 여부를 알고 있습니다.

이제 문제 : 포함 된 글꼴이있는 PDF 파일이 있다고 가정하면 일반 글꼴 파일로 재사용 할 수있는 방식으로 해당 글꼴을 추출하려면 어떻게해야합니까? 그렇게 할 수있는 도구가 있습니까? 또한 : iText를 사용하여 프로그래밍 방식으로 수행 할 수 있습니까?

답변:


405

몇 가지 옵션이 있습니다. 이러한 모든 방법은 Windows 및 Mac OS X뿐만 아니라 Linux에서도 작동합니다. 그러나 대부분의 PDF에는 글꼴이 포함되어있을 때 완전한 글꼴이 포함되어 있지 않습니다. 대부분 문서에 사용 된 글리프 의 하위 집합 만 포함 합니다.


사용 pdftops

* nix 시스템에서 가장 자주 사용되는 방법 중 하나는 다음 단계로 구성됩니다.

  1. XPDF를 사용하여 (예 pdftops: Windows : pdftops.exe도우미 프로그램) PDF를 포스트 스크립트로 변환하십시오 .
  2. 이제 글꼴이 .pfa(PostScript) 형식 으로 임베드되고 텍스트 편집기를 사용하여 추출 할 수 있습니다 .
  3. 당신은 변환해야 할 수도 있습니다 .pfaA를 (ASCII)를 .pfb사용하여 (바이너리) 파일 t1utilspfa2pfb.
  4. PDF에는 파일이 .pfm없거나 .afm파일 (글꼴 메트릭 파일)이 포함되어 있습니다 (PDF 뷰어는이 파일에 대한 내부 지식을 가지고 있기 때문에). 이러한 글꼴이 없으면 글꼴 파일을 시각적으로 만족스럽게 사용할 수 없습니다.

사용 fontforge

또 다른 방법은 Free font editor FontForge 를 사용하는 것입니다 .

  1. 파일을 열 때 사용되는 "글꼴 열기" 대화 상자를 사용하십시오.
  2. 그런 다음 대화 상자의 필터 섹션에서 "PDF에서 추출"을 선택하십시오 .
  3. 추출 할 글꼴이있는 PDF 파일을 선택하십시오.
  4. "글꼴 선택" 대화 상자가 열립니다 - 열 폰트있는 여기를 선택합니다.

FontForge 매뉴얼을 확인하십시오. 추출 된 글꼴 데이터를 재사용 가능한 파일로 저장하기 위해 반드시 간단한 것은 아닌 몇 가지 특정 단계를 수행해야 할 수도 있습니다.


사용 mupdf

다음으로 MuPDF . 이 응용 프로그램에는 PDF에서 글꼴과 이미지를 추출 할 수 있는 유틸리티 pdfextract(Windows pdfextract.exe:)가 있습니다. (여전히 비교적 알려지지 않은 새로운 MuPDF에 대해 모르는 경우 : "MuPDF는 휴대용 C로 작성된 무료 경량 PDF 뷰어 및 툴킷입니다."( Artifex Software 개발자, Ghostscript를 제공 한 회사) )
( 업데이트 : 최신 버전의 MuPDF는 이전 'pdfextract' 기능을 'mutool extract' 명령으로 옮겼 습니다. 여기에서 다운로드하십시오 : mupdf.com/downloads )

참고 : pdfextract.exe명령 줄 프로그램입니다. 사용하려면 다음을 수행하십시오.

c:\>  pdfextract.exe  c:\path\to\filename.pdf         # (on Windows)
$>    pdfextract  /path/tofilename.pdf                # (on Linux, Unix, Mac OS X)

이 명령은 현재 디렉토리로 참조되는 pdf 파일에서 추출 가능한 모든 파일을 덤프합니다. 일반적으로 이미지뿐만 아니라 글꼴과 같은 다양한 파일이 표시됩니다. 여기에는 PNG, TTF, CFF, CID 등이 포함됩니다. 이미지 의 PDF 객체 번호가 412 인 경우 이미지 이름은 img-0412.png같습니다 . 글꼴 이름은 글꼴의 경우 FGETYK + LinLibertineI-0966.ttf같습니다. PDF 객체 번호는 966입니다.

CFF ( Compact Font Format ) 파일은 다양한 운영 체제에서 사용하기 위해 다양한 변환기를 통해 다른 형식으로 변환 할 수있는 인식 된 형식입니다.

다시 말하지만, 이러한 글꼴 파일의 대부분 은 문자 의 일부만 가질 수 있으며 완전한 서체를 나타내지 않을 수도 있습니다.

업데이트 : (2013 년 7 월) 최신 버전에서는 mupdf바이너리가 한 번이 아니라 여러 번 내부로 전환되고 이름이 바뀌 었습니다. 주 유틸리티는 '스위스 나이프'와 비슷한 바이너리 ( mubusy(busybox에서 영감을받은 이름?))였으며 최근에는 이름이로 변경되었습니다 mutool. 이러한 하위 명령을 지원 info, clean, extract, postershow. 불행히도 이러한 도구에 대한 공식 문서는 아직 최신 상태가 아닙니다. 'MacPorts'를 사용하는 Mac에있는 경우 : 동일한 이름을 사용하는 다른 유틸리티와 이름이 충돌하지 않도록 유틸리티 이름이 바뀌 었으므로를 사용해야 mupdfextract합니다.

mutool이전 도구 와 동일한 결과를 얻으려면 . *를 pdfextract실행하십시오 mubusy extract .... *

글꼴과 이미지를 추출하려면 다음 명령 줄 중 하나를 실행해야합니다.

c:\>  mutool.exe extract filename.pdf      # (on Windows)
$>    mutool     extract filename.pdf      # (on Linux, Unix, Mac OS X)

다운로드는 여기 : mupdf.com/downloads


사용 gs(고스트)

그런 다음 Ghostscript 는 PDF에서 직접 글꼴을 추출 할 수도 있습니다. 그러나 extractFonts.psPostscript 언어로 작성된 특수 유틸리티 프로그램 인 Ghostscript 소스 코드 저장소 에서 사용할 수 있는 특수 유틸리티 프로그램의 도움이 필요 합니다 .

이제이 파일 extractFonts.ps과 PDF 파일을 모두 실행해야 합니다. 그런 다음 Ghostscript는 PostScript 프로그램의 지침을 사용하여 PDF에서 글꼴을 추출합니다. Windows에서는 다음과 같이 보입니다 (예, Ghostscript는 Windows에서도 경로 구분 기호로 '슬래시'를 이해합니다).

gswin32c.exe                  ^
  -q -dNODISPLAY              ^
   c:/path/to/extractFonts.ps ^
  -c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"

또는 Linux, Unix 또는 Mac OS X에서 :

gs                          \
  -q -dNODISPLAY            \
   /path/to/extractFonts.ps \
  -c "(/path/to/your/PDFFile.pdf) extractFonts quit"

몇 년 전에 고스트 스크립트 방법을 테스트했습니다. 당시에는 * .ttf (TrueType)를 잘 추출했습니다. 다른 글꼴 유형도 전혀 추출되는지, 그렇다면 재사용 가능한 방식으로 알 수 없습니다. 유틸리티가 보호 된 것으로 표시된 글꼴의 추출을 차단하는지 여부를 모르겠습니다.


사용 pdf-parser.py

마지막으로 Didier Stevens의 pdf-parser.py : 내부 PDF 구조에 대한 노하우가 필요하기 때문에 사용하기 쉽지 않을 것입니다. pdf-parser.py파이썬 스크립트는 다른 많은 것들도 할 수 있습니다. 또한 개체에서 임의의 스트림을 압축 해제하고 추출 할 수 있으므로 포함 된 글꼴 파일도 추출 할 수 있습니다.

그러나 무엇을 찾아야하는지 알아야합니다. 예를 들어 봅시다. big.pdf 라는 파일이 있습니다 . 첫 번째 단계로 -s매개 변수를 사용하여 FontFile 키워드가 있는지 PDF를 검색합니다 ( pdf-parser.py대소 문자 구분 검색이 필요하지 않음).

pdf-parser.py -s fontfile big.pdf

필자의 경우 big1.pdf의 경우 다음 결과를 얻습니다.

obj 9 0
 Type: /FontDescriptor
 Referencing: 15 0 R
  <<   
    /Ascent 728
    /CapHeight 716
    /Descent -210 
    /Flags 32
    /FontBBox [ -665 -325 2000 1006 ]
    /FontFile2 15 0 R
    /FontName /ArialMT
    /ItalicAngle 0
    /StemV 87
    /Type /FontDescriptor
    /XHeight 519
  >>   

obj 11 0 
 Type: /FontDescriptor
 Referencing: 16 0 R
  <<   
    /Ascent 728
    /CapHeight 716
    /Descent -210 
    /Flags 262176
    /FontBBox [ -628 -376 2000 1018 ]
    /FontFile2 16 0 R
    /FontName /Arial-BoldMT
    /ItalicAngle 0
    /StemV 165
    /Type /FontDescriptor
    /XHeight 519
  >>   

그것은 FontFile2PDF 내부에 두 개의 인스턴스가 있으며 , 이는 PDF 객체 no에 있다고 알려줍니다 . 15와 아니오. 각각 16. 개체 번호 15는 /FontFile2for font / ArialMT , 오브젝트 번호 를 보유합니다 . 16은 /FontFile2for 글꼴 / Arial-BoldMT 를 보유합니다 .

이것을 더 명확하게 나타내려면 :

pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
  /FontFile2 15 0 R
  /FontFile2 16 0 R

PDF 파일 사양으로 빠른 엿 키워드가 계시 /FontFile2(A)에 관한 '트루 타입 폰트 프로그램을 포함하는 스트림' ( /FontFile(A)에 관한 것이다 '타입 1 폰트 프로그램을 포함하는 스트림'/FontFile3(A)에 관한 것이다 형식 폰트 프로그램을 포함하는 '스트림 스트림 사전의 하위 유형 항목으로 지정됩니다 ( 따라서 Type1C 또는 CIDFontType0C 하위 유형}).

PDF 객체 번호를 구체적으로 보려면 15 (글꼴 / ArialMT 보유 ) -o 15매개 변수를 사용할 수 있습니다 .

pdf-parser.py -o 15 big1.pdf

 obj 15 0
  Type: 
  Referencing: 
  Contains stream
   <<
     /Length1 778552
     /Length 1581435
     /Filter /ASCIIHexDecode
   >>

pdf-parser.py출력은이 객체에 길이가 1.581.435 바이트이고 ASCIIHexEncode로 인코딩 (== "압축") 된 스트림 (직접 표시되지 않음)을 포함하고 있으며 디코딩해야합니다 (== "de- 표준 /ASCIIHexDecode필터를 사용하여 압축 "또는"필터링 ")하십시오 .

객체에서 스트림을 덤프하려면 매개 변수를 pdf-parser.py사용하여 호출 할 수 있습니다 -d dumpname. 해보자 :

pdf-parser.py -o 15 -d dumped-data.ext big1.pdf

추출 된 데이터 덤프는 dumped-data.ext 파일에 있습니다 . 그것이 얼마나 큰지 보자.

ls -l dumped-data.ext
  -rw-r--r--  1 kurtpfeifle  staff  1581435 Apr 11 00:29 dumped-data.ext

아 봐, 그것은 1.581.435 바이트입니다. 이전 명령의 출력에서이 그림을 보았습니다. 텍스트 편집기로이 파일을 열면 해당 내용이 ASCII 16 진수로 인코딩 된 데이터임을 확인합니다.

otfinfo(이것은 lcdf-typetools패키지 의 일부입니다) 와 같은 글꼴 읽기 도구로 파일을 열면 처음에는 약간 실망합니다.

otfinfo -i dumped-data.ext
  otfinfo: dumped-data.ext: not an OpenType font (bad magic number)

이것은 pdf-parser.py필터링 된 디코딩 된 스트림을 덤프하는 완전한 마법을 사용 하지 않았기 때문 입니다. 이를 위해 -f매개 변수 를 추가해야합니다 .

pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf

이 새 파일의 크기는 얼마입니까?

ls -l dumped-data-decoded.ext
  -rw-r--r--  1 kurtpfeifle  staff  778552 Apr 11 00:39 dumped-data-decoded.ext

아,보세요 : 정확한 숫자는 이미 PDF 객체 번호에 저장되어 있습니다. 15 키 값으로서의 사전 /Length1...

file그것이 무엇 이라고 생각합니까?

file dumped-data-decoded.ext
  dumped-data-decoded.ext: TrueType font data

otfinfo그것에 대해 무엇을 알려 줍니까?

otfinfo -i dumped-data-decoded.ext
  Family:              Arial
  Subfamily:           Regular
  Full name:           Arial
  PostScript name:     ArialMT
  Version:             Version 5.10
  Unique ID:           Monotype:Arial Regular:Version 5.10 (Microsoft)
  Designer:            Monotype Type Drawing Office - Robin Nicholas, Patricia Saunders 1982
  Manufacturer:        The Monotype Corporation
  Trademark:           Arial is a trademark of The Monotype Corporation.
  Copyright:           © 2011 The Monotype Corporation. All Rights Reserved.
  License Description: You may use this font to display and print content as permitted by
                       the license terms for the product in which this font is included.
                       You may only (i) embed this font in content as permitted by the 
                       embedding restrictions included in this font; and (ii) temporarily 
                       download this font to a printer or other output device to help
                       print content.
  Vendor ID:           TMC

따라서 Bingo!에는 당첨자가 있습니다. pdf-parser.py실제로 유효한 글꼴 파일을 추출했습니다. 이 파일의 크기 (778.552 바이트)를 고려하면이 글꼴이 PDF에 완전히 포함 된 것 같습니다 ...

arial-regular.ttf로 이름을 바꾸고 그대로 설치하여 즐겁게 사용할 수 있습니다.


주의 사항 :

  • 어쨌든 글꼴에 적용되는 라이센스를 따라야합니다. 일부 글꼴 라이센스는 무료 사용 및 / 또는 배포를 허용하지 않습니다. 불법 복제 글꼴은 소프트웨어 또는 기타 저작권이있는 자료를 불법 복제하는 것과 같습니다.

  • 어쨌든 전체 PDF 파일은 전체 글꼴을 포함하지 않고 하위 세트 만 포함합니다. 글꼴의 하위 집합을 추출하는 것은 매우 제한된 범위에서만 유용합니다.

폰트 추출 노력에 관한 찬반 양론에 대한 다음 내용도 읽어보십시오 :


3
@ kizzx2 : 내 다른 [PDF] 또는 [Ghostscript] 답변 중 하나를 공감하거나 공감할 수 있습니다. :-)
Kurt Pfeifle

Mac에 있고 포트 (또는 이진 파일)에서 mupdf를 설치하는 경우 추출도 mupdfextract라고합니다. 경로에있는 한 터미널에서 실행할 수 있습니다.
Orwellophile

@ Orwellophile : 힌트 주셔서 감사합니다. 에 대한 힌트를 업데이트 할 수있는 기회로 삼았습니다 mupdf. 참조 ...
커트 Pfeifle

확인해 볼게요 그리고 이것은 무의미한 의견이 아닙니다. 귀하의 프로세스가 굉장히 ... (투표 됨) ... 3 가지 글꼴을 추출하고 이름을 지정한 다음 fontforge (맥 포트가 없음)를 사용하여 병합했습니다. 불행히도 내 글꼴에 여전히 대문자 "X"가 누락되었습니다 ... 확률은 무엇입니까 : p
Orwellophile

1
@Chris : 그렇습니다. 두 개의 서로 다른 부분 집합입니다 (큰 부분이라도 겹칠 수 있음).
커트 파이 플




3

이 질문은 10 년이되었지만 여전히 유효하며 기술이 변경됨에 따라 유효한 답변도 있습니다.

현재 답변을 검색 할 때 WOFF (Web Open Font Format) ( W3C ) ( Wikipedia ) 메모를 발견하지 못했습니다.이 문자는 개별 문자 (글리프)를 다시 만들어 웹 페이지에 정확하게 표시하는 데 사용할 수 있습니다.

IDR 솔루션의 무료 온라인 웹 페이지를 사용하여 PDF에서 HTML5 ( 링크 )로 PDF를 zip 파일로 변환하십시오. 결과 zip은 woff 파일 유형의 글꼴 디렉토리입니다. 현재 인터넷 브라우저는 모르는 경우 woff 파일을 지원합니다. ( 참조 ) 온라인 사이트 FontDrop에서 확인할 수 있습니다! ( 링크 ).

WOFF 파일을 WOFFer – WOFF 글꼴 변환기 에서 OTF 또는 TTF로 /에서 변환 할 수 있습니다

또한 PDF에서 HTML5 로의 zip 파일에는 인터넷 브라우저에서 열 수있는 PDF의 각 페이지에 대한 HTML 파일이 포함되어 있으며 내가 찾거나 보았던 가장 정확하고 가장 정확한 PDF 번역 중 하나입니다.

WOFF 파일을 사용하는 방법을 배우는 동안 이것만으로도 가치가 있습니다. 즐겨.

추신 : woff 파일 형식 사용에 대해 더 많이 배우면서 더 많은 정보로 업데이트 할 것입니다. 그러나 이것은 일반적인 공통 사항이므로 전달할 가치가있는 경우이 답변을 자유롭게 편집하십시오.


감사합니다! 이 솔루션은 (유효한 TTF를 만들 때와 같이) 저에게 효과적이지만 다른 시도한 것은 그렇지 않습니다. WOFF가 불완전한 글꼴을 더 잘 처리하기 때문입니까?
Daan

@Daan Is it because WOFF handles incomplete fonts better?나는 모른다. 당신의 추측은 좋은 광산 일 것입니다. 내가 지적했듯이 나는 WOFF에 대해 배우고있다.
Guy Coder

@Daan 아마도 당신은 Is it because WOFF handles incomplete fonts better?새로운 SO 질문으로 게시해야 하며 더 많은 지식을 가진 사람들은 의미있는 답변을보고 희망적으로 제공 할 것입니다.
Guy Coder

그럴 수도 있습니다. 감사.
Daan

2

PDF2SVG의 에서 버전 6.0 PDFTron은 합리적인 작업을 수행합니다. .otf기본적으로 OpenType ( ) 글꼴을 생성합니다 . --preserve_fontnames"소스 파일에서 얻은 글꼴 / 글꼴 패밀리 이름 지정 체계"를 유지하는 데 사용하십시오 .

PDF2SVG는 상용 제품이지만 무료 데모 실행 파일을 다운로드 할 수 있습니다 (SVG 출력에 워터 마크를 포함하지만 사용을 제한하지는 않음). 글꼴을 추출하는 다른 PDFTron 제품이있을 수 있지만 최근에는 PDF2SVG 만 발견했습니다.


--preserve_fontnames겹치는 부분 글꼴이있는 경우 불행히도 작동하지 않습니다. 접두사를 포함하지 않는 것 같습니다 (예 : MSCIYGin MSCIYG+Ge'ez-1). 이전 부분을 덮어 씁니다.
크리스


0

이것은 @Kurt Pfeifle의 답변font-forge 섹션에 대한 후속 조치 이며 Red Hat 및 기타 Linux 배포판과 관련이 있습니다.

  1. PDF를 열고 원하는 글꼴을 선택한 후 "파일-> 글꼴 생성 ..."옵션을 선택합니다.
  2. 파일에 오류가있는 경우이를 무시하거나 파일을 저장하고 편집하도록 선택할 수 있습니다. "Fix"를 충분히 여러 번 클릭하면 대부분의 오류를 자동으로 수정할 수 있습니다.
  3. "요소-> 글꼴 정보 ..."를 클릭하고 "글꼴 이름", "가족 이름"및 "사람 이름"이 모두 원하는 값으로 설정되어 있습니다. 그렇지 않은 경우 수정하여 파일을 어딘가에 저장하십시오. 이러한 이름에 따라 시스템에서 글꼴이 표시되는 방식이 결정됩니다.
  4. 파일 이름을 선택하고 "저장 ..."을 클릭하십시오.

TTF 파일이 있으면 다음 방법으로 시스템에 설치할 수 있습니다.

  1. 폴더에 /usr/share/fonts루트로 복사
  2. 달리기 fc-cache -f /usr/share/fonts/(루트로)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.