客户端报告在Silverlight中生成和打印

时间:2011-12-09 01:48:36

标签: silverlight printing telerik report

我一直在研究一个项目,需要生成一个包含标题的简单报告,一个包含简单分组和页脚的表。此报告需要打印功能,并且可以是多个页面。 我发现使用DataGrid创建此报告确实很困难,因为我无法生成和打印多个PrintDocument页面。 到目前为止,我尝试使用iframe(使用Telerik的HTMLPlaceHolder)和html报告,我使用后面的silverlight代码生成,但javascript打印功能打印整个silverlight页面。 我有telerik并且我将它用于预先报告但是我不希望将telerik报告用于此特定报告,因为报告是在服务器上生成的(我不想将任何值传递回服务器) )。

有没有办法在客户端生成具有打印功能的报告。

我愿意接受所有建议,只要它不太贵(最高100美元)

如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

您可能希望在Silverlight中使用PrintDocument类。用法就像..

在XAML文件中创建列表为

<ScrollViewer Height="300" VerticalScrollBarVisibility="Auto">
        <ItemsControl x:Name="printSurface">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal"
                Height="25">
                        <TextBlock Width="100"
                 Text="{Binding Name}" />
                        <TextBlock Width="75"
                 Text="{Binding Genre.Name}" />
                        <TextBlock Width="50"
                 Text="{Binding Price, StringFormat=c}" />
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>

和背后的代码看起来像

   void printButton_Click(object sender, RoutedEventArgs e)
    {
          PrintDocument doc = new PrintDocument();
          doc.PrintPage += new EventHandler<PrintPageEventArgs>(doc_PrintPage);
          doc.Print("Page title");
     }

     void doc_PrintPage(object sender, PrintPageEventArgs e)
      {
       // Stretch to the size of the printed page
       printSurface.Width = e.PrintableArea.Width;
       printSurface.Height = e.PrintableArea.Height;

       // Assign the XAML element to be printed
       e.PageVisual = printSurface;

       // Specify whether to call again for another page
       e.HasMorePages = false;
    }