
这样可以正确旋转内容,并且所有内容都显示为拉伸页面的宽度(在本例中为高度),但底部部分正在被切断.它几乎就像显示到页面正常宽度的内容(通常是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); ... 这非常适合自动旋转内容,但宽度仍然被切断,就像它将页面宽度仍然像肖像一样.即使我已经改变了要交换的所有测量值.似乎调用InvalIDateMeasure()和InvalIDateArrangement()对改变输出没有任何区别.奇怪的是,当我将ScaleX更改为大于1的值时,它会拉伸剪切的内容以填充页面的更多内容.所以它几乎就像父容器在转换之前被剪切一样,尽管代码说明不然.基本上它似乎是Shawn Wildermuth blogged about的裁剪.所以我仍然在寻找想法/解决方案……
解决方法 如果没有任何基本的Xaml,很难确定问题是什么.不过我打算去这里打一个平底船.您正在使用Rendertransform,但应用了变换的元素将向其容器报告原始未变换的尺寸.结果,容器基于该信息进行剪裁.
我建议解决方案是在您的应用程序中包含Silverlight Toolkit,特别是Layouttransformer控件.将包含的页面放在此控件中.然后Layouttransformer将在其Layouttransform属性中接受您的Compositetransform.这里的区别是Layouttransformer报告是应用转换后的维度.因此它的容器不应该夹住它.
总结以上是内存溢出为你收集整理的从Silverlight强制进行横向打印?全部内容,希望文章能够帮你解决从Silverlight强制进行横向打印?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)