Вывод Unicode текста в PDF
От: Аноним  
Дата: 11.07.05 11:21
Оценка:
Имеется некоторый минималистический Pdf документ
--------------------------------------------------------------------------------
%PDF-1.2
1 0 obj
<<
/Type /Catalog
/Pages 3 0 R
>>
endobj
3 0 obj
<<
/Type /Pages
/Kids [4 0 R]
/Count 1
>>
endobj
4 0 obj
<<
/Type /Page
/Parent 3 0 R
/MediaBox [0 0 790 842 ]
/Resources <</Font <</F0 6 0 R>> /ProcSet [/PDF /Text]>>
/Contents 5 0 R
>>
endobj
5 0 obj
<<
/Length 111
>>
stream
BT
/F0 10 Tf
56 755 TD
(Hello world) Tj
0 -35 TD
(Здравствуй мир) Tj
ET
endstream
endobj
6 0 obj
<<
/Type /Font
/Subtype /Type1
/Encoding /WinAnsiEncoding
/FirstChar 32
/LastChar 255
/BaseFont /TimesNewRoman
/Name /F0
>>
endobj
trailer
<<
/Root 1 0 R
>>
%%EOF
--------------------------------------------------------------------------------
Как заставить выводить его Unicod-ный текст, т. е. как должна выглядеть строка текста "(Здравствуй мир) Tj", чтобы она номально вывелась с помощью unicod-ного шрифта TimesNewRoman.
В документации по этому вопросу лишь расплывчатые объяснения, что типа перед строкой должен идти префикс "FEFF", но все мои эксперименты не увенчались успехом.


26.04.07 23:07: Перенесено модератором из 'Алгоритмы' — Кодт
Re: Вывод Unicode текста в PDF
От: DIMEDROLL Украина  
Дата: 26.04.07 13:42
Оценка:
меня тоже интересует данный вопрос, кто то создавал программно(С++) PDF документы с русским текстом?

нужен хотя бы один работающий пример. в документации его нету
Re: Вывод Unicode текста в PDF
От: migel  
Дата: 26.04.07 17:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>/Type /Font

А>/Subtype /Type1
А>/Encoding /WinAnsiEncoding
А>/FirstChar 32
А>/LastChar 255
А>/BaseFont /TimesNewRoman
А>/Name /F0
>>>
А>endobj
А>--------------------------------------------------------------------------------
А>Как заставить выводить его Unicod-ный текст, т. е. как должна выглядеть строка текста "(Здравствуй мир) Tj", чтобы она номально вывелась с помощью unicod-ного шрифта TimesNewRoman.
А>В документации по этому вопросу лишь расплывчатые объяснения, что типа перед строкой должен идти префикс "FEFF", но все мои эксперименты не увенчались успехом.
В PDF в строке идут коды символов для их отображения в глифы текущего шрифта служит объект Encoding, причем процесс отображения зависит еще и от типа шрифта.
Встроенные шрифты используют ASCII кодировку.
Обычно для не ASCII символов нужно строить CIDFont с соотвествующим CIDToGIDMap.
Внимательно прочитай 5 главу спецификации PDF — там все достаточно подробно описано.
P.S.
TrueType шрифт всегда должен быть встроенным в PDF — так меньше мороки.
Re[2]: Вывод Unicode текста в PDF
От: DIMEDROLL Украина  
Дата: 26.04.07 17:57
Оценка:
Здравствуйте, migel, Вы писали:

M>В PDF в строке идут коды символов для их отображения в глифы текущего шрифта служит объект Encoding, причем процесс отображения зависит еще и от типа шрифта.

M>Встроенные шрифты используют ASCII кодировку.
M>Обычно для не ASCII символов нужно строить CIDFont с соотвествующим CIDToGIDMap.
M>Внимательно прочитай 5 главу спецификации PDF — там все достаточно подробно описано.
M>P.S.
M>TrueType шрифт всегда должен быть встроенным в PDF — так меньше мороки.

Я читал доку, но нету примера работающего, то что у них приведено вот:

14 0 obj
<< /Type /Font
/Subtype /Type0
/BaseFont /Ryumin−Light
/Encoding /Identity−H
/DescendantFonts [ 15 0 R ]
/ToUnicode 16 0 R
>>
endobj
15 0 obj
<< /Type /Font
/Subtype /CIDFontType2
/BaseFont /Ryumin−Light
/CIDSystemInfo 17 0 R
/FontDescriptor 18 0 R
/CIDToGIDMap /Identity
>>
endobj
16 0 obj
<< /Length 433 >>
stream
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry ( Adobe )
/Ordering ( UCS )
/Supplement 0
>> def
/CMapName /Adobe−Identity−UCS def
/CMapType 2 def
1 begincodespacerange
< 0000 > < FFFF >
endcodespacerange
2 beginbfrange
< 0000 > < 005E > < 0020 >
< 005F > < 0061 > [ < 00660066 > < 00660069 > < 00660066006C > ]
endbfrange
1 beginbfchar
<3A51> <D840DC3E>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
end
endstream
endobj

если прописать такой фонт то акробат выдает ошибку о том что фонт неправильный, подозреваю что из за этих строк
/CIDSystemInfo 17 0 R
/FontDescriptor 18 0 R

почему не дать сразу норм пример?!

Может быть ты сможешь привести пример где будет русские буквы в пдф документе, только не зашифрованный?
Re[3]: Вывод Unicode текста в PDF
От: migel  
Дата: 26.04.07 18:08
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Здравствуйте, migel, Вы писали:



DIM>если прописать такой фонт то акробат выдает ошибку о том что фонт неправильный, подозреваю что из за этих строк

DIM>/CIDSystemInfo 17 0 R
DIM>/FontDescriptor 18 0 R

Естественно самого шрифта то в файле нет. А пример не полный так как поток встроенного шрифта двоичный и, ээээ, не маленький
Не сжатый пример ты вряд ль где найдеш
Re[4]: Вывод Unicode текста в PDF
От: DIMEDROLL Украина  
Дата: 27.04.07 14:04
Оценка:
Здравствуйте, migel, Вы писали:

M>Естественно самого шрифта то в файле нет. А пример не полный так как поток встроенного шрифта двоичный и, ээээ, не маленький

M>Не сжатый пример ты вряд ль где найдеш

что ж делать тогда, как создать пдф док который отображает русские буквы?
Re[5]: Вывод Unicode текста в PDF
От: migel  
Дата: 03.05.07 06:40
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Здравствуйте, migel, Вы писали:


M>>Естественно самого шрифта то в файле нет. А пример не полный так как поток встроенного шрифта двоичный и, ээээ, не маленький

M>>Не сжатый пример ты вряд ль где найдеш

DIM>что ж делать тогда, как создать пдф док который отображает русские буквы?

Внимательно читать доки
1. Внедрить шрифт в PDF (для TrueType)
2. Правильно прописать CMap для этого шрифта — так чтобы кириллица правильно соотвествовала глифам шрифта.

А вообще ты его как создаеш то? с нуля руками? Не проще ли использовать что-нибудь готовое?
... << RSDN@Home 1.2.0 alpha rev. 644>>
Re[6]: Вывод Unicode текста в PDF
От: DIMEDROLL Украина  
Дата: 03.05.07 12:47
Оценка:
Здравствуйте, migel, Вы писали:

M>Внимательно читать доки

M>1. Внедрить шрифт в PDF (для TrueType)
M>2. Правильно прописать CMap для этого шрифта — так чтобы кириллица правильно соотвествовала глифам шрифта.

M>А вообще ты его как создаеш то? с нуля руками? Не проще ли использовать что-нибудь готовое?


Нашел я способ как отобразить русские буквы:
нужно в описании фонта использовать атрибут /Encoding в котором переопределить ASCII кода русских символов, тоесть взять их из кодировки win cp1251 и явно указать как отображать каждый символ, вот пример:
17 0 obj
<< /Type/Encoding
/Differences
[
192/afii10017
193/afii10018
]
>>
endobj

"/afii10017" вот это есть название русской заглавной буквы А в пдф спецификации для кириллицы, спецификация эта находится на офф сайте адоба

вот только проблемка, русские буквы наезжают друг на друга. тоесть выходит что ширина у них меньше чем она должна быть на самом деле и из за этого получается каша символов... я уже перепробывал разные настройки и /Fontdescriptor и /Flags и /Width указывать, ничего не помогает
может что то неправильно указываю?! оО

по поводу вопросов, тип использую Type1, CMap не использую, сознаю руками и с нуля, бесплатных толковых библиотек не нашел
Re[7]: Вывод Unicode текста в PDF
От: migel  
Дата: 03.05.07 14:21
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:


DIM>вот только проблемка, русские буквы наезжают друг на друга. тоесть выходит что ширина у них меньше чем она должна быть на самом деле и из за этого получается каша символов... я уже перепробывал разные настройки и /Fontdescriptor и /Flags и /Width указывать, ничего не помогает

DIM>может что то неправильно указываю?! оО

DIM>по поводу вопросов, тип использую Type1, CMap не использую, сознаю руками и с нуля, бесплатных толковых библиотек не нашел


Ordinarily, a font dictionary that refers to one of the standard fonts should omit
the FirstChar, LastChar, Widths, and FontDescriptor entries. However, it is permissible
to override a standard font by including these entries and embedding the
font program in the PDF file.

То есть твои заданные ширины вполне могут быть проигнорированы
Шрифт точно содержит символы кириллицы? Encoding какой задаеш?
... << RSDN@Home 1.2.0 alpha rev. 644>>
Re[8]: Вывод Unicode текста в PDF
От: DIMEDROLL Украина  
Дата: 03.05.07 14:40
Оценка:
Здравствуйте, migel, Вы писали:

M>То есть твои заданные ширины вполне могут быть проигнорированы

M>Шрифт точно содержит символы кириллицы? Encoding какой задаеш?


Привожу неполный(без всех кодов русских глифов) скрипт моего русского фонта:

17 0 obj
<</Type/Font
/Subtype/Type1
/BaseFont/Times-Roman
/Encoding <</Type/Encoding
/Differences[
168/afii10023
184/afii10071
192/afii10017
/afii10018
/afii10019
/afii10020
/afii10021
/afii10022
/afii10024
/afii10025
/afii10026
/afii10027
/afii10028
/afii10029
]>>
>>
endobj
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.