Как напечатать FlowDocument на одной странице с разными размерами страницы?

Вот мой сценарий:

У меня есть документ, в настоящее время FlowDocument, который я хотел бы напечатать на двух разных размерах страницы. Первая - стандартная буква 8.5 на 11; другой - портативный принтер, и его длина составляет 5 штук. На 5х печатает нормально? но он печатается на двух страницах размером 8,5х11. Я хочу, чтобы в 8.5x11 было два столбца, поэтому первый столбец перетекает во второй столбец, а не на вторую страницу. Я НЕ хочу масштабировать все это так, чтобы оно печаталось в одной тонкой колонке на одном листе размером 8,5х11; это нечитаемо Некоторое масштабирование, чтобы уместить страницу в два столбца, все в порядке. Он хорошо печатает на бумаге обоих форматов из 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>

Я попытался поэкспериментировать с шириной столбца, размером страницы документа, масштабированием, добавлением панелей переноса, добавлением панелей стека и т. Д., И я не могу понять это. Это сводит меня с ума! Кто-нибудь может помочь?

PS Любые опечатки в коде вызваны мной, так как мне пришлось копировать его вручную с другого компьютера.

1 ответ

Решение

Итак, после еще большей работы с значениями и добавления FlowDocument к различным средствам просмотра я заметил, что у большинства людей, задающих вопросы о печати FlowDocument, возникла противоположная проблема, с которой я столкнулся. И их решением было установить ColumnWidth.

Я просто удалила

ColumnWidth="500"

из FlowDocument, и теперь у меня есть поведение, которое я хочу. Печатает в двух столбцах на А4 и печатает в одном столбце нужной длины на меньшей буферной бумаге. И для ясности, я также не устанавливаю ColumnWidth нигде в коде.

Другие вопросы по тегам