我一直在寻找将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文件中获取页眉/页脚。
答案 0 :(得分:1)
看看他们正在做的this MSDN blogpost几乎和你做的一样。使用自定义DocumentPaginator来缩放原始页面。我认为这应该可以解决问题。很久以前我也用过它,页眉和页脚都没问题。
答案 1 :(得分:0)
要在打印期间提供页眉和页脚属性,我们通常会处理PrintPage事件并在此事件处理程序中提供这些功能。这是一个供您参考的样本。虽然此示例是DataGridView的打印机类,但您可以采用添加页眉和页脚功能的逻辑。
·http://www.codeproject.com/KB/cs/DGVPrinter.aspx
如果您使用WebBrowser打印HTML,则可以自定义页眉和页脚,如下文所述。