Опитвам се да изчисля точното ограничаващо поле на всеки текстов глиф във векторен PDF файл.
Това включва следене на CTM, чертане/позициониране на PDF инструкции и т.н., но също така и изчисляване на границите на всеки конкретен глиф в „пространството на глифове“ (използвайки информацията от GLYF таблиците във вградените шрифтове).
Разбирам, че PDF FontDescriptor включва грубо ограничаващо поле за всеки вграден шрифт, но това е комбинация от всички глифове в шрифта -- т.е. най-малкото ограничаващо поле, което пасва на всички глифове в шрифта. За моите цели имам нужда от по-точно позициониране.
Моето специфично приложение е извличане на музикалната семантика от векторен PDF файл с ноти. Като такова, едно хубаво ограничение е, че мога да предположа, че глифовете не са начертани заедно в един и същ оператор Tj/TJ. Всеки глиф се рисува независимо.
Също така имайте предвид, че определям ограничителната кутия като "най-малката кутия, която може да съдържа всички начертани части на глифа." Няма нужда да игнорирате възходящите/спускащите се части/и т.н. които могат да се считат за "извън" ограничителната кутия в други приложения.
Тук има много движещи се части и открих, че е доста трудно да се отстранят грешки. И така, ето с какво ще се радвам да ми помогнете:
- Този примерен PDF файл, който създадох има 10 глифа. Какво е позиционирането на ограничителната кутия на „основната истина“ за тези 10 глифа в пространството на устройството? Текущият ми код създава следното, но е неправилно. Знам, че е неправилно, защото казва, че първият глиф ("&") хоризонтално пресича втория ("˙"), което можете да видите, че не е вярно, когато преглеждате PDF в PDF четец.
'&' ( 57.2799755477664, 600.7092061684704, 86.7452642315424, 677.1570718099680)
'\u02d9' ( 82.0030393188000, 633.6851606704608, 96.3090818379936, 644.6969866323168)
'\u0153' (144.7841941848000, 623.9630080194528, 158.6735558539200, 634.5581702962656)
'\u0153' (181.6778111184000, 619.0027260546528, 195.5671727875200, 629.5978883314656)
'w' (226.1671727148000, 611.3638918288608, 245.0765465300448, 622.3161944071392)
'w' (320.1063822180000, 631.2050196880608, 339.0157560332448, 642.1573222663392)
'\u0153' (414.0455917212000, 641.3239948962528, 427.9349533903200, 651.9191571730656)
'\u0153' (450.9392086548000, 636.3637129314528, 464.8285703239200, 646.9588752082656)
'\u0153' (487.9878407856000, 631.4034309666528, 501.8772024547200, 641.9985932434656)
'\u0153' (524.8814577192000, 628.9232899842528, 538.7708193883200, 639.5184522610656)
Как изчислихте тези позиции? (Осъзнавам, че има много въпроси, като се има предвид сложността на PDF.) Би било от голяма полза да имам упътване и съм сигурен, че ще помогне на други в бъдеще.
Има ли готов инструмент, който прави това?