Como posso extrair tipos de letra incorporados de um PDF como ficheiros de tipos de letra válidos?

Estou ciente do utilitário {[[0]} que pode indicar quais fontes são usadas por um PDF, e se eles estão incorporados ou não.

Agora o problema: dado que eu tinha ficheiros PDF com tipos de letra incorporados -- como é que posso extrair esses tipos de letra de uma forma que sejam reutilizáveis como ficheiros de tipos de letra normais? Existem (de preferência livres) ferramentas que possam fazer isso? Também: isto pode ser feito programaticamente com, digamos, iText?

Author: Kurt Pfeifle, 2010-08-15

8 answers

Tem várias opções. Todos estes métodos funcionam no Linux, bem como no Windows ou Mac OS X. No entanto, esteja ciente de que a maioria dos PDFs não incluem totalmente, o fontface completo quando eles têm um tipo de letra incorporado. Na sua maioria, incluem apenas o subconjunto dos glifos utilizados no documento.

Usando pdftops

Um dos métodos mais frequentemente utilizados para o fazer nos sistemas nix consiste nos seguintes passos:

  1. converter o PDF para PostScript, para exemplo ao usar o XPDF pdftops (no programa auxiliar do Windows: pdftops.exe.
  2. agora os tipos de letra serão incorporados no formato .pfa (PostScript) + você poderá extraí-los com um editor de texto.
  3. poderá ter de converter o .pfa (ASCII) para um ficheiro .pfb (binário) usando o t1utils e pfa2pfb.
  4. em PDFs nunca existem .pfm ou .afm ficheiros (ficheiros métricos de tipo de letra) incorporados (porque o visualizador de PDF tem conhecimento interno sobre estes). Sem estes, os ficheiros de tipos de letra são dificilmente utilizáveis de uma forma visualmente agradável.

Usando fontforge

Outro método é usar o editor de tipos de Letra Livre FontForge:

  1. Use a janela "abrir o tipo de letra" usada ao abrir os ficheiros.
  2. depois seleccione "extrair do PDF" na secção de filtragem da janela.
  3. Seleccione o ficheiro PDF com o tipo de letra a extrair.
  4. a "escolha um tipo de letra" abre a janela -- seleccione aqui qual o tipo de letra abrir.

Verifique o manual do FontForge. Você pode precisar seguir alguns passos específicos que não são necessariamente simples, a fim de salvar os dados extraídos da fonte como um arquivo que é reutilizável.


Usando mupdf

Próximo., MuPDF. Esta aplicação vem com um utilitário chamado pdfextract (no Windows: pdfextract.exe) que pode extrair fontes e imagens de PDFs. (No caso de você não saber sobre MuPDF, que ainda é relativamente desconhecido e novo: "MuPDF é um visualizador de PDF leve livre e toolkit escrito em portable C." , escrito por Artifex Software developers, a mesma empresa que nos deu Ghostscript.)
(Update: as versões mais recentes do MuPDF moveram a funcionalidade anterior de 'pdfextract' para o comando 'mutool extract' . Transfere-o para aqui: mupdf.com/downloads)

Nota: pdfextract.exe é um programa de linha de comandos. Para usá - lo, faça o :

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

Este comando irá descarregar todos os ficheiros extraíveis do ficheiro pdf referenciado na pasta actual. Geralmente você vai ver uma variedade de arquivos: imagens, bem como fontes. Estes incluem PNG, TTF, CFF, CID, etc. Os nomes das imagens serão como img-0412.png se o número do objeto PDF da imagem fosse 412. Os nomes das fontes serão como FGETYK+LinLibertineI-0966.ttf , se o número do objeto do font PDF fosse 966.

CFF (Tipo de letra compacto Os arquivos Format são um formato reconhecido que pode ser convertido para outros formatos através de uma variedade de conversores para uso em diferentes sistemas operacionais.

De Novo: esteja ciente de que a maioria destes ficheiros de tipos de letra pode ter apenas um subconjunto de caracteres e pode não representar a fonte completa.

Atualização: (Jul 2013) versões recentes de mupdf viram uma remodelação interna e renomeação de seus binários, não apenas uma vez, mas várias vezes. O utilitário principal usado para ser um binário tipo canivete chamado mubusy (nome inspirado em busybox?), que mais recentemente foi renomeada para mutool. Estes suportam os sub-comandos info, clean, extract, poster e show Infelizmente, a documentação oficial para essas ferramentas não está atualizada (ainda). Se você estiver em um Mac usando 'MacPorts': então o utilitário foi renomeado para evitar conflitos de nomes com outros utilitários usando nomes idênticos, e você pode precisar usar mupdfextract.

Para alcançar o equivalente (aproximadamente) resultados com mutool como a sua ferramenta anterior pdfextract, apenas executar mubusy extract ....*

Para extrair fontes e imagens, poderá ter de executar uma das seguintes linhas de comando:

c:\>  mutool.exe extract filename.pdf      # (on Windows)
$>    mutool     extract filename.pdf      # (on Linux, Unix, Mac OS X)

Downloads estão aqui: mupdf.com/downloads


Usando gs (Ghostscript)

Então ... , Ghostscript também pode extrair fontes diretamente de PDFs. No entanto, precisa da ajuda de um programa de utilidade especial chamado extractFonts.ps, escrito na linguagem PostScript, que está disponível no Ghostscript source code repository .

Agora use-o, você precisa executar ambos, este arquivo extractFonts.ps e seu arquivo PDF. Ghostscript irá então usar as instruções do programa PostScript para extrair as fontes do PDF. Ele se parece com isso no Windows (sim, Ghostscript entende o 'forward slash', /, como um separador de caminho também no Windows!):

gswin32c.exe                  ^
  -q -dNODISPLAY              ^
   c:/path/to/extractFonts.ps ^
  -c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"

Ou no Linux, Unix ou Mac OS X:

gs                          \
  -q -dNODISPLAY            \
   /path/to/extractFonts.ps \
  -c "(/path/to/your/PDFFile.pdf) extractFonts quit"
Eu testei. o método Ghostscript há alguns anos. Na época extraiu *.ttf (TrueType) muito bem. Não sei se outros tipos de letra também serão extraídos, e se assim for, de uma forma reutilizável. Não sei se o utilitário bloqueia a extracção de fontes marcadas como protegidas.

Usando pdf-parser.py

Finalmente, Didier Stevens.' pdf-parser.py: este provavelmente não é tão fácil de usar, porque você precisa ter algum know-how sobre PDF interno estrutura. pdf-parser.py é um script em Python que pode fazer muitas outras coisas também. Ele também pode descomprimir e extrair fluxos arbitrários de objetos, e, portanto, também pode extrair arquivos de fonte embutidos. Mas precisas de saber o que procurar. Vamos ver com um exemplo. Tenho um ficheiro chamado big.pdf . Como primeiro passo, eu uso o -s parâmetro para procurar o PDF para qualquer ocorrência da palavra-chave FontFile (pdf-parser.py não requer um sensíveis a maiúsculas e minúsculas procurar):
pdf-parser.py -s fontfile big.pdf
No meu caso, para o meu big1.pdf , eu tenho 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
  >>   

Diz-me que existem duas instâncias de FontFile2 dentro do PDF, e estas estão nos objectos PDF n. º 15 e N. º 16, respectivamente. O objecto n. o 15 contém o /FontFile2 para o tipo de letra /ArialMT , o objecto n. o 16 contém o /FontFile2 para o tipo de letra /Arial-BoldMT.

Para mostrar isto mais claramente:

pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
  /FontFile2 15 0 R
  /FontFile2 16 0 R

Uma espreitadela rápida na especificação PDF revela a palavra-chave /FontFile2 refere-se a uma 'stream que contém um tipo de letra TrueType programa' (/FontFile estaria relacionada com um 'stream que contém um Tipo de letra type 1 programa' e /FontFile3 estaria relacionada com um 'stream contendo uma fonte de programa cujo formato é especificado pelo Subtipo de entrada no fluxo de dicionário' {daí a ser um Type1C ou CIDFontType0C subtipo}.)

Para olhar especificamente para o objecto PDF no. 15 (que contém a fonte /ArialMT), pode-se usar a -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 saída nos diz que este objeto contém uma sequência (o que não vai diretamente display) que tem um comprimento de 1.581.435 Bytes e é codificado ( == "comprimido") com ASCIIHexEncode e precisa ser decodificado ( ==de "de-comprimido" ou "filtrada") com a ajuda do padrão /ASCIIHexDecode filtro.

Para despejar qualquer fluxo de um objecto, pdf-parser.py pode ser chamado com o -d dumpname parâmetro. Vamos a isso.

pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
A nossa extracção o dump de dados estará no ficheiro chamado dados descartados.ext . Vamos ver quão grande é.
ls -l dumped-data.ext
  -rw-r--r--  1 kurtpfeifle  staff  1581435 Apr 11 00:29 dumped-data.ext
Olha, são 1.581.435 Bytes. Vimos esta figura na saída do comando anterior. Abrir este ficheiro com um editor de texto confirma que o seu conteúdo é de dados codificados ASCII hex.

Abrir o ficheiro com uma ferramenta de leitura de tipos de letra como otfinfo (esta é uma parte do lcdf-typetools dimensão da) vai levar a alguma decepção no início:

otfinfo -i dumped-data.ext
  otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
Ok, isto é porque nós ... não (ainda) deixou pdf-parser.py fazer uso da sua magia completa: despejar um fluxo filtrado e descodificado. Para isso, temos de acrescentar o -f parâmetro:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
Qual é o tamanho deste novo ficheiro?
ls -l dumped-data-decoded.ext
  -rw-r--r--  1 kurtpfeifle  staff  778552 Apr 11 00:39 dumped-data-decoded.ext

Oh, veja: esse número exato também já estava armazenado no dicionário objeto PDF no. 15 como o valor da chave /Length1...

O que acha que é?
file dumped-data-decoded.ext
  dumped-data-decoded.ext: TrueType font data
O que é que nos diz sobre isso?
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
Então Bingo!, temos um vencedor: de facto, extrai um ficheiro de tipo de letra válido para nós. Dado o tamanho deste ficheiro (778.552 Bytes), parece que este tipo de letra foi incorporado até completamente no PDF... Podíamos mudar o nome para arial-regular.ttf e instalá-lo como tal e aproveitá-lo alegremente.

Advertências:

  • em qualquer caso, você precisa seguir a licença que se aplica à fonte. Algumas licenças de tipos de letra não permitem o uso e/ou distribuição gratuitos. Piratear fontes é como piratear qualquer software ou outro material protegido por direitos autorais.

  • a maioria dos PDFs que estão em estado selvagem lá fora não incorporam a fonte completa de qualquer maneira, mas apenas subconjuntos. Extrair um subconjunto de uma fonte só é útil em um escopo muito limitado, se de todo.

Por favor, leia também o seguinte sobre prós e (mais) contras sobre os esforços de extração de fontes:
 417
Author: Kurt Pfeifle, 2020-06-20 09:12:55
 27
Author: igo, 2014-05-22 11:39:10

Eventualmente encontrou o pacote do instalador do FontForge Windows e abriu o PDF através do programa instalado. Foi um prazer, tão feliz.

 6
Author: Dapizz, 2012-03-21 01:32:17

Http://www.verypdf.com/app/pdf-font-extractor/pdf-font-extracting-tool.html Uma maneira mais fácil de extrair fontes (Windows).

 5
Author: l00k, 2014-02-17 10:27:40
Apesar desta pergunta ter 10 anos de idade, ainda é válida e, à medida que a tecnologia muda, também é uma resposta válida.

Ao procurar as respostas actuais, nenhuma delas reparou no WOFF (Web Open Font Format) ( W3C) (Wikipedia ) que pode ser usado para recriar os caracteres individuais (glifos) e exibi-los em uma página web com precisão.

Usando a página web online gratuita pela IDR Solutions, PDF para HTML5 ( link ), converter um PDF para um arquivo zip. Na o zip resultante será uma pasta de tipos de letra dos tipos de ficheiros woff. Os navegadores de Internet actuais suportam ficheiros woff se não estiver ciente. ([[12]}referência Estes podem ser examinados no site online FontDrop! (ligação .

Os ficheiros WOFF podem ser convertidos para/de OTF ou TTF em WOFFer - WOFF font converter

Também o arquivo zip de PDF para HTML5 irá conter um arquivo HTML para cada página do PDF que pode ser aberto em um navegador da Internet e é um dos melhores e mais traduções PDF precisas que eu encontrei ou vi.

Enquanto eu estou apenas aprendendo a usar arquivos WOFF, isso vale a pena passar adiante. Desfrutar.

PS, eu provavelmente vou atualizar com mais informações à medida que eu aprender mais sobre o uso de tipos de arquivos woff, mas como isso é Creative commons, sinta-se livre para editar esta resposta se você tem algo de valor para passar adiante.

 4
Author: Guy Coder, 2020-01-01 21:33:31

Uma das melhores ferramentas online disponíveis atualmente para extrair fontes pdf é http://www.pdfconvertonline.com/extract-pdf-fonts-online.html

 3
Author: Riyafa Abdul Hameed, 2016-05-12 14:49:46

PDF2SVG a versão 6.0 de PDFTron faz um trabalho razoável. Produz tipos de letra OpenType (.otf) por omissão. Use --preserve_fontnames para preservar " o esquema de nomes do tipo de letra/família de tipos de letra, tal como foi obtido no ficheiro de código."

PDF2SVG é um produto comercial, mas você pode baixar um executável demo gratuito (que inclui marcas d'água na saída SVG, mas não restringe o uso de outra forma). Pode haver outros produtos PDFTron que também extraem fontes, mas só recentemente descobri Eu próprio.

 2
Author: Sean Leather, 2014-01-08 08:31:48

Esta é uma sequência para a secção font-forge da resposta de @Kurt Pfeifle, específica do Red Hat (e possivelmente de outras distros Linux).

  1. Depois de abrir o PDF e seleccionar o tipo de letra que deseja, irá querer seleccionar "ficheiro -> gerar tipos de letra..." Opcao.
  2. Se houver erros no ficheiro, pode optar por ignorá-los ou gravar o ficheiro e editá-los. A maioria dos erros podem ser corrigidos automaticamente se você clicar em "Corrigir" vezes suficientes.
  3. Carregue Em " Elemento -> Tipo De Letra Informacao...", e "Fontname"," nome de família "e" nome para humanos " são todos definidos para valores que você gosta. Se não, modifique-os e salve o arquivo em algum lugar. Estes nomes irão determinar como o seu tipo de letra aparece no sistema.
  4. Seleccione o nome do seu ficheiro e carregue em "Gravar..."
Uma vez que tenha o seu ficheiro TTF, pode instalá-lo no seu sistema até
  1. Copiar para a pasta /usr/share/fonts (como root)
  2. em execução fc-cache -f /usr/share/fonts/ (como raiz)
 0
Author: Mad Physicist, 2019-03-20 16:47:17