打印AdvancedDataGrid时网格标题文本不适合

时间:2012-05-30 16:19:42

标签: flex air

我想打印一个AdvancedDataGrid,我正在使用此代码

public function doPrint():void {
            myPrintJob = new FlexPrintJob();
            myPrintDataGrid = new PrintAdvancedDataGrid();
            myPrintDataGrid.source=this.dataGrid;
            StageReference.instance.addElement(myPrintDataGrid);

            if (myPrintJob.start()) {   
                myPrintJob.addObject(myPrintDataGrid, FlexPrintJobScaleType.MATCH_WIDTH);
                myPrintJob.send();
                StageReference.instance.removeElement(myPrintDataGrid); 
            }
            else
            {
                StageReference.instance.removeElement(myPrintDataGrid);

            }
        }

问题是标题文本使用了大量填充或类似的东西,因此文本不适合

enter image description here

如果有人可以给我任何提示,我不知道该寻找什么(也许尝试创建我自己的标题渲染器?)

我找到原因,FlexPrintJob.addObject缩放网格,我认为标题需要更多的帧,直到更新,缩放中有一些奇怪的东西,我在调试中注意到宽度设置为200,即使页面宽度为600,现在没有真正的解决方案,因此避免缩放。

1 个答案:

答案 0 :(得分:0)

Flex标签/文本对象如果认为文本没有足够的空间,通常会截断文本。

我快速查看AdvancedDataGridHeaderRenderer并确认,如果文字太宽网格的variableRowHeight属性,渲染器会将其设置为UITextField以截断文本是假的。

AdvancedDataGridHeaderRenderer的commitProperties()方法的一个片段(第462行):

label.text = listData.label ? listData.label : " ";
label.multiline = grid.variableRowHeight;
// Get the headerWordWrap for a column, using the default wordWrap if none specified
if( _data is AdvancedDataGridColumn)
    label.wordWrap = grid.columnHeaderWordWrap(_data as AdvancedDataGridColumn);

实际的截断发生在AdvancedDataGridHeaderRenderer的updateDisplayList()方法中(第628行)。

知道这一点,你有一些选择:

  • 使用调试器逐步执行commitProperties / updateDisplayList中的代码,看看为什么标题中的标签对象认为它们需要如此之小。在你的屏幕截图中,似乎有足够的空间 - 但由于某些原因,标签不这么认为。

  • 覆盖AdvancedDataGridHeaderRenderer的commitProperties / updateDisplayList方法,使其完全符合您的要求

  • 设置网格/渲染器的样式和属性以允许更多宽度和/或多行文本

要执行后者,您需要执行以下某些组合:

  • 使用CSS更改AdvancedDataGridHeaderRenderer的字体和其他样式(此类的默认填充为2px)
  • 为网格启用variableRowHeight
  • 将网格的wordWrap属性设置为true(仅适用于可变行高)
  • 或使用AdvancedDataGridColumn
  • headerWordWrap属性控制列级别的自动换行