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
.pfa
formato (PostScript) + você pode extraí-las usando um editor de texto .
- Pode ser necessário converter o arquivo
.pfa
(ASCII) em um .pfb
arquivo (binário) usando os t1utils
botõespfa2pfb
.
- Nos PDFs, nunca há
.pfm
ou .afm
arquivos (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 mupdf
viram 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
, poster
e 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 mutool
a 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.ps
e 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 -s
parâmetro para pesquisar no PDF qualquer ocorrência da palavra-chave FontFile ( pdf-parser.py
nã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 FontFile2
dentro do PDF, e estas estão nos objetos PDF no. 15 e não. 16, respectivamente. Objeto no. 15 contém a /FontFile2
fonte / ArialMT , objeto no. 16 mantém a /FontFile2
fonte / 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 /FontFile2
se refere a um 'fluxo contendo um programa de fonte TrueType' ( /FontFile
se relacionaria a um 'fluxo contendo um programa de fonte Tipo 1' e /FontFile3
a 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 15
parâmetro:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
Essa pdf-parser.py
saí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 /ASCIIHexDecode
filtro padrão .
Para despejar qualquer fluxo de um objeto, pdf-parser.py
pode ser chamado com o -d dumpname
parâ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-typetools
pacote ) 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.py
usar toda a sua magia: despejar um fluxo decodificado e filtrado. Para isso, temos que adicionar o -f
parâ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 file
pensa que é?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
O que otfinfo
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 pdf-parser.py
fato, 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: