Страницы номера в шаблоне PDF

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

Смотрите также

Похожие темы