Saltar al contenido

¿Cómo puedo extraer fuentes incrustadas de un PDF como archivos de fuentes válidos?

Luego de tanto luchar hemos dado con la solución de esta pregunta que agunos usuarios de este sitio han tenido. Si tienes alguna información que aportar puedes compartir tu comentario.

Solución:

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 cuando tienen una fuente incrustada. En su mayoría incluyen solo los subconjunto de glifos utilizados en el documento.


Utilizando pdftops

Uno de los métodos más utilizados para hacer esto en sistemas * nix consta de los siguientes pasos:

  1. Convierta el PDF a PostScript, por ejemplo, utilizando XPDF pdftops (en Windows: pdftops.exe programa de ayuda.
  2. Ahora las fuentes se incrustarán en .pfa (PostScript) + puede extraerlos usando un editor de texto.
  3. Es posible que deba convertir el .pfa (ASCII) a un .pfb archivo (binario) usando el t1utils y pfa2pfb.
  4. En los PDF nunca hay .pfm o .afm archivos (archivos de métricas de fuentes) incrustados (porque el visor de PDF tiene conocimiento interno sobre estos). Sin estos, los archivos de fuentes apenas se pueden utilizar de una manera visualmente agradable.

Utilizando fontforge

Otro método es utilizar el editor de fuentes gratuito FontForge:

  1. Utilizar el “Abrir fuente” cuadro de diálogo utilizado al abrir archivos.
  2. Luego seleccione “Extracto de PDF” en la sección de filtro del diálogo.
  3. Seleccione el archivo PDF con la fuente a extraer.
  4. A “Elige una fuente” Se abre el cuadro de diálogo: seleccione aquí qué fuente desea abrir.

Consulta 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 es reutilizable.


Utilizando mupdf

Próximo, 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 empresa que nos dio Ghostscript).
(Actualizar: Las versiones más recientes de MuPDF han trasladado la funcionalidad anterior de ‘pdfextract’ al comando ‘extracto de mutool’. Descarguelo aqui: mupdf.com/downloads)

Nota: pdfextract.exe es un programa de línea de comandos. Para usarlo, haga lo siguiente:

c:>  pdfextract.exe  c:pathtofilename.pdf         # (on Windows)
$>    pdfextract  /path/tofilename.pdf                # (on Linux, Unix, Mac OS X)

Este comando volcará todos los archivos extraíbles del archivo pdf al que se hace referencia en el directorio actual. Generalmente 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 el número de objeto PDF de la fuente era 966.

CFF (Formato de fuente compacto) son un formato reconocido que se puede convertir a otros formatos a través de una variedad de convertidores para su uso 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 puede que no represente el tipo de letra completo.

Actualizar: (Julio de 2013) Versiones recientes de mupdf han visto una reorganización interna y un cambio de nombre de sus binarios, no solo una, sino varias veces. La principal utilidad solía ser un binario similar a un ‘cuchillo suizo’ llamado mubusy (¿nombre inspirado en busybox?), que más recientemente pasó a llamarse mutool. Estos apoyan los subcomandos info, clean, extract, poster y show. Desafortunadamente, la documentación oficial de estas herramientas no está actualizada (todavía). Si está en una Mac que usa ‘MacPorts’: entonces se cambió el nombre de la utilidad para evitar conflictos de nombres con otras utilidades que usan nombres idénticos, y es posible que deba usar mupdfextract.

Para lograr los resultados (aproximadamente) equivalentes con mutool como su herramienta anterior pdfextract lo hizo, solo corra 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


Utilizando gs (Guión fantasma)

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 úsalo, necesitas ejecutar ambos, este archivo extractFonts.ps y su archivo PDF. Luego, Ghostscript utilizará 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, extraía * .ttf (TrueType) muy bien. No sé si también se extraerán otros tipos de fuentes y, de ser así, de una manera reutilizable. No sé si la utilidad bloquea la extracción de fuentes que están marcadas como protegidas.


Utilizando pdf-parser.py

Finalmente, Didier Stevens pdf-parser.py: 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. Veámoslo con un ejemplo. Tengo un archivo llamado big.pdf. Como primer paso utilizo 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 de FontFile2 dentro del PDF, y estos están en los objetos PDF no. 15 y no. 16, respectivamente. Objeto no. 15 sostiene el /FontFile2 para fuente / ArialMT, objeto no. 16 sostiene 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 la palabra clave /FontFile2 se relaciona con un ‘flujo que contiene un programa de fuentes TrueType’ (/FontFile se relacionaría con un ‘flujo que contiene un programa de fuentes Tipo 1’ y /FontFile3 se relacionaría con un ‘flujo que contiene un programa de fuentes cuyo formato está especificado por la entrada Subtipo en el diccionario de flujo’ de ahí que sea un Tipo1C o un CIDFontType0C subtipo.)

Para mirar específicamente el objeto PDF no. 15 (que contiene la fuente / ArialMT), se puede utilizar 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 La salida nos dice que este objeto contiene un flujo (que no mostrará directamente) que tiene una longitud de 1.581.435 Bytes y está codificado (== “comprimido”) con ASCIIHexEncode y necesita ser decodificado (== “descomprimido “o” filtrado “) con la ayuda del estándar /ASCIIHexDecode filtrar.

Para volcar cualquier flujo 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 dump-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, son 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 ASCII hexadecimal.

Abrir el archivo con una herramienta de lectura de fuentes como otfinfo (esto es parte del lcdf-typetools paquete) dará lugar a alguna decepción al principio:

otfinfo -i dumped-data.ext
  otfinfo: dumped-data.ext: not an OpenType font (bad magic number)

De acuerdo, esto se debe a que (todavía) no permitimos pdf-parser.py haga uso de 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 estaba almacenado en el objeto PDF no. 15 diccionario como valor para key /Length1

Que hace file ¿Crees que es?

file dumped-data-decoded.ext
  dumped-data-decoded.ext: TrueType font data

Que hace otfinfo cuéntanos sobre eso?

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: pdf-parser.py de hecho, extrajo 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 instálelo como tal y felizmente utilícelo.


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 protegido por derechos de autor.

  • La mayoría de los PDF que están en libertad no incorporan 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 es.

Lea también lo siguiente sobre los pros y (más) contras con respecto a los esfuerzos de extracción de fuentes:

  • http://typophile.com/node/34377 – no disponible nunca más, pero se puede ver en Wayback Machine en https://web.archive.org/web/20110717120241/typophile.com/node/34377

Utilice el servicio en línea http://www.extractpdf.com. No es necesario instalar nada.

Finalmente encontró el paquete de instalación de FontForge para Windows y abrió el PDF a través del programa instalado. Funcionó de maravilla, muy feliz.

Reseñas y puntuaciones

Eres capaz de animar nuestro estudio poniendo un comentario o dejando una valoración te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *