Hai diverse opzioni. Tutti questi metodi funzionano su Linux, nonché su Windows o Mac OS X. Tuttavia, tenere presente che la maggior parte dei PDF non include un font completo e completo quando hanno un font incorporato. Principalmente includono solo il sottoinsieme di glifi utilizzati nel documento.
utilizzando pdftops
Uno dei metodi più utilizzati per eseguire questa operazione sui sistemi * nix è costituito dai seguenti passaggi:
- Converti il PDF in PostScript, ad esempio utilizzando XPDF
pdftops
(su Windows:pdftops.exe
programma di supporto.
- Ora i caratteri saranno incorporati nel
.pfa
formato (PostScript) + puoi estrarli usando un editor di testo .
- Potrebbe essere necessario convertire
.pfa
(ASCII) in un .pfb
file (binario) utilizzando t1utils
epfa2pfb
.
- Nei PDF non ci sono mai
.pfm
o .afm
file (file metrici di font) incorporati (perché il visualizzatore PDF ne ha una conoscenza interna). Senza questi, i file dei caratteri sono difficilmente utilizzabili in modo visivamente piacevole.
utilizzando fontforge
Un altro metodo consiste nell'utilizzare l'editor di font gratuito FontForge :
- Utilizzare la finestra di dialogo "Apri carattere" utilizzata per aprire i file.
- Quindi seleziona "Estrai da PDF" nella sezione filtro della finestra di dialogo.
- Seleziona il file PDF con il carattere da estrarre.
- Viene visualizzata la finestra di dialogo "Scegli un carattere" : seleziona qui il tipo di carattere da aprire.
Controlla il manuale di FontForge. Potrebbe essere necessario seguire alcuni passaggi specifici che non sono necessariamente semplici per salvare i dati dei caratteri estratti come file riutilizzabili.
utilizzando mupdf
Successivamente, MuPDF . Questa applicazione viene fornita con un'utilità chiamata pdfextract
(su Windows pdfextract.exe
:) in grado di estrarre caratteri e immagini dai PDF. (Nel caso in cui non si conosca MuPDF, che è ancora relativamente sconosciuto e nuovo: "MuPDF è un visualizzatore di PDF leggero gratuito e toolkit scritto in C. portatile" , scritto dagli sviluppatori Artifex Software, la stessa società che ci ha fornito Ghostscript. )
( Aggiornamento: le versioni più recenti di MuPDF hanno spostato la precedente funzionalità di "pdfextract" al comando "estratto di mutool" . Scaricalo qui: mupdf.com/downloads )
Nota: pdfextract.exe
è un programma da riga di comando. Per usarlo, procedi come segue:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
Questo comando scaricherà tutti i file estraibili dal file pdf a cui si fa riferimento nella directory corrente. Generalmente vedrai una varietà di file: immagini e caratteri. Questi includono PNG, TTF, CFF, CID, ecc. I nomi delle immagini saranno come img-0412.png se il numero di oggetto PDF dell'immagine era 412. I nomi dei caratteri saranno come FGETYK + LinLibertineI-0966.ttf , se il carattere è Il numero oggetto PDF era 966.
I file CFF ( Compact Font Format ) sono un formato riconosciuto che può essere convertito in altri formati tramite una varietà di convertitori per l'uso su diversi sistemi operativi.
Ancora: essere consapevoli del fatto che la maggior parte di questi file di caratteri può contenere solo un sottoinsieme di caratteri e potrebbe non rappresentare il carattere completo.
Aggiornamento: (luglio 2013) Le versioni recenti di mupdf
hanno visto un rimpasto interno e la ridenominazione dei loro binari, non solo una volta, ma più volte. L'utilità principale era un binario simile a un "coltellino svizzero" chiamato mubusy
(nome ispirato a busybox?), Che più recentemente è stato rinominato mutool
. Questi supportano i comandi secondari info
, clean
, extract
, poster
e show
. Sfortunatamente, la documentazione ufficiale per questi strumenti non è aggiornata (ancora). Se sei su un Mac con "MacPorts": l'utilità è stata rinominata per evitare conflitti di nomi con altre utilità che utilizzano nomi identici e potrebbe essere necessario utilizzarla mupdfextract
.
Per ottenere risultati (approssimativamente) equivalenti a mutool
quelli del suo strumento precedente pdfextract
, basta eseguire mubusy extract ...
. *
Quindi, per estrarre caratteri e immagini, potrebbe essere necessario eseguire una delle seguenti linee di comando:
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
I download sono qui: mupdf.com/downloads
Utilizzo di gs
(Ghostscript)
Quindi, Ghostscript può anche estrarre i caratteri direttamente dai PDF. Tuttavia, ha bisogno dell'aiuto di uno speciale programma di utilità denominato extractFonts.ps
, scritto in linguaggio PostScript, disponibile da repository del codice sorgente di Ghostscript .
Ora usalo, devi eseguire sia questo file extractFonts.ps
che il tuo file PDF. Ghostscript utilizzerà quindi le istruzioni del programma PostScript per estrarre i caratteri dal PDF. Sembra così su Windows (sì, Ghostscript capisce la "barra", /, come separatore di percorso anche su Windows!):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
o su Linux, Unix o Mac OS X:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
Ho provato il metodo Ghostscript alcuni anni fa. Al momento ha estratto * .ttf (TrueType) bene. Non so se verranno estratti anche altri tipi di carattere e, in tal caso, in modo riutilizzabile. Non so se l'utilità blocca l'estrazione di caratteri contrassegnati come protetti.
utilizzando pdf-parser.py
Infine, il pdf-parser.py di Didier Stevens : questo probabilmente non è così facile da usare, perché è necessario avere un po 'di conoscenza delle strutture PDF interne. pdf-parser.py
è uno script Python che può fare anche molte altre cose. Può anche decomprimere ed estrarre flussi arbitrari dagli oggetti e quindi anche estrarre file di caratteri incorporati.
Ma devi sapere cosa cercare. Vediamolo con un esempio. Ho un file chiamato big.pdf . Come primo passo uso il -s
parametro per cercare nel PDF qualsiasi occorrenza della parola chiave FontFile ( pdf-parser.py
non richiede una ricerca con distinzione tra maiuscole e minuscole):
pdf-parser.py -s fontfile big.pdf
Nel mio caso, per il mio big1.pdf , ottengo questo risultato:
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
>>
Mi dice che ci sono due istanze FontFile2
all'interno del PDF, e queste sono negli oggetti PDF no. 15 e n. 16, rispettivamente. Oggetto n. 15 contiene il /FontFile2
carattere / ArialMT , l'oggetto n. 16 contiene il /FontFile2
carattere for / Arial-BoldMT .
Per mostrarlo più chiaramente:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
Una rapida occhiata alla specifica PDF rivela che la parola chiave si /FontFile2
riferisce a uno "stream contenente un programma di font TrueType" ( /FontFile
si riferisce a uno "stream contenente un programma di font di tipo 1" e /FontFile3
si riferisce a uno "stream contenente un programma di font il cui formato è specificato dalla voce Sottotipo nel dizionario di flusso " {quindi essere un sottotipo Type1C o CIDFontType0C }.)
Per esaminare specificamente l'oggetto PDF n. 15 (che contiene il carattere / ArialMT ), si può usare il -o 15
parametro:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
Questo pdf-parser.py
output ci dice che questo oggetto contiene un flusso (che non visualizzerà direttamente) che ha una lunghezza di 1.581.435 byte ed è codificato (== "compresso") con ASCIIHexEncode e deve essere decodificato (== "de- compresso "o" filtrato ") con l'aiuto del /ASCIIHexDecode
filtro standard .
Per scaricare qualsiasi flusso da un oggetto, è pdf-parser.py
possibile chiamare con il -d dumpname
parametro Facciamolo:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Il nostro dump di dati estratto sarà nel file denominato dumped-data.ext . Vediamo quanto è grande:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
Oh guarda, è 1.581.435 byte. Abbiamo visto questa figura nell'output del comando precedente. L'apertura di questo file con un editor di testo conferma che il suo contenuto è costituito da dati con codifica esadecimale ASCII.
L'apertura del file con uno strumento di lettura dei caratteri come otfinfo
(questa è una parte del lcdf-typetools
pacchetto ) all'inizio porterà un po 'di delusione:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, questo perché non abbiamo (ancora) pdf-parser.py
sfruttato tutta la sua magia: scaricare un flusso filtrato e decodificato. Per questo dobbiamo aggiungere il -f
parametro:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
Qual è la dimensione di questo nuovo file?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
Oh, guarda: quel numero esatto era già stato memorizzato nell'oggetto PDF no. 15 dizionario come valore per la chiave /Length1
...
Cosa file
pensa che sia?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
Cosa otfinfo
ci dice a riguardo?
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
Quindi Bingo !, abbiamo un vincitore: abbiamo pdf-parser.py
davvero estratto un file di font valido per noi. Date le dimensioni di questo file (778.552 byte), sembra che questo carattere sia stato incorporato anche completamente nel PDF ...
Potremmo rinominarlo in arial-regular.ttf e installarlo come tale e utilizzarlo felicemente.
Avvertenze:
In ogni caso è necessario seguire la licenza che si applica al carattere. Alcune licenze per font non consentono l'uso e / o la distribuzione gratuiti. La pirateria dei caratteri è come la pirateria di qualsiasi software o altro materiale protetto da copyright.
La maggior parte dei PDF in circolazione non incorpora comunque il carattere completo, ma solo i sottoinsiemi. L'estrazione di un sottoinsieme di un carattere è utile solo in un ambito molto limitato, se non del tutto.
Si prega di leggere anche quanto segue su Pro e (di più) contro gli sforzi di estrazione dei caratteri: