Você tem várias opções. Todos esses métodos funcionam no Linux e no Windows ou Mac OS X. No entanto, lembre-se de que a maioria dos PDFs não inclui uma fonte completa e completa quando ela está incorporada. Principalmente eles incluem apenas o subconjunto de glifos usado no documento.
Usando pdftops
Um dos métodos mais usados para fazer isso nos sistemas * nix consiste nas seguintes etapas:
- Converta o PDF em PostScript, por exemplo, usando XPDF
pdftops(no Windows:pdftops.exe programa auxiliar.
- Agora as fontes serão incorporadas no
.pfaformato (PostScript) + você pode extraí-las usando um editor de texto .
- Pode ser necessário converter o arquivo
.pfa(ASCII) em um .pfbarquivo (binário) usando os t1utilsbotõespfa2pfb .
- Nos PDFs, nunca há
.pfmou .afmarquivos (arquivos métricos de fonte) incorporados (porque o visualizador de PDF tem conhecimento interno sobre eles). Sem isso, os arquivos de fonte dificilmente podem ser usados de uma maneira visualmente agradável.
Usando fontforge
Outro método é usar o editor de fontes gratuito FontForge :
- Use o caixa de diálogo "Abrir fonte" usada ao abrir arquivos.
- Então selecione "Extrair do PDF" na seção de filtro da caixa de diálogo.
- Selecione o arquivo PDF com a fonte a ser extraída.
- Uma caixa de diálogo "Escolha uma fonte" é aberta - selecione aqui qual fonte abrir.
Verifique o manual do FontForge. Pode ser necessário seguir algumas etapas específicas que não são necessariamente diretas para salvar os dados da fonte extraídos como um arquivo reutilizável.
Usando mupdf
Em seguida, MuPDF . Este aplicativo vem com um utilitário chamado pdfextract(no Windows pdfextract.exe:) que pode extrair fontes e imagens de PDFs. (Caso você não conheça o MuPDF, que ainda é relativamente desconhecido e novo: "O MuPDF é um visualizador de PDF leve e um kit de ferramentas gratuitos, escritos em C. portátil" , escrito pelos desenvolvedores da Artifex Software, a mesma empresa que nos forneceu o Ghostscript. )
( Atualização: As versões mais recentes do MuPDF mudaram a funcionalidade anterior de 'pdfextract' para o comando 'mutool extract' . Faça o download aqui: mupdf.com/downloads )
Nota: pdfextract.exeé um programa de linha de comando. Para usá-lo, faça o seguinte:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
Este comando irá despejar todos os arquivos extraíveis do arquivo pdf referenciado no diretório atual. Geralmente você verá uma variedade de arquivos: imagens e fontes. Eles incluem PNG, TTF, CFF, CID etc. Os nomes das imagens serão img-0412.png se o número de objeto PDF da imagem for 412. Os nomes das fontes serão FGETYK + LinLibertineI-0966.ttf , se os O número do objeto PDF era 966.
Os arquivos CFF ( Compact Font 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.
Novamente: lembre-se de que a maioria desses arquivos de fonte pode ter apenas um subconjunto de caracteres e não representar o tipo de letra completo.
Atualização: (jul 2013) Versões recentes de mupdfviram uma remodelação interna e renomeação de seus binários, não apenas uma vez, mas várias vezes. O principal utilitário costumava ser um binário chamado 'faca suíça' mubusy(nome inspirado no busybox?), Que mais recentemente foi renomeado mutool. Estes apoiar os sub-comandos info, clean, extract, postere show. Infelizmente, a documentação oficial para essas ferramentas ainda não está atualizada. Se você estiver em um Mac usando 'MacPorts': o utilitário foi renomeado para evitar conflitos de nomes com outros utilitários usando nomes idênticos, e talvez você precise usá-lo mupdfextract.
Para alcançar os resultados (aproximadamente) equivalentes com mutoola ferramenta anterior pdfextract, basta executar mubusy extract .... *
Portanto, para extrair fontes e imagens, você pode precisar 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)
Os downloads estão aqui: mupdf.com/downloads
Usando gs(Ghostscript)
Em seguida, o Ghostscript também pode extrair fontes diretamente de PDFs. No entanto, ele precisa da ajuda de um programa utilitário especial chamado extractFonts.ps, escrito em linguagem PostScript, disponível no repositório de código-fonte Ghostscript .
Agora use-o, você precisa executar ambos, este arquivo extractFonts.pse seu arquivo PDF. O Ghostscript utilizará as instruções do programa PostScript para extrair as fontes do PDF. Parece assim no Windows (sim, o Ghostscript entende a 'barra', /, 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 atrás. No momento, ele extraiu * .ttf (TrueType) muito bem. Não sei se outros tipos de fontes também serão extraídos e, se houver, de uma maneira reutilizável. Não sei se o utilitário bloqueia a extração de fontes marcadas como protegidas.
Usando pdf-parser.py
Finalmente, o pdf-parser.py de Didier Stevens : este provavelmente não é tão fácil de usar, porque você precisa ter algum conhecimento sobre estruturas internas de PDF. pdf-parser.pyé um script Python que também pode fazer muitas outras coisas. Ele também pode descompactar e extrair fluxos arbitrários de objetos e, portanto, também pode extrair arquivos de fonte incorporados.
Mas você precisa saber o que procurar. Vamos ver com um exemplo. Eu tenho um arquivo chamado big.pdf . Como primeira etapa, uso o -sparâmetro para pesquisar no PDF qualquer ocorrência da palavra-chave FontFile ( pdf-parser.pynão requer uma pesquisa com distinção entre maiúsculas e minúsculas):
pdf-parser.py -s fontfile big.pdf
No meu caso, para o meu big1.pdf , recebo 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 FontFile2dentro do PDF, e estas estão nos objetos PDF no. 15 e não. 16, respectivamente. Objeto no. 15 contém a /FontFile2fonte / ArialMT , objeto no. 16 mantém a /FontFile2fonte / Arial-BoldMT .
Para mostrar isso mais claramente:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
Uma rápida espiada na especificação do PDF revela que a palavra-chave /FontFile2se refere a um 'fluxo contendo um programa de fonte TrueType' ( /FontFilese relacionaria a um 'fluxo contendo um programa de fonte Tipo 1' e /FontFile3a um 'fluxo contendo um programa de fonte cujo formato é especificado pela entrada Subtype no dicionário de fluxo ' {sendo, portanto, um subtipo Type1C ou CIDFontType0C }.)
Para examinar especificamente o objeto PDF no. 15 (que contém a fonte / ArialMT ), pode-se usar o -o 15parâmetro:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
Essa pdf-parser.pysaída nos diz que esse objeto contém um fluxo (que não será exibido diretamente) que possui um comprimento de 1.581.435 bytes e é codificado (== "compactado") com ASCIIHexEncode e precisa ser decodificado (== " comprimido "ou" filtrado ") com a ajuda do /ASCIIHexDecodefiltro padrão .
Para despejar qualquer fluxo de um objeto, pdf-parser.pypode ser chamado com o -d dumpnameparâmetro Vamos fazer isso:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Nosso despejo de dados extraído estará no arquivo chamado dumped-data.ext . Vamos ver o quão grande é:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
Oh, olha, são 1.581.435 bytes. Vimos essa figura na saída do comando anterior. A abertura deste arquivo com um editor de texto confirma que seu conteúdo são dados codificados em hexadecimal ASCII.
Abrir o arquivo com uma ferramenta de leitura de fontes como otfinfo(isso faz parte do lcdf-typetoolspacote ) causará algumas decepções no início:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, é porque ainda não deixamos de pdf-parser.pyusar toda a sua magia: despejar um fluxo decodificado e filtrado. Para isso, temos que adicionar o -fparâmetro:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
Qual é o tamanho desse novo arquivo?
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 objeto PDF no. 15 dicionário como o valor da chave /Length1...
O que filepensa que é?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
O que otfinfonos 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 pdf-parser.pyfato, extraímos um arquivo de fonte válido para nós. Dado o tamanho deste arquivo (778.552 bytes), parece que essa fonte foi incorporada completamente no PDF ...
Nós poderíamos renomeá-lo para arial-regular.ttf e instalá-lo como tal, e felizmente utilizá-lo.
Ressalvas:
De qualquer forma, você precisa seguir a licença que se aplica à fonte. Algumas licenças de fontes 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 existentes no mercado não incorpora a fonte completa, mas apenas subconjuntos. Extrair um subconjunto de uma fonte é útil apenas em um escopo muito limitado, se houver.
Leia também o seguinte sobre os prós e os contras dos esforços de extração de fontes: