[Acr DC] Можно ли расставлять закладки скриптом?

  • Автор темы Автор темы Creative
  • Дата начала Дата начала

Creative

Топикстартер
15 лет на форуме
Сообщения
296
Реакции
3
Есть набор файлов (40 штук), в котором нужно расставить около 20 закладок (по первым страницам разделов). Файлы обновляются каждые 2 недели и число страниц каждого раздела может меняться +-1.
Расставлять руками в ПДФ - не вариант вообще. Сейчас сделала шаблон в Индизайне, линкую туда входящий ПДФ-оригинал, а в шаблоне уже проставлены закладки. Но и тогда приходится корректировать местоположение закладок в соответствии с текущим сдвигом количества страниц в разделе и уже потом гнать из него ПДФ с закладками.
Возникла идея написать скрипт, который бы в цикле искал строковые переменные, соответствующие названиям разделов и с помощью case-структуры (или чего-то аналогичного) ставил бы в найденное место закладку. Посоветуйте, можно ли сделать, что-то подобное?
 
При создании содержания можно просто нажать галочку создания закладок. А само содержание закинуть за пределы страницы. Потом только обновлять.

В т.ч. можно создать невидимый текстовый слой с абзацными стилями чисто для закладок, если их имена не совпадают с реальными названиями глав. И загнать эти стили невидимые в TOC
 
Последнее редактирование:
Посоветуйте, можно ли сделать, что-то подобное?
Можно
upload_2018-6-29_15-15-21.png
 
@Oleg Butrin,
Уточняю: файлы ПДФ, которые я получаю - это прайс-листы, они гонятся из 1С "как получится", так что я к их изготовлению не имею отношения, а получаю уже готовые.
Там даже нет как таковых названий разделов, там просто одни таблицы сменяют другие. Соответственно я хотела, чтобы скрипт искал выражения вида "LED модуль 12V" (первая позиция в разделе) - и ставил на этой странице закладку "Светодиоды", находил "Футболка нейлоновая XXL" - ставил "Термотрансферные технологии" и так далее.

@George,
Почему мне не нравится идея с содержанием - эти прайсы часто бывают разного размера, то есть до 40 страницы, например, к меня все закладки на месте, а после 40-й - все уехали на 2 страницы вперед. Насколько я понимаю, содержание-то привязано к абсолютным номерам страниц, я же не могу сказать "сдвинь на 2 страницы вперед эту и все последующие закладки"?
Хотя есть вариант, что я просто не понимаю, как работает содержание.
 
Насколько я понимаю, содержание-то привязано к абсолютным номерам страниц
Но не закладки. Закладка это закладка, ей абсолютно все равно на какой она странице.
 
_MBK_,
А вот это спасибо, утащила разбираться.
 
@George, вы знаете, я попробовала - не понимаю. Вот смотрите: у меня файл на 80 страниц. В нем есть разделы на 20, 30 и 40 страницах. Многостраничный ПДФ импортирован в Индизайн. Соответственно закладки стоят на страницах 20, 30 и 40. Все хорошо. Допустим даже у меня на этих страницах стоят невидимые заголовки, из которых потом формируется TOC.
Мне приходит новый файл: в нем 82 страницы и закладки должны стоять на 20, 32 и 42 страницах соответственно. Я перелинковываю ПДФ, новый ПДФ длиннее на 2 страницы, и получается, что мои старые закладки стоят на 20, 28 и 38 страницах. Но заголовки-остались на этих самых 20, 28 и 38 страницах. Я не понимаю, как мне в таком случае обновлять TOC, не перетаскивая заголовки, начиная от поехавшего места и далее.
 
Откуда он вообще новый берётся без Вас? Почему не делать вёрстку самой, а не вкладывать pdf которые постоянно зачем-то правятся?

Если вся работа состоит из объединения разрозненных PDF в ИнДизайне для создания пдф-закладок, то это извращение, а не вёрстка.

Тогда, если есть за что "зацепить" создание закладок в пдф, то готовьте ТЗ и деньги тому же @_MBK_ за написание скрипта под сам Акробат.
 
Последнее редактирование:
Жора, ну почему ты так плохо о людях думаешь? Девушка вполне продвинутая, поняла направление, сама напишет
 
@George, прошу меня извинить, я вероятно недостаточно ясно обрисовала свою проблему.
1. к сожалению, работа в компании организована так, что ПДФ прайса изготовляет тот, кто работает с 1С, а у дизайнеров и своей работы хватает.
2. единставнно исключение из этого составляет расстановка закладок - 1С-ники этого не умеют, а заказчики считают, что клиентам удобнее ходить по разделам прайса с помощью закладок.
3. мне не нужно объединять несколько файлов, мне нужно в 40 файлах проставить по 20 закладок.
4. так как ассортимент товаров постоянно слегка меняется, то и количество позиций на странице (а соответственно и количество страниц), постоянно съезжает.Именно поэтому я хотела привязаться к поиску текста, а не к номеру страниц.


@_MBK_,
я написала скрипт. К сожалению, с поиском текста не разобралась пока и просто прохожу по номерам страниц и к номеру привязываю закладку. Но это все равно быстрее, чем в Индизайне, а мне сегодня уже надо сдать очередную партию.
Проблему вылезла совершенно другая: код, которым я пользуюсь, вставляет закладку, но она работает ТОЛЬКО в АкробатПро. Не работает ни в Акробате в браузере, ни в Суматре (больше не проверяла). Закладки, сделанные вручную или через Индизайн работают везде (в файрфоксе даже видно при наведении - куда ведет закладка, а при наведении на мои новые закладки не видно ничего).
Что я сделала не так?
Вот такой код (нашла где-то):

Код:
var root = this.bookmarkRoot;
try {
  for (var i = 0; i < this.numPages; i++)
  {
switch(i+1) {
  case 3: 
    {root.createChild("ЖЕСТКИЕ ЛИСТОВЫЕ МАТЕРИАЛЫ", "this.pageNum=" + i, i);break;}
  case 9:
    {root.createChild("САМОКЛЕЯЩИЕСЯ ПЛЕНКИ, БАНЕРЫ И ТКАНИ", "this.pageNum=" + i, i);break;}
  case 13:
    {root.createChild("ЧЕРНИЛА ДЛЯ ЦИФРОВОЙ ПЕЧАТИ", "this.pageNum=" + i, i);break;}
  default:
    break;
}     
  }     
}
catch(e)
{
app.alert("Processing error: "+e)
}
 
@_MBK_, за это конечно опять спасибо, но если я не решу первую проблему - это мне мало поможет. Я почитала документацию и поняла что то вроде того, что метод createChild выполняется только в среде, поддерживающей JavaScript, он не вызывает стандартное Акробатовское действие "CreateBookmark and GoToPage", а потому и не будет работать в браузере или сторонних смотрелках. Вот это плохо.
Но вам все равно спасибо, в т. ч. за терпение.
 
метод createChild выполняется только в среде, поддерживающей JavaScript, он не вызывает стандартное Акробатовское действие "CreateBookmark and GoToPage", а потому и не будет работать в браузере или сторонних смотрелках.
Ну это в принципе очевидно - предполагаемое действие на закладке - яваскрипт, соответственно, закладка будет работать только в средах, поддерживающих яваскрипт.
 
Но у меня нет файлов Экселя, а 1С-ники не будут этим заниматься.
 
@_MBK_, я к сожалению с ЯваСкрипт не очень знакома, я больше со средами, выдающими экзешник, работала :)
 
тогда может делать закладки в самом экселе при сохранении его как pdf? (Не пробовал, загуглил).
А зря
При ближайшем рассмотрении видно что код
Код:
Set app = CreateObject("AcroExch.app")

Set avdoc = CreateObject("AcroExch.AVDoc")
Set pddoc = CreateObject("AcroExch.PDDoc")
pddoc.Open stFile

Set avdoc = pddoc.OpenAVDoc(stFile)
Set PDBookmark = CreateObject("AcroExch.PDBookmark", "")

app.MenuItemExecute ("NewBookmark")

btitle = PDBookmark.SetTitle("Test Bookmark")
вызывает из VBA акробатовскую объектную модель, что означает просто иной тестикулярный ракурс