Мельница данных- Методы  (раздел целиком)  (14.09.2019)
Методы

1. Свойства документа

Для создания и описания свойств PDF-документа в библиотеке PDFCreator.dll используется класс IPDFDocument, обладающий следующими свойствами:

  • Title (WideString) - заголовок документа. По умолчанию - пустая строка.
           
    Title = "DOC1"
  • CanEmbedFonts (WordBool) - Признак возможности построения PDF- документа со встроенными шрифтами (Embedded Fonts). В случае включения признака, все объявленные в скрипте шрифты будут включены в сборку документа и будут передаваться целиком вместе с документом. По умолчанию - False.
           
    CanEmbedFonts = True 
    CanEmbedFonts = False
  • CanCompress (WordBool) - признак сжатия документа при создании по собственным алгоритмам. По умолчанию - True.
           
    CanCompress = False 
    CanCompress = True
  • Author (WideString) - автор документа. По умолчанию - текущий пользователь ОС.
  • Subject (WideString) - описание документа. По умолчанию - пустая строка.
  • Keywords (WideString) - ключевые слова для поиска по документу. По умолчанию - пустая строка.
  • Creator (WideString) - приложение-родитель документа. Указывается в том случае, если документ был сконвертирован из другого формата.
  • PageCount (Integer) - свойство, содержащее общее количество страниц в документе.
  • Pages[Index: Integer]: IPDFPage - свойство документа, предназначенное для перебора страниц документа для совершения над ними однотипных действий.
           

    Пример использования:

    for I = 0 to PageCount - 1
      Pages(I).rectangle 10,10,10,10, false
    next
    Save "c:\pdf.pdf"

    Результат: На всех страницах документа будут нарисованы квадраты 10х10 мм.
  • procedure Save(Target: OleVariant) - процедура для сохранения документа PDF на жесткий диск сразу после создания.
           
    Save "c:\pdf.pdf"
    - сохранит документ в файл c:\pdf.pdf


2. Свойства страницы

Для создания страницы используется функция

function CreatePage(Parent: OleVariant): IPDFPage;

Параметр Parent указывает страницу-родителя для данной страницы. Если страницы- родителя быть не должно - формат вызова функции примет вид:

set page = CreatePage(Null)

Параметры страницы:

  • Title - заголовок страницы.
           
    page.Title = "Page name"
          
  • Width - ширина страницы, миллиметры
           
    page.Width = 80
          
  • Height - высота страницы, миллиметры
           
    page.Height = 80
          
  • DrawGrid - процедура, выводящая на страницу сетку с шагом 5 миллиметров для удобства отладки вида документа.
  • Perform - процедура, позволяющая выполнить дополнительные команды PostScript на странице.
           
    page.perform "1 0.7 0 0 k"
    page.perform "0 0 m"

2.1. Объявление цвета

Для объявления цвета объектов на странице используется цветовая модель R:G:B (Red:Green:Blue). Объявление цвета для выполнения последующих операций (цвет шрифта, цвет линии/фигуры) осуществляется процедурой

procedure SetColor(R: Integer; G: Integer; B: Integer);
Где параметры R, G, B - значения базисных цветов для выбранного цвета (от 0 до 255).

       
ЦветRGB
Белый 255 255 255 +++
Черный 0 0 0 +++
Серый 190 190 190 +++
Синий 0 0 255 +++
Красный 255 0 0 +++
Зеленый 0 255 0 +++
       

Если предварительно цвет не был объявлен, используется цвет по умолчанию - черный (0,0,0)


3. Графика

3.1. Линии

Для отрисовки линий используется процедура

procedure Line(X1: Double; Y1: Double; X2: Double; Y2: Double);
Здесь:

  • X1 - координата начала линии по горизонтали в миллиметрах от верхнего левого угла листа.
  • Y1 - координата начала линии по вертикали в миллиметрах от верхнего левого угла листа.
  • X2 - координата конца линии по горизонтали в миллиметрах от верхнего левого угла листа.
  • Y2 - координата Конца линии по вертикали в миллиметрах от верхнего левого угла листа.

Для задания толщины линии используется свойство

property LineWidth: Double
Значение толщины задается в миллиметрах. Значение по умолчанию - минимально возможная единица рисования для устройства. Так для монитора - 1 pixel, для принтера - 1 dot (точка)

Для задания стиля отрисовки начала/окончания линии используется свойство property LineCap: TPDFLineCap
Возможные стили:
Значение свойства: Отображение: Описание:
0Линия 0Прямой срез точно по точкам начала и окончания линии (по умолчанию)
1Линия 1С закруглением
2Линия 2Прямой срез с продолжением линии на половину толщины линии

Объявление цвета линии.

        Две линии разной толщины, с разными окончаниями и цветами:
set page = CreatePage(Null)

page.DrawGrid

page.LineCap = 1

page.LineWidth = 2

page.Line 10, 10, 30, 30

page.LineWidth = 4

page.SetColor 255, 0, 0

page.LineCap = 2

page.Line 10, 30, 30, 10."I 


Результат:
2 линии

При необходимости соединения линий под углом в определенной точке можно задать тип соединения. Для объявления типа соединения используется свойство property LineJoin: TPDFLineJoin;
Типы соединения двух линий:
Значение свойстваОтображениеОписание
02 линии 0С острым углом
12 линии 1С закруглением
22 линии 2С обрезанным углом

Пунктир

Для создания пунктира используется процедура отображения линии с предварительно объявленными дополнительными значениями.

Процедура procedure SetDash(DashArray: OleVariant; Phase: Integer); Здесь DashArray - массив значений в миллиметрах, указывающий последовательность чередования штрихов и пропусков на линии, Phase - смещение в миллиметрах по линии.

        Пример 1. Штрих 10 мм, Промежуток 5 мм, Смещения нет
Пример 2. Штрих 10 мм, Промежуток 5 мм, Смещение 5 мм
Пример 3. Различные значения штрихов и промежутков, Смещения нет
set page = CreatePage(Null)

page.DrawGrid

page.LineWidth = 3

page.SetDash Array(10, 5), 0

page.Line 10, 10, 100, 10

page.SetDash Array(10, 5), 5

page.Line 10, 20, 100, 20

page.SetDash Array(10, 5, 3, 2, 12, 20), 0

page.Line 10, 30, 100, 30

Результат:
Пунктир 1

Ломанная линия - здесь непрерывная линия, состоящая из нескольких прямых. Для отображения ломанной используется процедура procedure Poly(Points: OleVariant; Fill: WordBool), где Points - массив координат точек соединяемых прямыми, а Fill - признак заливки полученной замкнутой фигуры (если замкнута).

        Пример Звезда без заливки
set page = CreatePage(Null)

page.DrawGrid

page.LineWidth = 3

page.Poly  Array(10, 45, 100, 45, 27, 103, 55, 10, 82, 103, 10, 45), false

Результат:
Звезда
        Пример Звезда с заливкой
set page = CreatePage(Null)

page.DrawGrid

page.LineWidth = 3

page.Poly  Array(10, 45, 100, 45, 27, 103, 55, 10, 82, 103, 10, 45), true

Результат:
Звезда заливка

3.2. Прямоугольник

Rectangle (Прямоугольник) - для создания используется процедура:

procedure Rectangle(X1: Double; Y1: Double; Width: Double; Height: Double; Fill: WordBool);
Здесь:

  • X1 - координата верхнего левого угла прямоугольника по горизонтали в миллиметрах от верхнего левого угла листа шаблона.
  • Y1 - координата верхнего левого угла прямоугольника по вертикали в миллиметрах от верхнего левого угла листа шаблона.
  • Width - ширина прямоугольника с миллиметрах.
  • Height - высота прямоугольника с миллиметрах.
  • Fill - признак заливки прямоугольника (True/False). Если значение True то заливка производится объявленным заранее цветом (см. Объявление цвета). Если False - заливка не производится. Прямоугольник отрисовывается линиями с предварительно заданной толщиной. См. Линии
        Пример 1. Создание красного прямоугольника:
set page = CreatePage(Null)

page.SetColor 255, 0, 0

page.Rectangle 10, 15, 40, 20, True

page.DrawGrid
Результат:
Прямоугольник
Пример 2. Пустой прямоугольник без задания цвета:
set page = CreatePage(Null)

page.DrawGrid

page.Rectangle 12, 17, 42, 25, false

page.DrawGrid

Результат:
Прямоугольник false

Также существует возможность изменения стиля отображения углов прямоугольника. Для этого нужно использовать свойство property LineJoin: TPDFLineJoin;

Значение свойстваОтображениеОписание
02 линии 0С острым углом
12 линии 1С закруглением
22 линии 2С обрезанным углом

Пример построения прямоугольников с различными типами соединения сторон:

       
set page = CreatePage(Null)

page.DrawGrid

page.LineWidth = 4

page.LineJoin = 0

page.Rectangle 10, 10, 20, 10, false

page.LineJoin = 1

page.Rectangle 40, 10, 20, 10, false

page.LineJoin = 2

page.Rectangle 70, 10, 20, 10, false


Результат:
3 прямоугольника

3.3. Вставка готовых изображений

Для вставки на создаваемую страницу готового изображения используется процедура procedure Image(const FileName: WideString; X: Double; Y: Double; Width: Double; Height: Double)

Параметры:

  • const FileName - имя файла изображения и путь к нему на жестком диске. Задается в кавычках.
  • X - координата левой верхней точки изображения по отношению к верхнему левому углу страницы по горизонтали в миллиметрах
  • Y - координата левой верхней точки изображения по отношению к верхнему левому углу страницы по вертикали в миллиметрах
  • Width - ширина изображения в миллиметрах
  • Height - высота изображения в миллиметрах.
       
set page = CreatePage(Null)
page.drawgrid
page.Image "c:\mill.bmp", 10,10, 30, 30

Результат:
Картинка

Вне зависимости от размера исходного изображения, при вставке изображения на создаваемую страницу оно будет растянуто по размерам, прописанным в процедуре.


3.4. Векторная графика

Язык PostScript, с помощью которого создаются векторные изображения для PDF-документа, поддерживает создание типичных примитивных объектов, таких как:

  • Прямые и ломанные линии
  • Многоугольники
  • Окружности и эллипсы
  • Кривые Безье
  • Текст

При создании векторного изображения на странице PDF-документа в приложениях Платформы, команды построения примитивных объектов PostScript передаются на исполнение при помощи процедуры Perform. Подробнее об операторах и командах PostScript для создания PDF-документов можно узнать на сайте Adobe


4. Шрифты

Шрифты, которые должны использоваться в создаваемом документе, должны быть предварительно объявлены. Для объявления используемых шрифтов используется функция
function CreateFont(const FontName: WideString; Size: Double; Bold: WordBool; Italic: WordBool): IPDFFont; где:

  • const FontName - имя шрифта, аналогичное имени объявляемого шрифта в операционной системе. В Функции объявляется в кавычках.
  • Size - размер шрифта в пунктах
  • Bold - признак начертания шрифта "жирный". Значения - True или False
  • Italic - признак начертания шрифта "курсив". Значения - True или False
        Примеры объявления шрифтов:
set font = page.createFont("Arial", 20, False, False)
set labelFont = page.createFont("Times New Roman", 16, False, True)
set dataFont = page.createFont("Tahoma", 18, True, False)
  

Для вывода текстовой информации на страницу используются процедуры:

  • procedure WriteLine(const LineText: WideString; X: Double; Y: Double);
    - используется для вывода текстовой строки
  • function WriteText(const AText: WideString; X: Double; Y: Double; Width: Double; Alignment: TPDFTextAlignment): Double;
    - используется для вывода текстового блока.

Параметры для procedure WriteLine :

  • const LineText - текстовая строка для вывода. Прописывается в кавычках. Будет выведена на страницу одной строкой.
  • X - координата верхней левой точки текстовой строки по горизонтали в миллиметрах.
  • Y - координата верхней левой точки текстовой строки по вертикали в миллиметрах.
        Примеры вывода текстов на страницу:
set page = CreatePage(Null)
page.DrawGrid
set font = page.createFont("Arial", 20, False, False)
set labelFont = page.createFont("Times New Roman", 16, False, True)
set dataFont = page.createFont("Tahoma", 18, True, False)
Font.WriteLine "Фамилия", 5, 2
Font.WriteLine "Имя", 5, 10
Font.WriteLine "Отчество", 5, 18
labelFont.WriteLine "Дата рождения", 5, 26
dataFont.WriteLine "Национальность", 5, 34
  

Результат:
Разные шрифты

Параметры для function WriteText :

  • const AText - текст для вывода на страницу. Прописывается в кавычках. Будет выведена на страницу в виде текстового блока.
  • X - координата верхней левой точки текстового блока по горизонтали в миллиметрах.
  • Y - координата верхней левой точки текстового блока по вертикали в миллиметрах.
  • Width - ширина текстового блока в миллиметрах
  • Alignment - тип выравнивания текста в текстовом блоке.
    Значение параметраТип выравнивания
    0 По левому краю
    1 По правому краю
    2 По центру
    3 Выравнивание по ширине
        Примеры вывода текстовых блоков на страницу:
set page = CreatePage(Null)
page.DrawGrid
set font = page.createFont("Arial", 14, False, False)
set labelFont = page.createFont("Times New Roman", 12, False, True)
set dataFont = page.createFont("Tahoma", 11, True, False)
Q = font.WriteText ("Тест работы свойства для выравнивания текста в текстовом блоке для документа PDF, создаваемого на Платформе Мельница Данных", 5, 5, 100, 0)
Q = labelFont.WriteText ("Тест работы свойства для выравнивания текста в текстовом блоке для документа PDF, создаваемого на Платформе Мельница Данных", 5, 35, 100, 1)
Q = dataFont.WriteText ("Тест работы свойства для выравнивания текста в текстовом блоке для документа PDF, создаваемого на Платформе Мельница Данных", 5, 55, 100, 2)
Q = dataFont.WriteText ("Тест работы свойства для выравнивания текста в текстовом блоке для документа PDF, создаваемого на Платформе Мельница Данных", 5, 80, 100, 3)
  

Результат:
Выравнивание

Свойства шрифтов:

property Spacing: Double; - свойство, отвечающее за величину промежутка между буквами в слове. Задается в виде отклонения от промежутка между буквами по умолчанию для выбранного шрифта по горизонтальной оси в миллиметрах. Значение свойства равное "0" соответствует значению по умолчанию.

        Пример:
set page = CreatePage(Null)
page.DrawGrid
set font = page.createFont("Arial", 14, False, False)
set labelFont = page.createFont("Arial", 14, False, False)
set dataFont = page.createFont("Arial", 14, False, False)
font.Spacing = 0
labelFont.Spacing = 1
dataFont.Spacing = 2
font.WriteLine "Промежуток по умолчанию (0)", 5, 5
labelFont.WriteLine "Промежуток с отклонением (1 мм)", 5, 10
dataFont.WriteLine "Промежуток с отклонением (2 мм)", 5, 15
  

Результат:
Промежуток букв

property WordSpacing: Double; - свойство, отвечающее за величину промежутка между соседними словами. Задается в виде отклонения от промежутка между словами по умолчанию для выбранного шрифта по горизонтальной оси в миллиметрах. Значение свойства равное "0" соответствует значению по умолчанию.

        Пример:
set page = CreatePage(Null)
page.DrawGrid
set font = page.createFont("Arial", 14, False, False)
set labelFont = page.createFont("Arial", 14, False, False)
set dataFont = page.createFont("Arial", 14, False, False)
font.WordSpacing = 0
labelFont.WordSpacing = 2
dataFont.WordSpacing = 5
font.WriteLine "Промежуток по умолчанию (0)", 5, 5
labelFont.WriteLine "Промежуток с отклонением (2 мм)", 5, 10
dataFont.WriteLine "Промежуток с отклонением (5 мм)", 5, 15
  

Результат:
Промежуток слов

property Scaling: Double; - свойство, отвечающее за горизонтальное масштабирование букв используемого шрифта. Устанавливается в процентах. Горизонтальный масштаб по умолчанию - 100%.

        Пример:
set page = CreatePage(Null)
page.DrawGrid
set font = page.createFont("Arial", 14, False, False)
set labelFont = page.createFont("Arial", 14, False, False)
set dataFont = page.createFont("Arial", 14, False, False)
font.Scaling = 50
labelFont.Scaling = 100
dataFont.Scaling = 200
font.WriteLine "Сжатие (50)", 5, 5
labelFont.WriteLine "По умолчанию (100)", 5, 10
dataFont.WriteLine "Растягивание (150)", 5, 15
  

Результат:
Scaling

property RenderingMode: TPDFFontRenderingMode; - свойство, отвечающее за заливку букв используемого шрифта.
Типы заливки:
Значение параметра:Отображение:Описание:
0 Font Fill Сплошная заливка (по умолчанию). Буква заливается сплошным цветом,
объявленным на данный момент.
1 Font Stroke Только граница. Прорисовывается граница буквы. Тело остается незалитым.
2 Font FillStroke Сначала заливка, потом граница. Граница прорисовывается всегда черным цветом.
Заливка осуществляется сплошным цветом, объявленным на данный момент.
3 Inv Невидимый шрифт.

        Пример:
set page = CreatePage(Null)
set font = page.createFont("Arial", 20, False, False)
set labelFont = page.createFont("Arial", 20, False, False)
set dataFont = page.createFont("Arial", 20, False, False)
font.RenderingMode = 0
labelFont.RenderingMode = 1
dataFont.RenderingMode = 2
page.setColor 255, 0, 0
Q = font.WriteText ("Олимпиада", 5, 5, 50, 0)
Q = labelFont.WriteText ("Олимпиада", 5, 15, 50, 0)
Q = dataFont.WriteText ("Олимпиада", 5, 25, 50, 0)
  

Результат:
Заливка букв

property Rise: Double; - свойство, отвечающее за перемещение текста по вертикали.

       
set page = CreatePage(Null)
page.DrawGrid
set font = page.createFont("Arial", 20, False, False)
set labelFont = page.createFont("Arial", 7, False, False)
set dataFont = page.createFont("Arial", 7, False, False)
labelFont.rise = -17
dataFont.rise = -2
Q = font.WriteText ("Олимпиада", 5, 5, 50, 0)
Q = labelFont.WriteText ("Олимпиада", 44, 5, 50, 0)
Q = dataFont.WriteText ("Олимпиада", 44, 5, 50, 0)
  

Результат:
Rise

Для определения размеров текстовой строки используется процедура MeasureLine(const LineText: WideString; out Width: OleVariant; out Height: OleVariant);

Здесь:

  • LineText - исходный текст для размещения на странице
  • Width - возвращаемый параметр ширины текстового блока на странице
  • Height - возвращаемый параметр высоты текстового блока на странице
       
S = "шифр"
font.MeasureLine S, W, H
Q = font.WriteText(S, 139, 244 + ((23 - H) / 2), 40, 2)
  


Здесь для текста "Шифр" замеряется ширина и высота получившегося текстового блока. Затем полученные данные используются для корректного размещения текста на странице.

Для определения высоты текстового блока используется функция MeasureText(const AText: WideString; Width: Double): Double; safecall;

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

Здесь:

  • AText - исходный текст для размещения на странице. Прописывается в кавычках.
  • Width - задаваемая ширина текстового блока на странице в милиметрах.
       
S = "Текст для размещения на странице..."
Q = font.MeasureText(S, 139)
  
Здесь для текста "Текст для размещения на странице..." замеряется высота получившегося текстового блока. Затем полученные данные могут использоваться для корректного размещения текста на странице.