Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Пакетное наложение на страницу PDF-файла гиперссылки на сайт  (Прочитано 3816 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ubu12.04ntu

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
Посоветуйте,как на первой странице тысяч PDF-файлов где-нибудь на полях добавить гиперссылку на сайт первоисточника. Это не просто водяной знак в виде текста, но кликабельная ссылка.
Ручками долго, хотелось бы пакетно.

Всякие шпрингеры и другие изд-тельства как-то это делают
Ссылка идентичная для всех файлов. (На главную сайта)
« Последнее редактирование: 26 Марта 2016, 01:54:30 от ubu12.04ntu »

Оффлайн ubu12.04ntu

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
В винде делается a-pdf-watermark

serchik

  • Гость
В винде делается a-pdf-watermark
И стоит 35$. Напишите скрипт на языке python (или любом другом  :) ), автоматизирующий данную задачу.

Оффлайн ubu12.04ntu

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
Было бы здорово! Я ни в зуб ногой...

adawdp

  • Гость
2016 Mar 28; 12:55 PM; Oakville, ON, Canada.

— У меня такая задача часто возникает, но правда pdf не очень большие не более 20 листов, редко 22-23…
— Смысл таков - я разбиваю первоначальный файл pdf сначала  на отдельные страницы, потом  каждую страницу объединяю со страницей где изготовлена гиперссылка…
— Это всё делает программа pdftk
— Фрагмент скрипта выглядит вот так:
Код: (bash) [Выделить]
mkdir 123; mkdir 456; cp *∗100* ./123; cp *∗400* ./456
cd 123; pdftk *.pdf burst; cd ..; cd 456; pdftk *.pdf burst; cd ..; mkdir 789
pdftk ./456/pg_0001.pdf ./123/pg_0001.pdf cat output ./789/001.pdf
pdftk ./456/pg_0002.pdf ./123/pg_0002.pdf cat output ./789/002.pdf
pdftk ./456/pg_0003.pdf ./123/pg_0003.pdf cat output ./789/003.pdf
pdftk ./456/pg_0004.pdf ./123/pg_0004.pdf cat output ./789/004.pdf
pdftk ./456/pg_0005.pdf ./123/pg_0005.pdf cat output ./789/005.pdf
— Если не пытаться писать сложный скрипт с циклами и так далее то в LO calc можно сделать такую запись хоть для 1000 страниц :)
— К сожалению это не прямая рекомендация, это направление и скрипт под вашу ситуацию нужно писать исходя, естественно, из ваших данных :(
— Подводные камни здесь это изменение размера страниц, но поскольку мне это нужно практически для „внутреннего употребления“ в рамках компании это не важно. А чтобы добавить ссылки для документа так сказать „на продажу“ нужны будут дополнительные действия. Т.е. возможная подгонка страниц обрезка полей и тому подобное украшательство.

Оффлайн ubu12.04ntu

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
Все файлы однотипные. A4, книжна ориентация во всех. Файлы порядка 100 стр.
Ссылку нужно вставить только на первой странице.
Просто процедуру нужно выполнить для большого количества файлов. Никаких украшательств не нужно, просто ссылка на главную страницу сайта.

adawdp

  • Гость
2016 Mar 28; 03:25 PM

Ubu12.04ntu,я немного неправильно понял задачу.
А можно ли к каждому файлу добавить в начале целую страницу пусть будет НУЛЕВАЯ или вроде обложки, а там положим картинка а под ней искомая ссылка.
— И эту НУЛЕВУЮ страницу уже сделать первой в каждом файле добавив её туда.

Самое простое по исполнению решение… Буду после работы  2016 Mar 28; 07:25 PM

Оффлайн ubu12.04ntu

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
— Смысл таков - я разбиваю первоначальный файл pdf сначала  на отдельные страницы, потом  каждую страницу объединяю со страницей где изготовлена гиперссылка…
— Это всё делает программа pdftk
Не понятно, ведь команда
pdftk 1.pdf 2.pdf cat output 3.pdfсклеивает два файла (при чем не обязательно одностраничных) в один, но не накладывает их друг на друга.

Как наложить один pdf на другой?


Нулевую страницу вставлять бы не хотелось. Это можно сделать командой выше.
Желательно вставить живой урл именно на первой странице.

adawdp

  • Гость
2016 Mar 28; 10:46 PM

Ubu12.04ntu, наложить один pdf на другой у меня не получилось :(. Один человек мне посоветовал попробовать использовать в pdftk fill_form option мол якобы там заложены “скрытые возможности” создать ссылку. Это было его предположение. Мои знания не позволили мне реализовать “скрытые возможности” :( … Скорее всего знаний недостаточно…
— Рекомендуют также читать PDF Hacks, но это советы из разряда: „Хочешь быть счастливым —  будь им!!! :)
— Попробую завтра сделать clickable watermark using the stamp method там где-то что-то подобное в руководстве я вычитал… Странно как-то неужели никто никогда не делал…

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
watermark умеет накладывать convert из пакета imagemagic… Алгоритм такой — вырезаем страницу, накладываем знак, объединяем страницу и оставшиеся.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ubu12.04ntu

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
можно пример команды на этапе наложения? Умеет ли накладывать ссылки?

adawdp

  • Гость
2016 Mar 29; 08:49 AM; Oakville, ON, Canada.

— Сначала образец готового файла в единичном экземпляре. То что можно для одного файла, можно проделать и с остальными.
https://drive.google.com/file/d/0BxXFe9FXJohUOFlRcVNSY1FjRFE/view?usp=sharing
— Действия:
-Изготавливаем пустой лист нужного формата (А-4 во вложении) с кликабельной ссылкой. У меня не открылась из системы, но открывается если pdf открыть в браузере, не разбирался почему. Использовал программу Master PDF Editor 3.6.
-Вырезаем первый лист из файла pdf куда нужно вставить кликабельную ссылку.
Код: (bash) [Выделить]
pdftk ВесьФайл.pdf cat 1 output ПерваяСтраница.pdf-Накладываем сначала ссылку как текст (в реальности первую страницу на страницу со ссылкой)
Код: (bash) [Выделить]
pdftk ПустойЛистСоСсылкой.pdf stamp ПерваяСтраница.pdf output ЛистС_ТекстомСсылки.pdf-Делаем первый лист с кликабельной ссылкой.
Код: (bash) [Выделить]
pdftk ПустойЛистСоСсылкой.pdf stamp ЛистС_ТекстомСсылки.pdf output ПервыйЛистС_КликабельнойСсылкой.pdf— Дальше следуют операции вырезания и слияния лень описывать там используется одна и та же команда.
— Всё это нужно объединить в скрипт и сделать так, чтобы этот скрипт последовательно производил эту операцию над каждым файлом.
— Всё времени нет, поехал потрудиться слегка :).
« Последнее редактирование: 29 Марта 2016, 15:59:17 от adawdp »

Оффлайн ubu12.04ntu

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
    • Просмотр профиля
Красота! Только бы сделать скрипт и все супер!

А зачем нужно дважды накладывать ПустойЛистСоСсылкой.pdf ?
Поменяйте порядок файлов в команде - даже отделять первую страницу не нужно :D
Если накладывать на многостраничный файл 3.pdf ссылку, то на выходе получим одностраничный файл с наложенной ссылкой. (наложится на первую страницу файла 3.pdf)
Делается все в ДВА хода
1) pdftk url.pdf stamp Исх.pdf output ОблСоСсыл.pdfа итог получается второй командой
2) pdftk A=ОблСоСсыл.pdf B=Исх.pdf cat A B2-end output Итог.pdf
Осталось довести до полного автоматизма ;)
« Последнее редактирование: 29 Марта 2016, 16:59:26 от ubu12.04ntu »

serchik

  • Гость
А вот и подоспела версия на Python. Код работает для страниц любых размеров. Предварительно устанавливаем следующие пакеты:
sudo apt-get install python-reportlab python-pip
sudo pip2 install pypdf2
sudo pip2 install python-magic
(Нажмите, чтобы показать/скрыть)
Пример использования:
./overlaylink2pdf.py -w https://forum.ubuntu.ru -f Times-Roman -s 24 -p top-middle -i /path/to/pdf/ -r --prefix myprefix --validate trustworthy
Опции такие:
    -w/--watermark - задает внешнюю ссылку (опция обязательна)
    -f/--font - шрифт (укзывать необязательно, по умолчанию используется шрифт Times-Roman)
    -s/--font-size - размер шрифта (указывать необязательно, по умолчанию 18 пт.)
    -p/--position - позиция ссылки на странице; допускаются следующие значения - top-left, top-middle, top-right, bottom-left, bottom-middle, bottom-right. (указывать необязательно; по умолчанию top-left)
    -i/--input - каталог с документами pdf (указывать необязательно; по умолчанию используется текущий каталог)
    -r/--recursive - рекурсивно обработать каталог, заданный в опции -i (указывать необязательно; по умолчанию используется нерекурсивная обработка)
    --prefix - задает префикс для имен обработанных документов (указывать необязательно, по умолчанию overlayed)
Цвет ссылки (задается как триада однобайтных чисел в шестнадцатеричном формате), а также отступы сверху, снизу, слева, справа (в сантиметрах) можно задать в самом скрипте (лень было выносить в параметры).
    --validate - задает способ проверки истинности pdf-файла ("ленивый" и "надежный"); по умолчанию используется ленивая проверка. "Ленивая" проверка основа на проверке MIME-типа по расширению файла, что увеличивает быстродействие и снижает надежность проверки. Таким образом, при ленивой проверке любой файл, созданный командой touch myfile.pdf, будет считаться истинным pdf-файлом, что приведет к необработанному исключению. "Надежный" способ основан на проверке magic number файла, что увеличивает надежность при небольшом снижении производительности.
UPDATE: были устранены ошибки в работе опции --validate и устранены проблемы при обработке файлов, чьи имена содержат кириллицу.
P.S. Дико извиняюсь за очень грубый код.
« Последнее редактирование: 30 Марта 2016, 23:43:12 от serchik »

adawdp

  • Гость
2016 Mar 29; 04:14 PM; Oakville, ON, Canada.

— А скажите, serchik, как можно переделать скрипт для letter, в Канаде о существовании А-4 ещё известно и в очень большом канцелярском магазине иногда даже можно купить такую бумагу :) а в США это вообще экзотика.
— Хотя для публикации в сети не очень важно А-4 или LETTER но всё же традиция, в Канаде давно принята метрическая система, но ползёт по стране хромая на все 4 конечности :(

Ubu12.04ntu, я после работы попробую что-то изобразить на bash, но я не программист совсем, даже не amateur :(. Понимаю что скрипт как-то должен быть включен в переменную в цикле, буду читать рекомендации может сделаю…


« Последнее редактирование: 29 Марта 2016, 23:29:32 от adawdp »

 

Страница сгенерирована за 0.058 секунд. Запросов: 25.