¿Manejar (remapping) las fuentes faltantes / problemáticas (CID / CJK) en PDF con ghostscript?
En resumen, estoy tratando con un PDF problemático, que:
No se puede representar completamente en un visor de documentos comoevince
, debido a la falta de información de la fuente;Sin embargo -ghostscript
Puede reproducir completamente el mismo PDF.Así, independientemente de quéghostscript
Se utiliza para rellenar los espacios en blanco (Tal vez glifos de reserva o un método diferente para acceder a las fuentes.) - Me gustaría poder usarghostscript
para producir ("destilar") un PDF de salida, donde más o menosnada será cambiado, excepto la información de la fuente agregada, por lo queevince
puede hacer el mismo documento de la misma manera queghostscript
puede.
Mipregunta es así - es esto posible hacer en absoluto; y si es así, ¿cuál sería la línea de comando para lograr algo así?
Muchas gracias de antemano por cualquier respuesta,
¡Aclamaciones!
En realidad estoy en un Ubuntu 10.04 más antiguo, y podría estar experimentando, no un error, sino un problema de instalación conevince
(falta depoppler-data
paquete), como se indica enError # 386008 "Algunas fuentes no se muestran debido a" Etiqueta de fuente desconocida ... ": Errores: paquete" poppler ": Ubuntu.
Sin embargo, eso es exactamente lo que me gustaría manejar, así que usaré elfontspec.pdf
adjunta a ese puesto ("PDF desencadenando el error.", / / v.) para demostrar el problema.
evince
Primero abro la página 3 de este pdf enevince
; yevince
se queja
$ 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'
...
La representación se ve así:
... y es obvio que faltan algunas formas de fuente.
Adobeacroread
Solo una nota sobre cómo se comporta Acrobat Reader para Linux de Adobe; la siguiente línea de comando:
$ ./Adobe/Reader9/bin/acroread /a "page=3" fontspec.pdf
... no genera salida al terminal en absoluto (para más en/a
cambiar, verPágina de manual acroread) - y el programa no tiene absolutamente ningún problema para mostrar las fuentes.
Además, aunque me gustaría evitar el viaje de ida y vuelta a postscript, sin embargo, tenga en cuenta queacroread
Se puede usar para convertir un PDF a 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 ./
Nuevamente, la línea de comando anterior no generará salida al terminal;-optimizeForSpeed -saveVM
están ahí porque aparentemente se ocupan de las fuentes; el ultimo argumento./
es el directorio de salida (el archivo de salida se llama automáticamentefontspec.ps
).
Ahora,evince
puede mostrar las fuentes que faltaban anteriormente en elfontspec.ps
Salida - pero de nuevo se queja:
$ 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
...
... y además, todotexto parece estar aplanado a curvas en la posdata, por lo que ahora no se puede seleccionar el texto en el archivo .ps enevince
más (tenga en cuenta que el archivo .ps no se puede abrir enacroread
). Sin embargo, uno puede convertir este .ps nuevamente en .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
... y ahora el texto en la salida depstopdf
es seleccionable enevince
, todas las fuentes están ahí, yevince
ya no se queja Sin embargo, como señalé, me gustaría evitar el viaje de ida y vuelta a los archivos postscript.
display
(desdeimagemagick
)También podemos observar la página en el mismo documento conimagemagick
s display
(tenga en cuenta quePanorámica de la imagen desde la línea de comandos usando 'mostrar' Aparentemente aún no está disponible, así que lo he usado.-crop
abajo para ajustar la ventana):
$ 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.
... lo que genera algoghostscrip
Errores ish - y resultados con algo como esto:
... donde es obvio que las fuentes que faltanevince
no se pudo renderizar, ahora se muestran aquí, conimagemagick
s display
apropiadamente
ghostscript
Finalmente, podemosutilizar ghostscript como visor x11 En sí - para observar la misma página, mismo 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
... y resultados con esta salida:
En conclusión:ghostscript
(yaparentemente por extensión,imagemagick
) aparentemente puede encontrar la fuente faltante (o al menos algún reemplazo), y mostrar una página con eso, incluso sievince
falla en eso para el mismo documento.
Por lo tanto, me gustaría simplemente exportar una versión PDF desdeghostscript
, eso tendría solo las fuentes faltantes incrustadas, y ningún otro procesamiento; así que intento esto:
$ 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.
... pero no funciona - el archivo de salidamypg3out.pdf
sufre de los mismos problemas enevince
como se señaló anteriormente.
Nota: Aunque me gustaría evitar el viaje de ida y vuelta en posdata, un buen ejemplo degs
La línea de comandos con pdf a ps con incrustación de fuentes está aquí:(# 277826) pdf - Cómo hacer que PS2PDF de GhostScript deje de subcontratar fuentes; pero la misma línea de comando cambia para que .pdf a .pdf no parezca tener ningún efecto en el problema descrito anteriormente.