Текст рисуется с использованием таких конструкций:
247 ux 160.65 uy moveto
(GH6) show stroke
Вам нужно добавить операцию pdfmark, точная pdfmark, которую вы хотите использовать, зависит от того, что вы пытаетесь открыть и где. Если вы хотите открыть другой файл PDF, вы можете использовать аннотацию ссылки с действием GoToR, если вы хотите открыть веб-страницу, вы можете использовать действие запуска или пользовательское действие, в зависимости от того, какое приложение просматривает файл PDF. Я собираюсь предположить, что вы хотите запустить действие.
Launch pdfmark должен выглядеть примерно так:
[/Rect [50 425 295 445]
/Action /Launch
/Border [0 0 2]
/Color [.7 0 0]
/URI (http://www.adobe.com)
/Subtype /Link
/ANN pdfmark
Очевидно, вам нужно рассчитать параметры Rect, чтобы щелчок в области текста запускал пункт назначения.
Способ сделать это - использовать операторы пути PostScript. Сначала нам нужно сохранить текущую настройку, затем преобразовать текст в путь, а затем вычислить ограничивающую рамку пути. Затем мы можем использовать эти координаты для наших параметров Rect.
Например:
247 ux 160.65 uy moveto
(GH6)
dup % copy the string
gsave % save the current environament
exch % bring the string copy to the top of the stack
[ /Rect % Put a mark and name on stack
3 -1 roll % Bring string copy to top
true
charpath % create a path equivalent to drawing the text
flattenpath % flatten curves
pathbbox % get the bounding box
% we now have our box on the stack
% stack is: (GH6) [ /Rect llx lly urx ury
% So put the other parameters in place
/Action /Launch
/Border [0 0 2]
/Color [.7 0 0]
/URI (www.dummy.com)
/Subtype /Link
/Ann
pdfmark % and execute the pdfmark
grestore % put the graphics state back
show stroke
Часть текста показана в несколько идиоме:
241 ux 84.65 uy moveto
(45.0) dup stringwidth pop 2 div neg 0 rmoveto show
Вы можете сделать то же самое, что и выше, просто поместите конструкцию dup ... grestore после rmoveto и перед шоу.
Предостережение: я вообще не проверял это, но он должен показать вам, как действовать.