В этом примере показано, как пронумеровать страницы отчета с помощью шаблона 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
, части шаблона define, которые содержат содержимое нижних колонтитулов. В <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);