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:
mupdf
. Zobacz także to ...Skorzystaj z usługi online http://www.extractpdf.com . Nie musisz niczego instalować.
źródło
~/.fonts
, a kopiowanie i wklejanie działało!Ostatecznie znalazłem pakiet instalatora FontForge dla systemu Windows i otworzyłem plik PDF za pomocą zainstalowanego programu. Pracowałam, taki szczęśliwy.
źródło
http://www.verypdf.com/app/pdf-font-extractor/pdf-font-extracting-tool.html IMO najłatwiejszy sposób na wyodrębnienie czcionek (Windows).
źródło
Chociaż to pytanie ma już 10 lat, jest nadal aktualne, a wraz ze zmianami technologii pojawia się ważna odpowiedź.
Szukając aktualnych odpowiedzi, żaden z nich nie zauważył WOFF (Web Open Font Format) ( W3C ) ( Wikipedia ), który może być użyty do odtworzenia poszczególnych znaków (glifów) i dokładnego wyświetlenia ich na stronie internetowej.
Korzystając z bezpłatnej strony internetowej IDR Solutions, PDF do HTML5 ( link ), przekonwertuj plik PDF na plik zip. W wynikowym pliku zip będzie katalog czcionek typów plików woff. Obecne przeglądarki internetowe obsługują pliki woff, jeśli nie byłeś tego świadomy. ( odniesienie ) Można je sprawdzić na stronie internetowej FontDrop! ( link ).
Pliki WOFF można konwertować do / z OTF lub TTF w konwerterze czcionek WOFFer - WOFF
Również plik zip z PDF na HTML5 będzie zawierał plik HTML dla każdej strony PDF, który można otworzyć w przeglądarce internetowej i jest jednym z najlepszych i najdokładniejszych tłumaczeń PDF, jakie znalazłem lub widziałem.
Chociaż dopiero uczę się obsługi plików WOFF, warto to przekazać. Cieszyć się.
PS, prawdopodobnie zaktualizuję o więcej informacji, gdy dowiem się więcej o używaniu typów plików woff, ale ponieważ jest to Creative Commons, możesz edytować tę odpowiedź, jeśli masz coś wartościowego do przekazania.
źródło
Is it because WOFF handles incomplete fonts better?
Nie mam pojęcia. Twoje przypuszczenie byłoby równie dobre jak moje. Jak zauważyłem, sam dopiero uczę się o WOFF.Is it because WOFF handles incomplete fonts better?
jako nowe pytanie SO, a inne osoby z większą wiedzą zobaczą i miejmy nadzieję, udzielą sensownej odpowiedzi.PDF2SVG w wersji 6.0 z PDFTron wykonuje całkiem niezłą robotę.
.otf
Domyślnie tworzy czcionki OpenType ( ). Służy--preserve_fontnames
do zachowania „schematu nazewnictwa czcionek / rodziny czcionek uzyskanego z pliku źródłowego”.PDF2SVG jest produktem komercyjnym, ale możesz pobrać darmowy plik wykonywalny demo (który zawiera znaki wodne na wyjściu SVG, ale nie ogranicza w inny sposób użycia). Mogą istnieć inne produkty PDFTron, które również wyodrębniają czcionki, ale dopiero niedawno sam odkryłem PDF2SVG.
źródło
--preserve_fontnames
nie działa, jeśli się pokrywają, częściowe czcionek - wydaje się nie zawierać prefiks, np, tymMSCIYG
wMSCIYG+Ge'ez-1
tak nadpisuje wcześniejsze partials.Jednym z najlepszych dostępnych obecnie narzędzi online do wyodrębniania czcionek PDF jest http://www.pdfconvertonline.com/extract-pdf-fonts-online.html
źródło
To jest kontynuacja
font-forge
sekcji odpowiedzi @Kurt Pfeifle , specyficznej dla Red Hata (i prawdopodobnie innych dystrybucji Linuksa).Gdy masz już plik TTF, możesz zainstalować go w systemie przez
/usr/share/fonts
(jako root)fc-cache -f /usr/share/fonts/
(jako root)źródło