Это ошибка или ограничение PrintDataGrid или мое непонимание? - PullRequest
0 голосов
/ 08 апреля 2011

Я пытаюсь реализовать PrintDataGrid в своем приложении, и у меня возникла специфическая проблема. Распечатка пропускает последние несколько строк в распечатке каждой страницы. Я сузился до того, что вызывает эту проблему. Мой пользовательский скин на уровне приложения предоставляет возможность прокрутки Flex для всего приложения. Наличие этой полосы прокрутки в пользовательском скине заставляет PrintDataGrid пропускать последние строки. На самом деле количество пропущенных строк зависит от высоты браузера. Если вы уменьшите высоту браузера, вы пропустите больше строк!

Это ошибка PrintDataGrid или ограничение (не может иметь PrintDataGrid в Scroller) или я что-то упустил?

Пожалуйста, помогите, поскольку я борюсь с этим в течение нескольких дней!

Вот простой код для воспроизведения проблемы:

Основное применение:

Пользовательский класс скинов приложения ============================================

@ см. Spark.components.Application

@ langversion 3.0 @playerversion Flash 10 @playerversion AIR 1.5 @productversion Flex 4 ->

<fx:Metadata>
    <![CDATA[
    /**
    * A strongly typed property that references the component to which this skin is applied.
    */
    [HostComponent("spark.components.Application")]
    ]]>
</fx:Metadata>

<fx:Script fb:purpose="styling">
    <![CDATA[
        /**
         *  @private
         */
        override protected function updateDisplayList(unscaledWidth:Number,
                                                      unscaledHeight:Number) : void
        {
            bgRectFill.color = getStyle('backgroundColor');
            super.updateDisplayList(unscaledWidth, unscaledHeight);
        }
    ]]>
</fx:Script>

<s:states>
    <s:State name="normal" />
    <s:State name="disabled" />
    <s:State name="normalWithControlBar" />
    <s:State name="disabledWithControlBar" />
</s:states>

<!-- fill -->
<!---
A rectangle with a solid color fill that forms the background of the application.
The color of the fill is set to the Application's backgroundColor property.
-->
<s:Rect id="backgroundRect" left="0" right="0" top="0" bottom="0"  >
    <s:fill>
        <s:SolidColor id="bgRectFill" color="#FFFFFF"/>
    </s:fill>
</s:Rect>

<s:Scroller left="1" top="1" right="1" bottom="1" id="scroller">
    <s:Group left="0" right="0" top="0" bottom="0">
        <s:layout>
            <s:VerticalLayout gap="0" horizontalAlign="justify" />
        </s:layout>

        <!---
        @private
        Application Control Bar
        -->
        <s:Group
            id="topGroup"
            minWidth="0"
            minHeight="0"
            includeIn="normalWithControlBar, disabledWithControlBar"
            >

            <!-- layer 0: control bar highlight -->
            <s:Rect left="0" right="0" top="0" bottom="1" >
                <s:stroke>
                    <s:LinearGradientStroke rotation="90" weight="1">
                        <s:GradientEntry color="0xFFFFFF" />
                        <s:GradientEntry color="0xD8D8D8" />
                    </s:LinearGradientStroke>
                </s:stroke>
            </s:Rect>

            <!-- layer 1: control bar fill -->
            <s:Rect left="1" right="1" top="1" bottom="2" >
                <s:fill>
                    <s:LinearGradient rotation="90">
                        <s:GradientEntry color="0xEDEDED" />
                        <s:GradientEntry color="0xCDCDCD" />
                    </s:LinearGradient>
                </s:fill>
            </s:Rect>

            <!-- layer 2: control bar divider line -->
            <s:Rect left="0" right="0" bottom="0" height="1" alpha="0.55">
                <s:fill>
                    <s:SolidColor color="0x000000" />
                </s:fill>
            </s:Rect>

            <!-- layer 3: control bar -->
            <!--- @copy spark.components.Application#controlBarGroup -->
            <s:Group id="controlBarGroup" left="0" right="0" top="1" bottom="1" minWidth="0" minHeight="0">
                <s:layout>
                    <s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="7" paddingBottom="7" gap="10" />
                </s:layout>
            </s:Group>
        </s:Group>

        <!--- @copy spark.components.SkinnableContainer#contentGroup -->
        <!--<s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0" />-->
        <s:Group id="contentGroup" left="0" right="0" top="0" bottom="0" />
    </s:Group>
</s:Scroller>

1 Ответ

1 голос
/ 20 апреля 2011

Это, очевидно, известная ошибка с библиотекой печати Flex и элементами управления Scroller.Вы можете прочитать о моих обсуждениях по этому вопросу здесь: http://forums.adobe.com/message/3626759

Первое, что я бы попробовал, - это избавиться от пользовательского скина, обработать задание на печать, а затем повторно применить пользовательский скин.Это может помочь.Если это работает, но выглядит не так, как вы хотите, то вы можете создать вариант своего собственного скина приложения, в котором нет скроллера.Вы должны применить это перед запуском задания на печать, а затем восстановить исходный пользовательский скин приложения после его завершения.

Пользователь может ненадолго увидеть «альтернативную» версию вашего приложения, когда он нажмет кнопку печати,но это должно быть не более доли секунды.

-Джош

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...