使用页眉和页脚打印RTF - FlowDocument还是其他什么?

时间:2014-02-20 09:22:18

标签: wpf pagination rtf flowdocument

我一直在寻找将RTF导入流文档,顽固地用于无人值守打印;经过大量的讨论,使用FlowDocument似乎是正确的方法。我已经让RTF正常工作,但是当将RTF加载到FlowDocument中时,页脚会消失。

RTF是在Word中生成的,当加载到Wordpad中时,页脚是可见的,所以我只能假设我正在加载文档错误,或者这是默认分页符的问题,或者两者都有问题。

这是我到目前为止,它加载文件并进行打印:

[STAThread]
public static int Main(string[] args)
{
    var documentPath = @"C:\temp\Example.rtf";

    var fileStream = File.Open(documentPath, FileMode.Open, FileAccess.Read, FileShare.Read);

    // Load the RTF into the flow document
    var flowDocument = new FlowDocument();
    TextRange textRange = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);
    textRange.Load(fileStream, DataFormats.Rtf);
    flowDocument.ColumnWidth = double.PositiveInfinity;
    var t = new Thickness(72);
    flowDocument.PagePadding = t; // Page margin

    // Get printer
    var queue = LocalPrintServer.GetDefaultPrintQueue();
    var capa = queue.GetPrintCapabilities();

    // Configure paginator
    var paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;
    paginator.PageSize = new Size(capa.OrientedPageMediaWidth.Value, capa.OrientedPageMediaHeight.Value);

    // ...and print.
    var writer = System.Printing.PrintQueue.CreateXpsDocumentWriter(queue);
    writer.Write(paginator);

    return 0;
}

......除此之外,我不知所措。目前尚不清楚页脚是否只是没有加载(因此不是FlowDocument的一部分) - 我怀疑是这种情况,因为我们正在加载一个标记主FlowDocument内容的开始和结束的TextRange;但我也怀疑我可能也需要一个自定义分页器。

是否有任何指向我缺少的文档的指针 - 谷歌搜索“RTF页脚导入流文档分页器”(和类似的)(到目前为止)没有显示相关的结果。我到目前为止最接近的是this SO question,但这不包括从RTF文件中获取页眉/页脚。

2 个答案:

答案 0 :(得分:1)

看看他们正在做的this MSDN blogpost几乎和你做的一样。使用自定义DocumentPaginator来缩放原始页面。我认为这应该可以解决问题。很久以前我也用过它,页眉和页脚都没问题。

答案 1 :(得分:0)

要在打印期间提供页眉和页脚属性,我们通常会处理PrintPage事件并在此事件处理程序中提供这些功能。这是一个供您参考的样本。虽然此示例是DataGridView的打印机类,但您可以采用添加页眉和页脚功能的逻辑。

·http://www.codeproject.com/KB/cs/DGVPrinter.aspx

如果您使用WebBrowser打印HTML,则可以自定义页眉和页脚,如下文所述。

·http://www.codeproject.com/KB/miscctrl/tips.aspx#tip3.8.2