Constrained Streaming Layout
HotPDF может размещать каждую завершённую страницу в файловом хранилище, применять ограничения разрывов страниц для абзацев, предоставлять ограниченную диагностику вёрстки, размечать семантические абзацы и артефакты разбивки на страницы, а также определять базовое направление абзаца перед выводом текста смешанного направления
Немедленная выгрузка страниц
Установите ImmediateFlushLayout перед BeginDoc для отчётов, число страниц в которых заранее неизвестно
При закрытии страницы её окончательный сжатый или несжатый поток содержимого переносится из памяти в принадлежащий временный файловый поток, тогда как PDF-объект остаётся доступным для обычного завершения перекрёстных ссылок и ресурсов
ImmediateFlushedPageCount и ImmediateFlushedBytes сообщают объём размещённого содержимого, а временные файлы удаляются при освобождении владеющих ими потоков
Разбивка абзацев по страницам
ParagraphIndex := PDF.CreateParagraph(0, jtLeft, 36, 36, 36, 36);
PDF.ConfigureParagraphPagination(ParagraphIndex, True, 2, 2);
PDF.ConfigureParagraphDirection(ParagraphIndex, pdAuto);
PDF.BeginParagraph(ParagraphIndex);
PDF.CurrentParagraph.ShowUnicodeText(BodyText);
PDF.EndParagraph;
KeepWithNextперемещает абзац, если он занял бы последнюю строку, которая должна остаться для последующего содержимогоMinOrphanLinesне даёт оставить слишком мало начальных строк в нижней части страницыMinWidowLinesпереносит разрыв, когда на следующей странице осталось бы слишком мало завершающих строк- При автоматическом продолжении сохраняются исходные ширина и высота страницы, шрифт, поля и параметры абзаца
- Если
ParaAutoAddPageимеет значение false, переполнение останавливается на текущей странице и создаёт диагностикуldkOverflow
Диагностика вёрстки
THPDFLayoutDiagnostic записывает THPDFLayoutDiagnosticKind, индексы исходной и связанной страниц, затронутый прямоугольник, число строк и причину на английском языке для каждого сохранённого решения
THPDFLayoutDiagnosticArray возвращается методом GetLayoutDiagnostics, тогда как GetLayoutDiagnostic поддерживает индексированный доступ без выделения копии
LayoutDiagnosticLimit ограничивает число сохраняемых записей, а LayoutDiagnosticDroppedCount сообщает о решениях, отброшенных после достижения этого предела
ldkAutomaticPageBreakсообщает об обычном продолженииldkKeepWithNext,ldkOrphanControlиldkWidowControlидентифицируют ограничение, которое изменило разрывldkOverflowидентифицирует содержимое, остановленное отключённой автоматической разбивкой на страницыldkImmediateFlushидентифицирует закрытую страницу, перенесённую в файловое хранилище
Направление абзаца
THPDFParagraphDirection предоставляет значения pdAuto, pdLeftToRight и pdRightToLeft
DetectParagraphDirection применяет разрешение по первому сильному символу для скриптов RTL в BMP и дополнительной плоскости, поэтому нейтральные префиксы и вторичные направленные проходы не выбирают неверное базовое направление
Используйте ConfigureParagraphDirection для постоянного параметра абзаца либо свойство THPDFPara.Direction для активного абзаца
Семантика абзацев PDF/UA
Root := PDF.AddStructureElement('Document', nil);
Paragraph := PDF.BeginTaggedParagraph(Root, 'en-US', 'Accessible text');
PDF.CurrentPage.TextOut(36, 72, 0, WideString('Accessible text'));
PDF.EndTaggedParagraph;
PDF.BeginPaginationArtifact(pasHeader);
PDF.CurrentPage.TextOut(36, 20, 0, WideString('Running header'));
PDF.EndPaginationArtifact;
BeginTaggedParagraph выводит стандартную последовательность размеченного содержимого /P с назначенным MCID, привязкой к родительскому дереву страниц и дополнительными значениями /Lang и /ActualText
THPDFPaginationArtifactSubtype предоставляет значения pasHeader, pasFooter, pasWatermark и pasPageNumber, выводимые как содержимое /Artifact с /Type /Pagination и соответствующим стандартным подтипом