我正在使用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");
}
它不能很好地工作。如果单击打印菜单一次,我将得到两张打印,并且没有剩余页边距。该行开头的文本没有完全打印
有人有更好的解决方案吗?
答案 0 :(得分:2)
由于要调用两种打印方法(pd.PrintVisual
和pd.PrintDocument
),因此获得了两次打印。为了保证金,您需要为Padding
设置FlowDocument
。您可以参考下面的代码,该代码可以正常工作。
此外,您无需创建RichTextBox
并在其中访问FlowDocument
。相反,您可以创建FlowDocument
并使用它本身。
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog())
{
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");
}