Мельница данных- Разработка отчетов (раздел целиком) (08.09.2024) | (одним файлом) |
Разработка отчетов |
1. Создание шаблонов PDF-отчетов |
1.1. Описание | ||||
Portable Document Format (PDF) — кроссплатформенный формат электронных документов, созданный фирмой Adobe Systems с использованием ряда возможностей языка PostScript. В первую очередь предназначен для представления в электронном виде полиграфической продукции, — значительное количество современного профессионального печатного оборудования может обрабатывать PDF непосредственно. Для просмотра можно использовать официальную бесплатную программу Adobe Reader, а также программы сторонних разработчиков. Традиционным способом создания PDF-документов является виртуальный принтер, то есть документ как таковой готовится в своей специализированной программе — графической программе или текстовом редакторе, САПР и т. д., а затем экспортируется в формат PDF для распространения в электронном виде, передачи в типографию и т. п. Формат PDF позволяет внедрять необходимые шрифты (построчный текст), векторные и растровые изображения, формы и мультимедиа-вставки. Поддерживает RGB, CMYK, Grayscale, Lab, Duotone, Bitmap, несколько типов сжатия растровой информации. Имеет собственные технические форматы для полиграфии: PDF/X-1, PDF/X-3. Включает механизм электронных подписей для защиты и проверки подлинности документов. В этом формате распространяется большое количество сопутствующей документации. Чаще всего PDF-файл является комбинацией текста с растровой и векторной графикой, реже — текста с формами, JavaScript'ом, 3D-графикой и другими типами элементов. В приложениях Платформы "Мельница данных" для создания PDF-документов используется собственная библиотека PDFCreator.dll. С помощью библиотеки возможно прямое создание документов версии 1.3 . Создание PDF-документов осуществляется путем ввода предопределенных в библиотеке команд, которые в дальнейшем интерпретируются на основе языка описания страниц POSTSCRIPT.
|
1.2. Методы |
1.2.1. Свойства документа | ||||||||||
Для создания и описания свойств PDF-документа в библиотеке PDFCreator.dll используется класс IPDFDocument, обладающий следующими свойствами:
|
1.2.2. Свойства страницы | ||||||||
Для создания страницы используется функция function CreatePage(Parent: OleVariant): IPDFPage; Параметр Parent указывает страницу-родителя для данной страницы. Если страницы- родителя быть не должно - формат вызова функции примет вид: set page = CreatePage(Null)Параметры страницы:
|
1.2.2.1. Объявление цвета | |||||||||||||||||||||||||||||||||||||||
Для объявления цвета объектов на странице используется цветовая модель R:G:B (Red:Green:Blue). Объявление цвета для выполнения последующих операций (цвет шрифта, цвет линии/фигуры) осуществляется процедурой procedure SetColor(R: Integer; G: Integer; B: Integer);Где параметры R, G, B - значения базисных цветов для выбранного цвета (от 0 до 255).
|
1.2.3. Графика |
1.2.3.1. Линии | ||||||||||||||||||||||||||||||||
Для отрисовки линий используется процедура procedure Line(X1: Double; Y1: Double; X2: Double; Y2: Double);Здесь:
Для задания толщины линии используется свойство property LineWidth: DoubleЗначение толщины задается в миллиметрах. Значение по умолчанию - минимально возможная единица рисования для устройства. Так для монитора - 1 pixel, для принтера - 1 dot (точка) Для задания стиля отрисовки начала/окончания линии используется свойство property LineCap: TPDFLineCap
Объявление цвета линии.
При необходимости соединения линий под углом в определенной точке можно задать тип соединения. Для объявления типа соединения используется свойство property LineJoin: TPDFLineJoin;
Пунктир Для создания пунктира используется процедура отображения линии с предварительно объявленными дополнительными значениями. Процедура procedure SetDash(DashArray: OleVariant; Phase: Integer); Здесь DashArray - массив значений в миллиметрах, указывающий последовательность чередования штрихов и пропусков на линии, Phase - смещение в миллиметрах по линии.
Ломанная линия - здесь непрерывная линия, состоящая из нескольких прямых. Для отображения ломанной используется процедура procedure Poly(Points: OleVariant; Fill: WordBool), где Points - массив координат точек соединяемых прямыми, а Fill - признак заливки полученной замкнутой фигуры (если замкнута).
|
1.2.3.2. Прямоугольник | ||||||||||||||||
Rectangle (Прямоугольник) - для создания используется процедура: procedure Rectangle(X1: Double; Y1: Double; Width: Double; Height: Double; Fill: WordBool);Здесь:
Также существует возможность изменения стиля отображения углов прямоугольника. Для этого нужно использовать свойство property LineJoin: TPDFLineJoin;
Пример построения прямоугольников с различными типами соединения сторон:
|
1.2.3.3. Вставка готовых изображений | ||
Для вставки на создаваемую страницу готового изображения используется процедура procedure Image(const FileName: WideString; X: Double; Y: Double; Width: Double; Height: Double) Параметры:
Вне зависимости от размера исходного изображения, при вставке изображения на создаваемую страницу оно будет растянуто по размерам, прописанным в процедуре. |
1.2.3.4. Векторная графика |
Язык PostScript, с помощью которого создаются векторные изображения для PDF-документа, поддерживает создание типичных примитивных объектов, таких как:
При создании векторного изображения на странице PDF-документа в приложениях Платформы, команды построения примитивных объектов PostScript передаются на исполнение при помощи процедуры Perform. Подробнее об операторах и командах PostScript для создания PDF-документов можно узнать на сайте Adobe |
1.2.4. Шрифты | |||||||||||||||||||||||||||||||||||||||||||||
Шрифты, которые должны использоваться в создаваемом документе, должны быть предварительно объявлены. Для объявления используемых шрифтов используется функция
Для вывода текстовой информации на страницу используются процедуры:
Параметры для procedure WriteLine :
Параметры для function WriteText :
Свойства шрифтов: property Spacing: Double; - свойство, отвечающее за величину промежутка между буквами в слове. Задается в виде отклонения от промежутка между буквами по умолчанию для выбранного шрифта по горизонтальной оси в миллиметрах. Значение свойства равное "0" соответствует значению по умолчанию.
property WordSpacing: Double; - свойство, отвечающее за величину промежутка между соседними словами. Задается в виде отклонения от промежутка между словами по умолчанию для выбранного шрифта по горизонтальной оси в миллиметрах. Значение свойства равное "0" соответствует значению по умолчанию.
property Scaling: Double; - свойство, отвечающее за горизонтальное масштабирование букв используемого шрифта. Устанавливается в процентах. Горизонтальный масштаб по умолчанию - 100%.
property RenderingMode: TPDFFontRenderingMode; - свойство, отвечающее за заливку букв используемого шрифта.
property Rise: Double; - свойство, отвечающее за перемещение текста по вертикали.
Для определения размеров текстовой строки используется процедура MeasureLine(const LineText: WideString; out Width: OleVariant; out Height: OleVariant); Здесь:
Для определения высоты текстового блока используется функция MeasureText(const AText: WideString; Width: Double): Double; safecall; Функция распределит текст по задаваемому значению ширины текстового блока и вернет значение высоты текстового блока в милиметрах. Здесь:
|
1.3. Порядок создания | ||
Для создания шаблона PDF-документа необходимо в системной форме Платформы выбрать класс, к которому будет строиться документ. В подменю "Подпрограммы" вызвать контекстное меню и выбрать пункт "Создать шаблон отчета PDF". Заполнить необходимые поля и приступить к созданию скрипта в окне "Скрипт шаблона".
Результат: |
2. Справочник по интерфейсам |
2.1. Перечисление TPDFFontRenderingMode | |||||||||||||||
1type 2 TPDFFontRenderingMode = (frmFillText, frmStrokeText, frmFillThenStrokeText, 3 frmInvisible); Или 1type 2 TPDFFontRenderingMode = TOleEnum; 3const 4 frmFillText = $00000000; 5 frmStrokeText = $00000001; 6 frmFillThenStrokeText = $00000002; 7 frmInvisible = $00000003; Элементы перечисления:
|
2.2. Перечисление TPDFLineCap | ||||||||||||
1type 2 TPDFLineCap = (lcBuss, lcRound, lcProtecting); Или 1type 2 TPDFLineCap = TOleEnum; 3const 4 lcBuss = $00000000; 5 lcRound = $00000001; 6 lcProtecting = $00000002; Элементы перечисления:
|
2.3. Перечисление TPDFLineJoin | ||||||||||||
1type 2 TPDFLineJoin = (ljMiter, ljRound, ljBevel); Или 1type 2 TPDFLineJoin = TOleEnum; 3const 4 ljMiter = $00000000; 5 ljRound = $00000001; 6 ljBevel = $00000002; Элементы перечисления:
|
2.4. Перечисление TPDFTextAlignment | |||||||||||||||
1type 2 TPDFTextAlignment = (ptaLeft, ptaRight, ptaCenter, ptaJustified); Или 1type 2 TPDFTextAlignment = TOleEnum; 3const 4 ptaLeft = $00000000; 5 ptaRight = $00000001; 6 ptaCenter = $00000002; 7 ptaJustified = $00000003; Элементы перечисления:
|
2.5. Интерфейс IPDFDocument |
01type 02 IPDFDocument = interface(IDispatch) 03 ['{E57FFE9D-6B85-45E6-A5D0-9DD17950A666}'] 04 procedure Save(Target: OleVariant); safecall; 05 function CreatePage(Parent: OleVariant): IPDFPage; safecall; 06 function Get_Title: WideString; safecall; 07 procedure Set_Title(Value: WideString); safecall; 08 function Get_CanEmbedFonts: WordBool; safecall; 09 procedure Set_CanEmbedFonts(Value: WordBool); safecall; 10 function Get_CanCompress: WordBool; safecall; 11 procedure Set_CanCompress(Value: WordBool); safecall; 12 function Get_Author: WideString; safecall; 13 procedure Set_Author(Value: WideString); safecall; 14 function Get_Subject: WideString; safecall; 15 procedure Set_Subject(Value: WideString); safecall; 16 function Get_Keywords: WideString; safecall; 17 procedure Set_Keywords(Value: WideString); safecall; 18 function Get_Creator: WideString; safecall; 19 procedure Set_Creator(Value: WideString); safecall; 20 function Get_Pages(Index: Integer): IPDFPage; safecall; 21 function Get_PageCount: Integer; safecall; 22 procedure Close; safecall; 23 procedure Serialize(const Stream: IUnknown); safecall; 24 function Get_MinCompressSize: Integer; safecall; 25 procedure Set_MinCompressSize(Value: Integer); safecall; 26 function Get_MaxCompressSize: Integer; safecall; 27 procedure Set_MaxCompressSize(Value: Integer); safecall; 28 function CreatePageFromImage(Image: OleVariant; PageWidth: Double; 29 PageHeight: Double; Margin: Double): WordBool; safecall; 30 procedure SaveToXML(Target: OleVariant); safecall; 31 property Title: WideString read Get_Title write Set_Title; 32 property CanEmbedFonts: WordBool read Get_CanEmbedFonts write Set_CanEmbedFonts; 33 property CanCompress: WordBool read Get_CanCompress write Set_CanCompress; 34 property Author: WideString read Get_Author write Set_Author; 35 property Subject: WideString read Get_Subject write Set_Subject; 36 property Keywords: WideString read Get_Keywords write Set_Keywords; 37 property Creator: WideString read Get_Creator write Set_Creator; 38 property Pages[Index: Integer]: IPDFPage read Get_Pages; 39 property PageCount: Integer read Get_PageCount; 40 property MinCompressSize: Integer read Get_MinCompressSize 41 write Set_MinCompressSize; 42 property MaxCompressSize: Integer read Get_MaxCompressSize 43 write Set_MaxCompressSize; 44 end; |
2.5.1. Свойства | ||||||||||||||||||||||||||||||||||||||||||||||||
Свойства интерфейса IPDFDocument:
|
2.5.2. Метод Close |
2.5.3. Метод CreatePage | ||||||||
Метод интерфейса IPDFDocument. function IPDFDocument.CreatePage(Parent: OleVariant): IPDFPage; Параметры:
Замечания: Возвращает значение типа IPDFPage. |
2.5.4. Метод CreatePageFromImage | ||||||||||||||||||||
Метод интерфейса IPDFDocument. 1function IPDFDocument.CreatePageFromImage(Image: OleVariant; PageWidth: Double; 2 PageHeight: Double; Margin: Double): WordBool; Параметры:
Замечания: Возвращает значение типа WordBool. |
2.5.5. Метод Save | ||||||||
Метод интерфейса IPDFDocument. procedure IPDFDocument.Save(Target: OleVariant); Параметры:
|
2.5.6. Метод SaveToXML | ||||||||
Метод интерфейса IPDFDocument. procedure IPDFDocument.SaveToXML(Target: OleVariant); Параметры:
|
2.5.7. Метод Serialize | ||||||||
Метод интерфейса IPDFDocument. procedure IPDFDocument.Serialize(const Stream: IUnknown); Параметры:
|
2.6. Интерфейс IPDFFont |
01type 02 IPDFFont = interface(IDispatch) 03 ['{43FE399A-A724-4076-BAFA-098639628385}'] 04 function Get_Spacing: Double; safecall; 05 procedure Set_Spacing(Value: Double); safecall; 06 function Get_WordSpacing: Double; safecall; 07 procedure Set_WordSpacing(Value: Double); safecall; 08 function Get_Scaling: Double; safecall; 09 procedure Set_Scaling(Value: Double); safecall; 10 function Get_RenderingMode: TPDFFontRenderingMode; safecall; 11 procedure Set_RenderingMode(Value: TPDFFontRenderingMode); safecall; 12 function Get_Rise: Double; safecall; 13 procedure Set_Rise(Value: Double); safecall; 14 procedure WriteLine(const LineText: WideString; X: Double; Y: Double); safecall; 15 procedure MeasureLine(const LineText: WideString; out Width: OleVariant; 16 out Height: OleVariant); safecall; 17 function WriteText(const AText: WideString; X: Double; Y: Double; 18 Width: Double; Alignment: TPDFTextAlignment): Double; safecall; 19 function MeasureText(const AText: WideString; Width: Double): Double; safecall; 20 function Get_Angle: Double; safecall; 21 procedure Set_Angle(Value: Double); safecall; 22 function Get_LineSpacing: Double; safecall; 23 procedure Set_LineSpacing(Value: Double); safecall; 24 property Spacing: Double read Get_Spacing write Set_Spacing; 25 property WordSpacing: Double read Get_WordSpacing write Set_WordSpacing; 26 property Scaling: Double read Get_Scaling write Set_Scaling; 27 property RenderingMode: TPDFFontRenderingMode read Get_RenderingMode 28 write Set_RenderingMode; 29 property Rise: Double read Get_Rise write Set_Rise; 30 property Angle: Double read Get_Angle write Set_Angle; 31 property LineSpacing: Double read Get_LineSpacing write Set_LineSpacing; 32 end; |
2.6.1. Свойства | ||||||||||||||||||||||||||||||||
Свойства интерфейса IPDFFont:
|
2.6.2. Метод MeasureLine | ||||||||||||||||
Метод интерфейса IPDFFont. 1procedure IPDFFont.MeasureLine(const LineText: WideString; 2 out Width: OleVariant; out Height: OleVariant); Параметры:
|
2.6.3. Метод MeasureText | ||||||||||||
Метод интерфейса IPDFFont. function IPDFFont.MeasureText(const AText: WideString; Width: Double): Double; Параметры:
Замечания: Возвращает значение типа Double. |
2.6.4. Метод WriteLine | ||||||||||||||||
Метод интерфейса IPDFFont. procedure IPDFFont.WriteLine(const LineText: WideString; X: Double; Y: Double); Параметры:
|
2.6.5. Метод WriteText | ||||||||||||||||||||||||
Метод интерфейса IPDFFont. 1function IPDFFont.WriteText(const AText: WideString; X: Double; Y: Double; 2 Width: Double; Alignment: TPDFTextAlignment): Double; Параметры:
Замечания: Возвращает значение типа Double. |
2.7. Интерфейс IPDFPage |
01type 02 IPDFPage = interface(IDispatch) 03 ['{749FB131-80FE-46E9-8330-22C1DC346FE7}'] 04 function Get_Parent: IPDFPage; safecall; 05 function Get_Title: WideString; safecall; 06 procedure Set_Title(Value: WideString); safecall; 07 function Get_Width: Double; safecall; 08 procedure Set_Width(Value: Double); safecall; 09 function Get_Height: Double; safecall; 10 procedure Set_Height(Value: Double); safecall; 11 function CreateFont(const FontName: WideString; Size: Double; Bold: WordBool; 12 Italic: WordBool): IPDFFont; safecall; 13 procedure Perform(const Command: WideString); safecall; 14 function Get_LineWidth: Double; safecall; 15 procedure Set_LineWidth(Value: Double); safecall; 16 procedure Line(X1: Double; Y1: Double; X2: Double; Y2: Double); safecall; 17 procedure Rectangle(X1: Double; Y1: Double; Width: Double; Height: Double; 18 Fill: WordBool); safecall; 19 function Get_LineCap: TPDFLineCap; safecall; 20 procedure Set_LineCap(Value: TPDFLineCap); safecall; 21 function Get_LineJoin: TPDFLineJoin; safecall; 22 procedure Set_LineJoin(Value: TPDFLineJoin); safecall; 23 procedure SetDash(DashArray: OleVariant; Phase: Integer); safecall; 24 procedure SetColor(R: Integer; G: Integer; B: Integer); safecall; 25 procedure PerformColor(const Command: WideString); safecall; 26 procedure Poly(Points: OleVariant; Fill: WordBool); safecall; 27 procedure Image(Image: OleVariant; X: Double; Y: Double; Width: Double; 28 Height: Double; Transparent: WordBool); safecall; 29 procedure DrawGrid; safecall; 30 procedure Arc(X: Double; Y: Double; Radius: Double; StartAngle: Double; 31 EndAngle: Double; FillSegment: WordBool; FillSector: WordBool); safecall; 32 procedure Curve(Points: OleVariant; Fill: WordBool); safecall; 33 procedure HyperLink(const URI: WideString; X: Double; Y: Double; Width: Double; 34 Height: Double); safecall; 35 procedure Pattern(X1: Double; Y1: Double; Width: Double; Height: Double; 36 PatternPointSize: Double; Percentage: Integer); safecall; 37 procedure Bezier(Points: OleVariant; Fill: WordBool); safecall; 38 procedure XObject(Data: OleVariant); safecall; 39 procedure SetColorCMYK(C: Double; M: Double; Y: Double; K: Double); safecall; 40 procedure LocalLink(const Page: IDispatch; DestinationX: Double; 41 DestinationY: Double; DestinationWidth: Double; DestinationHeight: Double; 42 X: Double; Y: Double; Width: Double; Height: Double); safecall; 43 property Parent: IPDFPage read Get_Parent; 44 property Title: WideString read Get_Title write Set_Title; 45 property Width: Double read Get_Width write Set_Width; 46 property Height: Double read Get_Height write Set_Height; 47 property LineWidth: Double read Get_LineWidth write Set_LineWidth; 48 property LineCap: TPDFLineCap read Get_LineCap write Set_LineCap; 49 property LineJoin: TPDFLineJoin read Get_LineJoin write Set_LineJoin; 50 end; |
2.7.1. Свойства | ||||||||||||||||||||||||||||||||
Свойства интерфейса IPDFPage:
|
2.7.2. Метод Arc | ||||||||||||||||||||||||||||||||
Метод интерфейса IPDFPage. 1procedure IPDFPage.Arc(X: Double; Y: Double; Radius: Double; 2 StartAngle: Double; EndAngle: Double; FillSegment: WordBool; 3 FillSector: WordBool); Параметры:
|
2.7.3. Метод Bezier | ||||||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.Bezier(Points: OleVariant; Fill: WordBool); Параметры:
|
2.7.4. Метод CreateFont | ||||||||||||||||||||
Метод интерфейса IPDFPage. 1function IPDFPage.CreateFont(const FontName: WideString; Size: Double; 2 Bold: WordBool; Italic: WordBool): IPDFFont; Параметры:
Замечания: Возвращает значение типа IPDFFont. |
2.7.5. Метод Curve | ||||||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.Curve(Points: OleVariant; Fill: WordBool); Параметры:
|
2.7.6. Метод DrawGrid |
2.7.7. Метод HyperLink | ||||||||||||||||||||||||
Метод интерфейса IPDFPage. 1procedure IPDFPage.HyperLink(const URI: WideString; X: Double; Y: Double; 2 Width: Double; Height: Double); Параметры:
|
2.7.8. Метод Image | ||||||||||||||||||||||||||||
Метод интерфейса IPDFPage. 1procedure IPDFPage.Image(Image: OleVariant; X: Double; Y: Double; 2 Width: Double; Height: Double; Transparent: WordBool); Параметры:
|
2.7.9. Метод Line | ||||||||||||||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.Line(X1: Double; Y1: Double; X2: Double; Y2: Double); Параметры:
|
2.7.10. Метод LocalLink | ||||||||||||||||||||||||||||||||||||||||
Метод интерфейса IPDFPage. 1procedure IPDFPage.LocalLink(const Page: IDispatch; DestinationX: Double; 2 DestinationY: Double; DestinationWidth: Double; DestinationHeight: Double; 3 X: Double; Y: Double; Width: Double; Height: Double); Параметры:
|
2.7.11. Метод Pattern | ||||||||||||||||||||||||||||
Метод интерфейса IPDFPage. 1procedure IPDFPage.Pattern(X1: Double; Y1: Double; Width: Double; 2 Height: Double; PatternPointSize: Double; Percentage: Integer); Параметры:
|
2.7.12. Метод Perform | ||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.Perform(const Command: WideString); Параметры:
|
2.7.13. Метод PerformColor | ||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.PerformColor(const Command: WideString); Параметры:
|
2.7.14. Метод Poly | ||||||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.Poly(Points: OleVariant; Fill: WordBool); Параметры:
|
2.7.15. Метод Rectangle | ||||||||||||||||||||||||
Метод интерфейса IPDFPage. 1procedure IPDFPage.Rectangle(X1: Double; Y1: Double; Width: Double; 2 Height: Double; Fill: WordBool); Параметры:
|
2.7.16. Метод SetColor | ||||||||||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.SetColor(R: Integer; G: Integer; B: Integer); Параметры:
|
2.7.17. Метод SetColorCMYK | ||||||||||||||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.SetColorCMYK(C: Double; M: Double; Y: Double; K: Double); Параметры:
|
2.7.18. Метод SetDash | ||||||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.SetDash(DashArray: OleVariant; Phase: Integer); Параметры:
|
2.7.19. Метод XObject | ||||||||
Метод интерфейса IPDFPage. procedure IPDFPage.XObject(Data: OleVariant); Параметры:
|