如何在不同页面大小的单个页面上打印FlowDocument

本文关键字:单个页 打印 FlowDocument | 更新日期: 2023-09-27 18:28:39

这是我的场景:

我有一个文档,目前是FlowDocument,我想打印在两种不同的页面大小上。第一个是标准字母8.5乘11;另一种是便携式打印机,长度为卷筒纸的5倍。它在5x上打印得很好?但它打印在8.5x11的两页纸上。我希望8.5x11有两列,这样第一列流入第二列,而不是第二页。我不想缩放整个东西,让它在8.5x11的一张纸上打印成一个瘦柱;这是不可读的。不过,将页面缩放到两列也是可以的。它在Xamlpad的两种尺寸的纸上都打印得很好,但不是我的程序。所以,这一定是可能的,然而,就我的生活而言,我无法弄清楚。

我的打印机类:

public void Print(MyViewModel Data) {
    IDocumentPaginator flowDoc = RenderFlowDocumentTemplate(pathToFlowDocument, data);
    PrintDocumentImageableArea area = null;
    XpsDocumentWriter xpsDocWriter = PrintQueue.CreateXpsDocumentWriter(ref area);
    if (xpsDocWriter != null) {
        PrintFlowDocument(xpsDocWriter, flowDoc.DocumentPaginator, area);
    }
}
private IDocumentPaginator RenderFlowDocumentTemplate(string path, MyViewModel Data) {
    string rawXamlText = "";
    using (StreamReader streamReader = File.OpenText(templatePath)) {
        rawXamlText = streamReader.ReadToEnd();
    }
    FlowDocument doc = XamlReader.Load(new XmlTextReader(new StringReader(rawXamlText)) as FlowDocument;
    if (data != null) {
        doc.DataContext = data;
    }
    return doc;
}
private void PrintFlowDocument(XpsDocumentWriter writer, DocumentPaginator document, PrintDocumentImageableArea area) {
    document.PageSize = new Size(area.ExtentWidth, area.ExtentHeight);
    PrintDocumentPaginator(writer, document);
}
private void PrintDocumentPaginator(XpsDocumentWriter xpsDocWriter, DocumentPaginator document) {
    try {
        xpsDocWriter.Write(document);
    }
    catch (PrintSystemException) {}
}

这是我的FlowDocument的一个非常精简的版本:

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              Background="White"
              ColumnWidth="500">
    <FlowDocument.Resources>...some resources...</FlowDocument.Resources>
    <Paragraph />
    <BlockUIContainer>
        <Grid />
    </BlockUIContainer>
    .
    .
    .
    <Section />
</FlowDocument>

我试过打乱列宽、文档页面大小、缩放、添加换行面板、添加堆栈面板等……但我无法解决这个问题。它把我逼疯了!!有人能帮忙吗?

附言:代码中的任何拼写错误都是由我引起的,因为我必须手动从另一台电脑上复制它。

如何在不同页面大小的单个页面上打印FlowDocument

因此,在对值进行了更多的挖掘和处理,并将FlowDocument添加到各种查看器中之后,我注意到大多数询问FlowDocument打印问题的人都有与我相反的问题。他们的解决方案是设置ColumnWidth。

我只是简单地删除了

ColumnWidth="500"

从FlowDocument,我现在有了我想要的行为。在A4上分两列打印,在较小的假脱机纸上按所需长度打印一列。为了清楚起见,我也没有在代码中的任何位置设置ColumnWidth。