Bạn có một vài lựa chọn. Tất cả các phương pháp này hoạt động trên Linux cũng như trên Windows hoặc Mac OS X. Tuy nhiên, hãy lưu ý rằng hầu hết các tệp PDF không bao gồm đầy đủ, hoàn chỉnh phông chữ khi chúng có một phông chữ được nhúng. Chủ yếu chúng chỉ bao gồm tập hợp con của glyphs được sử dụng trong tài liệu.
Sử dụng pdftops
Một trong những phương pháp được sử dụng thường xuyên nhất để thực hiện việc này trên các hệ thống * nix bao gồm các bước sau:
- Chuyển đổi PDF thành PostScript, ví dụ bằng cách sử dụng XPDF's
pdftops
(trên Windows: pdftops.exe
chương trình trợ giúp.
- Bây giờ phông chữ sẽ được nhúng ở
.pfa
định dạng (PostScript) + bạn có thể trích xuất chúng bằng trình soạn thảo văn bản .
- Bạn có thể cần phải chuyển đổi
.pfa
(ASCII) thành .pfb
tệp (nhị phân) bằng cách sử dụng t1utils
và pfa2pfb
.
- Trong các tệp PDF không bao giờ
.pfm
hoặc .afm
các tệp (tệp số liệu phông chữ) được nhúng (vì trình xem PDF có kiến thức nội bộ về các tệp này). Không có những thứ này, các tệp phông chữ khó có thể sử dụng theo cách trực quan dễ chịu.
Sử dụng fontforge
Một phương pháp khác là sử dụng trình soạn thảo phông chữ miễn phí FontForge :
- Sử dụng hộp thoại "Mở phông chữ" được sử dụng khi mở tệp.
- Sau đó chọn "Trích xuất từ PDF" trong phần bộ lọc của hộp thoại.
- Chọn tệp PDF có phông chữ cần giải nén.
- Một "Chọn một font" DialogBox mở ra - chọn ở đây mà phông chữ để mở.
Kiểm tra hướng dẫn sử dụng FontForge. Bạn có thể cần phải làm theo một số bước cụ thể không nhất thiết phải đơn giản để lưu dữ liệu phông chữ được trích xuất dưới dạng tệp có thể sử dụng lại được.
Sử dụng mupdf
Tiếp theo, MuPDF . Ứng dụng này đi kèm với một tiện ích có tên pdfextract
(trên Windows pdfextract.exe
:) có thể trích xuất phông chữ và hình ảnh từ các tệp PDF. (Trong trường hợp bạn không biết về MuPDF, mà vẫn còn khá vô danh và mới: "MuPDF là một trọng lượng nhẹ xem miễn phí PDF và bộ công cụ viết bằng di C." , được viết bởi các nhà phát triển phần mềm ARTIFEX, cùng một công ty mà đã cho chúng tôi Ghostscript. )
( Cập nhật: Các phiên bản mới hơn của MuPDF đã chuyển chức năng cũ của 'pdfextract' sang lệnh 'mutool extract' . Tải xuống tại đây: mupdf.com/doads )
Lưu ý: pdfextract.exe
là một chương trình dòng lệnh. Để sử dụng nó, hãy làm như sau:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
Lệnh này sẽ kết xuất tất cả các tệp có thể trích xuất từ tệp pdf được tham chiếu vào thư mục hiện tại. Nói chung, bạn sẽ thấy một loạt các tập tin: hình ảnh cũng như phông chữ. Chúng bao gồm PNG, TTF, CFF, CID, v.v ... Tên hình ảnh sẽ giống như img-0412.png nếu số đối tượng PDF của hình ảnh là 412. Tên phông chữ sẽ giống như FGETYK + LinLibertineI-0966.ttf , nếu phông chữ là Số đối tượng PDF là 966.
Các tệp CFF ( Định dạng phông chữ nhỏ gọn ) là một định dạng được công nhận có thể được chuyển đổi sang các định dạng khác thông qua nhiều bộ chuyển đổi để sử dụng trên các hệ điều hành khác nhau.
Xin nhắc lại: lưu ý rằng hầu hết các tệp phông chữ này có thể chỉ có một tập hợp con các ký tự và có thể không đại diện cho kiểu chữ hoàn chỉnh.
Cập nhật: (Tháng 7 năm 2013) Các phiên bản gần đây mupdf
đã thấy việc chia sẻ lại nội bộ và đổi tên các tệp nhị phân của chúng, không chỉ một lần, mà nhiều lần. Tiện ích chính được sử dụng là một nhị phân 'dao giống nhau' được gọi mubusy
(tên lấy cảm hứng từ busybox?), Gần đây đã được đổi tên thành mutool
. Những hỗ trợ các tiểu lệnh info
, clean
, extract
, poster
và show
. Thật không may, tài liệu chính thức cho các công cụ này không cập nhật (chưa). Nếu bạn đang sử dụng máy Mac bằng 'MacPorts': thì tiện ích đã được đổi tên để tránh xung đột tên với các tiện ích khác sử dụng tên giống nhau và bạn có thể cần phải sử dụng mupdfextract
.
Để đạt được kết quả tương đương (gần như) mutool
như công cụ trước đây pdfextract
đã làm, chỉ cần chạy mubusy extract ...
. *
Vì vậy, để trích xuất phông chữ và hình ảnh, bạn có thể cần chạy một trong các dòng lệnh sau:
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
Tải xuống ở đây: mupdf.com/doads
Sử dụng gs
(Ghostscript)
Sau đó, Ghostscript cũng có thể trích xuất phông chữ trực tiếp từ các tệp PDF. Tuy nhiên, nó cần sự trợ giúp của một chương trình tiện ích đặc biệt có tên extractFonts.ps
, được viết bằng ngôn ngữ PostScript, có sẵn từ kho lưu trữ mã nguồn Ghostscript .
Bây giờ sử dụng nó, bạn cần chạy cả hai, tệp này extractFonts.ps
và tệp PDF của bạn. Ghostscript sau đó sẽ sử dụng các hướng dẫn từ chương trình PostScript để trích xuất các phông chữ từ PDF. Có vẻ như thế này trên Windows (vâng, Ghostscript hiểu 'dấu gạch chéo về phía trước', /, như một dấu phân cách đường dẫn cũng trên Windows!):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
hoặc trên Linux, Unix hoặc Mac OS X:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
Tôi đã thử nghiệm phương pháp Ghostscript vài năm trước. Tại thời điểm nó đã giải nén * .ttf (TrueType) tốt. Tôi không biết liệu các loại phông chữ khác cũng sẽ được trích xuất hay không, và nếu vậy, theo cách có thể sử dụng lại. Tôi không biết liệu tiện ích có chặn trích xuất phông chữ được đánh dấu là được bảo vệ hay không.
Sử dụng pdf-parser.py
Cuối cùng, pdf-parser.py của Didier Stevens : cái này có lẽ không dễ sử dụng, vì bạn cần có một số bí quyết về cấu trúc PDF bên trong. pdf-parser.py
là một kịch bản Python cũng có thể làm rất nhiều thứ khác. Nó cũng có thể giải nén và trích xuất các luồng tùy ý từ các đối tượng và do đó nó cũng có thể trích xuất các tệp phông chữ nhúng.
Nhưng bạn cần biết những gì cần tìm. Hãy xem nó với một ví dụ. Tôi có một tập tin tên big.pdf . Bước đầu tiên tôi sử dụng -s
tham số để tìm kiếm PDF cho bất kỳ sự xuất hiện nào của từ khóa FontFile ( pdf-parser.py
không yêu cầu tìm kiếm phân biệt chữ hoa chữ thường):
pdf-parser.py -s fontfile big.pdf
Trong trường hợp của tôi, đối với big1.pdf của tôi , tôi nhận được kết quả này:
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
>>
Nó cho tôi biết rằng có hai trường hợp FontFile2
bên trong PDF và những trường hợp này không có trong các đối tượng PDF. 15 và không. 16, tương ứng. Đối tượng không. 15 giữ /FontFile2
cho phông chữ / ArialMT , đối tượng không. 16 giữ /FontFile2
cho phông chữ / Arial-BoldMT .
Để thể hiện điều này rõ hơn:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
Việc xem nhanh thông số kỹ thuật PDF cho thấy từ khóa /FontFile2
liên quan đến 'luồng chứa chương trình phông chữ TrueType' ( /FontFile
sẽ liên quan đến 'luồng chứa chương trình phông chữ Loại 1' và /FontFile3
sẽ liên quan đến 'luồng chứa chương trình phông chữ có định dạng được chỉ định bởi mục Subtype trong từ điển luồng ' {do đó là kiểu con Type1C hoặc CIDFontType0C }.)
Để xem cụ thể đối tượng PDF không. 15 (chứa phông chữ / ArialMT ), người ta có thể sử dụng -o 15
tham số:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
pdf-parser.py
Đầu ra này cho chúng ta biết rằng đối tượng này chứa một luồng (nó sẽ không hiển thị trực tiếp) có độ dài 1.581.435 Byte và được mã hóa (== "đã nén") bằng ASCIIHexEncode và cần được giải mã (== "de- được nén "hoặc" được lọc ") với sự trợ giúp của /ASCIIHexDecode
bộ lọc tiêu chuẩn .
Để kết xuất bất kỳ luồng nào từ một đối tượng, pdf-parser.py
có thể được gọi với -d dumpname
tham số. Hãy làm nó:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Kết xuất dữ liệu được trích xuất của chúng tôi sẽ nằm trong tệp có tên dumped-data.ext . Chúng ta hãy xem nó lớn như thế nào:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
Hãy nhìn xem, nó là 1.581.435 Byte. Chúng ta đã thấy con số này trong đầu ra của lệnh trước đó. Mở tệp này bằng trình soạn thảo văn bản xác nhận rằng nội dung của nó là dữ liệu được mã hóa hex ASCII.
Mở tệp bằng một công cụ đọc phông chữ như otfinfo
(đây là một phần của lcdf-typetools
gói ) sẽ dẫn đến một số thất vọng lúc đầu:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, điều này là do chúng tôi chưa (chưa) pdf-parser.py
sử dụng phép thuật đầy đủ của nó: để đổ một luồng được giải mã, được lọc. Đối với điều này, chúng ta phải thêm -f
tham số:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
Kích thước của tập tin mới này là bao nhiêu?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
Ồ, nhìn kìa: con số chính xác đó cũng đã được lưu trong đối tượng PDF. 15 từ điển làm giá trị cho khóa /Length1
...
Nó file
nghĩ gì về nó?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
Điều gì otfinfo
cho chúng ta biết về nó?
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
Vì vậy, Bingo!, Chúng tôi có một người chiến thắng: pdf-parser.py
thực sự đã trích xuất một tệp phông chữ hợp lệ cho chúng tôi. Với kích thước của tệp này (778.552 Byte), có vẻ như phông chữ này đã được nhúng thậm chí hoàn toàn trong tệp PDF ...
Chúng ta có thể đổi tên nó thành arial-normal.ttf và cài đặt nó như vậy và vui vẻ sử dụng nó.
Hãy cẩn thận:
Trong mọi trường hợp, bạn cần phải tuân theo giấy phép áp dụng cho phông chữ. Một số giấy phép phông chữ không cho phép sử dụng và / hoặc phân phối miễn phí. Phông chữ vi phạm giống như vi phạm bản quyền bất kỳ phần mềm hoặc tài liệu có bản quyền khác.
Hầu hết các tệp PDF ngoài tự nhiên không nhúng phông chữ đầy đủ mà chỉ có các tập hợp con. Trích xuất một tập hợp con của một phông chữ chỉ hữu ích trong một phạm vi rất hạn chế, nếu có.
Ngoài ra, vui lòng đọc phần sau về Ưu và (thêm) Nhược điểm liên quan đến nỗ lực trích xuất phông chữ: