Jak wyodrębnić osadzone czcionki z pliku PDF jako prawidłowe pliki czcionek?

Znam narzędzie pdftk.exe, które może wskazywać, które czcionki są używane przez plik PDF i czy są osadzone, czy nie.

Teraz problem: biorąc pod uwagę, że miałem pliki PDF z osadzonymi czcionkami -- Jak mogę wyodrębnić te czcionki w taki sposób, że są one ponownie używane jako zwykłe pliki czcionek? Czy istnieją (najlepiej darmowe) narzędzia, które mogą to zrobić? Ponadto: czy można to zrobić programowo za pomocą, powiedzmy, iText?

Author: Kurt Pfeifle, 2010-08-15

8 answers

Masz kilka opcji. Wszystkie te metody działają na Linuksie, 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 fontface, gdy mają osadzoną czcionkę. W większości zawierają one tylko podzbiór glifów używanych w dokumencie.


Za pomocą pdftops

Jedną z najczęściej stosowanych metod w systemach *nix są następujące kroki:]}
  1. Konwertuj plik PDF na PostScript, na przykład przez korzystanie z XPDF pdftops (w systemie Windows: pdftops.exe program pomocniczy.
  2. teraz czcionki będą osadzone w formacie .pfa (PostScript) + można je wyodrębnić za pomocą edytora tekstu .
  3. może być konieczne przekonwertowanie .pfa (ASCII) na .pfb (binarny) plik za pomocą t1utils i pfa2pfb.
  4. w plikach PDF nigdy nie są osadzone pliki .pfm lub .afm (pliki metryczne czcionek) (ponieważ przeglądarka PDF ma wewnętrzną wiedzę na ich temat). Bez nich Pliki Czcionek nie są użyteczny w przyjemny wizualnie sposób.

Używając fontforge

Inną metodą jest użycie darmowego edytora czcionek FontForge:

  1. użyj okna dialogowego "Otwórz czcionkę" używanego podczas otwierania plików.
  2. następnie wybierz "wyodrębnij z pliku PDF" w sekcji filtr w oknie dialogowym.
  3. Wybierz plik PDF z czcionką do wyodrębnienia.
  4. a otwiera się okno dialogowe"Wybierz czcionkę" -- Wybierz tutaj, którą czcionkę otwórz.

Sprawdź podręcznik FontForge. Może być konieczne wykonanie kilku konkretnych kroków, które niekoniecznie są proste, aby zapisać wyodrębnione dane czcionki jako plik, który można ponownie wykorzystać.


Za pomocą mupdf

Następna, MuPDF. Ta aplikacja jest wyposażona w narzędzie o nazwie pdfextract (w systemie Windows: pdfextract.exe), które może wyodrębnić czcionki i obrazy z plików PDF. (W przypadku, gdy nie wiesz o MuPDF, który nadal jest stosunkowo nieznany i Nowy: "MuPDF to darmowa, lekka przeglądarka plików PDF i zestaw narzędzi napisany w przenośnym języku C.", napisany przez twórców oprogramowania Artifex, tę samą firmę, która dała nam Ghostscript.)
(aktualizacja: nowsze wersje MuPDF przeniosły poprzednią funkcjonalność 'pdfextract' do polecenia 'mutool extract' . Pobierz go tutaj: mupdf.com/downloads)

Uwaga: pdfextract.exe jest programem wiersza poleceń. Aby go użyć, wykonaj po:

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

To polecenie zrzuci wszystkie wyodrębniane pliki z pliku pdf, do którego odwołuje się do bieżącego katalogu. Ogólnie można zobaczyć różne pliki: obrazy, a także czcionki. Należą do nich PNG, TTF, CFF, CID itp. Nazwy obrazów będą takie jak img-0412.png jeśli numer obiektu PDF obrazka to 412. Nazwy czcionek będą takie jak FGETYK+LinLibertineI-0966.ttf , jeśli numer obiektu PDF czcionki to 966.

CFF (czcionka Kompaktowa Format ) pliki są uznanym formatem, który może być konwertowany do innych formatów za pomocą różnych konwerterów do użytku w różnych systemach operacyjnych.

Ponownie: należy pamiętać, że większość z tych plików czcionek może mieć tylko podzbiór znaków i może nie reprezentować pełnego kroju pisma.

Aktualizacja: (Lipiec 2013) ostatnie wersje mupdf doczekały się wewnętrznego przetasowania i zmiany nazw swoich plików binarnych, nie tylko raz, ale kilka razy. Głównym narzędziem wykorzystywanym do być "szwajcarskim nożem" -podobnie jak binarny mubusy (nazwa zainspirowana busybox?), która ostatnio została przemianowana na mutool. Obsługują one podprogramy info, clean, extract, poster i show. Niestety, oficjalna dokumentacja tych narzędzi nie jest jeszcze aktualna. Jeśli korzystasz z Macports: nazwa narzędzia została zmieniona, aby uniknąć kolizji nazw z innymi narzędziami używającymi identycznych nazw i być może będziesz musiał użyć mupdfextract.

Aby osiągnąć (mniej więcej) równoważny wyniki z mutool tak jak poprzednie narzędzie pdfextract, po prostu uruchom mubusy extract ....*

Aby wyodrębnić czcionki i obrazy, może być konieczne uruchomienie jednej z następujących linii 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


Using gs (Ghostscript)

Then, Ghostscript może również wyodrębniać czcionki bezpośrednio z plików PDF. Jednak potrzebuje pomocy specjalnego programu użytkowego o nazwie extractFonts.ps, napisany w języku PostScript, który jest dostępny z repozytorium kodu źródłowego Ghostscript .

Teraz użyj go, musisz uruchomić zarówno ten plik extractFonts.ps, jak i Twój plik PDF. Ghostscript użyje następnie instrukcji z programu PostScript, aby wyodrębnić czcionki z pliku PDF. Wygląda to tak na Windows (Tak, Ghostscript rozumie 'ukośnik do przodu', /, jako separator ścieżek również na Windows!):

gswin32c.exe                  ^
  -q -dNODISPLAY              ^
   c:/path/to/extractFonts.ps ^
  -c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
[[68]} lub na Linuksie, Unixie lub Mac OS X:
gs                          \
  -q -dNODISPLAY            \
   /path/to/extractFonts.ps \
  -c "(/path/to/your/PDFFile.pdf) extractFonts quit"

Przetestowałem metoda Ghostscript kilka lat temu. W tym czasie wyodrębnił *.ttf (TrueType) po prostu dobrze. Nie wiem, czy inne typy czcionek zostaną w ogóle wyodrębnione, a jeśli tak, to w sposób nadający się do ponownego użycia. Nie wiem, czy narzędzie blokuje wyodrębnianie czcionek oznaczonych jako chronione.


Używając pdf-parser.py

W końcu Didier Stevens' pdf-parser.py: ten prawdopodobnie nie jest tak łatwy w użyciu, ponieważ musisz mieć trochę wiedzy na temat wewnętrznego PDF struktury. pdf-parser.py jest skryptem Pythona, który może zrobić 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 parametr do wyszukiwania pliku PDF pod kątem dowolnego wystąpienia słowa kluczowego FontFile (pdf-parser.py nie wymaga rozróżniania wielkości liter wyszukiwanie):
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 przypadki FontFile2 wewnątrz pliku PDF, a są to odpowiednio obiekty PDF nr 15 i Nr 16. Obiekt nr 15 przechowuje /FontFile2 dla czcionki /ArialMT, obiekt nr 16 przechowuje /FontFile2 dla czcionki /Arial-BoldMT.

Aby pokazać to jaśniej:

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

Szybkie zajrzenie do specyfikacji PDF ujawnia słowo kluczowe /FontFile2 odnosi się do strumienia zawierającego program czcionki TrueType' (/FontFile odnosiłoby się do "strumienia zawierającego program czcionek typu 1" i /FontFile3 odnosiłoby się do "strumienia zawierającego program czcionek, którego format jest określony przez wpis Podtyp w słowniku strumienia" {stąd jest albo Type1C albo cidfonttype0c Podtyp}.)

Aby przyjrzeć się konkretnie obiektowi PDF nr 15 (w którym znajduje się czcionka / ArialMT ), można użyć -o 15 parametr:

pdf-parser.py -o 15 big1.pdf

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

To wyjście pdf-parser.py mówi nam, że ten obiekt zawiera strumień (którego nie wyświetli bezpośrednio) o długości 1.581.435 bajtów i jest zakodowany (=="skompresowany") za pomocą ASCIIHexEncode i musi być dekodowany (=="dekompresowany" lub "filtrowany") za pomocą standardowego filtra /ASCIIHexDecode.

Aby zrzucić dowolny strumień z obiektu, pdf-parser.py można wywołać za pomocą -d dumpname parametr. Zróbmy to:

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

Nasz zrzut danych będzie w pliku o nazwie dumped-data.ext . Zobaczmy, jak duży jest:

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

O spójrz, to jest 1.581.435 bajtów. Widzieliśmy tę liczbę na wyjściu poprzedniego polecenia. Otwarcie tego pliku za pomocą edytora tekstu potwierdza, że jego zawartość jest ASCII hex zakodowane dane.

Otwieranie pliku za pomocą narzędzia do odczytu czcionek, takiego jak otfinfo (jest to część lcdf-typetools pakiet) 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 my nie pozwolił (jeszcze) pdf-parser.py wykorzystać swojej 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

Oh, spójrz: ta dokładna liczba była już zapisana w PDF object no. 15 dictionary jako wartość klucza /Length1...

Jak myślisz, co to jest?

file dumped-data-decoded.ext
  dumped-data-decoded.ext: TrueType font data
Co 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 czy rzeczywiście wyodrębnij 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 osadzona nawet całkowicie w PDF... Możemy zmienić nazwę na arial-regular.ttf i zainstalować go jako taki i szczęśliwie z niego korzystać.

Zastrzeżenia:

  • w każdym przypadku należy postępować zgodnie z licencją, która dotyczy czcionki. Niektóre licencje czcionek nie zezwalają na bezpłatne użytkowanie i/lub dystrybucję. Piractwo czcionki są jak pirackie oprogramowanie lub inne materiały chronione prawem autorskim.

  • większość plików PDF, które są na wolności, i tak nie osadza pełnej czcionki, ale tylko podzbiory. Wyodrębnianie podzbioru czcionki jest przydatne tylko w bardzo ograniczonym zakresie, jeśli w ogóle.

Proszę również przeczytać następujące informacje o zaletach i (więcej) wadach dotyczących wydobywania czcionek:

 417
Author: Kurt Pfeifle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Skorzystaj z usługi online http://www.extractpdf.com. nie trzeba niczego instalować.

 27
Author: igo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-22 11:39:10

Ostatecznie znalazł Pakiet instalatora FontForge Windows i otworzył plik PDF za pomocą zainstalowanego programu. Pracował na uczcie, tak szczęśliwy.

 6
Author: Dapizz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-21 01:32:17

Http://www.verypdf.com/app/pdf-font-extractor/pdf-font-extracting-tool.html IMO najprostszy sposób wyodrębniania czcionek (Windows).

 5
Author: l00k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-17 10:27:40

Mimo, że to pytanie ma 10 lat, nadal jest ważne i wraz ze zmianami technologii, tak samo jak poprawna odpowiedź.

Podczas wyszukiwania aktualnych odpowiedzi nie zauważyłem żadnej z nich note WOFF (Web Open Font Format) (W3C) (Wikipedia), które mogą być użyte do odtworzenia poszczególnych znaków (glifów) i dokładnego wyświetlenia ich na stronie internetowej.

Korzystając z darmowej strony internetowej IDR Solutions, PDF do HTML5 (link ), przekonwertuj plik PDF do pliku zip. W wyniku zip będzie katalogiem czcionek typów plików woff. Aktualne przeglądarki internetowe obsługują pliki woff, jeśli nie wiesz. (reference ) można je sprawdzić na stronie internetowej FontDrop! (link ).

Pliki WOFF mogą być konwertowane do / Z OTF lub TTF w woffer – WOFF font converter

Również plik zip z PDF do HTML5 będzie zawierał plik HTML dla każdej strony pliku PDF, który można otworzyć w przeglądarce internetowej i jest jednym z najlepszych i najdokładniejszych plików PDF tłumaczenia, które znalazłem lub widziałem.

Podczas gdy dopiero uczę się korzystać z plików WOFF, warto to przekazać. Smacznego.

PS, prawdopodobnie zaktualizuję 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.

 4
Author: Guy Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-01 21:33:31

Jednym z najlepszych obecnie dostępnych narzędzi online do wyodrębniania czcionek pdf jest http://www.pdfconvertonline.com/extract-pdf-fonts-online.html

 3
Author: Riyafa Abdul Hameed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 14:49:46

PDF2SVG Wersja 6.0 z PDFTron robi rozsądną robotę. Domyślnie tworzy czcionki OpenType (.otf). Użyj --preserve_fontnames, Aby zachować " schemat nazewnictwa czcionek / rodziny czcionek uzyskany 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 w inny sposób nie ogranicza użycia). Mogą być inne produkty PDFTron, które również wyodrębniają czcionki, ale niedawno odkryłem PDF2SVG siebie.

 2
Author: Sean Leather,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-08 08:31:48

Jest to kontynuacja font-forge sekcji @Kurt Pfeifle odpowiedzi, specyficznej dla Red Hata (i ewentualnie innych dystrybucji Linuksa).

  1. Po otwarciu pliku PDF i wybraniu odpowiedniej czcionki należy wybrać opcję " Plik - > Generuj czcionki..."opcja.
  2. Jeśli w pliku występują błędy, możesz je zignorować lub zapisać i edytować. Większość błędów można naprawić automatycznie, jeśli klikniesz "napraw" wystarczająco dużo razy.
  3. Kliknij " Element - > Informacja O Czcionce...", a "Fontname", "Family Name" I "Name for Humans" są ustawione na wartości, które lubisz. Jeśli nie, zmodyfikuj je i zapisz gdzieś plik. Nazwy te określają sposób wyświetlania czcionki w systemie.
  4. Wybierz nazwę pliku i kliknij " Zapisz..."

Gdy Masz plik TTF, możesz go zainstalować w systemie przez

  1. kopiowanie do folderu /usr/share/fonts (jako root)
  2. Running fc-cache -f /usr/share/fonts/ (jako root)
 0
Author: Mad Physicist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-20 16:47:17