silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从Silverlight强制进行横向打印?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_675_1@

概述

使用Silverlight 4,是否可以在横向模式下打印网格并显示所有内容?我们将“页面”构建为网格,并从PrintDocument的PrintableArea设置转置的高度/宽度.然后我们应用CompositeTransform来设置rotation和TranslateX.基本上,它与 solution found here非常相似. 这样可以正确旋转内容,并且所有内容都显示为拉伸页面的宽度(在
使用Silverlight 4,是否可以在横向模式下打印网格并显示所有内容?我们将“页面”构建为网格,并从PrintDocument的PrintableArea设置转置的高度/宽度.然后我们应用CompositeTransform来设置rotation和TranslateX.基本上,它与 solution found here非常相似.

这样可以正确旋转内容,并且所有内容显示为拉伸页面的宽度(在本例中为高度),但底部部分正在被切断.它几乎就像显示页面正常宽度的内容(通常是8.5“宽度),尽管它被渲染到页面的高度(11”高度).因此,2.5英寸的内容将作为页面底部的空白内容出现.

注意:我们不会将现有的视觉元素从UI中拉出来放入“页面”网格中.我们正在定义DataTemplates并将VM传递给DataContext.所有内容都被正确绑定和显示,但是对打印文档的渲染是出错的.

有没有我们遗失的东西?我们希望避免首先渲染页面的位图,但如果这是我们必须做的……

更新:基于进一步调查(并与开始处理报告的团队成员交谈),代码非常基于Pete Brown’s client side printing.我们已经扩展了一些分组和增强报告的功能,但整体布局处理是相同的引擎.

如果你看一下Pete Brown的代码,我们当前使用的差异是GetNewPage方法中的以下内容

...
    this.CurrentPagenumber++;

    Grid pagePanel = new Grid();
    LayoutTransformer layoutTransformer = new LayoutTransformer
        {
            Content = pagePanel,Tag = this.CurrentPagenumber
        };

    if (printableArea.Height > printableArea.Width)
    {
        // printable area is in PorTrait mode.
        layoutTransformer.Height = printableArea.Width;
        layoutTransformer.Width = printableArea.Height;
        var transform = new CompositeTransform
        {
            Rotation = 90,TranslateX = printableArea.Width,ScaleX = 1,ScaleY = 1
        };
        layoutTransformer.LayoutTransform = transform;
        layoutTransformer.ApplyLayoutTransform();
        layoutTransformer.RenderTransform = transform;
    }
    else
    {
        // printable area is in Landscape mode
        layoutTransformer.Height = printableArea.Height;
        layoutTransformer.Width = printableArea.Width;
    }

    Size pageSize = new Size(layoutTransformer.Width,layoutTransformer.Height);
    layoutTransformer.HorizontalAlignment = HorizontalAlignment.Stretch;
    layoutTransformer.VerticalAlignment = VerticalAlignment.Stretch;

    RowDeFinition headerRow = new RowDeFinition { Height = GridLength.Auto };
    RowDeFinition itemsRow = new RowDeFinition { Height = new GridLength(1,GridUnitType.Star) };
    RowDeFinition footerRow = new RowDeFinition { Height = GridLength.Auto };

    pagePanel.RowDeFinitions.Add(headerRow);
    pagePanel.RowDeFinitions.Add(itemsRow);
    pagePanel.RowDeFinitions.Add(footerRow);
    ...@H_673_32@ 
 

这非常适合自动旋转内容,但宽度仍然被切断,就像它将页面宽度仍然像肖像一样.即使我已经改变了要交换的所有测量值.似乎调用InvalidateMeasure()和InvalidateArrangement()对改变输出没有任何区别.奇怪的是,当我将ScaleX更改为大于1的值时,它会拉伸剪切的内容以填充页面的更多内容.所以它几乎就像父容器在转换之前被剪切一样,尽管代码说明不然.基本上它似乎是Shawn Wildermuth blogged about的裁剪.所以我仍然在寻找想法/解决方案……

解决方法

如果没有任何基本的Xaml,很难确定问题是什么.不过我打算去这里打一个平底船.

您正在使用RenderTransform,但应用了变换的元素将向其容器报告原始未变换的尺寸.结果,容器基于该信息进行剪裁.

我建议解决方案是在您的应用程序中包含Silverlight Toolkit,特别是LayoutTransformer控件.将包含的页面放在此控件中.然后LayoutTransformer将在其LayoutTransform属性中接受您的CompositeTransform.这里的区别是LayoutTransformer报告是应用转换后的维度.因此它的容器不应该夹住它.

大佬总结

以上是大佬教程为你收集整理的从Silverlight强制进行横向打印?全部内容,希望文章能够帮你解决从Silverlight强制进行横向打印?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。