=波波日志 > flash/flex/fcs/AIR > 26.11.打印页眉和页脚=
[转]26.11.打印页眉和页脚
26.11.1. 问题
我想打印出页眉和页脚
26.11.2. 解决办法
创建打印渲染器组件控制页面布局
26.11.3. 讨论
结合打印渲染器的PrintDataGrid比PrintDataGrid自身具备更多的布局控制能力。常见的任务就是打印页眉和页脚。这个技术涉及是否在布局中包含页眉和页脚以及PrintDataGrid的validNextPage属性的测试结果。下面的代码,HeaderFooterPrintRenderer.mxml,定义了一个打印渲染器生成多页打印内容,包括在适当位置的页眉和页脚:
这个组件定义了一个包含标题的页眉和显示日期的页脚。startJob方法为第一页初始化打印布局。它首先尝试把整个数据都容纳在单个页面里,然后调用validateNow强制更新组件布局,你可以通过PrintDataGrid的validNextPage属性测试其结果。如果返回值为false,则正好容纳,否则布局将被调整以隐藏页脚,重新更新布局。到此为止,无聊内容是多页还是单页,第一页都将被添加到打印机任务中。如果需要多页,nextPage方法将准备相应的布局。它将隐藏页眉(因此这已经不是第一页,不需要页眉了)以及根据情况打印页脚。
把构建智能页面布局放到渲染器里将大大简化实际打印任务。下面的代码块HeaderFooter.mxml,演示如何使用打印渲染器:
Print方法开始一个打印任务并建立一个打印渲染器。这部分代码完成渲染器startJob方法的调用,准备好第一页的打印。下一部分代码,do...while块继续添加页面到打印任务,直到nextPage方法返回false,指示已没有页面可打印。但是do...while块是在最后调用nextPage方法,因此当循环结束最后一页还没有加入到打印任务中,需额外加入,发送打印任务,移除显示列表中的渲染器。
我想打印出页眉和页脚
26.11.2. 解决办法
创建打印渲染器组件控制页面布局
26.11.3. 讨论
结合打印渲染器的PrintDataGrid比PrintDataGrid自身具备更多的布局控制能力。常见的任务就是打印页眉和页脚。这个技术涉及是否在布局中包含页眉和页脚以及PrintDataGrid的validNextPage属性的测试结果。下面的代码,HeaderFooterPrintRenderer.mxml,定义了一个打印渲染器生成多页打印内容,包括在适当位置的页眉和页脚:
+展开
-XML
<?xml version="1.0"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="#ffffff" horizontalAlign="center">
<mx:Script>
<![CDATA[
public function startJob():void
{
//Try to print this on a single page
header.visible = true;
header.includeInLayout = true;
footer.visible = true;
footer.includeInLayout = true;
this.validateNow();
if (printGrid.validNextPage)
{
//The grid is too big to fit on a single page
footer.visible = false;
footer.includeInLayout = false;
this.validateNow();
}
}
public function nextPage():Boolean
{
header.visible = false;
header.includeInLayout = false;
printGrid.nextPage();
footer.visible = !printGrid.validNextPage;
footer.includeInLayout = !printGrid.validNextPage;
this.validateNow();
return printGrid.validNextPage;
}
]]>
</mx:Script>
<mx:DateFormatter id="formatter" formatString="M/D/YYYY" />
<mx:Canvas id="header" height="80" width="100%">
<mx:Label text="Population by State"
fontSize="24"
color="0x666666"
horizontalCenter="0"
verticalCenter="0"
width="100%"
textAlign="center" />
</mx:Canvas>
<mx:VBox height="100%" width="80%">
<mx:PrintDataGrid id="printGrid" width="100%"
height="100%">
<mx:columns>
<mx:DataGridColumn dataField="@name"
headerText="State" />
<mx:DataGridColumn dataField="@population"
headerText="Population"/>
</mx:columns>
</mx:PrintDataGrid>
</mx:VBox>
<mx:DateFormatter id="format" formatString="m/d/yyyy" />
<mx:Canvas id="footer" height="80" width="100%">
<mx:Label text="{formatter.format(new Date())}"
left="20" bottom="5" />
</mx:Canvas>
</mx:VBox>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
backgroundColor="#ffffff" horizontalAlign="center">
<mx:Script>
<![CDATA[
public function startJob():void
{
//Try to print this on a single page
header.visible = true;
header.includeInLayout = true;
footer.visible = true;
footer.includeInLayout = true;
this.validateNow();
if (printGrid.validNextPage)
{
//The grid is too big to fit on a single page
footer.visible = false;
footer.includeInLayout = false;
this.validateNow();
}
}
public function nextPage():Boolean
{
header.visible = false;
header.includeInLayout = false;
printGrid.nextPage();
footer.visible = !printGrid.validNextPage;
footer.includeInLayout = !printGrid.validNextPage;
this.validateNow();
return printGrid.validNextPage;
}
]]>
</mx:Script>
<mx:DateFormatter id="formatter" formatString="M/D/YYYY" />
<mx:Canvas id="header" height="80" width="100%">
<mx:Label text="Population by State"
fontSize="24"
color="0x666666"
horizontalCenter="0"
verticalCenter="0"
width="100%"
textAlign="center" />
</mx:Canvas>
<mx:VBox height="100%" width="80%">
<mx:PrintDataGrid id="printGrid" width="100%"
height="100%">
<mx:columns>
<mx:DataGridColumn dataField="@name"
headerText="State" />
<mx:DataGridColumn dataField="@population"
headerText="Population"/>
</mx:columns>
</mx:PrintDataGrid>
</mx:VBox>
<mx:DateFormatter id="format" formatString="m/d/yyyy" />
<mx:Canvas id="footer" height="80" width="100%">
<mx:Label text="{formatter.format(new Date())}"
left="20" bottom="5" />
</mx:Canvas>
</mx:VBox>
这个组件定义了一个包含标题的页眉和显示日期的页脚。startJob方法为第一页初始化打印布局。它首先尝试把整个数据都容纳在单个页面里,然后调用validateNow强制更新组件布局,你可以通过PrintDataGrid的validNextPage属性测试其结果。如果返回值为false,则正好容纳,否则布局将被调整以隐藏页脚,重新更新布局。到此为止,无聊内容是多页还是单页,第一页都将被添加到打印机任务中。如果需要多页,nextPage方法将准备相应的布局。它将隐藏页眉(因此这已经不是第一页,不需要页眉了)以及根据情况打印页脚。
把构建智能页面布局放到渲染器里将大大简化实际打印任务。下面的代码块HeaderFooter.mxml,演示如何使用打印渲染器:
+展开
-ActionScript
public function print():void
{
var printJob:FlexPrintJob = new FlexPrintJob();
if (printJob.start())
{
var printRenderer:HeaderFooterPrintRenderer =
new HeaderFooterPrintRenderer();
printRenderer.visible = false;
this.addChild(printRenderer);
printRenderer.width = printJob.pageWidth;
printRenderer.height = printJob.pageHeight;
printRenderer.dataProvider = populationData.state;
printRenderer.startJob();
do
{
printJob.addObject(printRenderer);
}
while (printRenderer.nextPage());
//Send the last page
printJob.addObject(printRenderer);
printJob.send();
this.removeChild(printRenderer);
}
}
{
var printJob:FlexPrintJob = new FlexPrintJob();
if (printJob.start())
{
var printRenderer:HeaderFooterPrintRenderer =
new HeaderFooterPrintRenderer();
printRenderer.visible = false;
this.addChild(printRenderer);
printRenderer.width = printJob.pageWidth;
printRenderer.height = printJob.pageHeight;
printRenderer.dataProvider = populationData.state;
printRenderer.startJob();
do
{
printJob.addObject(printRenderer);
}
while (printRenderer.nextPage());
//Send the last page
printJob.addObject(printRenderer);
printJob.send();
this.removeChild(printRenderer);
}
}
Print方法开始一个打印任务并建立一个打印渲染器。这部分代码完成渲染器startJob方法的调用,准备好第一页的打印。下一部分代码,do...while块继续添加页面到打印任务,直到nextPage方法返回false,指示已没有页面可打印。但是do...while块是在最后调用nextPage方法,因此当循环结束最后一页还没有加入到打印任务中,需额外加入,发送打印任务,移除显示列表中的渲染器。
类别:flash/flex/fcs/AIR 作者:转载 日期:2010-04-30 【评论:0】
暂时没有评论!
发表留言
百度赞助
同类热门博文
- ·As+lightbox+js实现..
- ·21.8.使用Cairngorm..
- ·13.1.为ArrayCollec..
- ·18.13.通过二进制So..
- ·22.7.使用ModuleLoa..
- ·JavaScript控制Flas..
- ·6.6.动态载入外部图..
- ·flash预加载进度条p..
博格Tag
- flash/flex/fcs/AIR(752)
- Asp.Net/C#/WCF(598)
- 操作系统及应用软件(376)
- JavaScript/Ajax(330)
- SQL及数据库(134)
- 黑客技术(115)
- Asp/VBScript(111)
- HTML/WML/CSS兼容/XML(102)
- PHP/apache/Perl(96)
- 网站排名及优化(96)
- 其他(75)
- showbo日志(66)
- lucene.net/分词技术(33)
- 计算机网络(26)
- 机械重工(26)
- C#设计模式(25)
- Google Maps开发(17)
- 日语学习(15)
- Canvas/VML/SVG(13)
- linux(11)
- 游戏开发(8)
- 正则表达式(5)
- Jsp/Java(4)
最新博文
- ·PHP socket套接字学..
- ·Warning Cannot sen..
- ·php与flash as3 soc..
- ·Flash XMLSocket使用..
- ·给flash右键增加自定..
- ·flash控件html及col..
- ·Flash加载XML文件CD..
- ·Flex3中文教程--hom..
随机博文
