Sie haben mehrere Möglichkeiten. Alle diese Methoden funktionieren sowohl unter Linux als auch unter Windows oder Mac OS X. Beachten Sie jedoch, dass die meisten PDF-Dateien keine vollständige Schrift enthalten, wenn eine Schrift eingebettet ist. Meistens enthalten sie nur die Teilmenge der im Dokument verwendeten Glyphen.
Verwenden von pdftops
Eine der am häufigsten verwendeten Methoden, um dies auf * nix-Systemen zu tun, besteht aus den folgenden Schritten:
- Konvertieren Sie die PDF-Datei in PostScript, z. B. mithilfe von XPDFs
pdftops
(unter Windows: pdftops.exe
Hilfsprogramm).
- Jetzt werden Schriftarten in das
.pfa
PostScript-Format eingebettet. Sie können sie mit einem Texteditor extrahieren .
- Möglicherweise müssen Sie das
.pfa
(ASCII) .pfb
mit dem t1utils
und in eine (binäre) Datei konvertieren pfa2pfb
.
- In PDF - Dateien nie sind
.pfm
oder .afm
Dateien (Font - Metric - Dateien) eingebettet (weil PDF Viewer internes Wissen über diese). Ohne diese sind Schriftdateien kaum visuell ansprechend verwendbar.
Verwenden von fontforge
Eine andere Methode ist die Verwendung des kostenlosen Schriftart-Editors FontForge :
- Verwenden Sie das Dialogfeld "Schriftart öffnen ", das beim Öffnen von Dateien verwendet wird.
- Wählen Sie dann im Filterbereich des Dialogfelds "Aus PDF extrahieren".
- Wählen Sie die PDF-Datei mit der zu extrahierenden Schriftart aus.
- Ein Dialogfeld " Schriftart auswählen " wird geöffnet. Wählen Sie hier aus, welche Schriftart geöffnet werden soll.
Überprüfen Sie das FontForge-Handbuch. Möglicherweise müssen Sie einige spezifische Schritte ausführen, die nicht unbedingt einfach sind, um die extrahierten Schriftdaten als wiederverwendbare Datei zu speichern.
Verwenden von mupdf
Als nächstes MuPDF . Diese Anwendung wird mit einem Dienstprogramm namens pdfextract
(unter Windows pdfextract.exe
:) geliefert, mit dem Schriftarten und Bilder aus PDFs extrahiert werden können. (Falls Sie nichts über MuPDF wissen, das noch relativ unbekannt und neu ist: "MuPDF ist ein kostenloser, leichter PDF-Viewer und ein Toolkit, das in Portable C geschrieben wurde " , geschrieben von Artifex Software-Entwicklern, der gleichen Firma, die uns Ghostscript gegeben hat. )
( Update: Neuere Versionen von MuPDF haben die frühere Funktionalität von 'pdfextract' in den Befehl 'mutool extract' verschoben . Laden Sie sie hier herunter: mupdf.com/downloads )
Hinweis: pdfextract.exe
ist ein Befehlszeilenprogramm. Gehen Sie wie folgt vor, um es zu verwenden:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
Dieser Befehl speichert alle extrahierbaren Dateien aus der PDF-Datei, auf die verwiesen wird, in das aktuelle Verzeichnis. Im Allgemeinen sehen Sie eine Vielzahl von Dateien: Bilder sowie Schriftarten. Dazu gehören PNG, TTF, CFF, CID usw. Die Bildnamen lauten wie img-0412.png, wenn die PDF-Objektnummer des Bildes 412 war. Die Schriftnamen lauten wie FGETYK + LinLibertineI-0966.ttf , wenn die Schriftarten Die PDF-Objektnummer war 966.
CFF- Dateien ( Compact Font Format ) sind ein anerkanntes Format, das über eine Vielzahl von Konvertern zur Verwendung unter verschiedenen Betriebssystemen in andere Formate konvertiert werden kann.
Nochmals: Beachten Sie, dass die meisten dieser Schriftdateien möglicherweise nur eine Teilmenge von Zeichen enthalten und möglicherweise nicht die gesamte Schrift darstellen.
Update: (Jul 2013) In neueren Versionen von mupdf
wurden die Binärdateien nicht nur einmal, sondern mehrmals intern neu gemischt und umbenannt. Das Hauptdienstprogramm war früher eine "Schweizer Messer" -ähnliche Binärdatei mubusy
(Name inspiriert von Busybox?), Die in jüngerer Zeit umbenannt wurde mutool
. Diese unterstützen die Unterbefehle info
, clean
, extract
, poster
und show
. Leider ist die offizielle Dokumentation für diese Tools (noch) nicht aktuell. Wenn Sie auf einem Mac mit 'MacPorts' arbeiten, wurde das Dienstprogramm umbenannt, um Namenskonflikte mit anderen Dienstprogrammen mit identischen Namen zu vermeiden. Möglicherweise müssen Sie es verwenden mupdfextract
.
Um die (ungefähr) äquivalenten Ergebnisse mit mutool
dem vorherigen Tool zu erzielen pdfextract
, führen Sie einfach aus mubusy extract ...
. *
Um Schriftarten und Bilder zu extrahieren, müssen Sie möglicherweise eine der folgenden Befehlszeilen ausführen:
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
Downloads finden Sie hier: mupdf.com/downloads
Verwenden von gs
(Ghostscript)
Anschließend kann Ghostscript Schriftarten auch direkt aus PDFs extrahieren. Es benötigt jedoch die Hilfe eines speziellen Dienstprogramms namens extractFonts.ps
Post, das in der PostScript-Sprache geschrieben ist und im Ghostscript-Quellcode-Repository verfügbar ist .
Verwenden Sie es jetzt, Sie müssen sowohl diese Datei extractFonts.ps
als auch Ihre PDF-Datei ausführen . Ghostscript verwendet dann die Anweisungen aus dem PostScript-Programm, um die Schriftarten aus der PDF-Datei zu extrahieren. Unter Windows sieht es so aus (ja, Ghostscript versteht den 'Schrägstrich' / als Pfadtrennzeichen auch unter Windows!):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
oder unter Linux, Unix oder Mac OS X:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
Ich habe die Ghostscript-Methode vor einigen Jahren getestet. Zu der Zeit hat es * .ttf (TrueType) ganz gut extrahiert. Ich weiß nicht, ob andere Schriftarten überhaupt extrahiert werden, und wenn ja, auf wiederverwendbare Weise. Ich weiß nicht, ob das Dienstprogramm das Extrahieren von Schriftarten blockiert, die als geschützt markiert sind.
Verwenden von pdf-parser.py
Zum Schluss die pdf-parser.py von Didier Stevens : Diese ist wahrscheinlich nicht so einfach zu bedienen, da Sie über einige Kenntnisse in Bezug auf interne PDF-Strukturen verfügen müssen. pdf-parser.py
ist ein Python-Skript, das auch viele andere Dinge kann. Es kann auch beliebige Streams aus Objekten dekomprimieren und extrahieren und daher auch eingebettete Schriftdateien extrahieren.
Aber Sie müssen wissen, wonach Sie suchen müssen. Lassen Sie es uns anhand eines Beispiels sehen. Ich habe eine Datei namens big.pdf . Als ersten Schritt verwende ich den -s
Parameter, um die PDF-Datei nach dem Auftreten des Schlüsselworts FontFile zu durchsuchen ( pdf-parser.py
erfordert keine Suche nach Groß- und Kleinschreibung):
pdf-parser.py -s fontfile big.pdf
In meinem Fall erhalte ich für mein big1.pdf folgendes Ergebnis:
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
>>
Es sagt mir, dass es zwei Instanzen FontFile2
innerhalb der PDF gibt, und diese sind in PDF-Objekten Nr. 15 und nein. 16. Objekt Nr. 15 enthält die /FontFile2
für font / ArialMT , Objekt-Nr. 16 enthält die /FontFile2
für font / Arial-BoldMT .
Um dies deutlicher zu zeigen:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
Ein kurzer Blick in die PDF-Spezifikation zeigt, dass sich das Schlüsselwort /FontFile2
auf einen "Stream mit einem TrueType-Schriftprogramm"/FontFile
bezieht ( bezieht sich auf einen "Stream mit einem Typ 1-Schriftprogramm" und /FontFile3
auf einen "Stream mit einem Schriftprogramm, dessen Format" ist angegeben durch den Subtyp-Eintrag im Stream-Wörterbuch ' {daher entweder ein Type1C- oder ein CIDFontType0C- Subtyp}.)
Um speziell auf PDF-Objekt Nr. 15 (die die Schriftart / ArialMT enthält ) kann man den -o 15
Parameter verwenden:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
Diese pdf-parser.py
Ausgabe sagt uns, dass dieses Objekt einen Stream enthält (den es nicht direkt anzeigt), der eine Länge von 1,581,435 Bytes hat und mit ASCIIHexEncode codiert (== "komprimiert") ist und dekodiert werden muss (== "de-) komprimiert "oder" gefiltert ") mit Hilfe des Standardfilters /ASCIIHexDecode
.
Um einen Stream von einem Objekt zu sichern, pdf-parser.py
kann mit dem -d dumpname
Parameter aufgerufen werden. Machen wir das:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Unser extrahierter Datendump befindet sich in der Datei dumped-data.ext . Mal sehen, wie groß es ist:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
Oh schau, es ist 1,581,435 Bytes. Wir haben diese Zahl in der Ausgabe des vorherigen Befehls gesehen. Das Öffnen dieser Datei mit einem Texteditor bestätigt, dass es sich bei dem Inhalt um ASCII-Hex-codierte Daten handelt.
Das Öffnen der Datei mit einem Tool zum Lesen von Schriftarten wie otfinfo
(dies ist ein Teil des lcdf-typetools
Pakets ) führt zunächst zu einigen Enttäuschungen:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, das liegt daran, dass wir (noch) nicht pdf-parser.py
die volle Magie nutzen ließen: einen gefilterten, dekodierten Stream zu entleeren. Dazu müssen wir den -f
Parameter hinzufügen :
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
Wie groß ist diese neue Datei?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
Oh, schau: Diese genaue Nummer war auch schon im PDF-Objekt Nr. 15 Wörterbuch als Wert für Schlüssel /Length1
...
Was glaubt file
es ist?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
Was otfinfo
sagt uns darüber?
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
Also Bingo!, Wir haben einen Gewinner: pdf-parser.py
haben tatsächlich eine gültige Schriftdatei für uns extrahiert. Angesichts der Größe dieser Datei (778,552 Bytes) sieht es so aus, als ob diese Schriftart sogar vollständig in das PDF eingebettet wurde ...
Wir könnten es in arial-regulär.ttf umbenennen und als solches installieren und es gerne nutzen.
Vorsichtsmaßnahmen:
In jedem Fall müssen Sie die Lizenz befolgen, die für die Schriftart gilt. Einige Schriftlizenzen erlauben keine freie Nutzung und / oder Verbreitung. Das Raubkopieren von Schriftarten ist das Raubkopieren von Software oder anderem urheberrechtlich geschütztem Material.
Die meisten PDF-Dateien, die sich in freier Wildbahn befinden, enthalten ohnehin nicht die vollständige Schriftart, sondern nur Teilmengen. Das Extrahieren einer Teilmenge einer Schriftart ist, wenn überhaupt, nur in einem sehr begrenzten Umfang nützlich.
Bitte lesen Sie auch die folgenden Vor- und Nachteile in Bezug auf das Extrahieren von Schriftarten: