0

我想打印 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);

            }
        }

问题是标题文本使用了很多填充或类似的东西,所以文本不合适

在此处输入图像描述

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

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

4

1 回答 1

0

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

我快速查看AdvancedDataGridHeaderRenderer并确认,如果文本太宽并且网格的variableRowHeight属性为 false,渲染器将设置它的 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(仅适用于可变行高)
  • 或使用headerWordWrap属性在列级别控制自动换行AdvancedDataGridColumn
于 2012-05-30T21:09:57.890 回答