Obsługa (remapowanie) brakujących / problematycznych (CID / CJK) czcionek w formacie PDF za pomocą ghostscript?

W skrócie, mam do czynienia z problematycznym plikiem PDF, który:

Nie można w pełni renderować w przeglądarce dokumentów, npevince, z powodu braku informacji o czcionkach;Jednak -ghostscript może w pełni renderować ten sam plik PDF.

Tak więc - niezależnie od tego, coghostscript używa do wypełnienia spacji (może glify awaryjne lub inna metoda uzyskiwania dostępu do czcionek) - Chciałbym móc korzystaćghostscript produkować („destylować”) wyjściowy plik PDF, w którym jest prawie tylenic zostanie zmieniony, z wyjątkiem informacji o czcionkach, więcevince może renderować ten sam dokument w taki sam sposób jakghostscript mogą.

Mójpytanie tak jest - czy jest to w ogóle możliwe; a jeśli tak, jaki byłby wiersz poleceń, aby osiągnąć coś takiego?

Z góry dziękuję za wszelkie odpowiedzi,
Twoje zdrowie!

Detale:

Aktualnie pracuję na starszym Ubuntu 10.04 i mogę mieć problem - nie błąd - ale problem z instalacjąevince (brakpoppler-data pakiet), jak zaznaczono wBłąd # 386008 „Niektóre czcionki nie wyświetlają się z powodu„ Nieznanego znacznika czcionki ... ”: Błędy: pakiet„ poppler ”: Ubuntu.

Jednak to jest dokładnie to, co chciałbym obsługiwać, więc użyjęfontspec.pdf dołączony do tego posta ("PDF wyzwalający błąd.„,  /  /  v.) aby zademonstrować problem.

evince

Najpierw otwieram stronę 3 tego pliku PDFevince; ievince skarży się:

$ 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'
...

Renderowanie wygląda tak:

... i oczywiste jest, że brakuje niektórych kształtów czcionek.

Cegła suszona na słońcuacroread

Uwaga na temat zachowania programu Adobe Acrobat Reader dla systemu Linux; następujący wiersz polecenia:

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

... nie generuje żadnego wyjścia do terminalu (po więcej/a przełącznik, patrzAkroread strony człowieka) - a program nie ma żadnego problemu z wyświetlaniem czcionek.

Ponadto, chociaż chciałbym uniknąć podróży do postscriptum - zauważ jednakacroread może być użyty do konwersji pliku PDF na 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 ./ 

Ponownie powyższa linia poleceń nie wygeneruje żadnego wyjścia do terminala;-optimizeForSpeed -saveVM są tam, ponieważ najwyraźniej zajmują się czcionkami; ostatni argument./ jest katalogiem wyjściowym (plik wyjściowy jest automatycznie wywoływanyfontspec.ps).

Teraz,evince mogą wyświetlanie wcześniej brakujących czcionek wfontspec.ps wyjście - ale znowu narzeka:

$ 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
...

... i co więcej, wszystkotekst wydaje się być spłaszczony do krzywych w postscriptu - więc teraz nie można wybrać tekstu w pliku .ps wevince już (zauważ, że pliku .ps nie można otworzyćacroread). Można jednak przekonwertować ten plik .ps ponownie na .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 

... a teraz tekst na wyjściupstopdf można wybrać wevince, wszystkie czcionki są tam ievince już nie narzeka. Jednak, jak zauważyłem, chciałbym całkowicie uniknąć w obie strony plików postscriptowych.

display (zimagemagick)

Możemy również obserwować stronę w tym samym dokumencie za pomocąimagemagicks display (zauważ toprzesuwanie obrazu z linii poleceń za pomocą „wyświetlania” najwyraźniej nadal nie jest dostępny, więc użyłem-crop poniżej, aby dostosować rzutnię):

$ 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.

... który generuje trochęghostscripbłędy ish - i wynika z czegoś takiego:

... gdzie jest oczywiste, że brakujące czcionki toevince nie można renderować, są teraz pokazane tutaj, za pomocąimagemagicks display, właściwie.

ghostscript

Wreszcie możemyużyj ghostscript jako przeglądarki X11 sam - obserwować tę samą stronę, ten sam dokument:

$ 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

... i wyniki z tym wyjściem:

 

Podsumowując:ghostscript (iwidocznie przez rozszerzenie,imagemagick) może pozornie znaleźć brakującą czcionkę (lub przynajmniej jej zamiennik) i renderować stronę z tym - nawet jeślievince kończy się niepowodzeniem dla tego samego dokumentu.

Dlatego chciałbym po prostu wyeksportować wersję PDF zghostscript, które miałyby tylko osadzone brakujące czcionki, i żadne inne przetwarzanie; więc spróbuję tego:

$ 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.

... ale to nie działa - plik wyjściowymypg3out.pdf cierpi z powodu dokładnie takich samych problemówevince jak wspomniano wcześniej.

Uwaga: Chociaż chciałbym uniknąć postscriptowego obiegu, dobrym tego przykłademgs wiersz poleceń z pliku PDF na ps z osadzaniem czcionek jest tutaj:(# 277826) pdf - Jak sprawić, by GhostScript PS2PDF przestał ustawiać czcionki; ale te same przełączniki wiersza poleceń dla .pdf do .pdf nie wydają się mieć żadnego wpływu na opisany powyżej problem.

questionAnswers(2)

yourAnswerToTheQuestion