Tienes varias opciones. Todos estos métodos funcionan tanto en Linux como en Windows o Mac OS X. Sin embargo, tenga en cuenta que la mayoría de los PDF no incluyen una fuente completa y completa cuando tienen una fuente incrustada. Principalmente incluyen solo el subconjunto de glifos utilizados en el documento.
Utilizando pdftops
Uno de los métodos más utilizados para hacer esto en los sistemas * nix consta de los siguientes pasos:
- Convierta el PDF a PostScript, por ejemplo, utilizando XPDF
pdftops
(en Windows: pdftops.exe
programa auxiliar.
- Ahora las fuentes se incrustarán en
.pfa
formato (PostScript) + puede extraerlas usando un editor de texto .
- Es posible que necesite convertir el
.pfa
(ASCII) a un .pfb
archivo (binario) con el t1utils
y pfa2pfb
.
- En archivos PDF nunca hay
.pfm
o .afm
archivos (archivos de fuentes métricas) embebidos (porque visor de PDF tener un conocimiento interno acerca de estos). Sin estos, los archivos de fuentes son apenas utilizables de una manera visualmente agradable.
Utilizando fontforge
Otro método es utilizar el editor de fuentes gratuito FontForge :
- Utilice el cuadro de diálogo "Abrir fuente" que se utiliza al abrir archivos.
- Luego seleccione "Extraer de PDF" en la sección de filtro del cuadro de diálogo.
- Seleccione el archivo PDF con la fuente que se extraerá.
- Se abre un cuadro de diálogo "Elija una fuente" : seleccione aquí qué fuente abrir.
Consulte el manual de FontForge. Es posible que deba seguir algunos pasos específicos que no son necesariamente sencillos para guardar los datos de fuente extraídos como un archivo que se puede reutilizar.
Utilizando mupdf
A continuación, MuPDF . Esta aplicación viene con una utilidad llamada pdfextract
(en Windows:) pdfextract.exe
que puede extraer fuentes e imágenes de archivos PDF. (En caso de que no conozca MuPDF, que aún es relativamente desconocido y nuevo: "MuPDF es un visor de PDF ligero y gratuito y un kit de herramientas escrito en C portátil" , escrito por los desarrolladores de Artifex Software, la misma compañía que nos dio Ghostscript. )
( Actualización: las versiones más recientes de MuPDF han trasladado la funcionalidad anterior de 'pdfextract' al comando 'mutool extract' . Descárguelo aquí: mupdf.com/downloads )
Nota: pdfextract.exe
es un programa de línea de comandos. Para usarlo, haga lo siguiente:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
Este comando volcará todos los archivos extraíbles del archivo pdf referenciado en el directorio actual. En general, verá una variedad de archivos: imágenes y fuentes. Estos incluyen PNG, TTF, CFF, CID, etc. Los nombres de las imágenes serán como img-0412.png si el número de objeto PDF de la imagen era 412. Los nombres de fuente serán como FGETYK + LinLibertineI-0966.ttf , si la fuente es El número de objeto PDF era 966.
Los archivos CFF ( Compact Font Format ) son un formato reconocido que se puede convertir a otros formatos a través de una variedad de convertidores para usar en diferentes sistemas operativos.
Nuevamente: tenga en cuenta que la mayoría de estos archivos de fuentes pueden tener solo un subconjunto de caracteres y pueden no representar el tipo de letra completo.
Actualización: (julio de 2013) Las versiones recientes de mupdf
han visto una reorganización interna y el cambio de nombre de sus archivos binarios, no solo una vez, sino varias veces. La utilidad principal solía ser un binario llamado 'cuchillo suizo' llamado mubusy
(nombre inspirado por busybox?), Al que más recientemente se le cambió el nombre mutool
. Estos apoyan los sub-comandos info
, clean
, extract
, poster
y show
. Desafortunadamente, la documentación oficial de estas herramientas no está actualizada (todavía). Si está en una Mac usando 'MacPorts': entonces la utilidad fue renombrada para evitar conflictos de nombres con otras utilidades que usan nombres idénticos, y es posible que deba usarla mupdfextract
.
Para lograr los resultados (aproximadamente) equivalentes con mutool
su herramienta anterior pdfextract
, simplemente ejecute mubusy extract ...
. *
Entonces, para extraer fuentes e imágenes, es posible que deba ejecutar una de las siguientes líneas de comando:
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
Las descargas están aquí: mupdf.com/downloads
Usando gs
(Ghostscript)
Luego, Ghostscript también puede extraer fuentes directamente de archivos PDF. Sin embargo, necesita la ayuda de un programa de utilidad especial llamado extractFonts.ps
, escrito en lenguaje PostScript, que está disponible en el repositorio de código fuente de Ghostscript .
Ahora úselo, necesita ejecutar tanto este archivo extractFonts.ps
como su archivo PDF. Ghostscript luego usará las instrucciones del programa PostScript para extraer las fuentes del PDF. Se ve así en Windows (sí, Ghostscript entiende la 'barra diagonal', /, como un separador de ruta también en Windows):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
o en Linux, Unix o Mac OS X:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
Probé el método Ghostscript hace unos años. En ese momento extrajo * .ttf (TrueType) muy bien. No sé si también se extraerán otros tipos de fuente, y si es así, de forma reutilizable. No sé si la utilidad bloquea la extracción de fuentes que están marcadas como protegidas.
Utilizando pdf-parser.py
Finalmente, el pdf-parser.py de Didier Stevens : este probablemente no sea tan fácil de usar, porque necesita tener algunos conocimientos sobre las estructuras internas de PDF. pdf-parser.py
es un script de Python que también puede hacer muchas otras cosas. También puede descomprimir y extraer secuencias arbitrarias de objetos y, por lo tanto, también puede extraer archivos de fuentes incrustados.
Pero necesitas saber qué buscar. Vamos a verlo con un ejemplo. Tengo un archivo llamado big.pdf . Como primer paso, uso el -s
parámetro para buscar en el PDF cualquier aparición de la palabra clave FontFile ( pdf-parser.py
no requiere una búsqueda sensible a mayúsculas y minúsculas):
pdf-parser.py -s fontfile big.pdf
En mi caso, para mi big1.pdf , obtengo este resultado:
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
>>
Me dice que hay dos instancias FontFile2
dentro del PDF, y estas están en los objetos PDF no. 15 y no. 16, respectivamente. Objeto no. 15 contiene el /FontFile2
para fuente / ArialMT , objeto no. 16 contiene el /FontFile2
para fuente / Arial-BoldMT .
Para mostrar esto más claramente:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
Un vistazo rápido a la especificación PDF revela que la palabra clave se /FontFile2
relaciona con un 'secuencia que contiene un programa de fuente TrueType' ( /FontFile
se relacionaría con una 'secuencia que contiene un programa de fuente Tipo 1' y /FontFile3
se relacionaría con una 'secuencia que contiene un programa de fuente cuyo formato es especificado por la entrada Subtipo en el diccionario de flujo ' {por lo tanto, es un subtipo Type1C o CIDFontType0C }.)
Para ver específicamente el objeto PDF no. 15 (que contiene la fuente / ArialMT ), se puede usar el -o 15
parámetro:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
Esta pdf-parser.py
salida nos dice que este objeto contiene una secuencia (que no se mostrará directamente) que tiene una longitud de 1.581.435 Bytes y está codificada (== "comprimida") con ASCIIHexEncode y necesita ser decodificada (== "de- comprimido "o" filtrado ") con la ayuda del /ASCIIHexDecode
filtro estándar .
Para volcar cualquier secuencia de un objeto, pdf-parser.py
se puede llamar con el -d dumpname
parámetro Vamos a hacerlo:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Nuestro volcado de datos extraídos estará en el archivo llamado dumped-data.ext . Veamos qué tan grande es:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
Oh mira, es 1.581.435 Bytes. Vimos esta figura en la salida del comando anterior. Abrir este archivo con un editor de texto confirma que su contenido son datos codificados en hexadecimal ASCII.
Abrir el archivo con una herramienta de lectura de fuentes como otfinfo
(esto es parte dellcdf-typetools
paquete ) provocará cierta decepción al principio:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, esto se debe a que (todavía) no permitimos pdf-parser.py
utilizar toda su magia: volcar una secuencia filtrada y decodificada. Para esto tenemos que agregar el-f
parámetro:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
¿Cuál es el tamaño de este nuevo archivo?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
Oh, mira: ese número exacto también ya estaba almacenado en el objeto PDF no. 15 diccionario como valor para la clave /Length1
...
¿Qué file
cree que es?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
¿Qué otfinfo
nos dice al respecto?
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
¡Entonces Bingo !, tenemos un ganador: de pdf-parser.py
hecho, extrajimos un archivo de fuente válido para nosotros. Dado el tamaño de este archivo (778.552 Bytes), parece que esta fuente se ha incrustado incluso completamente en el PDF ...
Podríamos cambiarle el nombre a arial-regular.ttf e instalarlo como tal y felizmente usarlo.
Advertencias:
En cualquier caso, debe seguir la licencia que se aplica a la fuente. Algunas licencias de fuentes no permiten el uso y / o distribución gratuitos. Piratear fuentes es como piratear cualquier software u otro material con derechos de autor.
La mayoría de los archivos PDF que están en la naturaleza no incrustan la fuente completa de todos modos, sino solo subconjuntos. Extraer un subconjunto de una fuente solo es útil en un ámbito muy limitado, si es que lo hace.
Lea también lo siguiente sobre Pros y (más) Contras con respecto a los esfuerzos de extracción de fuentes: