Заголовки раздела номера, табличные заголовки и названия рисунков программно

Этот пример показывает, как программно создать пронумерованные заголовки для глав и иерархические пронумерованные заголовки для подразделов в главе. Пример также демонстрирует, как создать иерархические пронумерованные табличные заголовки и названия рисунков, которые находятся в пронумерованной главе или подразделе в главе.

Импортируйте пакет API DOM, таким образом, вы не должны использовать долго, полностью определенные имена классов.

import mlreportgen.dom.*

Создайте и откройте документ. Чтобы создать документ Word, измените выходной тип от pdf до docx. Чтобы создать документ HTML, измените pdf на html или html-file для многофайлового или однофайлового документа, соответственно.

d = Document("mydoc","pdf");
open(d);

Добавьте оглавление к документу.

append(d,TOC);

Создайте потоки нумерации для заголовков главы, заголовков подраздела, названий рисунков и табличных заголовков. По умолчанию потоки создаются с помощью арабских цифр с начальным значением 0.

chapterStream = createAutoNumberStream(d,"chapter");
sectionStream = createAutoNumberStream(d,"section");
figureStream = createAutoNumberStream(d,"figure");
tableStream = createAutoNumberStream(d,"table");

Задайте некоторое изображение, таблицу и стили записей таблицы, которые будут использоваться в более поздних разделах.

imageStyle = ...
    { ...
    Height("5in"), ...
    Width("5in") ...
    };

tableStyle = ...
    { ...
    Width("100%"), ...
    Border("solid"), ...
    RowSep("solid"), ...
    ColSep("solid") ...
    };

tableEntriesStyle = ...
    { ...
    HAlign("center"), ...
    VAlign("middle") ...
    };

Следующий код создает первую главу в документе. Заголовок главы создается с помощью функции getChapterTitle. Эта функция использует поток нумерации chapter, чтобы создать пронумерованный заголовок главы. Глава состоит из двух подразделов, заголовки которых создаются с помощью функции getSectionTitle. Эта функция использует и chapter и потоки нумерации section, чтобы создать иерархический пронумерованный заголовок раздела. Подразделы состоят из нескольких фигур с иерархическими пронумерованными заголовками, которые создаются с помощью функции getFigureCaption. Эта функция использует и chapter и потоки нумерации figure, чтобы создать иерархическое пронумерованное название рисунка. getChapterTitle, getSectionTitle и функции getFigureCaption раньше создавали эту главу, описаны позже в этом примере.

% Chapter 1.
chapterTitle = getChapterTitle("Figures with numbered captions");
append(d,chapterTitle);

% Section 1.1.
sectionTitle = getSectionTitle("Figure for Land Ocean");
append(d,sectionTitle);

% Figure 1.1.
image1 =  Image(which("landOcean.jpg"));
image1.Style = imageStyle;
append(d,image1);
append(d,getFigureCaption("Land Ocean"));

% Section 1.2.
sectionTitle = getSectionTitle("Figures for Peppers and Cat's Eye Nebula");
append(d,sectionTitle);

% Figure 1.2.
image2 = Image(which("peppers.png"));
image2.Style = imageStyle;
append(d,image2);
append(d,getFigureCaption("Peppers"));

% Figure 1.3.
image3 = Image(which("ngc6543a.jpg"));
image3.Style = imageStyle;
append(d,image3);
append(d,getFigureCaption("Cat's Eye Nebula or NGC 6543"));

Следующий код создает вторую главу в документе. Глава имеет пронумерованный заголовок с двумя иерархическими пронумерованными подразделами. Здесь, подразделы состоят из нескольких таблиц с иерархическими пронумерованными заголовками, которые создаются с помощью функции getTableTitle, заданной позже в этом примере. Эта функция использует и chapter и потоки нумерации table, чтобы создать иерархический пронумерованный табличный заголовок.

% Chapter 2.
chapterTitle = getChapterTitle("Tables with numbered titles");
append(d,chapterTitle);

% Section 2.1.
sectionTitle = getSectionTitle("Table for Magic(5)");
append(d,sectionTitle);

% Table 2.1.
append(d,getTableTitle("Magic(5)"));
table1 = Table(magic(5));
table1.Style = tableStyle;
table1.TableEntriesStyle = tableEntriesStyle;
append(d,table1);

% Section 2.2.
sectionTitle = getSectionTitle("Tables for Magic(8) and Magic(10)");
append(d,sectionTitle);

% Table 2.2.
append(d,getTableTitle("Magic(8)"));
table2 = Table(magic(8));
table2.Style = tableStyle;
table2.TableEntriesStyle = tableEntriesStyle;
append(d,table2);

% Table 2.3.
append(d,getTableTitle("Magic(10)"));
table3 = Table(magic(10));
table3.Style = tableStyle;
table3.TableEntriesStyle = tableEntriesStyle;
append(d,table3);

Закройте и просмотрите документ.

close(d);
rptview(d);

Следующая функция возвращает пронумерованный заголовок для главы. Пронумерованный заголовок создается с помощью объекта DOM Heading1, где содержимое заголовка снабжается префиксом строкой Chapter N и период, где N является потоковым счетчиком chapter. Например, заголовок для первой главы содержит "Главу 1". как его префикс. Формат CounterInc в свойстве Style вызывает поток chapter в противоречии с быть постепенно увеличенным, когда этот заголовок главы добавлен к документу. Формат CounterReset в свойстве Style заставляет другие связанные потоковые счетчики такой как, section, figure, и table, быть сброшенными к их начальным значениям, когда этот заголовок главы добавлен к документу.

function chapterTitle = getChapterTitle(content)
    import mlreportgen.dom.*
    
    chapterTitle = Heading1();
    append(chapterTitle,Text("Chapter "));
    append(chapterTitle,AutoNumber("chapter"));
    append(chapterTitle,Text(". "));
    append(chapterTitle,Text(content));
    
    chapterTitle.Style = ...
        { ...
        CounterInc("chapter"), ...
        CounterReset("section figure table"), ...
        WhiteSpace("preserve"), ...
        PageBreakBefore(true), ...
        KeepWithNext(true) ...
        };
end

Следующая функция возвращает иерархический пронумерованный заголовок для раздела, который находится в главе. Иерархический пронумерованный заголовок создается с помощью объекта DOM Heading2, где содержимое заголовка снабжается префиксом строкой "Нью-Мексико"., где N и M является chapter и потоковые счетчики section, соответственно. Например, заголовок для первого раздела во второй главе содержит "2.1" как ее префикс. Формат CounterInc в свойстве Style вызывает поток section в противоречии с быть постепенно увеличенным, когда этот заголовок раздела добавлен к документу.

function sectionTitle = getSectionTitle(content)
    import mlreportgen.dom.*
    
    sectionTitle = Heading2();
    append(sectionTitle,AutoNumber("chapter"));
    append(sectionTitle,Text("."));
    append(sectionTitle,AutoNumber("section"));
    append(sectionTitle,Text(". "));
    append(sectionTitle,Text(content));
    
    sectionTitle.Style = ...
        { ...
        CounterInc("section"), ...
        WhiteSpace("preserve"), ...
        KeepWithNext(true) ...
        };
end

Следующая функция возвращает иерархический пронумерованный заголовок для фигуры, добавленной к главе или подразделу в главе. Иерархический пронумерованный заголовок создается с помощью объекта DOM Paragraph, где содержимое заголовка снабжается префиксом строкой, "изображают N.F.", где N и F является chapter и потоковые счетчики figure, соответственно. Например, заголовок для третьей фигуры во второй главе содержит "рисунок 2.3". как его префикс. Формат CounterInc в свойстве Style вызывает поток figure в противоречии с быть постепенно увеличенным, когда это название рисунка добавлено к документу.

function figureCaption = getFigureCaption(content)
    import mlreportgen.dom.*
    
    figureCaption = Paragraph();
    append(figureCaption,Text("Figure "));
    append(figureCaption,AutoNumber("chapter"));
    append(figureCaption,Text("."));
    append(figureCaption,AutoNumber("figure"));
    append(figureCaption,Text(". "));
    append(figureCaption,Text(content));
    
    keepWithPrevious = FOProperty("keep-with-previous.within-page","always");
    figureCaption.Style = ...
        { ...
        CounterInc("figure"), ...
        WhiteSpace("preserve"), ...
        FOProperties(keepWithPrevious) ...
        };
end

Следующая функция возвращает иерархический пронумерованный заголовок для таблицы, добавленной к главе или подразделу в главе. Иерархический пронумерованный заголовок создается с помощью объекта DOM Paragraph, где содержимое заголовка снабжается префиксом строкой "Таблица N.T.", где N и T является chapter и потоковые счетчики table, соответственно. Например, заголовок для третьей таблицы во второй главе содержит "Таблицу 2.3". как его префикс. Формат CounterInc в свойстве Style вызывает поток table в противоречии с быть постепенно увеличенным, когда этот табличный заголовок добавлен к документу.

function tableTitle = getTableTitle(content)
    import mlreportgen.dom.*
    
    tableTitle = Paragraph();
    append(tableTitle,Text("Table "));
    append(tableTitle,AutoNumber("chapter"));
    append(tableTitle,Text("."));
    append(tableTitle,AutoNumber("table"));
    append(tableTitle,Text(". "));
    append(tableTitle,Text(content));
    
    tableTitle.Style = ...
        { ...
        CounterInc("table"), ...
        WhiteSpace("preserve"), ...
        KeepWithNext(true), ...
        Bold(true), ...
        OuterMargin("0pt", "0pt", "10pt", "5pt") ...
        };
end