打印ScrollViewer内容



我有以下内容:一个带有滚动查看器和打印按钮的wpf窗口。

我正在尝试使用PrintDialog打印滚动查看器的内容,但它只适用于xps。如果我选择我的打印机或文档书写器,那么最终的结果是可怕的(半页边距,控制剪切等)。如何解决这个问题,而不调整/缩放滚动查看器的内容?

要在WPF中进行体面(并且相对容易)的打印,您应该使用FlowDocumentScrollViewer而不是ScrollViewer。在FlowDocumentScrollViewer中,你可以放置一个FlowDocument,它将包含你想要打印的内容。

样本XAML:

<FlowDocumentScrollViewer>
    <FlowDocument PagePadding="48">
        <Section>
            <Paragraph>
                <Run Text="sample"/>
            </Paragraph>
        </Section>
        <Section>
            <BlockUIContainer>
                <my:myUserControl/>
            </BlockUIContainer>
        </Section>
    </FlowDocument>
</FlowDocumentScrollViewer>

'BlockUIContainer'对象是伟大的容纳一个用户控件,可以包含任何你需要的。FlowDocument的"PagePadding"属性设置页边距。48等于1/2英寸。(96 dpi)。

示例打印代码:

Dim pd As New PrintDialog
If pd.ShowDialog Then
    Dim fd As FlowDocument = docOutput
    Dim pg As DocumentPaginator = CType(fd, IDocumentPaginatorSource).DocumentPaginator
    pd.PrintDocument(pg, "my document")
End If

FlowDocument可能是动态内容和动态打印尺寸的更好解决方案,即要么是未知的,要么可能会改变。对于我的问题,我知道内容和打印尺寸。

我做的第一件事是将ScrollViewer中的内容(在我的例子中是一个网格)设置为A4大小,这可以通过

轻松完成。
<Grid x:Name="gridReport" Height="29.7cm" Width="21cm">

这意味着网格完全映射到打印区域,无论网格内的是什么,在打印时都不应该被扭曲。

如果在使用PrintDialog时ScrollViewer没有滚动到顶部,这仍然会切断顶部区域。若要以编程方式解决此问题,请在使用

打印前滚动到顶部
Myscrollviewer.ScrollToTop();
PrintDialog printDialog = new PrintDialog();
if(printDialog.ShowDialog() == true)
{
    printDialog.PrintVisual(gridReport, "Print Report");
}

相关内容

  • 没有找到相关文章

最新更新