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:
mupdf
. Veja também esta ...Use o serviço online http://www.extractpdf.com . Não há necessidade de instalar nada.
fonte
~/.fonts
, e a copiar e colar estava funcionando!Eventualmente, encontrou o pacote do instalador do FontForge Windows e abriu o PDF através do programa instalado. Trabalhou um prazer, tão feliz.
fonte
http://www.verypdf.com/app/pdf-font-extractor/pdf-font-extracting-tool.html A maneira mais fácil da IMO de extrair fontes (Windows).
fonte
Embora essa pergunta tenha 10 anos, ela ainda é válida e, à medida que a tecnologia muda, uma resposta válida também.
Ao pesquisar as respostas atuais, nenhuma delas notou o WOFF (Web Open Font Format) ( W3C ) ( Wikipedia ), que pode ser usado para recriar os caracteres individuais (glifos) e exibi-los em uma página da web com precisão.
Usando a página on-line gratuita da IDR Solutions, PDF para HTML5 ( link ), converta um PDF em um arquivo zip. No zip resultante, haverá um diretório de fontes dos tipos de arquivo woff. Os navegadores de Internet atuais suportam arquivos woff, se você não estiver ciente. ( referência ) Estes podem ser examinados no site online FontDrop! ( link ).
Arquivos WOFF podem ser convertidos para / de OTF ou TTF no conversor de fontes WOFFer - WOFF
Além disso, o arquivo zip de PDF para HTML5 conterá um arquivo HTML para cada página do PDF que pode ser aberta em um navegador da Internet e é uma das melhores e mais precisas traduções de PDF que encontrei ou vi.
Enquanto eu apenas estou aprendendo a usar arquivos WOFF, vale a pena passar adiante. Aproveitar.
PS: provavelmente atualizarei com mais informações à medida que aprender mais sobre o uso de tipos de arquivo woff, mas como isso é comum, peça-lhe que edite essa resposta se você tiver algo de valor a transmitir.
fonte
Is it because WOFF handles incomplete fonts better?
, não faço ideia. Seu palpite seria uma mina tão boa. Como observei, estou apenas aprendendo sobre o WOFF.Is it because WOFF handles incomplete fonts better?
como uma nova pergunta de SO e outras pessoas com mais conhecimento verão e esperamos fornecer uma resposta significativa.O PDF2SVG versão 6.0 do PDFTron faz um trabalho razoável. Produz fontes OpenType (
.otf
) por padrão. Use--preserve_fontnames
para preservar "o esquema de nomeação de fonte / família de fontes, conforme obtido no arquivo de origem".O PDF2SVG é um produto comercial, mas você pode baixar um executável de demonstração gratuito (que inclui marcas d'água na saída SVG, mas não restringe o uso). Pode haver outros produtos PDFTron que também extraem fontes, mas só recentemente descobri o PDF2SVG.
fonte
--preserve_fontnames
, não funciona se você tiver fontes parciais e sobrepostas - parece não incluir o prefixo, por exemplo, oMSCIYG
inMSCIYG+Ge'ez-1
, portanto substitui as anteriores anteriores.Uma das melhores ferramentas on-line atualmente disponíveis para extrair fontes em PDF é http://www.pdfconvertonline.com/extract-pdf-fonts-online.html
fonte
Este é um seguimento da
font-forge
seção da resposta de @Kurt Pfeifle , específica da Red Hat (e possivelmente de outras distribuições do Linux).Depois de ter seu arquivo TTF, você pode instalá-lo em seu sistema
/usr/share/fonts
(como root)fc-cache -f /usr/share/fonts/
(como root)fonte