我在 FlowDocument 中定义了一个报告。在该报告中,我有一些部分要以横向模式打印。为了做到这一点,我编写了一个肮脏的 DocumentPaginator hack,它为标记为横向的部分创建了一个面向横向的 FlowDocument。
public override DocumentPage GetPage(int pageNumber)
{
// some code
if (section.Name.Equals("landscapePage"))
{
var landscapeDocument = new FlowDocument();
landscapeDocument.PageWidth = document.PageHeight;
landscapeDocument.ColumnWidth = document.PageWidth - 50;
landscapeDocument.PageHeight = document.PageWidth;
landscapeDocument.Blocks.Add(section);
var landscapePaginator = ((IDocumentPaginatorSource)landscapeDocument).DocumentPaginator;
var landscapePage = landscapePaginator.GetPage(0);
return landscapePage;
}
// more code
如果我打印到 XPS 文档,这看起来和预期的一样。横向标记的页面在 XPS 查看器中以横向模式显示。但是,如果我直接或从 XPS 查看器打印文档,打印机不会旋转横向页面并且内容的右侧会被裁剪。
我还尝试在 Word 中制作混合模式文档,按预期打印,但如果我将相同的文档保存为 XPS 并使用 XPS 查看器打印,横向页面会被裁剪。这让我想知道 XPS 是否完全支持混合页面方向。
我知道我可以从页面中提取 Visual 并添加 90 度旋转变换。我试过了,打印时效果很好,但如果保存为 XPS 或 PDF,页面显然会旋转,这在显示器上查看打印时效果不佳。
有没有办法在不使用旋转变换的情况下以混合方向打印 FlowDocuments?