在Silverlight中打印测量大于页面的文本

时间:2014-01-01 14:11:27

标签: silverlight printdocument

我有一个silverlight应用程序,允许人们进入可以打印的笔记字段,用于执行此操作的代码是:

PrintDocument pd = new PrintDocument();

        Viewbox box = new Viewbox();
        TextBlock txt = new TextBlock();
        txt.TextWrapping = TextWrapping.Wrap;
        Paragraph pg = new Paragraph();
        Run run = new Run();
        pg = (Paragraph)rtText.Blocks[0];
        run = (Run)pg.Inlines[0];
        txt.Text = run.Text;

        pd.PrintPage += (s, pe) =>
        {
            double grdHeight = pe.PrintableArea.Height - (pe.PageMargins.Top + pe.PageMargins.Bottom);
            double grdWidth = pe.PrintableArea.Width - (pe.PageMargins.Left + pe.PageMargins.Right);
            txt.Width = grdWidth;
            txt.Height = grdHeight;
            pe.PageVisual = txt;
        };

        pd.Print(lblTitle.Text);

这只是在页面上打印文本框的内容,但是某些笔记的跨度大于页面本身导致它被截断。如何更改我的代码以测量文本并添加更多页面?还是有更好的方法来执行上述操作,它会自动为我创建多个页面?

2 个答案:

答案 0 :(得分:2)

您的问题有多种解决方案,所有这些都在Google上的“多页打印Silverlight”下进行。我遇到了类似的问题,并尝试了大部分问题。对我有用的唯一一个就是这个:

http://www.codeproject.com/Tips/248553/Silverlight-converting-to-image-and-printing-an-UI

但老实说,您应首先查看Google,看看是否有更好的解决方案来解决您的具体问题。

回答你的问题,有一个名为HasMorePages的标志,表示你需要一个新的页面。只需输入pe.HasMorePages,您就会看到。

希望有所帮助

答案 1 :(得分:0)

  • 首先,您需要计算出需要多少页面

    Dim pagesNeeded As Integer = Math.Ceiling(gridHeight / pageHeight)'获取所需页数

  • 然后,一旦将第一页发送到打印机,您需要将该数据移出视图并将新数据放入视图中以备打印。我这样做是通过将整个数据集转换为图像/ UI元素,然后我可以相应地调整Y值以在屏幕上显示下一组所需数据。

    transformGroup.Children.Add(带有{.Y = - (pageIndex * pageHeight)}的新TranslateTransform())

  • 然后,一旦达到所需页数,请告诉打印机停止

    '设置是否有超过1页要打印         如果pagesLeft< = 0那么             e.HasMorePages =假             退出子         其他             e.HasMorePages =真         结束如果

或者,如果这工作太多,您只需缩放所有音符以适应屏幕即可。可能再次转换为UI元素。

希望这有帮助