Массовая подлинковка картинок в Кореле - Макрос
Posted on 08 Декабрь 2015 in Веб разработка by wakh
В CorelDraw существует возможность подлинковки картинок вместо импорта. Это упрощает работу с большими файлами. Очень. Однако реализовано это мягко говоря не очень. Для версий до 16 существует макрос BitmapLinksManager 1.0, который облегчает ряд задач, но в 17 версии он не работает. Если вам нужно импортировать много изображений путём подлинковки (place), то Ад становится не таким уж фантастическим местом. Для решение этой проблемы я сделал макрос. Подробности по катом.
ЗЫ
Немного про линки.
Для работы макроса необходимо создать текстовый файл со списком файлов для импорта.
Одно имя файла с полным путём на строку. Сохранить этот файл под тем же именем и в той же папке, что и редактируемый документ, но с расширением .txt вместо .cdr. Далее запустить макрос из документа. Он накидает все файлы на текущий слой. Работает быстро, 80 файлов импортнулись за 1-3 минуты.
' ver 0.3
Sub PlaceFromFile()
Dim impopt As StructImportOptions
Set impopt = CreateStructImportOptions
With impopt
.Mode = cdrImportFull
.LinkBitmapExternally = True
.MaintainLayers = True
' With .ColorConversionOptions
' .SourceColorProfileList = "sRGB IEC61966-2.1,Wide Gamut CMYK Simulation,Gray Gamma 2.2"
' .TargetColorProfileList = "sRGB IEC61966-2.1,Wide Gamut CMYK Simulation,Gray Gamma 2.2"
' End With
End With
Dim file$
file = ActiveDocument.FilePath & Replace(ActiveDocument.FileName, ".cdr", ".txt")
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FileExists(file) Then
Dim impflt As ImportFilter
Open file For Input As #1
While Not EOF(1)
Line Input #1, file1
If file1 <> "" Then
If fs.FileExists(file1) Then
Set impflt = ActiveLayer.ImportEx(file1, cdrTIFF, impopt)
impflt.Finish
Else
MsgBox "File " & file1 & " not found"
End If
End If
Wend
Close #1
Else
MsgBox "File " & file & " not found"
End If
' MsgBox
End Sub
Написано топорно, но работает!