我有一个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);
这只是在页面上打印文本框的内容,但是某些笔记的跨度大于页面本身导致它被截断。如何更改我的代码以测量文本并添加更多页面?还是有更好的方法来执行上述操作,它会自动为我创建多个页面?
答案 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元素。
希望这有帮助