Вопрос или проблема
У меня есть PDF, который содержит страницы формата A4 с текстом. У некоторых слов в тексте есть ссылки, которые указывают на другие страницы внутри того же PDF. Есть ли способ сделать так, чтобы номер страницы, на которую указывает каждая ссылка, появлялся в правом боковом поле напротив ссылки, чтобы кто-то, кто использует бумажную копию PDF (кто, следовательно, не может кликнуть по ссылке), мог увидеть, на какую страницу указывает ссылка, чтобы они могли перевернуть на эту страницу?
Я рассматривал возможность использования Adobe Acrobat, PDF X-Change Editor, Nitro PDF и Foxit, но ни одна из этих программ не имеет функции, которая могла бы это сделать.
Способ, которым ссылки хранятся в PDF, означает, что в странице нет “якоря”. Самый простой способ это увидеть – посмотреть, как описываются страницы. Поэтому для упрощения я написал этот 3-страничный файл, где положение в верхнем правом углу, как в книжке-раскладушке, перейдёт на следующую страницу.
Очевидно, что “ничего” не видно (это просто горячая точка), и все записи страниц не содержат ничего в своем коде. Вот они, где “содержимое” страниц 9, 10 и 11, но все говорят /Length 0 (ничего показывать), поэтому нам нужно прочитать и экспортировать связывающие объекты, прежде чем добавлять что-либо в файл.
%PDF-1.7
1 0 obj<</Names<</Dests 2 0 R>>/Pages 3 0 R/Type/Catalog>>endobj
3 0 obj<</Count 3/Kids[5 0 R 6 0 R 4 0 R]/Type/Pages>>endobj
5 0 obj<</Annots[7 0 R]/MediaBox[0 0 595 842]/Parent 3 0 R/Resources<<>>/Type/Page/Contents 9 0 R>>endobj
7 0 obj<</A<</D[6 0 R/XYZ null null null]/S/GoTo>>/Border[0 0 0]/C[0 0 0]/F 4/NM(1265dfdf-e57e-4f60-94f4dc2d4d08c9aa)/P 5 0 R/Rect[450 750 595 842]/Subtype/Link/Type/Annot>>endobj
9 0 obj<</Length 0>>
stream
endstream
endobj
6 0 obj<</Annots[8 0 R]/MediaBox[0 0 595 842]/Parent 3 0 R/Resources<<>>/Type/Page/Contents 10 0 R>>endobj
8 0 obj<</A<</D(Page3)/S/GoTo>>/Border[0 0 0]/C[0 0 0]/F 4/NM(7f204e9d-9862-4269-9776358454c37864)/P 6 0 R/Rect[450 750 595 842]/Subtype/Link/Type/Annot>>endobj
10 0 obj<</Length 0>>
stream
endstream
endobj
2 0 obj<</Names[(Page3)[4 0 R/XYZ 0 842 null]]>>endobj
4 0 obj<</MediaBox[0 0 595 842]/Parent 3 0 R/Resources<<>>/Type/Page/Contents 11 0 R>>endobj
11 0 obj<</Length 0>>
stream
endstream
endobj
xref
0 12
0000000000 65536 f
0000000009 00000 n
0000000782 00000 n
0000000074 00000 n
0000000838 00000 n
0000000136 00000 n
0000000468 00000 n
0000000242 00000 n
0000000575 00000 n
0000000422 00000 n
0000000736 00000 n
0000000931 00000 n
trailer
<</Size 12/Root 1 0 R/ID[<4657E6C7218E18DED2570E82964D21E2><9946E25234503908D6698FAD5FE9296F>]>>
startxref
0978
%%EOF
Вывод ссылок в виде таблицы будет выглядеть следующим образом:
Title,"Modification Date","Placement Page","Link Rectangle","Border Color","Border Style","Border Width","Highlight Type",Actions
<None>,,1,"450,750,595,842",#000000,Solid,0,Invert,"goto:{2, XYZ, 15}"
<None>,,2,"450,750,595,842",#000000,Solid,0,Invert,"goto:{3, XYZ, 12, 0.000, 842.000}"
Запись вывода может быть добавлена справа от верхних правых углов, просто увеличив ширину страниц с 595 до, скажем, 842 (такой же, как высота страницы), иначе числа будут бессмысленны, так как будут искажены за счёт инъекции дополнительных страниц.
Проблема заключается в том, что у страниц нет аннотаций в качестве текста, поэтому нам нужно будет добавить много дополнительных сложных ресурсов редактора, таких как шрифты и их размещение и сопоставление и т. д., что значительно расширит файл по сравнению с тем, что он есть.
Ответ или решение
К сожалению, в существующих инструментах редактирования PDF, таких как Adobe Acrobat, PDF X-Change Editor, Nitro PDF и Foxit, нет встроенной функции для автоматического добавления номера страницы в правом поле напротив ссылки. Однако, вы можете выполнить это вручную с использованием нескольких шагов. Давайте рассмотрим возможные методы решения вашей задачи.
### 1. Определение ссылок и страниц
Первым шагом вам необходимо определить все внутренние ссылки и соответствующие им номера страниц. Для этого вы можете использовать инструменты для анализа PDF, чтобы извлечь метаданные ссылок из вашего документа. Например, существуют инструменты, которые позволяют извлечь аннотации и ссылки, а также их целевые страницы. Это позволит вам составить список всех ссылок и номера страниц, на которые они указывают.
### 2. Добавление текстовых полей для номеров страниц
После того как вы собрали данные о ссылках и соответствующих номерах страниц, следующим шагом будет ручное добавление текстовых полей с номерами страниц в правом поле вашего PDF. Вы можете сделать это в Adobe Acrobat следующим образом:
– Откройте ваш PDF-файл в Adobe Acrobat.
– Перейдите в режим редактирования (Tools → Edit PDF).
– Выберите инструмент “Добавить текст” (Add Text).
– Разместите текстовое поле в правом верхнем углу страницы напротив ссылки и введите соответствующий номер страницы. Учтите, что вам, возможно, потребуется немного отрегулировать расположение текста, чтобы он выглядел аккуратно и не мешал основному содержанию.
### 3. Повторение процесса для всех страниц
Эти действия необходимо будет повторить для каждой страницы, содержащей ссылки. Такой процесс может быть трудоемким, но он обеспечит точность и четкость информации, предоставляемой читателям.
### 4. Сохранение и тестирование документа
После того как вы добавите номера страниц, обязательно сохраните изменения в PDF и протестируйте документ на предмет корректности расстановки ссылок и увиденных номеров страниц. Убедитесь, что номера отображаются правильно и не перегружают внешний вид документа.
### 5. Автоматизация процесса (при наличии программирования)
Если у вас есть навыки программирования, вы можете попробовать автоматизировать процесс с помощью скриптов на Python или JavaScript. Библиотеки, такие как PyPDF2 для Python или PDF.js для JavaScript, могут помочь в извлечении информации из существующего PDF и впоследствии в создании нового PDF с нужными текстовыми вставками.
### Заключение
Хотя для достижения вашей цели вам потребуется ручной подход или разработка скриптов, важно помнить, что предоставление четкой информации о номерах страниц в вашем документе значительно повысит его удобство для пользователей, читающих его в бумажном виде. Тем не менее, существующие инструменты редактирования PDF не предлагают автоматического процесса для этой задачи, поэтому вам следует учитывать это при планировании вашего рабочего процесса.