2012-03-21 23 views
1

ここに私のシナリオがあります:異なるページサイズの1つのページにFlowDocumentを印刷するにはどうすればよいですか?

私は2つの異なるページサイズで印刷したいドキュメント、現在FlowDocumentを持っています。最初のものは8.5 x 11の標準文字です。もう1つはポータブルプリンタであり、用紙の長さと同じ長さである。それは5xでうまく印刷されますか? 8.5x11の2ページに印刷されます。最初の列が2番目の列に流れないように、8.5x11に2つの列が必要です。私は8.5x11の単一のシートの1つのスキニーの列に印刷するように全体をスケールすることは望ましくありません。それは読めない。しかし、2つの列にページを収めるスケーリングはOKです。それは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

+0

FlowDocumentは決してユーザーに表示されません。それに含まれるデータは、プログラムの他の場所にあるUserControlsの束で編集されます。私は最初にそれを表示することなくこれを印刷したいと思います。 – miek

+0

FlowDocumentに列が含まれていますか? – Paparazzi

答えて

1

FlowDocumentを掘り下げて遊んで、さまざまなビューアにFlowDocumentを追加した後、FlowDocument印刷に関する質問をしている人々の大多数が、私の反対の問題を抱えていることに気付きました。その解決策は、ColumnWidthを設定することでした。

私は単にFlowDocumentから

ColumnWidth="500" 

を削除し、私は今私が望む行動を持っています。 A4の2列に印刷し、必要な長さを小さなスプール用紙に1列で印刷します。わかりやすくするために、私はColumnWidthをコードのどこにでも設定していません。

関連する問題