C# WPF-是否可以将DataGrid导出为PDF格式?
我有一个带有定制视觉效果的DataGrid: 是否可以将此DataGrid导出到pdf文件中,以保留所有自定义视觉效果 如果我的datagrid的xaml对这里的人有帮助的话(代码凌乱,可能不是最优的,但这不是我现在需要帮助解决pdf问题的重点),另外一个注意事项是,我正在从C#添加列:C# WPF-是否可以将DataGrid导出为PDF格式?,c#,wpf,pdf,pdf-generation,C#,Wpf,Pdf,Pdf Generation,我有一个带有定制视觉效果的DataGrid: 是否可以将此DataGrid导出到pdf文件中,以保留所有自定义视觉效果 如果我的datagrid的xaml对这里的人有帮助的话(代码凌乱,可能不是最优的,但这不是我现在需要帮助解决pdf问题的重点),另外一个注意事项是,我正在从C#添加列: 您是只需要视觉效果,还是需要在PDF中选择标签文本。如果您只需要视觉效果,可以将控件渲染成图像,并使用此图像创建带有免费pdf库的pdf。例如iTextSharp(现在的iText7=>https://gi
您是只需要视觉效果,还是需要在PDF中选择标签文本。如果您只需要视觉效果,可以将控件渲染成图像,并使用此图像创建带有免费pdf库的pdf。例如iTextSharp(现在的iText7=>https://github.com/itext/itext7-dotnet)
web上有许多解决方案可以帮助您解决这一问题(其中许多不是免费的,但您可以找到一些开源解决方案)。您还可以根据数据创建XPS文档,然后将其转换为PDF。这可能有点棘手,但它是可行的。@Sebastians认为图像可以用于我现在正在做的事情,但我仍然有兴趣学习如何使用可选文本导出它。@JohnDoe如果我要为可读的PDF创建解决方案,我会先将其导出为可读的文件格式,然后将其转换为PDF。例如,将datagrid转换为Excel:您必须自己应用视觉样式,因为xaml样式无法转换为Excel(到目前为止,我还没有找到解决方案)。使用Excel,您可以实现打开文件并将其另存为PDF的方法。@JohnDoe另一种方法是使用iText7或其他PDF库在PDF文档中创建表。但是,你必须自己在代码中应用样式——你只需要视觉效果还是需要PDF中的selectabel文本。如果您只需要视觉效果,可以将控件渲染成图像,并使用此图像创建带有免费pdf库的pdf。例如iTextSharp(现在的iText7=>https://github.com/itext/itext7-dotnet)
web上有许多解决方案可以帮助您解决这一问题(其中许多不是免费的,但您可以找到一些开源解决方案)。您还可以根据数据创建XPS文档,然后将其转换为PDF。这可能有点棘手,但它是可行的。@Sebastians认为图像可以用于我现在正在做的事情,但我仍然有兴趣学习如何使用可选文本导出它。@JohnDoe如果我要为可读的PDF创建解决方案,我会先将其导出为可读的文件格式,然后将其转换为PDF。例如,将datagrid转换为Excel:您必须自己应用视觉样式,因为xaml样式无法转换为Excel(到目前为止,我还没有找到解决方案)。使用Excel,您可以实现打开文件并将其另存为PDF的方法。@JohnDoe另一种方法是使用iText7或其他PDF库在PDF文档中创建表。但是您必须自己在代码中应用样式
<DataGrid Name="dgMain" AlternationCount="2" AlternatingRowBackground="#f2f2f2" IsReadOnly="True" GridLinesVisibility="None" VerticalGridLinesBrush="White">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="FontSize" Value="18"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Height" Value="50"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridColumnHeader">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Border BorderThickness="1" Padding="3,0,3,0" Height="{TemplateBinding Height}" Grid.Column="0">
<Border.Background>
<SolidColorBrush Color="#c7d9f1"/>
</Border.Background>
<ContentPresenter VerticalAlignment="{TemplateBinding VerticalAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Border>
<Thumb x:Name="PART_RightHeaderGripper" Grid.Column="1" HorizontalAlignment="Right" Width="2" BorderThickness="1" Cursor="SizeWE" BorderBrush="{Binding VerticalGridLinesBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Padding" Value="10" />
<Setter Property="FontSize" Value="16" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Padding="{TemplateBinding Padding}">
<ContentPresenter></ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
</DataGrid.Columns>
</DataGrid>