Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-是否可以将DataGrid导出为PDF格式?_C#_Wpf_Pdf_Pdf Generation - Fatal编程技术网

C# WPF-是否可以将DataGrid导出为PDF格式?

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

我有一个带有定制视觉效果的DataGrid:

是否可以将此DataGrid导出到pdf文件中,以保留所有自定义视觉效果

如果我的datagrid的xaml对这里的人有帮助的话(代码凌乱,可能不是最优的,但这不是我现在需要帮助解决pdf问题的重点),另外一个注意事项是,我正在从C#添加列:



您是只需要视觉效果,还是需要在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>