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!
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ąimagemagick
s 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ęghostscrip
błę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ąimagemagick
s 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.