поместив гиперссылку в pdf / postscript по кругу - PullRequest
3 голосов
/ 01 августа 2011

Как видите, по кругу есть несколько удостоверений личности, я точно не знаю об их координации (сложно!).Итак, было интересно, если у кого-нибудь есть идея, чтобы прикрепить гиперссылку для каждого идентификатора, то есть, нажав на идентификатор, пользователь перенаправил на соответствующую веб-страницу.*

Этот круг создан постскриптумом !!enter image description here

Ответы [ 3 ]

3 голосов
/ 12 августа 2011

Текст рисуется с использованием таких конструкций:

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 и перед шоу.

Предостережение: я вообще не проверял это, но он должен показать вам, как действовать.

2 голосов
/ 02 августа 2011

Независимо от того, какая часть программы PostScript рисует числовые идентификаторы, необходимо также добавить pdf-марку, которая имеет / Dest URI для веб-страницы. Также может потребоваться указать поток внешнего вида / AP.

Это, вероятно, тривиально, чтобы сделать в оригинальной программе PostScript, но, как предполагает Брайан, невозможно дать указатели, не видя оригинальный PostScript.

Предполагая, конечно, что числа нарисованы программой PostScript, и инструмент, преобразующий PostScript в PDF, понимает оператор расширения pdfmark .

0 голосов
/ 07 октября 2015

Пример от KenS - именно то, что я искал, но с одним небольшим изменением:

[ pathbbox ]

е

/Arial findfont 20 scalefont setfont
100 200 moveto (riverdrums) 
dup gsave exch 
[ /Rect 3 -1 roll true charpath flattenpath [ pathbbox ] 
/Action << /Subtype /URI /URI (http://riverdrums.com) >> 
/Border [0 0 0] 
/Subtype /Link 
/ANN pdfmark 
grestore 
show
...