Silverlight中的打印切断了一部分

时间:2014-01-28 16:47:05

标签: silverlight printing

如何在silverlight应用程序上提供打印选项。我可以使用PrintDocument类进行打印,但它会切割边缘。 有没有办法缩小视图以适应打印纸。谢谢你的帮助。 我使用以下代码:

PrintDocument document = new PrintDocument();
document.PrintPage += (s, args) =>
{
args.PageVisual = this.LayoutRoot;
};
document.Print("Silverlight Print Application Demo");

2 个答案:

答案 0 :(得分:0)

这里有两个概念上不同的任务:

  1. 在某个时刻打印在ui中呈现的元素
  2. 专门为打印呈现元素。
  3. 由于你抱怨边缘的切断,我认为你想做后者。为此,我不会添加当前控件的布局根,我怀疑你正在做。添加尚未添加到可视树中的内容,或在打印前将其从父目录中删除。

    如果由于某种原因必须首先删除它(可能是因为用户需要先与它进行交互),然后将该元素存储在变量printedPage中,您可以将其重新添加到可视树中。 PrintDocument.EndPrint事件。

    对于主事件处理程序,请使用以下内容:

        void HandlePrintPage(object sender, PrintPageEventArgs e)
        {
            var panel = new Grid();
    
            // get an element to print that is not attached to the visual tree
            printedPage = GetDetachedPageToPrint();
    
            panel.Children.Add(printedPage.ReportPage);
    
            // we wrap it in a Viewbox to make it full-page
            var viewbox = new Viewbox() { Child = panel };
    
            // we need to have a measure pass
            viewbox.Measure(e.PrintableArea);
    
            e.PageVisual = viewbox;
    
            // for more pages, we would need to be more careful
            //with parent detachments
            e.HasMorePages = false;
        }
    

答案 1 :(得分:0)

几个月前我遇到了同样的问题并尝试了几种解决方案。

我已经在另一篇文章中回答了这个问题。请看看:

https://stackoverflow.com/a/20896774/1141477

它将框架元素转换为图像并将其放入矩形内,该矩形与printableArea的大小相同。它对我很有用。

希望它有所帮助!