Masz kilka opcji. Wszystkie te metody działają w systemie Linux, a także w systemie Windows lub Mac OS X. Należy jednak pamiętać, że większość plików PDF nie zawiera pełnej, pełnej czcionki, gdy jest ona osadzona. Przeważnie zawierają tylko podzbiór glifów używanych w dokumencie.
Za pomocą pdftops
Jedna z najczęściej używanych metod w tym celu w systemach * nix składa się z następujących kroków:
- Przekonwertuj plik PDF na PostScript, na przykład za pomocą XPDF
pdftops
(w systemie Windows: pdftops.exe
program pomocniczy.
- Teraz czcionki zostaną osadzone w
.pfa
formacie (PostScript) + możesz je wyodrębnić za pomocą edytora tekstu .
- Może być konieczne przekonwertowanie
.pfa
(ASCII) na plik .pfb
(binarny) przy użyciu t1utils
i pfa2pfb
.
- W plikach PDF nigdy nie są osadzane pliki
.pfm
lub .afm
(pliki metryczne czcionek) (ponieważ przeglądarka PDF ma wewnętrzną wiedzę na ten temat). Bez nich pliki czcionek nie byłyby możliwe do wykorzystania w przyjemny wizualnie sposób.
Za pomocą fontforge
Inną metodą jest użycie darmowego edytora czcionek FontForge :
- Użyj okna dialogowego „Otwórz czcionkę” używanego podczas otwierania plików.
- Następnie wybierz „Wyodrębnij z PDF” w sekcji filtrów okna dialogowego.
- Wybierz plik PDF zawierający czcionkę do wyodrębnienia.
- „Wybierz czcionkę” DialogBox otwiera - wybierz czcionki, które tutaj, aby otworzyć.
Sprawdź podręcznik FontForge. Może być konieczne wykonanie kilku określonych kroków, które niekoniecznie są proste, aby zapisać wyodrębnione dane czcionek jako plik, który można ponownie wykorzystać.
Za pomocą mupdf
Następnie MuPDF . Ta aplikacja jest dostarczana z narzędziem o nazwie pdfextract
(w systemie Windows pdfextract.exe
:), które może wyodrębniać czcionki i obrazy z plików PDF. (Jeśli nie wiesz o MuPDF, który wciąż jest stosunkowo nieznany i nowy: „MuPDF to darmowa, lekka przeglądarka plików PDF i zestaw narzędzi napisany w przenośnym C.” , napisany przez programistów Artifex Software, tę samą firmę, która dała nam Ghostscript. )
( Aktualizacja: nowsze wersje MuPDF przeniosły poprzednią funkcjonalność „pdfextract” do polecenia „mutool extract” . Pobierz je tutaj: mupdf.com/downloads )
Uwaga: pdfextract.exe
to program wiersza poleceń. Aby go użyć, wykonaj następujące czynności:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
To polecenie zrzuci wszystkie możliwe do wyodrębnienia pliki z pliku pdf, do którego się odwołuje, do bieżącego katalogu. Zwykle zobaczysz różne pliki: obrazy i czcionki. Należą do nich PNG, TTF, CFF, CID itp. Nazwy obrazów będą wyglądać jak img-0412.png, jeśli numer obiektu PDF obrazu to 412. Nazwy czcionek będą wyglądać jak FGETYK + LinLibertineI-0966.ttf , jeśli Numer obiektu PDF to 966.
Pliki CFF ( Compact Font Format ) to rozpoznawany format, który można konwertować na inne formaty za pomocą różnych konwerterów do użytku w różnych systemach operacyjnych.
Ponownie: pamiętaj, że większość tych plików czcionek może zawierać tylko podzbiór znaków i mogą nie reprezentować pełnego kroju pisma.
Aktualizacja: (lipiec 2013 r.) W ostatnich wersjach programu mupdf
dokonano wewnętrznych przetasowań i zmian nazw plików binarnych, nie tylko raz, ale kilka razy. Głównym narzędziem był kiedyś plik binarny podobny do `` szwajcarskiego noża '' mubusy
(nazwa inspirowana busyboxem?), Który niedawno został przemianowany na mutool
. Te potwierdzają podkomendy info
, clean
, extract
, poster
i show
. Niestety, oficjalna dokumentacja tych narzędzi nie jest (jeszcze) aktualna. Jeśli używasz komputera Mac z „MacPorts”: nazwa narzędzia została zmieniona, aby uniknąć kolizji nazw z innymi narzędziami używającymi identycznych nazw i może być konieczne użycie mupdfextract
.
Aby uzyskać (z grubsza) równoważne wyniki, mutool
jak w przypadku poprzedniego narzędzia pdfextract
, po prostu uruchom mubusy extract ...
. *
Aby wyodrębnić czcionki i obrazy, może być konieczne uruchomienie jednego z następujących poleceń:
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
Pliki do pobrania są tutaj: mupdf.com/downloads
Korzystanie z gs
(Ghostscript)
Następnie Ghostscript może również wyodrębniać czcionki bezpośrednio z plików PDF. Potrzebuje jednak pomocy specjalnego programu narzędziowego o nazwie extractFonts.ps
, napisanego w języku PostScript, który jest dostępny w repozytorium kodu źródłowego Ghostscript .
Teraz użyj go, musisz uruchomić zarówno ten plik, jak extractFonts.ps
i plik PDF. Ghostscript użyje wtedy instrukcji programu PostScript, aby wyodrębnić czcionki z pliku PDF. W systemie Windows wygląda to tak (tak, Ghostscript rozumie 'ukośnik', /, jako separator ścieżki również w systemie Windows!):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
lub w systemie Linux, Unix lub Mac OS X:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
Testowałem metodę Ghostscript kilka lat temu. W tym czasie wyodrębnił * .ttf (TrueType) dobrze. Nie wiem, czy inne typy czcionek również zostaną w ogóle wyodrębnione, a jeśli tak, to w sposób umożliwiający ich ponowne użycie. Nie wiem, czy narzędzie blokuje wyodrębnianie czcionek oznaczonych jako chronione.
Za pomocą pdf-parser.py
Na koniec pdf-parser.py Didiera Stevensa : ten prawdopodobnie nie jest tak łatwy w użyciu, ponieważ potrzebujesz pewnej wiedzy na temat wewnętrznych struktur PDF. pdf-parser.py
to skrypt w Pythonie, który potrafi też robić wiele innych rzeczy. Może również dekompresować i wyodrębniać dowolne strumienie z obiektów, a zatem może również wyodrębniać osadzone pliki czcionek.
Ale musisz wiedzieć, czego szukać. Zobaczmy to na przykładzie. Mam plik o nazwie big.pdf . Jako pierwszy krok używam -s
parametru do wyszukiwania w pliku PDF dowolnego wystąpienia słowa kluczowego FontFile ( pdf-parser.py
nie wymaga wyszukiwania z uwzględnieniem wielkości liter):
pdf-parser.py -s fontfile big.pdf
W moim przypadku dla mojego big1.pdf otrzymuję taki wynik:
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
>>
Mówi mi, że istnieją dwa wystąpienia FontFile2
wewnątrz pliku PDF i są to obiekty PDF nr. 15 i nie. 16, odpowiednio. Obiekt nr 15 zawiera /FontFile2
for font / ArialMT , obiekt nr. 16 zawiera /FontFile2
for font / Arial-BoldMT .
Aby to wyraźniej pokazać:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
Szybkie zajrzenie do specyfikacji PDF ujawnia, że słowo kluczowe /FontFile2
odnosi się do `` strumienia zawierającego program czcionek TrueType '' ( /FontFile
odnosiłoby się do `` strumienia zawierającego program czcionek Type 1 '' i /FontFile3
odnosiłoby się do `` strumienia zawierającego program czcionek, którego format jest określony przez wpis podtypu w słowniku strumieniowym „ {stąd jest podtypem Type1C lub CIDFontType0C }.)
Aby przyjrzeć się konkretnie obiektowi PDF nr. 15 (który przechowuje czcionkę / ArialMT ), można użyć -o 15
parametru:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
To pdf-parser.py
wyjście informuje nas, że ten obiekt zawiera strumień (którego nie będzie bezpośrednio wyświetlać) o długości 1.581.435 bajtów i jest zakodowany (== "skompresowany") za pomocą ASCIIHexEncode i musi zostać zdekodowany (== "de- skompresowany ”lub„ przefiltrowany ”) za pomocą standardowego /ASCIIHexDecode
filtra.
Aby zrzucić dowolny strumień z obiektu, pdf-parser.py
można wywołać za pomocą -d dumpname
parametru. Zróbmy to:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Nasz wyodrębniony zrzut danych będzie znajdował się w pliku o nazwie dumped-data.ext . Zobaczmy, jakie to jest duże:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
Spójrz, to jest 1.581.435 bajtów. Widzieliśmy tę liczbę w danych wyjściowych poprzedniego polecenia. Otwarcie tego pliku w edytorze tekstu potwierdza, że jego zawartość to dane zakodowane szesnastkowo ASCII.
Otwarcie pliku za pomocą narzędzia do czytania czcionek, takiego jak otfinfo
(jest to część lcdf-typetools
pakietu ), na początku doprowadzi do pewnego rozczarowania:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, to dlatego, że nie pozwoliliśmy (jeszcze) pdf-parser.py
wykorzystać jego pełnej magii: zrzucić przefiltrowany, zdekodowany strumień. W tym celu musimy dodać -f
parametr:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
Jaki jest rozmiar tego nowego pliku?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
Och, spójrz: ta dokładna liczba była już zapisana w obiekcie PDF nr. 15 słownik jako wartość klucza /Length1
...
Co file
myśli, że to jest?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
Co otfinfo
nam o tym mówi?
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
Więc Bingo !, mamy zwycięzcę: pdf-parser.py
rzeczywiście wyodrębniliśmy dla nas prawidłowy plik czcionki. Biorąc pod uwagę rozmiar tego pliku (778,552 bajtów), wygląda na to, że ta czcionka została nawet całkowicie osadzona w pliku PDF ...
Moglibyśmy zmienić jego nazwę na arial-regular.ttf i zainstalować go jako taki i szczęśliwie z niego korzystać.
Ostrzeżenia:
W każdym przypadku musisz przestrzegać licencji, która ma zastosowanie do czcionki. Niektóre licencje na czcionki nie pozwalają na bezpłatne używanie i / lub dystrybucję. Piractwo czcionek przypomina piractwo oprogramowania lub innych materiałów chronionych prawem autorskim.
Większość dostępnych plików PDF i tak nie zawiera pełnej czcionki, a jedynie podzbiory. Wyodrębnienie podzbioru czcionki jest przydatne tylko w bardzo ograniczonym zakresie, jeśli w ogóle.
Przeczytaj również poniższe informacje o zaletach i (więcej) wadach związanych z wyodrębnianiem czcionek: