Manipulando (remapeando) fontes em falta / problemáticas (CID / CJK) em PDF com ghostscript?

Em resumo, estou lidando com um PDF problemático, que:

Não pode ser totalmente renderizado em um visualizador de documentos comoevince, por causa da falta de informações da fonte;Contudo -ghostscript pode renderizar totalmente o mesmo PDF.

Assim - independentemente do queghostscript usa para preencher os espaços em branco (talvez glifos de fallback, ou um método diferente para acessar fontesGostaria de poder usarghostscript para produzir ("destilar") um PDF de saída, onde praticamentenada será alterado, exceto as informações da fonte adicionadas,evince pode processar o mesmo documento da mesma maneira queghostscript posso.

Minhasquestão é assim - isso é possível de forma alguma? e se sim, qual seria a linha de comando para conseguir algo assim?

Muito obrigado antecipadamente por qualquer resposta,
Felicidades!

Detalhes:

Eu estou realmente em um Ubuntu 10.04 mais velho, e eu poderia estar experimentando - não um bug - mas um problema de instalação comevince (falta depoppler-data pacote), como observado emBug # 386008 “Algumas fontes não são exibidas devido a“ Unknown font tag ... ”: Bugs: pacote“ poppler ”: Ubuntu.

No entanto, é exatamente isso que eu gostaria de lidar, então vou usar ofontspec.pdf anexado a esse post ("PDF provocando o bug.",  /  /  v.) para demonstrar o problema.

evince

Primeiro, abro a página 3 deste pdf emevince; eevince reclama:

$ evince --page-label=3 fontspec.pdf

Error: Missing language pack for 'Adobe-Japan1' mapping
Error: Unknown font tag 'F5.1'
Error (7597): No font in show
Error: Unknown font tag 'F5.1'
Error (7630): No font in show
Error: Unknown font tag 'F5.1'
Error (7660): No font in show
Error: Unknown font tag 'F5.1'
...

A renderização é assim:

... e é óbvio que algumas formas de fonte estão faltando.

Adobeacroread

Apenas uma nota sobre como o Adobe Acrobat Reader for Linux se comporta; a seguinte linha de comando:

$ ./Adobe/Reader9/bin/acroread /a "page=3" fontspec.pdf

... não gera saída para qualquer terminal (para mais sobre/a mudar, verAcroread da página do homem) - e o programa não tem absolutamente nenhum problema em exibir as fontes.

Além disso, enquanto eu gostaria de evitar a ida e volta ao postscript - no entanto, note queacroread em si pode ser usado para converter um PDF para postscript:

$ ./Adobe/Reader9/bin/acroread -v
9.5.1

$ ./Adobe/Reader9/bin/acroread -toPostScript \ 
-rotateAndCenter -choosePaperByPDFPageSize \
-start 3 -end 3 \
-level3 -transQuality 5 \
-optimizeForSpeed -saveVM \
fontspec.pdf ./ 

Novamente, a linha de comando acima não gerará saída para o terminal;-optimizeForSpeed -saveVM estão lá porque aparentemente eles lidam com fontes; o último argumento./ é o diretório de saída (o arquivo de saída é chamado automaticamentefontspec.ps).

Agora,evince posso exibir as fontes ausentes anteriormente nofontspec.ps saída - mas novamente reclama:

$ evince fontspec.ps 
GPL Ghostscript 9.02: Error: Font Renderer Plugin ( FreeType ) return code = -1
GPL Ghostscript 9.02: Error: Font Renderer Plugin ( FreeType ) return code = -1
...

... e além disso, tudotexto parece ser achatada para curvas no postscript - agora não é possível selecionar o texto no arquivo .ps emevince mais (observe que o arquivo .ps não pode ser abertoacroread). No entanto, pode-se converter este .ps novamente em .pdf:

$ pstopdf fontspec.ps   # note, `pstopdf` has no output filename option;
                        # it will automatically choose 'fontspec.pdf',
                        # and overwrite previous 'fontspec.pdf' in 
                        # the same directory 

... e agora o texto na saída depstopdf é selecionável emevince, todas as fontes estão lá eevince não reclama mais. No entanto, como observei, gostaria de evitar a ida e volta para os arquivos postscript.

display (porimagemagick)

Podemos também observar a página no mesmo documento comimagemagicks display (Observe queimagem panorâmica a partir da linha de comando usando 'display' aparentemente ainda não está disponível, então eu usei-crop abaixo para ajustar a janela de exibição):

$ display -density 150 -crop 740x450+280+200 fontspec.pdf[2]
   **** Warning: considering '0000000000 00000 n' as a free entry.
...
   **** This file had errors that were repaired or ignored.
   **** The file was produced by: 
   **** >>>> Mac OS X 10.5.4 Quartz PDFContext <<<<
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

... o que gera algunsghostscriperros ish - e resultados com algo parecido com isto:

... onde é óbvio que as fontes ausentesevince&nbsp;não foi possível renderizar, agora são mostrados aqui, comimagemagicks display, devidamente.

ghostscript

Finalmente, podemosusar ghostscript como visualizador x11&nbsp;em si - para observar a mesma página, mesmo documento:

$ gs -sDevice=x11 -g740x450 -r150x150 -dFirstPage=3 \
-c '<</PageOffset [-120 520]>> setpagedevice' \
-f fontspec.pdf

GPL Ghostscript 9.02 (2011-03-30)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
Processing pages 3 through 74.
Page 3
>>showpage, press <return> to continue<<
^C

... e resultados com esta saída:

&nbsp;

Em conclusão:ghostscript&nbsp;(epelo visto&nbsp;por extensão,imagemagick) aparentemente pode encontrar a fonte ausente (ou pelo menos alguma substituição para ela), e renderizar uma página com isso - mesmo seevince&nbsp;falha no mesmo documento.

Eu gostaria, portanto, simplesmente de exportar uma versão em PDFghostscript, que teria apenas as fontes ausentes incorporadas e nenhum outro processamento; então eu tento isso:

$ gs -dBATCH -dNOPAUSE -dSAFER  \
-dEmbedAllFonts -dSubsetFonts=true -dMaxSubsetPct=99 \
-dAutoFilterMonoImages=false \
-dAutoFilterGrayImages=false \
-dAutoFilterColorImages=false \
-dDownsampleColorImages=false \
-dDownsampleGrayImages=false \
-dDownsampleMonoImages=false \
-sDEVICE=pdfwrite \
-dFirstPage=3 -dLastPage=3 \
-sOutputFile=mypg3out.pdf -f fontspec.pdf

GPL Ghostscript 9.02 (2011-03-30)
Copyright (C) 2010 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
   **** Warning: considering '0000000000 00000 n' as a free entry.
Processing pages 3 through 3.
Page 3

   **** This file had errors that were repaired or ignored.
   **** The file was produced by:
   **** >>>> Mac OS X 10.5.4 Quartz PDFContext <<<<
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

... mas não funciona - o arquivo de saídamypg3out.pdf&nbsp;sofre exatamente os mesmos problemas emevince&nbsp;como observado anteriormente.

Nota: Enquanto eu gostaria de evitar a viagem de ida e volta postscript, um bom exemplo degs&nbsp;linha de comando com a partir de pdf para ps com incorporação de fontes está aqui:(# 277826) pdf - Como fazer com que o GhostScript PS2PDF pare de criar fontes; mas a mesma linha de comando muda para .pdf para .pdf para não parecer ter qualquer efeito sobre o problema descrito acima.