Перейти к содержимому

Как сделать гиперссылку в coreldraw

  • автор:

Гиперссылки корел

Верстаю небольшую брошюру в Корел, около 11-страниц. Будет версия для печати и для pdf (просмотр в браузере).

Для версии pdf решила накинуть гиперссылки на пункты оглавления, чтобы вели каждый на свою страницу.

А на каждой странице сделала иконку home, чтобы возвращаться к оглавлению.

Большинство ссылок нормально «встали», кроме двух, как я ни пробовала, они всё время ведут на левые страницы, а не на те, который указаны в ссылке.

Да ещё в результате всех моих тестов, иконка home тоже перестала вести, куда нужно.

Это глюк, или я что-то неправильно делаю?

На картинке можно увидеть, как выглядит ссылка, _PAGE11

ps на что влияют self top и т.д.? Пробовала их менять, что-то ничего не меняется.

Присоединение гиперссылок к объектам

Команда Hyperlink позволяет присоединять к объекту новую или модифицирует существующую гиперссылку. Гиперссылки обеспечивают переход к веб-сайтам, адресам электронной почты, чертежным файлам или пользовательским видам текущего чертежа.

Открытие диалогового окна «Гиперссылка»

  1. Выберите Вставить > Гиперссылка (или введите Hyperlink).
  2. Выберите в графической области объекты, к которым необходимо прикрепить гиперссылки, затем нажмите Ввод.
    Отобразится диалоговое
    окно Гиперссылка.

Создание гиперссылки на существующий файл или веб-страницу

  1. В диалоговом окне Гиперссылка выберите элемент Существующий файл или веб-страница.
  2. В поле Текст введите описание гиперссылки. Используйте его, если ссылка недостаточно информативна.
  3. В поле Адрес введите гиперссылку.

— или выберите элемент —

  • Текущая папка для перехода к файлу, на который необходимо сделать гиперссылку. Содержание списка файлов определяется диском или папкой, указанной в поле Просмотр в.
  • Просмотренные страницы (список недавно просмотренных в интернет-браузере веб-страниц), затем выберите страницу из списка.
  • Последние файлы (список последних использованных файлов), затем выберите файл из списка.
  • Выберите элемент для выбора файла в диалоговом окне Открыть.
  • Выберите элемент Целевой контур, чтобы выбрать местоположение файла чертежа, на который необходимо сделать ссылку.
  • Выберите элемент , чтобы открыть стандартный веб-браузер для поиска адресов веб-сайтов.
  • Нажмите OK.
  • Создание гиперссылки на именованный вид текущего чертежа

    1. В диалоговом окне Гиперссылка выберите элемент Место в данном чертеже.
    2. В окне Выберите место в данном чертеже выберите пользовательский вид.
    3. Нажмите OK.

    Создание гиперссылки на адрес электронной почты

    1. В диалоговом окне Гиперссылка выберите элемент Адрес электронной почты.
    2. В поле Адрес электронной почты введите адрес.

    Отображение подсказки о гиперссылке

    • Переместите указатель на объект, к которому прикреплена гиперссылка.
    • Нажмите клавишу Ctrl и выберите объект, к которому прикреплена гиперссылка.
    1. Выберите элемент Вставить > Гиперссылка (или введите Hyperlink).
    2. Выберите объект, гиперссылку которого необходимо удалить, затем нажмите клавишу Enter.
    3. В диалоговом окне удалите содержимое полей Текст и Адрес.
    4. Нажмите OK.

    Команда: Hyperlink

    Меню: Вставить > Гиперссылка

    Горячая клавиша: Ctrl + K

    Горячая клавиша: Команда + K

    Как создать PDF с гиперссылками

    В короле все нормально, ссылка к тексту привязалась, а вот при открытии документа PDF ссылки неактивны.

    Может какие настройки не учитываю!

    94731 / 64177 / 26122
    Регистрация: 12.04.2006
    Сообщений: 116,782
    Ответы с готовыми решениями:

    Как создать столбец с гиперссылками в DataGridView
    Доброго времени суток уважаемые форумчане. При выполнении курсовой работы возник вопрос, как.

    Как создать PDF файл с именем ZAKAZ_(дата сегодня).pdf
    Как создать из "Excel таблицы" — PDF файл с именем ZAKAZ_(дата сегодня).pdf при помощи макроса? .

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

    Создать сайт: 1 страничку, с гиперссылками на другие сайты
    Добрый всем вечер. Помогите пожалуйста написать сайт html, на тему информационные технологии в.

    Создание Addon (Docker) для Corel Draw

    В Corel Draw начиная с 17 версии появилась удобная возможность создавать дополнения не только на VBA, но и на C# VSTA. Так давайте воспользуемся этим и приблизим мечту о кнопке «Сделать красиво«.

    Для программистов – с 2002 года работаю препресс инженером в типографии. Для меня программирование это хобби: и код, и описание не идеальны. Поэтому буду рад корректуре и критике.

    Для полиграфистов – понимаю, что спуски собирают в специализированных программах, но в реалиях моего города это не целесообразно. Тиражи небольшие, а количество макетов наоборот велико и 95% процентов макетов сделано в CorelDraw.

    Что понадобится, чтобы магия заработала:

    Начальные знания C#

    Начальные знания WPF

    Для удобства написания воспользуемся дополнениями для Visual Studio от “bonus360”:

    Запустим студию от имени администратора, чтобы при компилировании копировать файлы в системные папки. Создаем новый проект, выбрав в качестве шаблона – “CorelDRAW Docker Addon”. Присваиваем имя, например “MagicUtilites”.

    В появившемся окошке присваиваем имя докеру, например также “MagicUtilites”, и выбираем те версии CorelDraw, под которые будем разрабатывать. Жмем “Done” и наблюдаем как рутина выполняется сама.

    Небольшое отступление. Если при первом запуске возникла ошибка, проверьте объявление пространства имен в файле Extensions.cs, оно должно совпадать с названием проекта.

    На этом этапе можно нажать F5 и найти в меню CorelDraw — Window — Dockers ваш докер. Сейчас он пустой и ничего не делает, но мы это исправим.

    Открываем файл DockerUI.xaml в конструкторе XAML и добавляем кнопку на докер.

    В этот раз сделаем не следуя шаблону MVVM (именно им надо пользоваться разрабатывая на платформе WPF), а разместим код в обработчике события нажатия на кнопку. Но больше такого не повторится, обещаю.

    Открываем файл DockerUI.xaml.cs

    private corel.Application corelApp;

    Класс corel.Application представляет приложение, в котором выполняется код докера. Значение полю присваивается в конструкторе.

    Отредактируем метод Button_Click .

    В начале метода добавим проверку, что в CorelDraw есть открытый файл. И если открытого файла нет, прекращаем выполнение.

    private void Button_Click(object sender, RoutedEventArgs e)

    Свойство ActiveDocument типа corel.Application возвращает ссылку на активный документ.

    Добавим быстродействия программе.

    private void Button_Click(object sender, RoutedEventArgs e)

    Остальной код должен быть между этими строками. Метод расширения BeginDraw() отключает перерисовку экрана, вызов событий и выделение corel объектов во время выполнения. Метод расширения EndDraw() восстанавливает настройки.

    В активном документе выполним перебор всех страниц. На каждой странице выполним перебор всех corel объектов для поиска текстовых объектов.

    private void Button_Click(object sender, RoutedEventArgs e) < if (corelApp.ActiveDocument == null) return; corelApp.BeginDraw(); foreach (corel.Page page in corelApp.ActiveDocument.Pages) < foreach (corel.Shape shape in page.Shapes.All()) < if (shape.Type == corel.cdrShapeType.cdrTextShape) shape.ConvertToCurves(); >> corelApp.EndDraw(); >

    При нахождении текстовых объектов, вызывается метод ConvertToCurves() , который переводит этот corel объект в кривые.

    Запустим выполнение. Для проверки кнопки “Text Convert to Curves” нужен открытый документ и текст в нем. Реализованный код работает с любыми текстовыми corel объектами, но если этот объект находится в группе объектов или в PowerClip преобразования в кривые не произойдет.

    Для решения этой проблемы, разберем как Corel Draw представляет объекты в коде.

    Класс corel.Shape содержит свойства и методы для взаимодействия с corel объектами. Свойство Type возвращает именованную константу которая определяет тип corel объекта. Если corel.Shape представляет группу corel объектов, свойство Type вернёт константу cdrGroupShape . Тогда обратившись к свойству Shapes , получим коллекцию corel объектов из группы.

    Также с другими типами corel объектов. Если свойство Type возвращает cdrBitmapShape , то свойство Bitmap возвращает ссылку на картинку. Если свойство Type возвращает cdrGuidelineShape , свойство Guide возвращает ссылку на направляющую.

    Узнать что corel объект – PowerClip так не получится. Чтобы проверить является ли corel объект PowerClip-ом, проверьте свойство PowerClip на null.

    Вернемся к коду.

    Выделим перебор corel объектов в два отдельных метода.

    private void MakeToAllPages() < if (corelApp.ActiveDocument == null) return; corelApp.BeginDraw(); foreach (corel.Page page in corelApp.ActiveDocument.Pages) < MakeToShapeRange(page.Shapes.All()); >corelApp.EndDraw(); >

    Метод MakeToAllPages перебирает все страницы документа.

    private void MakeToShapeRange(corel.ShapeRange sr) < foreach (corel.Shape shape in sr) < if (shape.Type == corel.cdrShapeType.cdrGroupShape) MakeToShapeRange(shape.Shapes.All()); if (shape.PowerClip != null) MakeToShapeRange(shape.PowerClip.Shapes.All()); if (shape.Type == corel.cdrShapeType.cdrTextShape) shape.ConvertToCurves(); >>

    Метод MakeToShapeRange рекурсивно перебирает переданную коллекцию corel объектов.

    В первом условии проверяем является ли corel объект группой и если да, запускаем проверку corel объектов в группе. Во втором проверяем является ли corel объект PowerClip-ом и если да, запускаем проверку corel объектов которые он содержит. В третьем условии проверяем является ли corel объект текстом и если да, переводим его в кривые.

    private void Button_Click(object sender, RoutedEventArgs e)

    В методе Button_Click остается только вызов метода MakeToAllPages .

    Запустим выполнение. Теперь текст обрабатывается в группах и PowerClip.

    Но докер с одной кнопкой, это не интересно, добавим больше кнопок.

    Добавим обработчики нажатия для этих кнопок.

    private void ConvertToCurves(object sender, RoutedEventArgs e)<> private void BitmapToCMYK(object sender, RoutedEventArgs e)<> private void UniformFillToCMYK(object sender, RoutedEventArgs e)<> private void OutlineFillToCMYK(object sender, RoutedEventArgs e)<> private void FountainFillToCMYK(object sender, RoutedEventArgs e)<> private void ResampleBitmap(object sender, RoutedEventArgs e)<>

    Сейчас вся работа с corel объектом происходит в методе MakeToShapeRange . Но теперь нам надо находить не только текст, но и картинки и определять есть ли заливка или обводка у corel объекта. Чтобы много раз не копировать код метода MakeToShapeRange , воспользуемся делегатами.

    Изменим сигнатуру метода MakeToAllPages() на MakeToAllPages(Action action) . Так как вся работа происходит в методе MakeToShapeRange изменим и его сигнатуру. А в методе MakeToAllPages изменим его вызов.

    private void MakeToAllPages(Action action) < if (corelApp.ActiveDocument == null) return; corelApp.BeginDraw(); foreach (corel.Page page in corelApp.ActiveDocument.Pages) < MakeToShapeRange(page.Shapes.All(), action); >corelApp.EndDraw(); > private void MakeToShapeRange(corel.ShapeRange sr, Action action) < foreach (corel.Shape shape in sr) < if (shape.Type == corel.cdrShapeType.cdrGroupShape) MakeToShapeRange(shape.Shapes.All(), action); if (shape.PowerClip != null) MakeToShapeRange(shape.PowerClip.Shapes.All(), action); action(shape); >>

    Не забываем изменить аргументы в рекурсивном вызове метода.

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

    Далее уточнения будут в комментариях кода.

    private void ConvertToCurves(object sender, RoutedEventArgs e) < MakeToAllPages((s) =>< if (s.Type == corel.cdrShapeType.cdrTextShape) // если текст s.ConvertToCurves(); // перевести в кривые >); > private void BitmapToCMYK(object sender, RoutedEventArgs e) < MakeToAllPages((s) =>< if (s.Type == corel.cdrShapeType.cdrBitmapShape) // если картинка if (s.Bitmap.Mode != corel.cdrImageType.cdrCMYKColorImage) // цветовая модель не CMYK s.Bitmap.ConvertTo(corel.cdrImageType.cdrCMYKColorImage); // конвертировать в CMYK >); > private void UniformFillToCMYK(object sender, RoutedEventArgs e) < MakeToAllPages((s) =>< if (s.CanHaveFill) // у объекта может быть заливка if (s.Fill.Type == corel.cdrFillType.cdrUniformFill) // заливка сплошная if (s.Fill.UniformColor.Type != corel.cdrColorType.cdrColorCMYK) // цветовая модель не CMYK s.Fill.UniformColor.ConvertToCMYK(); // конвертировать в CMYK >); > private void OutlineFillToCMYK(object sender, RoutedEventArgs e) < MakeToAllPages((s) =>< if (s.CanHaveOutline) // у объекта может быть обводка if (s.Outline.Type == corel.cdrOutlineType.cdrOutline) // обводка есть if (s.Outline.Color.Type != corel.cdrColorType.cdrColorCMYK) // цветовая модель не CMYK s.Outline.Color.ConvertToCMYK(); // конвертировать в CMYK >); > private void FountainFillToCMYK(object sender, RoutedEventArgs e) < MakeToAllPages((s) => < if (s.CanHaveFill) // у объекта может быть заливка if (s.Fill.Type == corel.cdrFillType.cdrFountainFill) // заливка градиент < foreach (corel.FountainColor c in s.Fill.Fountain.Colors) // перебор всех ключей в градиенте < if (c.Color.Type != corel.cdrColorType.cdrColorCMYK) // цветовая модель не CMYK c.Color.ConvertToCMYK(); // конвертировать в CMYK >> >); > private void ResampleBitmap(object sender, RoutedEventArgs e) < MakeToAllPages((s) =>< int resolution = 300; if (s.Type == corel.cdrShapeType.cdrBitmapShape) // если картинка if (s.Bitmap.ResolutionX != resolution || s.Bitmap.ResolutionY != resolution) // разрешение не совпадает с заданным s.Bitmap.Resample(0, 0, true, resolution, resolution); // изменяем разрешение на заданное >); >

    На этом сеанс практической магии на сегодня закончен.

    В следующей статье хочу описать создание докера для автоматического рисования меток реза на спуске.

    Пользуясь случаем, рекомендую очень классные и бесплатные интерактивные онлайн-курсы по программированию от фирмы Контур. Так же рекомендую канал Павла Шмачилина по WPF, это лучшее что я видел на YouTube по этой теме.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *