|
<< Нажмите, чтобы показать Содержание >>
|
Компонент для печати документов, находящихся в TRichView, TRichViewEdit, TDBRichView, или TDBRichViewEdit.
Модуль [VCL/FMX] PtblRV / fmxPtblRV.
Синтаксис
TRVPrint = class(TCustomRVPrint)
TObject
TPersistent
TComponent
Печать или рисование страниц
1.Назначьте исходный компонент для печати (метод AssignSource).
2.При необходимости назначьте колонтитулы (SetHeader, SetFooter).
3.Отформатируйте страницы (метод FormatPages).
После этого можно:
▪получить количество страниц (свойство PagesCount);
▪отобразить предварительный просмотр печати (с помощью компонента TRVPrintPreview; см. также методы DrawPreview, MakePreview, MakeScaledPreview, DrawPage, DrawPageAt);
▪напечатать весь документ (метод Print) или диапазон страниц (метод PrintPages).
После завершения работы можно освободить часть временно выделенной памяти (метод Clear).
Сохранение в PDF
1.Проверьте, доступно ли сохранение в PDF (CanSavePDF).
2.Назначьте исходный компонент для печати (метод AssignSource).
3.При необходимости назначьте колонтитулы (SetHeader, SetFooter).
4.Сохраните PDF (метод SavePDF).
После завершения работы можно освободить часть временно выделенной памяти (метод Clear).
Компонент печатает на принтере, заданном по умолчанию, используя его стандартные параметры. Глобальный объект Printer предоставляет доступ к доступным принтерам. Чтобы выбрать другой принтер, присвойте нужное значение свойству Printer.PrinterIndex. Чтобы изменить ориентацию страниц, измените Printer.Orientation. После этих изменений перед печатью или предварительным просмотром вызовите FormatPages.
В качестве альтернативы можно использовать «виртуальный принтер» для рисования страниц на любой канве. Установите VirtualPrinter.Active = True, чтобы использовать параметры, заданные в VirtualPrinter (размер страницы и DPI), вместо параметров текущего принтера.
Можно отображать информацию о процессе разбиения документа на страницы и печати:
▪OnFormatting происходит во время разбиения на страницы (метод FormatPages);
▪OnSendingToPrinter происходит во время печати (методы Print и PrintPages).
Дополнительное содержимое можно рисовать с помощью следующих событий:
▪OnPagePrepaint и OnPagePostpaint позволяют рисовать на каждой странице снизу/поверх документа ТРВ-Редактора;
▪OnPrintComponent запрашивает изображение вставленного компонента для печати.
Также имеются информационные события, которые происходят при рисовании некоторых специальных объектов. Можно сохранять координаты этих объектов и реализовывать специальную обработку, например добавление гиперссылок при печати в PDF с помощью сторонней библиотеки:
Поря указываются в свойстве Margins.

Поля в TRVPrint
Этот рисунок показывает назначение свойств полей. Для упрощения отступы абзацев не показаны.
Поля задаются в единицах Units (на рисунке показаны красным).
TRichView.LeftMargin, TRichView.RightMargin, TRichView.TopMargin и TRichView.BottomMargin задаются в «стандартных» пикселях (1 пиксель = 1/Style.UnitsPixelsPerInch дюйма; на рисунке показаны синим).
Если MirrorMargins = True, левое и правое поля на чётных страницах меняются местами.
См. также свойство ClipMargins.
Рисунок выше относится к версиям компонентов VCL и LCL.
В версии FireMonkey вместо свойства MarginsPen используется MarginsStroke.
TRVPrint поддерживает три типа верхних и нижних колонтитулов:
▪обычные колонтитулы;
▪колонтитулы первой страницы (используются только при TitlePage = True);
▪колонтитулы чётных страниц (используются только при FacingPages = True).
Верхние колонтитулы назначаются методом SetHeader, нижние – методом SetFooter.
В качестве верхнего или нижнего колонтитула можно использовать любой документ ТРВ-Редактора. Положение колонтитулов задаётся свойствами HeaderY и FooterY.

Колонтитулы
Если колонтитул слишком велик, размер основного документа корректируется, чтобы избежать наложения:

Пример большого верхнего колонтитула
Если вам нужны более гибкие настройки колонтитулов, вы можете:
▪разбить документ на несколько частей, каждая со своим колонтитулом;
▪использовать событие OnPagePrepaint;
▪использовать TRVReportHelper.
См. также: GetHeaderRect, GetFooterRect.
У некоторых принтеров могут возникать проблемы с печатью сложного содержимого (особенно при печати в PDF или метафайл). В этом случае можно использовать следующие свойства:
TRVPrint содержит внутри экземпляр TPrintableRV (потомок TRichView). Эта переменная с именем rv является публичной, и вы можете изменять некоторые её свойства:
▪Color,
Изменение остальных свойств не рекомендуется.
Пример:
MyRVPrint.rv.Color := clWhite;
Примечание: rv не содержит полной информации о печатаемом документе, а только информацию, необходимую для форматирования. Поэтому необходимо обеспечить, чтобы исходный компонент TRichView не был уничтожен или изменён во время печати.
Диапазон печатаемых элементов можно задать с помощью свойств MinPrintedItemNo и MaxPrintedItemNo. Если эти свойства задают часть диапазона элементов документа, печатается только эта часть и только страницы, которые её содержат.
Эти свойства позволяют реализовать пошаговую печать: когда готова следующая часть документа, её можно напечатать ниже ранее напечатанного фрагмента. Эта возможность может использоваться для печати бухгалтерских журналов, логов и т. п.
Компонент рисует содержимое страницы в следующем порядке:
1.фон страницы;
2.событие OnPagePrepaint;
3.текстовые блоки и сноски в рамке верхнего колонтитула с PositionInText = rvpitBelowText;
5.текстовые блоки и сноски в рамке верхнего колонтитула с PositionInText = rvpitAboveText;
6.текстовые блоки и сноски в рамке нижнего колонтитула с PositionInText = rvpitBelowText;
8.текстовые блоки и сноски в рамке нижнего колонтитула с PositionInText = rvpitAboveText;
9.текстовые блоки и сноски в рамке основного документа с PositionInText = rvpitBelowText;
10.основной документ, включая сноски и концевые сноски;
11.текстовые блоки и сноски в рамке основного документа с PositionInText = rvpitAboveText;
12.событие OnPagePostPaint.
Текстовые блоки и сноски в рамке рисуются в порядке их расположения в родительском документе.
Следующие свойства используются только в FireMonkey:
▪BestDPI.
См. также:
▪метод UpdatePaletteInfo;
▪TRichView.PageBreaksBeforeItems;
▪TRichView.AssignSoftPageBreaks;
▪компонент TRVReportHelper;
▪типизированная константа RichViewAlternativePicPrint;
▪типизированная константа RichViewPixelsPerInch.
Демонстрационный проект:
▪Demos\*\Assorted\Printing\