2012-03-21 104 views
1

這是我的場景:如何在具有不同頁面大小的單頁上打印FlowDocument?

我有一個文檔,目前是一個FlowDocument,我想打印在兩個不同的頁面大小。第一個是標準字母8.5乘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> 

我試圖與列寬搞亂,文檔頁面大小,縮放,添加包裝面板,添加堆疊面板等...我無法弄清楚這一點。這讓我瘋狂!誰能幫忙?

P.S.代碼中的任何拼寫錯誤都是由我引起的,因爲我不得不從另一臺PC手動複製。

+0

我在FlowDocument中看不到任何列。通過FlowDocumentViewer的列是UI呈現。我看來你的代碼正在打印FlowDocument而不是FlowDocumentViewer呈現。 – Paparazzi 2012-03-21 21:01:47

+0

FlowDocument從不顯示給用戶。它包含的數據在程序中其他地方的一堆UserControl中編輯。我想打印這個,而不必先顯示它。 – miek 2012-03-22 13:12:00

+0

FlowDocument是否包含列? – Paparazzi 2012-03-22 13:18:51

回答

1

因此,經過更多的挖掘並使用值並將FlowDocument添加到各種查看器後,我注意到大多數詢問有關FlowDocument打印的問題的人遇到了與我相反的問題。他們的解決方案是設置ColumnWidth。

我只是從FlowDocument的去除

ColumnWidth="500" 

,現在我有我想要的行爲。在A4上打印兩列,並在單列中打印較小的滾動紙張所需的長度。爲了清楚起見,我也沒有在代碼中的任何位置設置ColumnWidth。

相關問題