Je connais l'utilitaire pdftk.exe
qui peut indiquer les polices utilisées par un fichier PDF, qu'elles soient incorporées ou non.
Maintenant, le problème: étant donné que j’avais PDF fichiers avec des polices intégrées, comment puis-je extraire ces polices de manière à ce qu’elles puissent être réutilisées comme fichiers de polices ordinaires? Existe-t-il des outils (de préférence gratuits) qui peuvent le faire? Aussi: cela peut-il être fait par programme avec, par exemple, iText?
Vous avez plusieurs options. Toutes ces méthodes fonctionnent sous Linux, ainsi que sous Windows ou Mac OS X. Sachez toutefois que la plupart des fichiers PDF n'incluent pas une police complète, une police de caractères complète lorsqu'ils possèdent une police incorporée. Généralement, ils comprennent uniquement le sous-ensemble de glyphes utilisés dans le document.
pdftops
L'une des méthodes les plus fréquemment utilisées pour ce faire sur les systèmes * nix comprend les étapes suivantes:
pdftops
(sous Windows: _pdftops.exe
_ programme d’aide..pfa
_ (PostScript) + vous pouvez les extraire à l'aide d'un éditeur de texte ..pfa
_ (ASCII) en un fichier _.pfb
_ (binaire) à l'aide des fichiers _t1utils
_ et _pfa2pfb
_..pfm
_ ou _.afm
_ (fichiers de métrique de police) incorporés (car le visualiseur PDF en a une connaissance interne). Sans ceux-ci, les fichiers de polices sont difficilement exploitables visuellement.fontforge
Une autre méthode consiste à utiliser l'éditeur de polices gratuites FontForge :
Consultez le manuel de FontForge. Vous devrez peut-être suivre certaines étapes spécifiques, qui ne sont pas nécessairement simples, afin de sauvegarder les données de police extraites sous forme de fichier réutilisable.
mupdf
Ensuite, MuPDF . Cette application est fournie avec un utilitaire appelé pdfextract
(sous Windows: _pdfextract.exe
_), qui permet d’extraire des polices et des images à partir de fichiers PDF. (Si vous ne connaissez pas MuPDF, qui est encore relativement inconnu et nouveau: "" MuPDF est un visualiseur léger et léger [PDF et une boîte à outils écrits en C portable. ", écrit par les développeurs d'Artifex Software, la même société qui nous a donné Ghostscript.)
( Mise à jour: Les versions les plus récentes de MuPDF ont déplacé l'ancienne fonctionnalité de 'pdfextract' vers la commande 'extrait mutool' . Téléchargez-le 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 en cours. Généralement, vous verrez une variété de fichiers: images ainsi que des polices. Il s’agit des fichiers 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 de la police PDF était 966.
Les fichiers CFF ( Compact Font Format ) sont un format reconnu qui peut être converti en d'autres formats via divers convertisseurs pour pouvoir être utilisé sur différents systèmes d'exploitation.
Encore une fois: sachez que la plupart de ces fichiers de polices ne peuvent contenir qu'un sous-ensemble et ne représentent pas nécessairement la police de caractères complète.
Mise à jour: (juil. 2013) Les versions récentes de mupdf
ont connu un remaniement interne et un changement de nom de leurs fichiers binaires, pas une fois, mais plusieurs fois. L’utilité principale était jadis un binaire du type "couteau suisse" appelé mubusy
(nom inspiré par busybox?), Rebaptisé plus récemment en mutool
. Ceux-ci supportent les sous-commandes info
, clean
, extract
, poster
et show
. Malheureusement, la documentation officielle de ces outils n'est pas (pour le moment) à jour. Si vous utilisez un Mac utilisant 'MacPorts': l'utilitaire a été renommé afin d'éviter les conflits de noms avec d'autres utilitaires utilisant des noms identiques. Il est possible que vous deviez utiliser mupdfextract
.
Pour obtenir les résultats (à peu près) équivalents avec mutool
comme l'ancien outil pdfextract
, exécutez simplement _mubusy extract ...
_. *.
Donc, 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
gs
(Ghostscript)Ensuite, Ghostscript peut également extraire des polices directement à partir de fichiers PDF. Cependant, il a besoin de l'aide d'un utilitaire spécial nommé extractFonts.ps
, écrit en langage PostScript, qui est disponible depuis le référentiel de code source 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 fichier PDF. Cela ressemble à ceci sur Windows (oui, Ghostscript comprend la 'barre oblique', /, comme séparateur de chemin également sur 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. À ce moment-là, l'extraction de * .ttf (TrueType) était parfaite. Je ne sais pas si d'autres types de polices seront également extraits et, le cas échéant, de manière réutilisable. Je ne sais pas si l'utilitaire bloque l'extraction des polices marquées comme protégées.
pdf-parser.py
_Enfin, Didier Stevens ' pdf-parser.py : celui-ci n'est probablement pas aussi facile à utiliser, car vous devez avoir une certaine connaissance des structures internes PDF. _pdf-parser.py
_ est un script Python qui peut également faire beaucoup d'autres choses. Il peut également décompresser et extraire des flux arbitraires d'objets et, par conséquent, extraire également des fichiers de polices incorporés.
Mais vous devez savoir quoi chercher. Voyons cela avec un exemple. J'ai un fichier nommé big.pdf . Dans un premier temps, j'utilise le paramètre -s
pour rechercher dans le PDF toute occurrence du mot clé FontFile (_pdf-parser.py
_ ne nécessite pas de recherche respectant 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 _FontFile2
_ dans le PDF, et que celles-ci se trouvent dans PDF objets no. 15 et non. 16, respectivement. N ° d'objet 15 contient le _/FontFile2
_ pour la police /ArialMT , objet n °. 16 contient le _/FontFile2
_ pour la police /Arial-BoldMT .
Pour montrer cela plus clairement:
_pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
_
Un rapide aperçu de la spécification PDF révèle que le mot clé _/FontFile2
_ est associé à 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 Sous-type dans le dictionnaire de flux ' {étant donc un Type1C ou un CIDFontType0C sous-type}.)
Pour examiner spécifiquement le PDF objet no. 15 (qui contient la police /ArialMT ), on peut utiliser le paramètre -o 15
:
_pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
_
Cette sortie _pdf-parser.py
_ nous indique que cet objet contient un flux (qu’il ne verra pas directement) d’une longueur de 1.581.435 octets et est codé (== "compressé") avec ASCIIHexEncode et doit être décodé ( == "décompressé" ou "filtré") à l'aide du filtre standard _/ASCIIHexDecode
_.
Pour vider n'importe quel flux d'un objet, _pdf-parser.py
_ peut être appelé avec le paramètre -d dumpname
. Faisons le:
_pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
_
Notre fichier de données extrait sera dans le fichier nommé dumped-data.ext . Voyons combien c'est grand:
_ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
_
Oh regarde, c’est 1.581.435 Octets. Nous avons vu cette figure dans la sortie de la commande précédente. L'ouverture de ce fichier avec un éditeur de texte confirme que son contenu est un fichier codé ASCII hex.
L’ouverture du fichier avec un outil de lecture de police tel que otfinfo
(il s’agit d’une partie du paquet _lcdf-typetools
_)) va conduire à 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 pleinement sa magie: vider un flux filtré et décodé. Pour cela, nous devons ajouter le paramètre -f
:
_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 le PDF objet no. 15 dictionnaire comme valeur pour la clé _/Length1
_...
Qu'est-ce que file
pense que c'est?
_file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
_
Qu'est-ce que otfinfo
nous en dit?
_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: _pdf-parser.py
_ a effectivement extrait un fichier de police valide pour nous. Étant donné la taille de ce fichier (778.552 octets), il semble que cette police ait été incorporée même complètement dans le fichier PDF ...
Nous pourrions le renommer en arial-regular.ttf , l'installer en tant que tel et l'utiliser avec joie.
Dans tous les cas, vous devez suivre la licence qui s'applique à la police. Certaines licences de polices n'autorisent pas l'utilisation et/ou la distribution gratuites. Pirater des polices, c'est comme pirater un logiciel ou autre matériel protégé par le droit d'auteur.
La plupart des PDF qui se trouvent dans la nature n'intègrent de toute façon pas la police complète, mais seulement des sous-ensembles. L'extraction d'un sous-ensemble d'une police n'est utile que dans une étendue très limitée, voire pas du tout.
Veuillez également lire ce qui suit sur les avantages et les inconvénients de l'extraction de polices:
Utiliser le service en ligne http://www.extractpdf.com . Pas besoin d'installer quoi que ce soit.
Finalement trouvé le paquet d'installation de Windows de FontForge et ouvert le PDF via le programme installé. Travaillé un régal, si heureux.
http://www.verypdf.com/app/pdf-font-extractor/pdf-font-extracting-tool.html Le moyen le plus simple d'IMO pour extraire des polices (Windows).
PDF2SVG version 6.0 de PDFTron fait un travail raisonnable. Il produit les polices OpenType (.otf
) par défaut. Utilisez --preserve_fontnames
pour conserver "le schéma de nommage police/famille de polices obtenu à partir du fichier source".
PDF2SVG est un produit commercial, mais vous pouvez télécharger un exécutable de démonstration gratuit (qui inclut des filigranes sur la sortie SVG mais ne restreint pas l’utilisation de cette dernière). Il se peut que d’autres produits PDFTron extraient également des polices, mais je n’ai découvert moi-même que récemment PDF2SVG.
Un des meilleurs outils en ligne actuellement disponibles pour extraire les polices pdf est http://www.pdfconvertonline.com/extract-pdf-fonts-online.html
Ceci fait suite à la section font-forge
de réponse de @ Kurt Pfeifle , spécifique à Red Hat (et éventuellement à d'autres distributions Linux).
Une fois que vous avez votre fichier TTF, vous pouvez l’installer sur votre système en
/usr/share/fonts
(en tant que root)fc-cache -f /usr/share/fonts/
(en tant que root)