Автоматическая загрузка библиотек

Статус
Закрыто для дальнейших ответов.

Petruccio

Топикстартер
20 лет на форуме
Сообщения
923
Реакции
214
Как заставить Индизайн вместе с любым файлом открывать нужные мне библиотеки (Libraries - indl)?
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Автоматическая загрузка библиотек

а) Скриптом
б) Плагином
Насколько мне известно, никто не писал ни первого, ни второго.
 

Gastone

Участник
Сообщения
31
Реакции
0
Ответ: Автоматическая загрузка библиотек

ГЫ, мне бы такое явно не помешало бы! Жаль :(, что никто не писал!
 

Petruccio

Топикстартер
20 лет на форуме
Сообщения
923
Реакции
214
Ответ: Автоматическая загрузка библиотек

Мои познания програмирования весьма скудны (Школа, Электроника-УКНЦ, Бейсик...). Горю желанием заняться этим, ясно осознавая необходимость скриптинга. Есть ли какое-нибудь руководство на русском?
Только вот у меня сейчас период горячий: Годовые отчетности АО и объявления о созыве акционеров - приходят тоннами... В Молдове, наша газета единственное издание кому позволено эти материалы печатать.
Если несложно, напишите такой скрипт, пожалуйста.
Нутром чую что он на несколько строк. :)
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Автоматическая загрузка библиотек

Ну, моя школа программирования еще более оригинальная - филологический факультет Кемеровского университета. Я подумаю :)
 

Petruccio

Топикстартер
20 лет на форуме
Сообщения
923
Реакции
214
Ответ: Автоматическая загрузка библиотек

Ну как? Реально сделать?
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: Автоматическая загрузка библиотек

Сначала нужно сохранить имена открытых библиотек где-то вместе с документом, а затем, после его открытия получить эти данные, и открыть перечисленные библиотеки.

В данном примере я использовал поле Description метаданных документа. Для наглядности и для проверки. Среди свойств документа есть такое - Label. Как написано в документации - строка куда можно записать все что угодно. В готовом рабочем скрипте можно использовать ее.

Следует помнить при разработке скрипта, что этими же полями и этими же свойствами может воспользоваться другой скрипт для хранения каких-то данных. Это может привести к неожиданным коллизиям.

Разумеется я написал на басике. Создайте форму, на ней две кнопки, впишите в Caption - Load and Save соответственно для Command1 and Command2. Откомпилируйте.

Я проверил - все работает. Список баблиотек ассоциированных с документом можете увидеть в поле Description его метаданных и даже отредактировать его вручную. Правило такое: символ ">" - разделитель имен файлов и замыкатель строки.

Код:
Option Explicit

' Load Libraries
Private Sub Command1_Click()
Dim a As New InDesign.Application
Dim d As InDesign.Document
Dim md As InDesign.MetadataPreference
Dim sar() As String
Dim s As String
Dim i As Long

On Error GoTo ErrHandler:

If a.Documents.Count > 0 Then
    Set d = a.ActiveDocument
    Set md = d.MetadataPreferences
    s = Trim(md.Description)
    If Len(s) > 0 Then
        If InStr(1, s, ">") > 0 Then
            sar = Split(s, ">")
            For i = 0 To UBound(sar)
                s = sar(i)
                If Len(s) > 0 Then
                    a.Open s
                End If
            Next
        Else
            MsgBox "No one library was associated with " & d.Name
        End If
    Else
        MsgBox "No one library was associated with " & d.Name
    End If
Else
    MsgBox "There must be at least one open document.", vbExclamation
End If
Exit Sub

ErrHandler:
    MsgBox Err.Description, vbCritical
End Sub

' Save Libraries
Private Sub Command2_Click()
Dim a As New InDesign.Application
Dim d As InDesign.Document
Dim md As InDesign.MetadataPreference
Dim lb As InDesign.Library
Dim s As String

If a.Documents.Count > 0 Then
    Set d = a.ActiveDocument
    Set md = d.MetadataPreferences
    If a.Libraries.Count > 0 Then
        For Each lb In a.Libraries
            s = s & lb.FullName & ">"
        Next
        md.Description = s
    Else
        MsgBox "There must be at least one open library.", vbExclamation
    End If
Else
    MsgBox "There must be at least one open document.", vbExclamation
End If

End Sub

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

Petruccio

Топикстартер
20 лет на форуме
Сообщения
923
Реакции
214
Ответ: Автоматическая загрузка библиотек

Спасибо огромное за выполненную работу!

А нельзя ли сделать так, чтобы при запуске Индизайна автоматом грузился скрипт? А пути где находяться библиотеки чтоб находились в внешнем .ini файле?

Чую я, что задачу можно решить настройкой ярлыка...
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: Автоматическая загрузка библиотек

Индизайн загрузится "автоматом" при запуске какой-нибудь функции этой программы (скрипта). То есть, связать запуск ИД и этой программы конечно можно, например через батч-файл, но нафига? Проще сделать кнопку Run InDesign, и давить ее в программе когда она запущена. Программу можно сворачивать в трей. Ну и так далее. У меня в автоверстальной прогре для Кварка так и сделано - проверяется не запущен ли Кварк, и если нет, то меню Launch QuarkXPress становится активным, и если его выбрать, то Кварк запустится.

Это все что касается именно VB6. Поскольку на VBS конечно можно это переписать, но я этого делать не буду точно. А с VBS или JS вы получаете скрипт прямо в палитре Scripts в ИнДезигне. Вот, обратитесь к местным гурам явы, они вам по-быстрому перепишут и будет рулез форева.

Что касается хранить имена библиотек в файле. Можно сделать запросто. Но будет такое условие: этот файл должен располагаться в той же папке что и документ и иметь точно такое же имя (а расширение какое хотите, хоть ini).
 

Petruccio

Топикстартер
20 лет на форуме
Сообщения
923
Реакции
214
Ответ: Автоматическая загрузка библиотек

Для себя эту задачу я решил так:
1. Создал .bat файл, куда я прописал пути к библиотекам которые мне надо загрузить, типа:

D:\Set\elements.indl
D:\Set\smart.indl
D:\Reclama\reclama.indl
D:\Reclama\barter.indl

2. Сделал на него ярлык в Quick Launch. Все.

Когда надо, при запущенном Индизайне жму ярлык и у меня загружаються библиотеки.

Пробовал также прописывать путь к библиотекам в поле Target в свойствах ярлыка к программе. Работает, но только для одной библиотеки, просто я не знаю какие разделители ставить между путями.
 

Вложения

  • shortcut.gif
    shortcut.gif
    4.9 КБ · Просм.: 1 049

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: Автоматическая загрузка библиотек

Требуется подключить Microsoft Scripting Runtime Library (scrrun.dll) или отредактировать объявления: вместо Dim fso As New FileSystemObject записать Set fso = CreateObject("Scripting.FileSystemObject")

Есть одна гробанная Адобская заморочка. Свойство Saved используется и для документов которые сохранены когда-то и имеют FullName, и для документов которые вообще нигде не сохранены и никакого FullName не имеют. Казалось бы, ну чего проще, проверил FullName - пусто, значит новый док, если не пусто - можно юзать строку. Так эти упыри, так сделали что нельзя этого проверить. Только по ошибке можно. То есть, при проверке, если там ничего нет (хоть как проверяй, хоть IsNull, IsEmpty, IsNothing и так далее) получаем ошибку. Я в с Фотошопом в этом месте затрахался, пришлось по номеру ошибки и определять. Слов нет. Маразм какой-то.

Вот, листинг, все тоже самое, но сохраняется в ini-файл который имеет тождественное документу имя и путь, разумеется. Там же и по тому же имени ищется при открытии. Пользуйтесь.

Код:
Option Explicit

Private Sub Command1_Click()
Dim fso As New FileSystemObject
Dim ft As TextStream
Dim a As New InDesign.Application
Dim d As InDesign.Document
Dim sar() As String
Dim s As String
Dim f As String
Dim i As Long

On Error GoTo ErrHandler:

If a.Documents.Count > 0 Then
    Set d = a.ActiveDocument
    If d.Saved Then
        f = Replace(d.FullName, "indd", "ini")
    Else
        MsgBox "Before save document: " & d.Name, vbInformation
        Exit Sub
    End If
    
    If fso.FileExists(f) Then
        Set ft = fso.OpenTextFile(f, ForReading)
        s = ft.ReadAll
        ft.Close
    Else
        MsgBox "Unable to open file " & f
        Exit Sub
    End If
    
    If Len(s) > 0 Then
        If InStr(1, s, ">") > 0 Then
            sar = Split(s, ">")
            For i = 0 To UBound(sar)
                s = sar(i)
                If Len(s) > 0 Then
                    a.Open s
                End If
            Next
        Else
            MsgBox "Invalid data", vbCritical
        End If
    Else
        MsgBox "Invalid data", vbCritical
    End If
Else
    MsgBox "There must be at least one open document.", vbExclamation
End If
Exit Sub

ErrHandler:
    MsgBox Err.Description, vbCritical
End Sub

Private Sub Command2_Click()
Dim fso As New FileSystemObject
Dim ft As TextStream
Dim a As New InDesign.Application
Dim d As InDesign.Document
Dim lb As InDesign.Library
Dim f As String
Dim s As String

If a.Documents.Count > 0 Then
    Set d = a.ActiveDocument
    If a.Libraries.Count > 0 Then
        If d.Saved Then
            For Each lb In a.Libraries
                s = s & lb.FullName & ">"
            Next
            f = Replace(d.FullName, "indd", "ini")
            Set ft = fso.CreateTextFile(f, True)
            ft.Write s
            ft.Close
        Else
            MsgBox "Before save document: " & d.Name, vbInformation
        End If
    Else
        MsgBox "There must be at least one open library.", vbExclamation
    End If
Else
    MsgBox "There must be at least one open document.", vbExclamation
End If

End Sub
 

-=CMYK=-

Забанен
Сообщения
3 320
Реакции
2
Ответ: Автоматическая загрузка библиотек

Епрст, я думаю, в чем, блин, проблема. А оказывается ИнДизайн библиотеки-то не открывает при запуске те, которые были в нем открыты в момент закрытия прогры.

То есть, тут нужно с приложением ассоциировать, а не с документом, что ли?

Ну тогда прямо в ярлык программы вписывайте пути к нужным библиотекам и все. Разделитель - пробел. Если имя файла имеет пробелы, то его просто заключаете в кавычки.

Например:

"C:\Program Files\Adobe\InDesign CS\InDesign.exe" "D:\Co caine.indl" D:\Texts.indl
 

Petruccio

Топикстартер
20 лет на форуме
Сообщения
923
Реакции
214
Ответ: Автоматическая загрузка библиотек

Получилось вписать в ярлык. Спасибо большое! Скрипт я у себя сохраню - нужная вещь.
Просьба к администрации: Если можете, выложите данный скрипт на indesign.rudtp.ru в разделе скрипты, думаю, многим пригодиться.
Если, конечно, автор не против! :)
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Автоматическая загрузка библиотек

Компилируется, упаковывается в zip, пишется описание и делается скриншот (если нужен), присылается мне. Разместим.
 

Quorthon

Участник
Сообщения
120
Реакции
0
Ответ: Автоматическая загрузка библиотек

мне бы этот скриптец тоже не помешал бы... но тока на яве :)
... мак знаетели :o
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: Автоматическая загрузка библиотек

Вроде Бутрин собирался сделать... А у него жаваскрипт в фаворитах :)
 
Статус
Закрыто для дальнейших ответов.