Как нарисовать сердечко фрейм в индизайне
Перейти к содержимому

Как нарисовать сердечко фрейм в индизайне

  • автор:

Изменение формы фрейма

Когда вы изменяли размер фрейма с помощью инструмента выделения, фрейм сохранял свою прямоугольную форму. Сейчас вы воспользуетесь инструментом Реn (Перо) и инструментом DirectSelection (Прямое выделение) для изменения формы фрейма.

    Нажмите клавишу А, чтобы выбрать инструмент прямого выделения (

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

    Переместитесь на страницу 5, где нижняя сторона пути пересекается с левым полем страницы, и, используя инструмент пера, добавляющий точку привязки (

    Нажмите клавишу А, чтобы выбрать инструмент Direct Selection (Прямое выделение). Не снимая выделения со второй новой точки привязки, переместите указатель на первую новую точку привязки (на странице 4 макета) так, чтобы стрелка указателя отображалась с небольшим квадратом (

Теперь размеры и форма рисунка изменены надлежащим образом в соответствии с требуемым дизайном данных страниц.

  1. Нажмите клавишу V, чтобы переключиться на инструмент выделения, и выделите фиолетовый рисунок. Затем выберите команду меню Object * Arrange * Send to Back (Объект * Компоновка * На задний план), чтобы рисунок отображался сзади других элементов на слое Art.

Можно одновременно изменять размеры рисунка и его фрейма, пользуясь инструментом выделения и удерживая нажатыми клавиши Ctrl+Shift (Windows) или Command+Shift (Mac OS) в процессе перетаскивания маркеров фрейма. В этом случае при нажатии клавиши Shift сохраняются пропорции ограничивающих контуров, так что графическое изображение не будет искажаться. Клавишу Shift можно не нажимать, если искажение изображения не критично для проекта.

Рисование линий и фигур

  • Чтобы нарисовать линию или фигуру, выберите инструмент «Линия» , «Эллипс» , «Прямоугольник» или «Многоугольник» (чтобы выбрать инструмент «Эллипс» или «Многоугольник», нажмите и держите инструмент «Прямоугольник»).
  • Чтобы нарисовать пустой графический фрейм (используемый в качестве заполнителя), выберите инструмент «Овальный фрейм» , «Прямоугольный фрейм» или «Многоугольный фрейм» .

Перетащите объект в окне документа, чтобы создать контур или фрейм.

  • Для рисования от центра наружу нажмите и держите клавишу «Alt» (Windows) или «Option» (Mac OS).
  • Чтобы ограничить наклон линии углом 45° или сохранить пропорции ширины и высоты контура или фрейма, во время перетаскивания держите нажатой клавишу «Shift».
  • Чтобы создать несколько фигур на сетке, нажмите клавиши со стрелками, удерживая кнопку мыши нажатой. См. раздел Создание нескольких объектов в виде сетки.
  • Чтобы изменить количество сторон многоугольника, начните перетаскивать, нажмите пробел, а затем нажмите клавиши со стрелками вверх и вниз. Нажмите клавиши со стрелками вправо и влево, чтобы изменить высоту лучей звезды. Нажмите пробел еще раз, чтобы вернуться в режим сетки.

Примечание.

Приведенный результат показывает ограничительный прямоугольник вокруг контура. Он отображается в случае, если недавно был активен инструмент «Выделение» . Если после этого был активен инструмент «Частичное выделение» , контур появится с опорными точками.

Создание нескольких объектов в виде сетки

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

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

  • Для изменения количества столбцов нажмите клавиши со стрелками влево и вправо. Для изменения количества строк нажмите клавиши со стрелками вверх и вниз.
  • Чтобы изменить интервал между фреймами, при перетаскивании удерживайте клавишу «Ctrl» (Windows) или «Command» (Mac OS) и нажимайте клавиши со стрелками.

Отпустите кнопку мыши.

Если вы используете клавиши со стрелками, чтобы изменять количество сторон или высоту лучей звезды, используя инструмент «Многоугольник», нажмите пробел при удержании кнопки мыши нажатой.

Рисование шаблонной фигуры

Шаблонный заполнитель фигуры представляет собой овал, прямоугольник или многоугольник, отображаемый в окне документа со значком «X», что означает, что эта фигура должна быть позже заменена текстом или изображением.

На панели «Инструменты» выберите инструмент «Овальный фрейм» , «Прямоугольный фрейм» или «Многоугольный фрейм» .

Перетащите объект в окне документа, чтобы создать контур или фрейм. Чтобы ограничить ширину и высоту фрейма, держите нажатой клавишу «Shift».

Примечание.

Для фрейма-заполнителя можно изменить величину обрезки, контрольную точку и другие параметры подгонки, выбрав в меню «Объект» > «Подгонка» > «Параметры подгонки фрейма».

Сказ о том, как добрый молодец борол змея трехглавого, или Как встроить графики в формате SVG в документы Adobe InDesign — часть первая

Приветствую всех хабражителей!
Сначала небольшое лирическое отступление. Этот пост был написан не мной, а пока еще незахабренным upd: уже захабренным viklequick, и, на мой взгляд, заслуживает вашего внимания со всеми вытекающими. Итак…

image

Однажды в студеную зимнюю пору надоело автору добру молодцу бороться с векторными картинками в формате EPS. И решил он идти в ногу с прогрессом и встраивать графики и диаграммы в документы Adobe InDesign в виде SVG. И тут постигло его разочарование великое, ибо фирма Adobe Systems предпочитает свой Adobe Flash, а в Adobe InDesign поддержка SVG отсутствует на корню. Однако ж у добра молодца накопился знатный опыт создания плагинов под InDesign и решил он применить свою силушку богатырскую и забороть гидру трехглавую. Богатырь сказал – богатырь сделал, а именно — заборол.
О деталях этой борьбы и поведем наш сказ.

Шаг первый, или Изучаем анатомию гидры трехглавой

image

Для начала, необходимо вкратце упомянуть о том, как InDesign работает с картинками.
C точки зрения InDesign картинки — это специальный вид PageItem, который умеет сам себя отрисовывать и печатать. А этот самый PageItem может быть положен на страницу, или как inline во фрейм, или в ячейку таблицы, и все это надо уметь обрабатывать. И еще, отрисовка бывает трех видов — быстрая (рисуется перечеркнутый прямоугольник), оптимальная (растровый proxy image), и полная (медленная). Необходимо все это также поддерживать.
Таким образом, у нас вырисовывается Import Plug-in, Page Item и несколько вспомогательных классов, вот так:

Class < kSVGItem, kDisplayListPageItemBoss, < IID_ISHAPE, kSVGShapeImpl, IID_IINKRESOURCES, kAllProcessInkResourcesImpl, IID_IFLATTENERUSAGE, kSVGItemFlattenerUsageImpl, IID_IVISITORHELPER, kEPSItemVisitorHelperImpl, IID_ISCRIPT, kSVGItemScriptImpl, >>,

Class
kSVGPlaceProviderBoss,
kInvalidClass,
IID_IK2SERVICEPROVIDER, kImportServiceImpl,
IID_IIMPORTPROVIDER, kSVGPlaceProviderImpl,
IID_IIMPORTPREVIEW, kSVGImportPreviewImpl,
>
>,

И, разумеется, есть еще стандартная шапка на предмет startup / shutdown, которую нет смысла приводить.
Давайте разберемся, что это и зачем.
• IID_ISHAPE — это реализация собственно page item, ведающая отрисовкой.
• IID_IINKRESOURCES — обрабатываем ссылки на внешние файлы (Ink).
• IID_IFLATTENERUSAGE — обрабатываем растеризацию альфа-канала в PDF. Собственно, это одна строчка, явно требующая включения flattener, и не более того.
• IID_IVISITORHELPER — оставляем стандартным, позаимствовав у EPS.
• IID_ISCRIPT — обеспечиваем поддержку нашего элемента через скриптинг. Это тоже очень простая часть, всего лишь корректно задающая тип объекта.
• IID_IK2SERVICEPROVIDER и IID_IIMPORTPROVIDER — добавляем поддержку для команды Place.
• IID_IIMPORTPREVIEW — и обеспечиваем предпросмотр в диалоге выбора файлов (Windows specific).
Наиболее интересным является собственно IID_ISHAPE, это сердце нашего плагина. От него требуется умение рисовать самого себя непосредственно по IGraphicsPort, а также получение растрового proxy image. Забегая вперед, хочу отметить — сюрпризов было в достаточном количестве.

Шаг второй, или Выбираем меч богатырский

image

Экспресс-гугление, а также просмотр образцов картинок из OpenClipArt навел меня на мысль остановиться на Apache Batik. Сразу скажу, пришлось приложить некоторые усилия для починки самого Batik, но они в итоге оказались незначительны. В основном свелись к «угадай версию SVG по содержимому». Однако появилась задача «как отрисовать батиком картинку по IGraphicsPort», на ней мы и сосредоточимся, как на самой сложной. И будем перемещаться от скучных материй С++ к веселому креативу Java и обратно.
Однако ж менестрели позорные нам скажут – это ты, богатырь, не в ту сказку забрел, и получишь в итоге пять метров колючей проволоки, как всегда и бывает при скрещивании ежа с ужом. Опыт, сын ошибок трудных, нас учит – в данном случае получается нечто более полезное.

image

Шаг третий, или Приступаем к поединку
Как уже упоминалось выше, надо научить Java работать с потоками Индизайна. Собственно, задача очевидна и решается через JNI:

/**
* Class for reading from InDesign IPMStream
*/
public class PMInputStream extends InputStream
/**
* Creates PMInputStream object and attaches it to IPMStream* already
* opened by InDesign.
* @param iPMStreamPtr IPMStream* to attach to
* @throws IOException The stream has no ability to read.
*/
public PMInputStream(long iPMStreamPtr) throws IOException this.ownedStreamPtr = iPMStreamPtr;
this.retain();
>

@Override
public int read() throws IOException return readByte();
>

@Override
public int read(byte b[], int off, int len) throws IOException if (len == 0) return 0;
return readBytes(b, off, len);
>

@Override
public long skip(long n) throws IOException return performSeek(n, SeekFromCurrent);
>

public long seek(long numberOfBytes, int fromHere) throws IOException return performSeek(numberOfBytes, fromHere);
>

@Override
public int available() return availableBytes();
>

// native functions below
.

Реализация строится через native функции, приведем их список. Они самоочевидны и особых комментариев не требуют. Есть только один интересный момент, вот он:

/**
* ‘Cause IPMStream is a COM-like object we gotta call AddRef() for it
* if we wanna save pointer in our class.
*/
private native void retain();
/**
* Once we called AddRef() we shouldn’t forget calling corresponding
* Release(). Let’s do it!
*/
private native void release();

protected native int readByte();
protected native int readBytes(byte b[], int off, int len);
protected native long performSeek(long numberOfBytes, int fromHere);
protected native int availableBytes();

protected native String getFileName();
protected native long getLastModifiedTime();

Две последних функции были добавлены для кэширования элементов непосредственно в Java, чтобы не строить заново DOM-модели на каждую отрисовку. Надо всего лишь отслеживать изменения данных и оперативно перечитывать их при изменении.
И последний штрих — собственно реализация native методов.

class IPMStream; class PMInputStream
private:
IPMStream* fStream;

public:
PMInputStream(IPMStream* stream);
~PMInputStream()

int read(unsigned char* buffer, int len)< return fStream->XferByte(buffer, len); >
XInt64 seek(XInt64 numberOfBytes, SeekFrom fromHere) <
return fStream->Seek((int32)numberOfBytes, fromHere);
>

public:
enum SeekFrom < SeekFromStart = kSeekFromStart,
SeekFromCurrent = kSeekFromCurrent,
SeekFromEnd = kSeekFromEnd
>;
>;

Мы уже добрались до SVG, но теперь появляется задача получить и нарисовать картинку. Собственно, нарисовав векторную картинку в BufferedImage, мы и получаем наш proxy image. Стандартный пример из батика нам наглядно показывает, каким образом он получен, поэтому для экономии места позволю себе эту портянку тут не приводить. Очевидно также использование PixelGrabber для получения массива байтов в RGB из BufferedImage. Полученный массив мы передаем в AGMImageRecord точно так же, как рассмотрено во второй части статьи.
Интересно, что отрисовка на IGraphicsPort вместо BufferedImage отличается ровно одной строчкой, вместо стандартного offscreen Graphics2D нам надо подставить свою реализацию. Этим мы и займемся.

Шаг четвертый, или Коварно подключаем к мечу электроток, чтобы искры летели
Объем кода для грамотного наследования Graphics2D велик, зануден, но очевиден, и его легко можно подсмотреть у того же Apache Batik. Поэтому мы сосредоточимся на наиболее интересных частях, а вот целую пачку геттеров и сеттеров а-ля Paint getPaint() < return paint; >опустим.
Отмечу лишь, что в общем можно смело вставлять заглушки такого вида:

public void fillRect(int x, int y, int w, int h)

В результате таких вот упрощений и изничтожения дубликатов, у нас реальных функций получается вот сколько:

public void draw(Shape s);
public void fill(Shape s);
public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer);

public void drawString(String str, float x, float y);
public void drawString(AttributedCharacterIterator iterator, float x, float y);

Можно пойти дальше, использовав StrokeTextPainter, и этот набор сократится до трех функций, что радует.
Теперь подойдем с другой стороны, и посмотрим что нам надо от IGraphicsPort:

private native void newpath();
private native void moveto(float x, float y);
private native void lineto(float x, float y);
private native void curveto(float x1, float y1, float x2, float y2, float x3, float y3);
private native void curvetov(float x2, float y2, float x3, float y3);
private native void closepath();

private native void gsave();
private native void grestore();

private native void setlinewidth(float width);
private native void setdash(int len, float[] dashArray, float offset);
private native void setopacity(float opacity, boolean bIsAlphaShape); // from 0 to 1.0
private native void setrgbcolor(float r, float g, float b);

private native void fill();
private native void eofill();
private native void stroke();

private native void image(int[] buffer, int x, int y, int width, int height, double[] transformMatrix);

private native void clip();
private native void eoclip();

Опытным взглядом можно заметить явное отсутствие таких средств отрисовки, как градиенты. Увы, документация на эту часть API у Adobe настолько скудна, что мне так и не удалось воспользоваться наличествующими функциями, пришлось шаманить, как будет рассмотрено ниже.
Как видно, надо нам немного. Однако возникает новая задача: нам надо как-то все это дело теперь совместить. Начнем с простого — с геометрических фигур.
Самое сложное здесь — это развернуть shape из Java в набор native функций. Для этого воспользуемся стандартным PathIterator, ну и при этом не забываем про трансформации, ибо Batik использует AffineTransform весьма активно:

private void applyPath(PathIterator pi, int kind) float[] coord = new float[6];
int retSeg;

newpath();
while(!pi.isDone()) retSeg = pi.currentSegment(coord);
switch (retSeg) case SEG_LINETO:
lineto(coord[0], coord[1]);
break;
case SEG_CUBICTO:
curveto(coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]);
break;
case SEG_MOVETO:
moveto(coord[0], coord[1]);
break;
case SEG_QUADTO:
curvetov(coord[0], coord[1], coord[2], coord[3]);
break;
case SEG_CLOSE:
closepath();
break;
>
pi.next();
>

if(kind == PATH_FILL) if(pi.getWindingRule() == PathIterator.WIND_EVEN_ODD) eofill();
else fill();
>
else if(kind == PATH_STROKE) stroke();
else if(kind == PATH_CLIP) if(pi.getWindingRule() == PathIterator.WIND_EVEN_ODD) eoclip();
else clip();
>
>

Теперь мы можем легко рисовать примитивы:

image

public void draw(Shape s) PathIterator pi = s.getPathIterator(getTransform());
applyClip(getClip());
applyStroke(s);
applyStyles();
applyPath(pi, PATH_STROKE);
restoreClip();
>

Пока что не будем акцентироваться на всяческих apply*, они рассмотрены далее. Собственно говоря, fill() выглядит точно так же, если не считать некоторых трудностей с градиентами. Как нетрудно догадаться, applyClip() также реализуется аналогично:

private void applyClip(Shape xclip) gsave();
if(xclip != null) PathIterator pi = xclip.getPathIterator(getTransform());
applyPath(pi, PATH_CLIP);
>
>

Реальный код чуть сложнее, приходится учитывать особенности реализации flattener в IGraphicsPort, и по мере необходимости обход переворачивать, чтобы обход пути шел против часовой стрелки. И, как и упоминалось ранее, Batik прекрасно умеет текст векторизовать в набор глифов, поэтому о работе со шрифтами можно не беспокоиться. Так что текст у нас неизбежно становится набором геометрических фигур.

  • svg
  • масштабируемая векторная графика
  • indesign

Верстка полиграфической продукции в Adobe InDesign

Треугольник

Иконка

Дистанционное обучение
является индивидуальным.

Начать обучение можно
в любое удобное для Вас время!

Вас подключат к системе
дистанционного обучения
сразу после заключения договора
и оплаты первого этапа.

Возможно предоставление
тестового доступа.

Адрес

Россия, 196135, Санкт-Петербург,
Университет ИТМО,
ул. Гастелло 12, кабинет 312

E-mail

Контактные телефоны

Официальный сайт

Также вопросы можно задать:

Viber/WhatsApp 24/7
+7 911 120 27 20

Adobe InDesign представляет собой универсальное приложение для публикации контента, которое обеспечивает точный контроль над дизайном и типографикой на высоком уровне. Интеграция InDesign с другими программами пакета Adobe (Illustrator, Photoshop) позволяет адаптировать макеты к различным форматам страниц, ориентациям и устройствам с сохранением высокого качества изображения. InDesign — сердце десятков издательских систем для газет, журналов и другой издательской среды. Adobe InDesign используют дизайнеры и верстальщики по всему миру не только для создания печатных публикаций, но и для интерактивных изданий. Отметив своё 20-летие, InDesign не останавливается на достигнутых высотах и постоянно выпускает новые обновления и плагины, которые позволяют дизайнерам и верстальщикам воплощать в жизнь самые смелые идеи.

  • Уверенный пользователь ПК
  • Знание Adobe Photoshop, Adobe Illustrator — необязательно, но желательно

Программа курса Версия для печати —>

  • Тема 1. Основные сведения о программах верстки. Интерфейс программы InDesign. Просмотр документа. Обзор палитр Стрелка вниз
    • Для чего нужны программы верстки. Отличия InDesign от PageMaker. Преобразование документов Adobe PageMaker. Интерфейс программы. Восстановление настроек по умолчанию. Просмотр и перемещения. Изменение масштаба отображения документа. Перемещение по документу. Прокрутка документа. Использование палитры Navigator (Навигатор). Обзор палитры инструментов. Управляющая палитра в режимах графики, символов и абзацев. Приемы работы со слоями и страницами документа. Основные клавиатурные сокращения. Команды меню File (Файл).
  • Тема 2. Создание документа. Параметры и установки документа. Импорт объектов. Использование мастер-страниц Стрелка вниз
    • Команды меню Edit (Редактирование). Специальная и многократная вставка в документ. Диалоговое окно Preferences (Установки). Рекомендации по настройкам программы. Параметры документа. Изменение параметров уже созданного документа. Импорт (помещение) в документ текста и графики. Работа с мастер-страницами. Применение мастер-страниц к страницам документа. Добавление разделов для изменения нумерации страниц. Переопределение элементов мастер-страницы на страницах документа. Редактирование мастер-страниц.
  • Тема 3. Работа с объектами. Параметры и виды фреймов. Основные операции с объектами Стрелка вниз
    • Создание фреймов и их виды. Назначение цвета. Линии (контуры, обводки). Палитры Stroke (Обводка) и Parhfinder (Обработка контуров). Команды меню Object (Объект). Группировка объектов. Дублирование. Изменение порядка объектов. Fitting – подгонка фрейма. Работа стрелками. Трансформация и изменение положения объектов. Использование узлов для изменения формы фрейма. Модификация графических фреймов. Изменение размера графического фрейма. Изменение размеров рисунка и его перемещение внутри фрейма. Изменение формы фрейма. Модификация фрейма внутри сгруппированных объектов
  • Тема 4. Текстовые фреймы. Текст и графика Стрелка вниз
    • Текст во фреймах. Свойства текстовых фреймов. Использование возможностей текстовых фреймов. Выравнивание текста с помощью сетки базовых линий. Размещение текста из внешних программ. Размещение текста вручную. Автоматическое размещение текста. Команды меню Type (Текст). Выбор гарнитуры, размера, начертания шрифта. Настройка междустрочного интервала. Контекстное меню при выделенном тексте. Форматирование текста. Палитры параметров символов и абзацев. Текст и графика. Преобразование текста в графику. Расположение текста по траектории. Использование табуляций, размещение текста в колонках.
  • Тема 5. Стили и параметры текста Стрелка вниз
    • Работа со стилями текста. Стили абзацев. Стили символов. Контекстные меню палитр стилей. Применение стиля. Загрузка стилей из другого документа. Диалоговые окна параметров текста. Изменение выключки абзаца. Настройка кернинга и трекинга. Добавление линейки над или под абзацем. Применение компоновщиков абзацев и одиночной строки. Создание буквицы. Настройка автоматических переносов и маркированных списков. Вставка символов. Цифровая кодировка символов.
  • Тема 6. Работа с цветом. Градиентные заливки. Управление цветом Стрелка вниз
    • Палитра Swathes (Образцы). Добавление цветов в палитру. Применение цветов к объектам. Создание и применение образца градиента. Настройка направления градиентного перехода. Создание образца градиента с несколькими цветами. Применение градиента к объекту. Создание оттенка. Создание плашечного цвета. Применение к тексту цвета. Диалоговые окна системы управления цветом.
  • Тема 7. Импортированные изображения. Связанные файлы Стрелка вниз
    • Импортирование и связывание изображений. Палитра Links (Связи). Идентификация импортированных изображений. Просмотр информации об импортированных файлах. Обновление измененных изображений, динамическое обновление иллюстраций. Помещение файла программы Photoshop и настройка качества отображения. Удаление фона белого цвета в программе InDesign. Импортирование файла программы Photoshop и альфаканалов. Использование альфа-каналов программы Photoshop в программе InDesign. Обтравочные контуры и обтекание текстом. Команды меню View (Просмотр). Команды меню Window (Окно).
  • Тема 8. Работа с таблицами Стрелка вниз
    • Команды меню Table (Таблица). Палитра таблица, управляющая панель в режиме таблица. Параметры таблицы. Параметры ячейки. Импортирование и форматирование таблицы. Форматирование границ и чередование цветов строк. Добавление границ ячеек. Форматирование ячеек шапки таблицы. Установка фиксированного размера строк и столбцов. Помещение изображений в ячейки таблицы. Изменение размера столбца посредством перетаскивания. Работа с таблицами внутри существующих текстовых фреймов.
  • Тема 9. Печать и экспорт документа Стрелка вниз
    • Команда Preflight (Предпечатная проверка). Диалоговое окно Print (Печать). Управление параметрами печати. Варианты печати в файл, в масштабе, с разбиением. Цветоделенный оригинал-макет. Треппинг. Overprint (Надпечатка). Просмотр цветоделений. Просмотр объединенной прозрачности. Печать пробного оттиска. Печать в файл. Экспорт в PDF. Выбор качества файла. Спуск полос (буклет). Команда Package (Запаковать).
  • Тема 10. Сложные многостраничные документы Стрелка вниз
    • Страницы. Команды меню Layout (Макет). Палитра Page (Страницы). Расположение и нумерация страниц. Генерация оглавления. Обновление оглавления. Создание ссылок предметного указателя. Генерация предметного указателя. Оглавление и указатель в электронном документе. Создание скользящих колонтитулов. Создание и размещение сносок. Команды меню Notes (Примечания).

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

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