Main Content

本页采用了机器翻译。点击此处可查看最新英文版本。

创建页面布局部分

您可以使用 mlreportgen.report.Section 类向报告添加部分。此预定义类会自动将格式化的部分添加到您的报告中。默认格式为纵向,具有默认边距和页脚中的页码。您可以覆盖该部分的布局和内容。与使用 DOM 对象来创建部分相比,使用此类要容易得多且效率更高。有关信息和示例,请参阅 mlreportgen.report.Section

您还可以使用 DOM 对象来创建部分。您可以将 Word 或 PDF 文档分成几个部分,每个部分都有自己的页面布局。页面布局包括页边距、页面方向以及页眉和页脚。

在 Word 模板中定义页面布局

每个 Word 模板至少有一个页面布局部分。您可以使用 Word 创建所需数量的附加部分。例如,在报告的主模板中,您可以为报告的标题页、目录和章节创建部分。有关如何在 Word 模板中创建页面布局部分的信息,请参阅 Word 文档。

在 PDF 模板中定义页面布局

您可以使用 <layout> 元素定义 PDF 模板中的页面布局。您可以在主模板(root.html)和文档部件模板中使用 <layout> 元素。

您可以将这些属性与 <layout> 元素一起使用。

style

page-margin: top left bottom right header footer gutter; page-size: height width orientation

first-page-number版面首页的页数
page-number-format nN 表示数字,aAiI
section-break此布局的起始部分:Odd PageEven PageNext Page

例如,此元素定义具有以下内容的布局:

  • 上、下、左、右边距各为 1 英寸

  • 页眉和页脚高度为 0.5 英寸

  • 装订线尺寸(装订页面的空间)为 0

  • 纵向打印时页面尺寸为 8.5 英寸 x 11 英寸

<layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; 
        page-size: 8.5in 11in portrait" />

这个 <layout> 元素包含页脚。页脚 DefaultPageFooter 必须在文档部件模板中定义。

<layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; 
        page-size: 8.5in 11in portrait">
        <pfooter type="default" template-name="DefaultPageFooter" />
</layout>

您可以在文档部件中创建页面布局。例如,此代码定义了一个名为 Chapter 的文档部件模板,其中包含页面布局。布局包括页眉和页脚,并使用 <pnumber> 元素指定页码的格式。在这种情况下,还要为页眉和页脚元素定义部件模板。请参阅在模板中使用页眉和页脚

<dptemplate name="Chapter">
    <layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; 
						page-size: 8.5in 11in portrait">
          <pheader type="default" template-name="MyPageHeader"/>
          <pfooter type="default" template-name="MyPageFooter"/>
          <pnumber format="1" />
    </layout>
<!-- Define content for your layout here--fixed text and holes as needed -->
</dptemplate>

要使用布局,请使用程序将文档部件插入到报告中。此代码假定文档部件 Chapter 中有一个空位。文档部件使用您在 Chapter 文档部件模板中提供的页面布局定义。

import mlreportgen.dom.*
d = Document('myDocPartEx','pdf','mytemplate');
open(d);

% Assign the Chapter document part template to the variable dp
dp = DocumentPart(d,'Chapter');

% Move to each hole in this document part and append content 
moveToNextHole(dp);
append(dp,'My text to fill hole');

% Append this document part to the document
append(d,dp);

close(d);
rptview(d.OutputPath);

PDF 页面布局中的水印

您可以在 PDF 页面布局中放置水印。水印是出现在页面背景中的图像,例如字样草稿机密。它会在您应用它的每个页面上的文本后面运行。您可以使用以下任意文件类型作为图像:.bmp.jpg.pdf.png.svg.tiff

<layout> 元素中使用 <watermark>。将水印指定为存储在模板包中的图像文件。要将图像存储在模板包中,请解压模板包,将图像复制到文件夹中,然后再次压缩模板。例如:

  1. 解压模板。

    unzipTemplate('MyTemplate.pdftx');  
  2. 将水印图像复制到文件夹 MyTemplate 中。为了使图像保持井然有序,请将图像复制到 images 文件夹中。

  3. watermark 元素添加到模板中的页面布局。例如,在 root.html 中的默认布局中添加水印。

    <layout style="page-margin: 1in 1in 1in 1in 0.5in 0.5in 0in; 
           page-size: 8.5in 11in portrait" >
      <watermark src="./images/myfile.png" width="6in" />
    </layout>
  4. 压缩模板。

    zipTemplate('MyTemplate.pdftx','MyTemplate');
  5. 删除文件夹 MyTemplate

  6. 使用 DOM API 创建使用此模板的报告,或者在报告管理器中创建基于表单的报告,其 PDF 页面布局组件使用此布局。

导航模板定义的页面布局

文档或文档部件的 CurrentPageLayout 属性指向页面布局对象,该对象根据文档或文档部件的模板指定当前部分的页面布局。每次移动到新部分时(通过移动到部分开头的空位),DOM 都会更新 CurrentPageLayout 属性以指向指定该部分的页面布局属性的页面布局对象。您可以通过修改布局对象的属性或用新对象替换布局对象来更改部分的页面布局。

例如,您可以更改部分的方向或添加页眉或页脚。在向新部分添加任何内容之前,请进行这些更改。替换当前布局对象时,对于 Word 文档使用 mlreportgen.dom.DOCXPageLayout 对象,对于 PDF 文档使用 mlreportgen.dom.PDFPageLayout 对象。

覆盖报告程序中的模板页面布局

您可以通过编程方式更改模板定义的布局属性。例如,DOM 默认 Word 模板的页面方向是纵向。此示例将方向更改为横向以适应宽表。代码将页面的高度和宽度交换到新的页面方向。

import mlreportgen.dom.*
rpt = Document('test','docx');
open(rpt);

sect = rpt.CurrentPageLayout;
pageSize = sect.PageSize;
pageSize.Orientation = 'landscape';
 
saveHeight = pageSize.Height;
pageSize.Height = pageSize.Width;
pageSize.Width = saveHeight;
 
table = append(rpt,magic(22));
table.Border = 'solid';
table.ColSep = 'solid';
table.RowSep = 'solid';
 
close(rpt);
rptview(rpt.OutputPath);

通过编程创建布局

您可以追加一个 DOCXPageLayout 对象(用于 Word 文档)或一个 PDFPageLayout 对象(用于 PDF 文档)以编程方式开始新的页面布局部分。对于 DOCX 报 告,append 方法可以指定一个段落来结束上一节。

append(rptObj,paraObj,LayoutObj)

如果您未在 append 方法中指定段落,DOM API 会在开始新部分之前插入一个空段落。此示例使用结束段落语法,以避免在上一节末尾插入空段落。

import mlreportgen.dom.*
rpt = Document('test','docx');

append(rpt,Heading(1,'Magic Square Report','Heading 1'));

sect = DOCXPageLayout;
sect.PageSize.Orientation = 'landscape';
sect.PageSize.Height = '8.5in';
sect.PageSize.Width = '11in';
append(rpt,Paragraph('The next page shows a magic square.'),sect);
 
table = append(rpt,magic(22));
table.Border = 'solid';
table.ColSep = 'solid';
table.RowSep = 'solid';
 
close(rpt);
rptview(rpt.OutputPath);

另请参阅

相关主题