2

WPFFlowDocumentを印刷しようとしています。レイアウトは、次のようにレイアウトされた、1ページあたり4つのドキュメントの形式である必要があります。

 Doc1 | Doc2
-------------
 Doc3 | Doc4

(申し訳ありませんが、レイアウトを説明するためのより良い方法を思い付くことができませんでした)。

ページを埋める必要があるため、Doc1と2が空白の場合、または1文字か2文字だけの場合でも、Doc3と4と同じサイズで印刷する必要があります。

私が使用しているコードは次のとおりです(長いので、可能な限り短縮しようとしました)。

PrintDialog printDialog = new PrintDialog();
if ((bool)printDialog.ShowDialog().GetValueOrDefault())
{
    FlowDocument flowDocument = new FlowDocument();
    flowDocument.PageHeight = printDialog.PrintableAreaHeight;
    flowDocument.PageWidth = printDialog.PrintableAreaWidth;
    flowDocument.PagePadding = new Thickness(25);

    flowDocument.ColumnGap = 0;

    flowDocument.ColumnWidth = (flowDocument.PageWidth -
                                   flowDocument.ColumnGap -
                                   flowDocument.PagePadding.Left -
                                   flowDocument.PagePadding.Right);


    Table myTable = new Table();
    myTable.BorderThickness = new Thickness(3);

    AddCols(myTable);         // Add 2 cols

    TableRowGroup rg = new TableRowGroup();
    TableRow row = new TableRow();

    AddRows(myTable);         // Adds 2 rows

    TableCell cell = new TableCell(new Paragraph(new Run("Doc1")));                
    cell.BorderThickness = new Thickness(1);
    cell.BorderBrush = Brushes.Black;          
    // Repeat 4 times      

    row.Cells.Add(cell);

    myTable.RowGroups.Add(rg);

    doc.Blocks.Add(myTable);

    ....

私が抱えている問題は、これは印刷されますが、上記のようにページに合わせようとしないことです。私が試みていることは可能ですか?もしそうなら、どのように?

編集:

ここを見ると、実際に必要なのは段落の高さを計算する方法であり、Paddingプロパティを設定できると思います。残念ながら、このリンクで提案されている解決策は機能しません!

4

4 に答える 4

2

ブロック全体をグリッドに配置して均一なレイアウトにし、グリッドをブロックに配置して、単一のテーブルセル内にブロックしてみてください。これがあなたのために働くかどうか見てください-

Grid grid = new Grid();
        grid.RowDefinitions.Add(new RowDefinition());
        grid.RowDefinitions.Add(new RowDefinition());
        grid.ColumnDefinitions.Add(new ColumnDefinition());
        grid.ColumnDefinitions.Add(new ColumnDefinition());

        Label text1 = new Label();
        text1.Content = "Doc1";
        grid.Children.Add(text1);
        Grid.SetColumn(text1, 0);
        Grid.SetRow(text1, 0);

        Label text2 = new Label();
        text1.Content = "Doc2";
        grid.Children.Add(text2);
        Grid.SetColumn(text2, 1);
        Grid.SetRow(text2, 0);

        Label text3 = new Label();
        text1.Content = "Doc3";
        grid.Children.Add(text3);
        Grid.SetColumn(text3, 0);
        Grid.SetRow(text3, 1);

        Label text4 = new Label();
        text1.Content = "Doc4";
        grid.Children.Add(text4);
        Grid.SetColumn(text4, 1);
        Grid.SetRow(text4, 1);

        BlockUIContainer block = new BlockUIContainer(grid);

        Table table = new Table();
        TableRowGroup rg = new TableRowGroup();
        TableCell cell = new TableCell();
        cell.Blocks.Add(block);
        TableRow row = new TableRow();
        row.Cells.Add(cell);
        rg.Rows.Add(row);
        table.RowGroups.Add(rg);
        doc.Blocks.Add(table);
于 2012-07-20T18:57:18.603 に答える
0

これはあなたが探しているものですか?

xamlフロードキュメントをxpsに変換します

于 2012-07-16T21:36:17.593 に答える
0

質問、セルをrow.cellに追加し、行グループをテーブルに追加しましたが、行を行グループに追加しましたか?

于 2012-07-18T22:29:29.290 に答える