我一直在研究一个项目,需要生成一个包含标题的简单报告,一个包含简单分组和页脚的表。此报告需要打印功能,并且可以是多个页面。 我发现使用DataGrid创建此报告确实很困难,因为我无法生成和打印多个PrintDocument页面。 到目前为止,我尝试使用iframe(使用Telerik的HTMLPlaceHolder)和html报告,我使用后面的silverlight代码生成,但javascript打印功能打印整个silverlight页面。 我有telerik并且我将它用于预先报告但是我不希望将telerik报告用于此特定报告,因为报告是在服务器上生成的(我不想将任何值传递回服务器) )。
有没有办法在客户端生成具有打印功能的报告。
我愿意接受所有建议,只要它不太贵(最高100美元)
如果您需要更多详细信息,请与我们联系。
答案 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;
}