Как правильно позиционировать и активировать гиперссылку в PDF? - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь написать код, который добавляет гиперссылки к существующему документу PDF.Я пытался сделать это, следуя спецификации PDF 32000, но, похоже, что-то упустил.

Просмотрщик PDF показывает мои аннотации ссылок и меняет указатель мыши на «палец» при наведении на них, но URL не отображаются, и нажатие на них ничего не делает .

Содержимое PDF показано ниже.

Страница:

/Type/Page
/Parent 1 0 R
/MediaBox[0 0 594.75 841.5]
/Contents 7 0 R
/Resources 8 0 R
/Annots [5 0 R 6 0 R] % added by me

Первая аннотация(для "Google", # 5):

/Type /Annot
/Subtype /Link
/Rect [60.0 779.25 150.0 767.25]
/BS
<<
    /W 2 % should be 0, set to 2 to be able to see the annotation's position
>>
/F 4
/A
<<
    /Type /Action
    /Subtype /URI
    /URI (https://google.com)
>>

Вторая аннотация (для "DuckDuckGo", # 6):

/Type /Annot
/Subtype /Link
/Rect [342.0 694.5 432.0 682.5]
/BS
<<
    /W 2 % should be 0, set to 2 to be able to see the annotation's position
>>
/F 4
/A
<<
    /Type /Action
    /Subtype /URI
    /URI (https://duckduckgo.com)
>>

Поток контента:

1 0 0 -1 36.0 841.5 cm
-100 Tz
q
/Font3 -9.0 Tf
0.0 0.0 0.0 rg
24.0 62.25 90.0 12.0 re W n
BT
1 0 0 1 0 0 Tm
24.75 69.75 Td
(Google) Tj
ET
Q
q
/Font3 -9.0 Tf
0.0 0.0 0.0 rg
306.0 147.0 90.0 12.0 re W n
BT
1 0 0 1 0 0 Tm
306.75 154.5 Td
(DuckDuckGo) Tj
ET
Q

Этот код дает следующий результат:

rendered pdf

Сгенерированный файл PDF доступен здесь.

Iвзглянул на код, который Microsoft Word создает для ссылок, и он выглядит примерно так же (за исключением минимизации и структурного родительского элемента; этот код работает, а мой нет):

/Subtype/Link/Rect[ 69.75 697.51 113.16 720] /BS
<<
    /W 0
>>
/F 4/A
<<
    /Type/Action/S/URI/URI(https://google.com/) 
>>
/StructParent 0

Любой советочень цениться.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Ваш словарь действий выглядит следующим образом:

<<
    /Type /Action
    /Subtype /URI
    /URI (https://google.com)
>>

Если вы посмотрите ISO 32000-1 раздел 12.6.2 Словари действий , вы увидите, что тип действияэто не значение Подтип , а вместо S :

S name (обязательно) тип действия, который описывает этот словарь;см. конкретные значения в таблице 194.

(ISO 32000-1 Таблица 193 - Записи, общие для всех словарей действий)

Таким образом, в вашем Действие словарь ( не в окружающем Annot словарь, хотя! ) заменить /Subtype на /S:

/Type /Annot
/Subtype /Link                    %<------------- not here
/Rect [342.0 694.5 432.0 682.5]
/BS
<<
    /W 2 % should be 0, set to 2 to be able to see the annotation's position
>>
/F 4
/A
<<
    /Type /Action
    /S /URI                       %<------------- but here
    /URI (https://duckduckgo.com)
>>
0 голосов
/ 26 июня 2018

Вы должны проанализировать содержимое страницы и обработать все операторы, которые влияют на положение текста, чтобы вычислить точную позицию Google и DuckDuckGo.Затем поместите аннотации ссылок в вычисленные позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...