wpf 内容打印一个文本框

wpf content print a textbox

我正在使用 WPF 开发文本编辑器,并尝试使用以下代码来打印文本框的内容:

PrintDialog pd = new PrintDialog();
if ((pd.ShowDialog() == true))
{
    RichTextBox richTB = new RichTextBox();
    richTB.Document.Blocks.Add(new Paragraph(new Run(TBXEditor.Text)));

    //use either one of the below      
    pd.PrintVisual(richTB as Visual, "printing as visual");
    pd.PrintDocument((((IDocumentPaginatorSource)richTB.Document).DocumentPaginator), "printing as paginator");
}

效果不佳。如果我单击一次打印菜单,我得到两张打印件并且没有左边距。行首文字打印不完整

有没有人有更好的解决方案?

您得到了两次打印,因为您调用了两种打印方法(pd.PrintVisualpd.PrintDocument)。对于保证金,您需要为您的 FlowDocument 设置 Padding。您可以参考下面的代码,它可以正常工作。

此外,您不需要创建 RichTextBox 并访问其中的 FlowDocument。相反,您可以创建 FlowDocument 并使用它本身。

PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
    FlowDocument flowDocument = new FlowDocument();
    flowDocument.PagePadding = new Thickness(50);
    flowDocument.Blocks.Add(new Paragraph(new Run(TBXEditor.Text)));

    printDialog.PrintDocument((((IDocumentPaginatorSource)flowDocument).DocumentPaginator), "Using Paginator");
}