[Acr XI] Написание скриптов для Акробата с помощью искусственного интеллекта

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

Acrobatist

Участник
Топикстартер
Сообщения
53
Реакции
0
Здравствуйте, коллеги!

Попробовал приобщиться к трендам и автоматизировать регулярные акробатовские задачи с помощью нейросетей. До этого все необходимые скрипты мне писали специалисты. Вот решил опробовать современные технологии. Первый опыт взаимодействия с нейросетями (в контексте Акробата) пока не задался. Точнее, не совсем первый - вначале я поставил пару задач "для разминки" - с ними ИИ справился. А когда дело дошло до боевой задачи, навыка ему не хватило (или мне :().

Собственно, основной мой вопрос в том, не проводил ли кто исследования на тему того, какой сервис ИИ наилучшим образом справляется с задачами по автоматизации операций с pdf-файлами?

Вот моя задача (промт):
Создай максимально простой скрипт для адобе акробат (версия 11) на виндовс. Скрипт будет запускаться из pdf-файла, хранящегося локально в файловой системе Виндовс. Название этого pdf-файла всегда начинается с "cov_". Что должен сделать скрипт:
1. Объединить pdf-файл, из которого он запущен, с другим pdf-файлом, хранящимся в том же каталоге и имеющим аналогичное название, только без префикса "cov_". Объединение необходимо произвести таким образом, чтобы в новом, объединенном pdf-файле сначала отражалось содержимое файла, из которого запускался скрипт.
2. Скрипт должен сохранить исходную нумерацию страниц в файлах после их объединения.
3. Объединенный файл необходимо сохранить под исходным именем, но вместо префикса "cov_" должен быть префикс "fin_".

А вот скрипт, присланный в ответ:
JavaScript:
// Скрипт Adobe Acrobat для объединения PDF-файлов

try {

  // 1. Получаем имя текущего файла
  var currentFileName = this.path;

  // 2. Извлекаем путь к файлу без имени
  var filePath = currentFileName.substring(0, currentFileName.lastIndexOf("/"));

  // 3. Извлекаем имя файла без пути и расширения
  var fileName = currentFileName.substring(currentFileName.lastIndexOf("/") + 1, currentFileName.lastIndexOf("."));

  // 4. Проверяем, начинается ли имя файла с "cov_"
  if (fileName.indexOf("cov_") == 0) {

    // 5. Формируем имя второго файла (без "cov_")
    var secondFileName = filePath + "/" + fileName.substring(4) + ".pdf";

    // 6. Формируем имя объединенного файла (с "fin_")
    var mergedFileName = filePath + "/fin_" + fileName.substring(4) + ".pdf";

    // 7. Проверяем существование второго файла
    var f = new File(secondFileName);
    if (!f.exists) {
      app.alert("Второй файл не найден: " + secondFileName);
      throw new Error("Второй файл не найден.");
    }

    // 8. Объединяем файлы
    var filesToMerge = new Array();
    filesToMerge[0] = currentFileName;
    filesToMerge[1] = secondFileName;

    var mergedDoc = new PDFDocument();
    mergedDoc.insertPages(0, filesToMerge[0], 0, this.numPages); // Вставляем страницы из первого файла (текущего)
    mergedDoc.insertPages(this.numPages, filesToMerge[1], 0, app.open(filesToMerge[1]).numPages); // Вставляем страницы из второго файла

    // 9. Сохраняем объединенный файл
    mergedDoc.saveAs(mergedFileName);
    mergedDoc.close();

    // 10. Закрываем второй файл (открытый для получения количества страниц)
    app.open(filesToMerge[1]).close();

    // 11. Выводим сообщение об успехе
    app.alert("Файлы успешно объединены и сохранены как: " + mergedFileName);

  } else {
    app.alert("Имя файла должно начинаться с 'cov_'.");
  }

} catch (e) {
  app.alert("Ошибка: " + e);
}

Итог: Акробат не смог найти второй файл для объединения с первым (выдал ошибку: file is not defined). ИИ считает, что это связано с безопасностью - мол, у Акробата нет доступа к перезаписи файлов. Но это ерунда. Десяток других скриптов используются и проблем не возникает. Что не так?
 
Собственно, основной мой вопрос в том, не проводил ли кто исследования на тему того, какой сервис ИИ наилучшим образом справляется с задачами по автоматизации операций с pdf-файлами?
Сама постановка вопроса в корне порочна и достойна пресловутых британских ученых. Так называемый искусственный интеллект изначально в себе не содержит никаких сведений по решению таких узкоспециальных задач, как акробатический скриптинг. Поэтому, его не изучать надо на этот предмет, а, наоборот, обучать его надо этому предмету.
И да, похоже, никто специализированно этим не занимался, отсюда практически провальные результаты.
Вывод - проще самому обучиться акробатовскому скриптингу по адобовской документации.
Но вцелом ИИ прав - у акробатовского скриптинга, в целях безопасности отсутствует доступ к файловой системе компьютера, соответственно, проверка наличия файла, использованная в скрипте, полностью неверна.
 
  • Спасибо
Реакции: zollinger и Acrobatist
Сама постановка вопроса в корне порочна и достойна пресловутых британских ученых. Так называемый искусственный интеллект изначально в себе не содержит никаких сведений по решению таких узкоспециальных задач, как акробатический скриптинг. Поэтому, его не изучать надо на этот предмет, а, наоборот, обучать его надо этому предмету.
И да, похоже, никто специализированно этим не занимался, отсюда практически провальные результаты.
Вывод - проще самому обучиться акробатовскому скриптингу по адобовской документации.
Но вцелом ИИ прав - у акробатовского скриптинга, в целях безопасности отсутствует доступ к файловой системе компьютера, соответственно, проверка наличия файла, использованная в скрипте, полностью неверна.
Мне не хотелось бы сводить тему к ликбезу относительно ИИ. Напомню только, что, как и написал в первом посте, часть задач по автоматизации задач в Акробате нейросети помогают решать, т.е. чему-то они в этой сфере все-таки обучены.

Может быть, для кого-то "обучиться акробатовскому скриптингу" - приемлемый вариант. Мне характер работы не позволяет настолько вникать в предмет. Когда необходимо, пользуюсь услугами аутсорсеров. Но коммерчески оправданно это в тех случаях, когда готовый скрипт нужен не на один раз, а послужит какое-то время. А нынешняя задача емкая, но разовая - её и делать руками лень, и платить за неё не хочется, учитывая, что после разового использования этот продукт труда окажется неактуальным. А всего-то надо... Объединить одну 1000 файлов с другой 1000 файлов, отождествляя по имени. Казалось бы, элементарная задача для автоматизации.

Похоже, Вы правы относительно того, что специфику Акробата нейросети пока так себе знают... Но подожду, может еще соображения будут у местных обитателей.
 
Объединить одну 1000 файлов с другой 1000 файлов, отождествляя по имени. Казалось бы, элементарная задача для автоматизации.
Так и есть, просто решать её нужно не из акробата, ибо
у акробатовского скриптинга, в целях безопасности отсутствует доступ к файловой системе компьютера
 
  • Спасибо
Реакции: zollinger
Попробуйте, чеж. Я пробовал, и не раз. Не работает это. Он пишет очень похоже на правду, только неправду. Он изобретает функции, которых просто нет.
Я несколько раз поэкспериментировал и плюнул. Не умеет он.
А для слияния файлов есть миллион других способов, например python, go с pdfcpu, или батник с cpdf
 
  • Спасибо
Реакции: Jeine и Acrobatist
Попросите его написать такую "сливалку" на питоне, и все получится
 
Местные обитатели обычно на винде, на коей из коробки питона нет, насколько мне известно. Так то лучше писать на том, что есть или легко доставляется, например, виндовый шелл и pdftk/сpdf.
 
JavaScript:
var f = new File(secondFileName);
Вот это, как я понимаю, работать не будет.
Да и вообще там полная чушь написана, не имеющая отношения к акробатовскому js
 
Последнее редактирование:
Попросите его написать такую "сливалку" на питоне, и все получится
Дельный совет, спасибо, попробую еще поиграться. "батник с cpdf" хоть и звучит попроще и знакомее, но тоже ковыряться надо. Не могу себе позволить такую роскошь *(
 
Дельный совет, спасибо, попробую еще поиграться.
Бесполезно. Он лепит js, но для каких-то браузеров, видимо. Акробатовский диалект от них в корне отличается
newDoc
Creates a new document and returns its Doc object. The optional parameters specify the media box dimensions of the
document in points.
Note: This method can only be executed during a batch or console event. See Privileged versus non-privileged context.
See the event object for a discussion of JavaScript events.
Parameters
Returns
The object of the newly created document.
Example
Add a New item to the Acrobat File menu. Within New, there are three menu items: Letter, A4, and Custom. This script
should go in a folder-level JavaScripts .js file.
app.addSubMenu({ cName: "New", cParent: "File", nPos: 0 })
app.addMenuItem({ cName: "Letter", cParent: "New", cExec:
"app.newDoc();"});
app.addMenuItem({ cName: "A4", cParent: "New", cExec:
"app.newDoc(420,595)"});
app.addMenuItem({ cName: "Custom...", cParent: "New", cExec:
"var nWidth = app.response({ cQuestion:'Enter Width in Points',\
cTitle: 'Custom Page Size'});"
+"if (nWidth == null) nWidth = 612;"
+"var nHeight = app.response({ cQuestion:'Enter Height in Points',\
cTitle: 'Custom Page Size'});"
+"if (nHeight == null) nHeight = 792;"
+"app.newDoc({ nWidth: nWidth, nHeight: nHeight })"});
The script above works for versions of Acrobat prior to 7.0. For Acrobat 7.0, it works correctly if the user JavaScript
preference Enable Menu Items JavaScript Execution Privileges is enabled.
If this item is not checked, the app.newDoc method must be executed through a trustedFunction because
execution of JavaScript through a menu event is no longer privileged beginning with Acrobat 7.0. See Privileged versus
 
Последнее редактирование:
Python:
import os
from PyPDF2 import PdfMerger

# 1. Получаем путь к текущему PDF-файлу (с префиксом "cov_")
current_pdf = os.path.abspath(__file__)
current_dir = os.path.dirname(current_pdf)

# 2. Находим все PDF-файлы в текущей папке
pdf_files = [f for f in os.listdir(current_dir) if f.lower().endswith('.pdf')]

# 3. Ищем текущий файл (cov_...) и соответствующий ему файл без префикса
for cov_pdf in pdf_files:
    if cov_pdf.startswith("cov_"):
        base_name = cov_pdf[4:]  # Убираем "cov_"
        matching_pdf = None
       
        # Ищем файл с таким же именем, но без "cov_"
        for pdf in pdf_files:
            if pdf == base_name:
                matching_pdf = pdf
                break
       
        if matching_pdf:
            # 4. Объединяем PDF-файлы: сначала cov_, затем base
            merger = PdfMerger()
           
            # Добавляем cov_ файл первым
            merger.append(os.path.join(current_dir, cov_pdf))
           
            # Добавляем base файл вторым
            merger.append(os.path.join(current_dir, matching_pdf))
           
            # 5. Сохраняем результат с префиксом "fin_"
            output_name = "fin_" + base_name
            output_path = os.path.join(current_dir, output_name)
           
            with open(output_path, "wb") as f_out:
                merger.write(f_out)
           
            print(f"Файлы объединены и сохранены как: {output_name}")
            break
else:
    print("Не найден PDF-файл с префиксом 'cov_' или соответствующий файл без префикса.")
Не факт, что это будет работать, но вероятность гораздо выше. Разбираться с этим среди ночи я, конечно, не буду
 
Местные обитатели обычно на винде, на коей из коробки питона нет, насколько мне известно.
поставить python дело пяти минут. А вот с шеллом с непривычки может быть и нелегко
 
Копипастить не важно что. ;)
 
Давай кто решит за меньшее количество символов? ;)
 
не, я старый солдат, и не знаю слов любви, тем более в без пяти час ночи.
Времена моих соревнований в программировании давно минули. Но, может, как-нибудь я и возьму в руки шашки :)