Mir ist bewusst, dass pdftk.exe
Dienstprogramm, mit dem angegeben werden kann, welche Schriftarten von einer PDF-Datei verwendet werden und ob sie eingebettet sind oder nicht.
Nun das Problem: Ich hatte PDF Dateien mit eingebetteten Schriften - wie kann ich diese Schriften so extrahieren, dass sie als normale Schriftdateien wiederverwendbar sind? Gibt es (vorzugsweise kostenlose) Tools Was kann das? Auch: Kann dies programmgesteuert mit beispielsweise iText erfolgen?
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 Schriftart enthalten, wenn eine Schriftart eingebettet ist. Meist enthalten sie nur die Teilmenge der im Dokument verwendeten Glyphen.
pdftops
verwendenEine der am häufigsten verwendeten Methoden, um dies auf * nix-Systemen zu tun, besteht aus den folgenden Schritten:
pdftops
(unter Windows: pdftops.exe
Hilfsprogramm..pfa
Eingebettet. Sie können sie mit einem Texteditor extrahieren..pfa
(ASCII) mit .pfb
Und t1utils
In eine pfa2pfb
(Binäre) Datei konvertieren..pfm
- oder .afm
- Dateien (Fontmetrikdateien) eingebettet (da der PDF - Betrachter über interne Kenntnisse darüber verfügt). Ohne diese sind Schriftdateien optisch kaum ansprechend nutzbar.fontforge
verwendenEine andere Methode ist die Verwendung des Free Font Editors FontForge :
Überprüfen Sie das FontForge-Handbuch. Möglicherweise müssen Sie einige bestimmte Schritte ausführen, die nicht unbedingt einfach sind, um die extrahierten Schriftartdaten als Datei zu speichern, die wiederverwendbar ist.
mupdf
verwendenAls nächstes MuPDF . Diese Anwendung enthält ein Hilfsprogramm namens pdfextract
(unter Windows: pdfextract.exe
), Mit dem Sie Schriftarten und Bilder aus PDF-Dateien extrahieren können. (Falls Sie nicht über MuPDF Bescheid wissen, das noch relativ unbekannt und neu ist: "MuPDF ist ein kostenloses, leichtgewichtiges PDF - Anzeige- und Toolkit, das in portablem 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 es hier herunter: mupdf.com/downloads)
Hinweis: pdfextract.exe
Ist ein Befehlszeilenprogramm. Gehen Sie folgendermaßen 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 im aktuellen Verzeichnis verwiesen wird. Im Allgemeinen sehen Sie eine Vielzahl von Dateien: Bilder sowie Schriftarten. Dazu gehören PNG, TTF, CFF, CID usw. Die Bildnamen entsprechen img-0412.png , wenn die Objektnummer PDF des Bildes 412 lautet. Die Schriftnamen entspricht FGETYK + LinLibertineI-0966.ttf , wenn die Objektnummer PDF der Schriftart 966 lautet.
CFF-Dateien ( Compact Font Format ) sind ein anerkanntes Format, das über eine Vielzahl von Konvertern in andere Formate konvertiert werden kann, um auf verschiedenen Betriebssystemen verwendet zu werden.
Nochmals: Beachten Sie, dass die meisten dieser Schriftdateien möglicherweise nur eine Teilmenge von Zeichen enthalten und möglicherweise nicht die gesamte Schriftart darstellen.
Update: (Jul 2013) In den letzten Versionen von mupdf
wurden die Binärdateien nicht nur einmal, sondern mehrmals intern neu gemischt und umbenannt. Das Hauptprogramm war früher eine 'Schweizer Messer'-ähnliche Binärdatei mit dem Namen mubusy
(Name inspiriert von busybox?), Die in jüngerer Zeit in mutool
umbenannt wurde. 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: Das Dienstprogramm wurde umbenannt, um Namenskonflikte mit anderen Dienstprogrammen mit identischen Namen zu vermeiden. Möglicherweise müssen Sie mupdfextract
verwenden.
Führen Sie einfach mubusy extract ...
Aus, um die (ungefähr) äquivalenten Ergebnisse mit mutool
zu erzielen, wie es das vorherige Tool pdfextract
getan hat. *
Zum Extrahieren von Schriftarten und Bildern 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)
Die Downloads finden Sie hier: mupdf.com/downloads
gs
verwenden (Ghostscript)Dann kann Ghostscript auch Schriftarten direkt aus PDFs extrahieren. Es benötigt jedoch die Hilfe eines speziellen Hilfsprogramms mit dem Namen extractFonts.ps
, das in der PostScript-Sprache geschrieben ist erhältlich im Ghostscript-Quellcode-Repository .
Verwenden Sie es jetzt, um sowohl diese Datei extractFonts.ps
Als auch Ihre PDF - Datei auszufü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 (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 ein paar Jahren getestet. Zu der Zeit hat es * .ttf (TrueType) 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 als geschützt markierten Schriftarten blockiert.
pdf-parser.py
Zum Schluss noch Didier Stevens ' pdf-parser.py : Dieser ist wahrscheinlich nicht so einfach zu bedienen, weil Sie ihn brauchen etwas Know-how über interne PDF Strukturen. pdf-parser.py
Ist ein Python - Skript, das auch viele andere Dinge ausführen kann. Es kann auch beliebige Streams von Objekten dekomprimieren und extrahieren und daher auch eingebettete Schriftdateien extrahieren.
Aber Sie müssen wissen, wonach Sie suchen müssen. Lassen Sie es uns mit einem Beispiel sehen. Ich habe eine Datei mit dem Namen big.pdf . Als ersten Schritt verwende ich den Parameter -s
, um im PDF nach Vorkommen des Schlüsselworts FontFile zu suchen ) (pdf-parser.py
Erfordert keine Suche nach Groß- und Kleinschreibung):
pdf-parser.py -s fontfile big.pdf
In meinem Fall erhalte ich für meine big1.pdf das folgende 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 in der PDF zwei Instanzen von FontFile2
Gibt, und diese befinden sich in den PDF - Objekten Nr. 15 und nein. 16 sind. Objekt-Nr. 15 enthält den /FontFile2
Für Schriftart /ArialMT , Objekt-Nr. 16 enthält den /FontFile2
Für Schriftart /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 bezieht, der ein TrueType-Schriftprogramm enthält' (/FontFile
Würde beziehen sich auf einen 'Stream, der ein Typ 1 Schriftprogramm enthält' und /FontFile3
würden sich auf einen 'Stream beziehen, der ein Schriftprogramm enthält, dessen Format durch das spezifiziert wird Subtypeintrag im Stream-Wörterbuch ' {daher entweder ein Type1C oder ein CIDFontType0C Subtyp}.)
Um PDF Objekt-Nr. 15 (enthält die Schriftart /ArialMT ), kann der Parameter -o 15
verwendet werden:
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 gibt an, dass dieses Objekt einen Stream enthält (der nicht direkt angezeigt wird), der eine Länge von 1.581.435 Bytes hat und mit ASCIIHexEncode codiert (== "komprimiert") ist und decodiert werden muss (== "entkomprimiert" oder "gefiltert") mit Hilfe des Standardfilters /ASCIIHexDecode
.
Um einen Stream von einem Objekt zu sichern, kann pdf-parser.py
Mit dem Parameter -d dumpname
aufgerufen werden. Machen wir das:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Unser extrahierter Daten-Dump 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. Durch Öffnen dieser Datei mit einem Texteditor wird bestätigt, dass es sich bei dem Inhalt um ASCII hexadezimal codierte Daten handelt.
Öffnen der Datei mit einem Tool zum Lesen von Schriftarten wie otfinfo
(dies ist Teil des Pakets lcdf-typetools
) wird zunächst zu einer gewissen Enttäuschung führen:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, das liegt daran, dass wir (noch) nicht zulassen, dass pdf-parser.py
Seine ganze Magie ausnutzt: einen gefilterten, dekodierten Stream zu speichern. Dazu müssen wir den Parameter -f
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, sieh mal: Diese genaue Nummer war auch schon in der PDF Objekt-Nr. 15 Wörterbuch als Wert für Schlüssel /Length1
...
Was hält file
davon?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
Was sagt uns otfinfo
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
Hat tatsächlich eine gültige Schriftartdatei für uns extrahiert. Angesichts der Größe dieser Datei (778,552 Bytes) sieht es so aus, als wäre diese Schriftart sogar vollständig in die PDF-Datei eingebettet ...
Wir könnten es in arial-regular.ttf umbenennen und es als solches installieren und gerne nutzen.
In jedem Fall müssen Sie die für die Schrift geltende Lizenz einhalten. Einige Schriftlizenzen erlauben keine freie Verwendung und/oder Verbreitung. Das Kopieren von Schriftarten entspricht dem Kopieren von Software oder anderem urheberrechtlich geschütztem Material .
Die meisten PDF-Dateien, die ohnehin im Umlauf sind, binden nicht die gesamte Schrift ein, sondern nur Teilmengen. Das Extrahieren einer Teilmenge einer Schrift ist, wenn überhaupt, nur in sehr begrenztem Umfang sinnvoll .
Bitte lesen Sie auch die folgenden Informationen zu Vor- und Nachteilen in Bezug auf das Extrahieren von Schriftarten:
Verwenden Sie den Onlinedienst http://www.extractpdf.com . Es muss nichts installiert werden.
Schließlich fand das FontForge Windows-Installationspaket und öffnete das PDF über das installierte Programm. Hat gut geklappt, so glücklich.
http://www.verypdf.com/app/pdf-font-extractor/pdf-font-extracting-tool.html IMO einfachste Möglichkeit zum Extrahieren von Schriftarten (Windows).
PDF2SVG Version 6.0 von PDFTron macht einen vernünftigen Job. Es erzeugt OpenType (.otf
) Schriften standardmäßig. Verwenden --preserve_fontnames
, um "das aus der Quelldatei erhaltene Benennungsschema für Schriftarten/Schriftfamilien" beizubehalten.
PDF2SVG ist ein kommerzielles Produkt. Sie können jedoch eine kostenlose ausführbare Demo-Datei herunterladen (die Wasserzeichen in der SVG-Ausgabe enthält, die Verwendung jedoch nicht anderweitig einschränkt). Es gibt möglicherweise andere PDFTron-Produkte, die ebenfalls Schriftarten extrahieren, aber ich habe PDF2SVG erst kürzlich selbst entdeckt.
Eines der besten Online-Tools zum Extrahieren von PDF-Schriftarten ist http://www.pdfconvertonline.com/extract-pdf-fonts-online.html
Dies ist eine Fortsetzung der font-forge
Abschnitt von @ Kurt Pfeifles Antwort , spezifisch für Red Hat (und möglicherweise andere Linux-Distributionen).
Sobald Sie Ihre TTF-Datei haben, können Sie sie auf Ihrem System installieren
/usr/share/fonts
(als root)fc-cache -f /usr/share/fonts/
(als root)