Почему эта таблица потоковых документов всегда печатает 2 столбца - PullRequest
14 голосов
/ 02 марта 2010

У меня есть ListView в моем приложении WPF, которое связано с набором задач для выполнения (список дел). Я хочу, чтобы пользователь мог распечатать свой список и создал следующий код на основе рекомендаций MSDN. (Это мой первый набег в печати)

public FlowDocument GetPrintDocument()
{
    FlowDocument flowDoc = new FlowDocument();
    Table table = new Table();

    int numColumns = 3;

    flowDoc.Blocks.Add(table);

    for(int x=0;x<numColumns;x++)
    {
        table.Columns.Add(new TableColumn());
    }
    GridLengthConverter glc = new GridLengthConverter();
    table.Columns[0].Width = (GridLength)glc.ConvertFromString("300");
    table.Columns[1].Width = (GridLength)glc.ConvertFromString("50");
    table.Columns[2].Width = (GridLength)glc.ConvertFromString("50");

    table.RowGroups.Add(new TableRowGroup());

    table.RowGroups[0].Rows.Add(new TableRow());
    // store current working row for reference
    TableRow currentRow = table.RowGroups[0].Rows[0];

    currentRow.FontSize = 16;
    currentRow.FontWeight = FontWeights.Bold;

    currentRow.Cells.Add(new TableCell(new Paragraph(new Run("Subject"))));
    currentRow.Cells.Add(new TableCell(new Paragraph(new Run("Due Date"))));
    currentRow.Cells.Add(new TableCell(new Paragraph(new Run("Urgency"))));

    for (int i = 1; i < issues.Count+1; i++)
    {
        table.RowGroups[0].Rows.Add(new TableRow());
        currentRow = table.RowGroups[0].Rows[i];
        currentRow.FontSize = 12;
        currentRow.FontWeight = FontWeights.Normal;

        currentRow.Cells.Add(new TableCell
                            (new Paragraph
                            (new Run
                            (issues[i - 1].IssSubject))));
        currentRow.Cells.Add(new TableCell
                            (new Paragraph
                            (new Run
                            (issues[i - 1].IssDueDate.Date.ToString()))));
        currentRow.Cells.Add(new TableCell
                            (new Paragraph
                            (new Run
                            (issues[i - 1].IssUrgency.ToString()))));
    }
    return flowDoc;
} 

Когда я пытаюсь печатать с помощью следующего кода, у меня всегда страницы разбиты по середине на 2 столбца (каждый из которых содержит 3 столбца таблицы). Я пробовал разные значения GridLength, но безуспешно.

printDialog.PrintDocument(((IDocumentPaginatorSource)StatusBoardViewModel
               .GetPrintDocument())
               .DocumentPaginator 
            ,"Flow Document Print Job");

Ответы [ 2 ]

20 голосов
/ 02 марта 2010

Полагаю, лучший способ получить ответ - это сдаться и спросить, а затем вы найдете его сами.

Проблема была в том, чтобы напечатать страницы, а не в самом файле flowdoc.По умолчанию они печатаются с 2 столбцами.Исправленный код (это также касается полей и области печати):

PrintDialog printDialog = new PrintDialog();

if (printDialog.ShowDialog() == true)
{

    FlowDocument flowDoc = statusBoardViewModel.GetPrintDocument();

    flowDoc.PageHeight = printDialog.PrintableAreaHeight;
    flowDoc.PageWidth = printDialog.PrintableAreaWidth;
    flowDoc.PagePadding = new Thickness(25);

    flowDoc.ColumnGap = 0;

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

    printDialog.PrintDocument(((IDocumentPaginatorSource)flowDoc)
                             .DocumentPaginator,
                             "Task Manager Print Job");

}

Кстати, я обнаружил это в "Про WPF в C # 2008" Мэтью Макдональда, который я настоятельно рекомендую.

3 голосов
/ 30 ноября 2010

Спасибо за информацию. Я исправил это, просто установив ширину столбца как:

flowDoc.ColumnWidth = pageSize.Width

К вашему сведению, я никогда не пытаюсь получить помощь от netframeworkdev или .Net Framework Develop, поскольку у них никогда не будет хороших ответов Я хотел бы, чтобы моя поисковая система указала бы мне на StackOverflow вместо этого бесполезного сайта. StackOverflow всегда имеет ответы. :) Еще раз спасибо.

(Если бы вы могли просто запретить показ сайтов в ваших результатах поиска, вы знаете, как это сделать, скажите мне.)

...