Mik*_*e B 15 c# printing wpf flowdocument
我的WPF应用程序中有一个ListView,它绑定到要执行的任务集合(待办事项列表).我希望用户能够打印他们的列表,并根据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;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下代码进行打印时,我总是将页面拆分为中间的2列(每列包含表格的3列).我尝试过不同的GridLength值但没有成功.
printDialog.PrintDocument(((IDocumentPaginatorSource)StatusBoardViewModel
.GetPrintDocument())
.DocumentPaginator
,"Flow Document Print Job");
Run Code Online (Sandbox Code Playgroud)
Mik*_*e B 20
我想获得答案的最佳方式是放弃并提出问题,然后你自己找到答案.
问题在于打印页面,而不是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");
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我在Matthew MacDonald的"C#2008中的Pro WPF"中发现了这一点,我强烈推荐.
| 归档时间: |
|
| 查看次数: |
5234 次 |
| 最近记录: |