В этом примере показано, как нумеровать страницы отчета с помощью шаблона PDF. Он определяет выровненный по правому краю номер страницы для нечетных страниц и выровненный по левому краю номер страницы для четных страниц, используя два разных нижних колонтитула. На следующем рисунке показаны две страницы документа, созданного с помощью шаблона примера:

Создание шаблона PDF, myPDFTemplate.pdftx, в текущей рабочей папке. Распакуйте шаблон для редактирования. Шаблон ссылки, который уже включает нижние колонтитулы для примера, доступен в exampleTemplate.pdftx.
mlreportgen.dom.Document.createTemplate("myPDFTemplate","pdf"); unzipTemplate("myPDFTemplate.pdftx", "myPDFTemplate_pdftx"); %unzipTemplate("exampleTemplate.pdftxt", "exampleTemplate_pdftx");
В myPDFTemplate_pdftx\docpart_templates.html, определите детали шаблона, содержащие содержимое нижних колонтитулов. В <dplibrary> теги, создание <dptemplate> элементы с именами MyPageFooter для нечетных страниц и MyEvenFooter для четных страниц. Создание абзацев, содержащих текст, включенный в каждый нижний колонтитул, а также page элементы, в которые должен быть помещен номер страницы. Установите text-align стиль для right для MyPageFooter и left для MyEvenFooter. Например:
<dplibrary>
<dptemplate name="rgChapter">
<h1 class="rgChapterTitle">
<hole id="rgChapterTitlePrefix" default-style-name="rgChapterTitlePrefix" /><span> </span>
<hole id="rgChapterTitleNumber" default-style-name="rgChapterTitleNumber" /><span>. </span>
<hole id="rgChapterTitleText" default-style-name="rgChapterTitleText" />
</h1>
<hole id="rgChapterContent"/>
</dptemplate>
<dptemplate name="ReportTOC"><TOC number-of-levels ="3" leader-pattern="dots" /></dptemplate>
<!-- Document part templates defining the footers -->
<dptemplate name="MyPageFooter">
<p style="text-align:right;font-size:10pt;white-space:preserve">Page <page/></p>
</dptemplate>
<dptemplate name="MyEvenFooter">
<p style="text-align:left;font-size:10pt;white-space:preserve">Page <page/></p>
</dptemplate>
</dplibrary>
В секции корпуса myPDFTemplate_pdftx\root.html, раскомментируйте <layout> элемент и добавить два <pfooter> элементы. Установите type и template-name как показано в следующем примере HTML-кода. default нижний колонтитул типа используется для первой и нечетной страниц. even нижний колонтитул типа используется для четных страниц. template-name для атрибутов устанавливаются имена деталей шаблона, определенные ранее. Чтобы указать номер начальной страницы, добавьте <pnumber> элемент.
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Report Template</title>
<link rel="StyleSheet" href="./stylesheets/root.css" type="text/css" />
</head>
<body>
<!-- Uncomment and edit this layout to customize a document or document part layout based on this template. -->
<layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; page-size: 8.5in 11in portrait">
<pfooter type="default" template-name="MyPageFooter"/>
<pfooter type="even" template-name="MyEvenFooter"/>
<pnumber format="1" />
</layout>
</body>
</html>
Заархивируйте файлы шаблонов обратно в myPDFTemplate.pdftx пакет шаблона.
zipTemplate('myPDFTemplate.pdftx', 'myPDFTemplate_pdftx');
Используйте шаблон, указав имя шаблона при создании документа. В следующем коде используется ссылочный шаблон exampleTemplate.pdftx для создания документа. Чтобы использовать шаблон, измененный в примере, замените exampleTemplate с myPDFTemplate.
import mlreportgen.dom.* d = Document("myDocument", "pdf", "exampleTemplate"); open(d); append(d, "Hello world"); append(d, PageBreak()); append(d, "Hello again"); append(d, PageBreak()); append(d, "Hello again"); append(d, PageBreak()); append(d, "Hello again"); append(d, PageBreak()); append(d, "Hello again"); close(d); rptview(d);