Vous avez plusieurs options. Toutes ces méthodes fonctionnent aussi bien sur Linux que sur Windows ou Mac OS X. Cependant, sachez que la plupart des PDF n'incluent pas une police de caractères complète et complète lorsqu'une police est intégrée. La plupart du temps, ils n'incluent que le sous - ensemble de glyphes utilisés dans le document.
En utilisant pdftops
L'une des méthodes les plus fréquemment utilisées pour ce faire sur les systèmes * nix comprend les étapes suivantes:
- Convertissez le PDF en PostScript, par exemple en utilisant XPDF
pdftops
(sous Windows: pdftops.exe
programme d'assistance.
- Les polices seront désormais incorporées au
.pfa
format (PostScript) + vous pouvez les extraire à l'aide d'un éditeur de texte .
- Vous devrez peut-être convertir le fichier
.pfa
(ASCII) en .pfb
fichier (binaire) à l'aide de t1utils
et pfa2pfb
.
- Dans les PDF, il n'y a jamais de fichiers
.pfm
ou de .afm
fichiers (fichiers de métriques de polices) incorporés (car le visualiseur PDF a des connaissances internes à ce sujet). Sans ceux-ci, les fichiers de polices ne sont guère utilisables d'une manière visuellement agréable.
En utilisant fontforge
Une autre méthode consiste à utiliser l'éditeur de polices gratuit FontForge :
- Utilisez la boîte de dialogue "Ouvrir la police" utilisée lors de l'ouverture des fichiers.
- Sélectionnez ensuite "Extraire du PDF" dans la section filtre de la boîte de dialogue.
- Sélectionnez le fichier PDF avec la police à extraire.
- Une boîte de dialogue "Choisir une police" s'ouvre - sélectionnez ici la police à ouvrir.
Consultez le manuel FontForge. Vous devrez peut-être suivre quelques étapes spécifiques qui ne sont pas nécessairement simples pour enregistrer les données de police extraites sous forme de fichier réutilisable.
En utilisant mupdf
Ensuite, MuPDF . Cette application est livrée avec un utilitaire appelé pdfextract
(sous Windows :) pdfextract.exe
qui peut extraire des polices et des images à partir de PDF. (Au cas où vous ne connaissez pas MuPDF, qui est encore relativement inconnu et nouveau: "MuPDF est un visualiseur PDF léger gratuit et une boîte à outils écrite en C. portable" , écrit par les développeurs d'Artifex Software, la même société qui nous a donné Ghostscript. )
( Mise à jour: les nouvelles versions de MuPDF ont déplacé l'ancienne fonctionnalité de 'pdfextract' vers la commande 'mutool extract' . Téléchargez-la ici: mupdf.com/downloads )
Remarque: pdfextract.exe
est un programme en ligne de commande. Pour l'utiliser, procédez comme suit:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
Cette commande videra tous les fichiers extractibles du fichier pdf référencé dans le répertoire courant. En général, vous verrez une variété de fichiers: des images ainsi que des polices. Ceux-ci incluent PNG, TTF, CFF, CID, etc. Les noms d'image seront comme img-0412.png si le numéro d'objet PDF de l'image était 412. Les noms de police seront comme FGETYK + LinLibertineI-0966.ttf , si Le numéro d'objet PDF était 966.
Les fichiers CFF ( Compact Font Format ) sont un format reconnu qui peut être converti en d'autres formats via une variété de convertisseurs pour une utilisation sur différents systèmes d'exploitation.
Encore une fois: sachez que la plupart de ces fichiers de polices peuvent ne contenir qu'un sous - ensemble de caractères et peuvent ne pas représenter la police complète.
Mise à jour: (juillet 2013) Les versions récentes de mupdf
ont vu un remaniement interne et un changement de nom de leurs binaires, pas seulement une fois, mais plusieurs fois. Le principal utilitaire était un binaire semblable à un «couteau suisse» appelé mubusy
(nom inspiré de busybox?), Qui a été renommé plus récemment mutool
. Ceux - ci prennent en charge les sous-commandes info
, clean
, extract
, poster
et show
. Malheureusement, la documentation officielle de ces outils n'est pas (encore) à jour. Si vous êtes sur un Mac utilisant 'MacPorts': alors l'utilitaire a été renommé afin d'éviter les conflits de noms avec d'autres utilitaires utilisant des noms identiques, et vous devrez peut-être utiliser mupdfextract
.
Pour obtenir des résultats (à peu près) équivalents avec mutool
comme le pdfextract
faisait son outil précédent , exécutez simplement mubusy extract ...
. *
Ainsi, pour extraire les polices et les images, vous devrez peut-être exécuter l'une des lignes de commande suivantes:
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
Les téléchargements sont ici: mupdf.com/downloads
Utilisation de gs
(Ghostscript)
Ensuite, Ghostscript peut également extraire des polices directement à partir de fichiers PDF. Cependant, il a besoin de l'aide d'un programme utilitaire spécial nommé extractFonts.ps
, écrit en langage PostScript, qui est disponible dans le référentiel de code source de Ghostscript .
Maintenant, utilisez-le, vous devez exécuter à la fois ce fichier extractFonts.ps
et votre fichier PDF. Ghostscript utilisera ensuite les instructions du programme PostScript pour extraire les polices du PDF. Cela ressemble à ceci sur Windows (oui, Ghostscript comprend la `` barre oblique '', /, comme un séparateur de chemin également sous Windows!):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
ou sous Linux, Unix ou Mac OS X:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
J'ai testé la méthode Ghostscript il y a quelques années. À l'époque, il a très bien extrait * .ttf (TrueType). Je ne sais pas si d'autres types de polices seront également extraits du tout, et si oui, de manière réutilisable. Je ne sais pas si l'utilitaire bloque l'extraction des polices marquées comme protégées.
En utilisant pdf-parser.py
Enfin, pdf-parser.py de Didier Stevens : celui-ci n'est probablement pas aussi simple à utiliser, car il faut avoir un certain savoir-faire sur les structures PDF internes. pdf-parser.py
est un script Python qui peut faire beaucoup d'autres choses aussi. Il peut également décompresser et extraire des flux arbitraires d'objets, et donc également extraire des fichiers de polices incorporés.
Mais vous devez savoir ce qu'il faut rechercher. Voyons cela avec un exemple. J'ai un fichier nommé big.pdf . Dans un premier temps, j'utilise le -s
paramètre pour rechercher dans le PDF toute occurrence du mot-clé FontFile ( pdf-parser.py
ne nécessite pas de recherche sensible à la casse):
pdf-parser.py -s fontfile big.pdf
Dans mon cas, pour mon big1.pdf , j'obtiens ce résultat:
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
>>
Cela me dit qu'il y a deux instances de l' FontFile2
intérieur du PDF, et ce sont des objets PDF non. 15 et non. 16, respectivement. Objet no. 15 contient la /FontFile2
police for / ArialMT , objet no. 16 contient la /FontFile2
police for / Arial-BoldMT .
Pour le montrer plus clairement:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
Un rapide coup d'œil dans la spécification PDF révèle que le mot-clé se /FontFile2
rapporte à un `` flux contenant un programme de polices TrueType '' ( /FontFile
se rapporterait à un `` flux contenant un programme de polices de type 1 '' et /FontFile3
se rapporterait à un `` flux contenant un programme de polices dont le format est spécifié par l'entrée de sous-type dans le dictionnaire de flux ' {étant donc un sous-type Type1C ou CIDFontType0C }.)
Pour regarder spécifiquement l'objet PDF no. 15 (qui contient la police / ArialMT ), on peut utiliser le -o 15
paramètre:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
Cette pdf-parser.py
sortie nous indique que cet objet contient un flux (qu'il n'affichera pas directement) qui a une longueur de 1,581,435 octets et est encodé (== "compressé") avec ASCIIHexEncode et doit être décodé (== "dé- compressé "ou" filtré ") à l'aide du /ASCIIHexDecode
filtre standard .
Pour vider n'importe quel flux d'un objet, pdf-parser.py
peut être appelé avec le -d dumpname
paramètre. Faisons le:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Notre vidage de données extraites sera dans le fichier nommé dumped-data.ext . Voyons quelle est sa taille:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
Oh regardez, c'est 1,581,435 octets. Nous avons vu ce chiffre dans la sortie de la commande précédente. L'ouverture de ce fichier avec un éditeur de texte confirme que son contenu est constitué de données encodées en hexadécimal ASCII.
Ouvrir le fichier avec un outil de lecture de polices comme otfinfo
(ceci fait partie du lcdf-typetools
package ) entraînera une certaine déception au début:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, c'est parce que nous n'avons pas (encore) laissé pdf-parser.py
utiliser toute sa magie: vider un flux filtré et décodé. Pour cela, nous devons ajouter le -f
paramètre:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
Quelle est la taille de ce nouveau fichier?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
Oh, regardez: ce nombre exact était également déjà stocké dans l'objet PDF no. 15 dictionnaire comme valeur de clé /Length1
...
Que file
pense-t-il?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
Que otfinfo
nous en dit-il?
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
Donc Bingo !, nous avons un gagnant: nous avons en pdf-parser.py
effet extrait un fichier de police valide. Compte tenu de la taille de ce fichier (778,552 octets), il semble que cette police ait été intégrée même complètement dans le PDF ...
Nous pourrions le renommer en arial-regular.ttf et l'installer en tant que tel et l'utiliser avec plaisir.
Mises en garde:
Dans tous les cas, vous devez suivre la licence qui s'applique à la police. Certaines licences de polices ne permettent pas une utilisation et / ou une distribution gratuites. Le piratage des polices est comme le piratage de tout logiciel ou autre matériel protégé par le droit d'auteur.
La plupart des fichiers PDF à l'état sauvage n'intègrent de toute façon pas la police complète, mais uniquement des sous-ensembles. Extraire un sous-ensemble d'une police n'est utile que dans une portée très limitée, voire pas du tout.
Veuillez également lire ce qui suit à propos des avantages et (plus) des inconvénients concernant les efforts d'extraction de polices: