簡體   English   中英

如何在具有不同頁面尺寸的單個頁面上打印FlowDocument?

[英]How to print a FlowDocument on a single page with different page sizes?

這是我的情況:

我有一個文檔,當前是一個FlowDocument,我想在兩種不同的頁面尺寸上打印。 第一個是標准字母8.5 x 11; 另一台是便攜式打印機,按卷軸長度為5。 5倍打印效果很好嗎? 但會在兩頁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>

我試圖弄亂列寬,文檔頁面大小,縮放比例,添加包裝面板,添加堆棧面板等...,但我無法弄清楚。 它讓我發瘋!! 有人可以幫忙嗎?

附言:代碼中的任何拼寫錯誤都是由我引起的,因為我不得不從其他PC上手動復制它。

因此,在進行了更多的挖掘和使用價值並將FlowDocument添加到各種查看器之后,我注意到大多數詢問FlowDocument打印的人都遇到了與我相反的問題。 他們的解決方案是設置ColumnWidth。

我只是刪除了

ColumnWidth="500"

從FlowDocument中獲取,現在我有了所需的行為。 在A4上兩列打印,並在較小的卷紙上以所需的長度在單列中打印。 為了清楚起見,我也沒有在代碼中的任何地方設置ColumnWidth。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM